Let's Get Pipelining

Since running a job is so simple, we can string many jobs together into a pipeline. (Code: /examples/example2)

For example, we'll start with an initial PDB structure. We'll redesign the sequence using LigandMPNN, which will output several FASTA files that it thinks could fold into our input structure:

ribbon.LigandMPNN(
    structure_list = ['my_structure.pdb'],
    output_dir = './out/lmpnn',
    num_designs = 5
).run()

I wonder how well LigandMPNN did? We can easily fold these sequences using the fast RaptorX-Single software:

ribbon.RaptorXSingle(
        fasta_file_or_dir = './out/lmpnn',
        output_dir = './out/raptorx'
).run()

Chaining these together, we get our first protein design pipeline:

import ribbon

# First, we create 5 new sequences for this structure:
ribbon.LigandMPNN(
    structure_list = ['my_structure.pdb'],
    output_dir = './out/lmpnn',
    num_designs = 5
).run()
# These sequences are split into individual files, and are stored in 'out/seqs_split'

# Then, we fold using RaptorX:
ribbon.RaptorXSingle(
        fasta_file_or_dir = './out/lmpnn',
        output_dir = './out/raptorx'
).run()

What are these files?

Certain Tasks need to create temporary files in the current directory while running (Such as a the LigandMPNN/ folder, or RaptorX-Single symlink). In the future, I'd like Ribbon to clean these up better. For now, these files are safe to delete as long as no Tasks are running.