# How to make a design specification .yaml **IMPORTANT:** ⚠️ All residue indices are specified **starting at 1** and we use the canonical mmcif residue index `label_asym_id`, and **not** the `auth_asym_id` author residue index! You can check the indexing in your mmcif file by opening it in https://molstar.org/viewer/, hovering over a residue, and checking the index on the bottom right. You will see something like this where **41 is the index we use, the auth id 22 is incorrect**: ![](../assets/label_seq_id.png) After you constructed your `.yaml` file we recommend that you run the `check` command on it: 1. Run `boltzgen check example/vanilla_peptide_with_target_binding_site/beetletert.yaml`. 2. Visualize the resulting mmcif file in a protein structure viewer (e.g. PyMOL, Chimera, or online: https://molstar.org/viewer/). 3. Your viewer should show the binding site in a different color than the rest of the target. # Example based explanation: We provide many example `.yaml` files in the `example/` directory, including: - [design_spec_showcasing_all_functionalities.yaml](design_spec_showcasing_all_functionalities.yaml) - [vanilla_peptide_with_target_binding_site/beetletert.yaml](vanilla_peptide_with_target_binding_site/beetletert.yaml) - [peptide_against_specific_site_on_ragc/rragc.yaml](peptide_against_specific_site_on_ragc/rragc.yaml) - [nanobody/penguinpox.yaml](nanobody/penguinpox.yaml) - [fab_targets/pdl1.yaml](fab_targets/pdl1.yaml) - [denovo_zinc_finger_against_dna/zinc_finger.yaml](denovo_zinc_finger_against_dna/zinc_finger.yaml) - [protein_binding_small_molecule/chorismite.yaml](protein_binding_small_molecule/chorismite.yaml) - [small_molecule_from_file_and_smiles/4g37.yaml](small_molecule_from_file_and_smiles/4g37.yaml) Small example of a protein design against a target protein without binding site specified: ```yaml entities: # Designed protein with between 80 and 140 residues # (The length is randomly sampled) - protein: id: B sequence: 80..140 # The target is extracted from a .cif file - file: path: hard_targets/6m1u.cif # Which chain in the .cif file to use as target (uses all chains if unspecified) include: - chain: id: A ``` **IMPORTANT:** ⚠️ File references inside a yaml file (e.g. to cif files) are interpreted relative to the directory of the yaml file. Example highlighting many (not all) functionalities: ```yaml entities: # Specification of the target which is extracted from a .cif file - file: path: 8r3a.cif # Which chain and residues in the .cif file to use as target (uses all chains if unspecified) include: - chain: id: A res_index: 2..50,55.. # residues between 2 and 50 and anything larger than 55 - chain: id: B # Which regions of the target the design should or should NOT # bind to (this can be left unspecified, then we just bind anywhere) binding_types: - chain: id: A binding: 5..7,13 - chain: id: B not_binding: "all" # Which regions of the target should have their structure specified. # By default, everything is visibility 1 which means that the structure is specified. # If the visibility is 0, then the structure is not specified. structure_groups: - group: visibility: 1 id: A res_index: 10..13 - group: # The relative positioning of things in structure group 2 # is not specified w.r.t to things in structure group 1 visibility: 2 id: B # Overwrite the previous visibility setting and set it to 0 for res_index 13 - group: visibility: 0 id: A res_index: 13 # Optionally you can say that some residues in a loaded .cif file should also be redesigned. design: - chain: id: A res_index: 14..19 # For designed regions you can say what secondary structure they should have secondary_structure: - chain: id: A loop: 14 helix: 15..17 sheet: 19 # Specify a NON-designed protein chain - protein: id: X sequence: AAVTTTTPPP # Specify a designed protein chain # Numbers specify what is being designed - protein: id: G # random number between 15 and 20 of designed residues (inclusive) sequence: 15..20AAAAAAVTTTT18PPP # A designed helical peptides with WHL staple # (see the constraints below that connect the peptide with the WHL ligand) - protein: id: R # Random number of design residues between 3 and 5, # then a Cysteine, then 6 design residues, then ... sequence: 3..5C6C3 - ligand: id: Q ccd: WHL # A designed peptide with 17 residues - protein: id: H sequence: 17 # specification for a designed peptide with two Cys and a disulfide bond (see constraints) - protein: id: S sequence: 10..14C6C3 constraints: # specify connections as if the minimum possible number of residues was sampled - bond: atom1: [R, 4, SG] # connection for a helical peptides with WHL staple between small molecule and designed peptide atom2: [Q, 1, CK] - bond: atom1: [R, 11, SG] # connection for a helical peptides with WHL staple between small molecule and designed peptide atom2: [Q, 1, CH] - bond: atom1: [S, 11, SG] # connection for a disulfide bond between Cys and Cys in designed peptide atom2: [S, 18, SG] ``` # Detailed Explanation ```yaml entities: # Define proteins, ligands, and structure files - protein: ... - ligand: ... - file: ... constraints: # Define bonds and total length constraints - bond: ... - total_len: ... ``` ### Entities Section The `entities` section defines all the components of your design: #### Protein Sequences Define custom protein sequences with design flexibility: ```yaml entities: - protein: id: G # Unique identifier sequence: 15..20AAAAAAVTTTT18PPP # Mix of fixed residues and design regions binding_types: uuuuBBBuNNNuBuu # Binding specifications (optional) secondary_structure: HHHLLLEEE # Secondary structure constraints for designed regions (optional) ``` **Sequence notation:** - `15..20` - Design between 15-20 residues (inclusive) - `AAAA` - Fixed amino acid sequence - `18` - Design exactly 18 residues - `3..5C6C3` - Variable design residues, then fixed Cys, then more design **Binding types:** - `B` - Binding residue - `N` - Non-binding residue - `u` - Unspecified (default) - Can specify as string: `uuuuBBBuNNNuBuu` - Or as ranges: ```yaml binding_types: binding: 5..7,13 # Residues 5-7 and 13 are binding not_binding: 9..11 # Residues 9-11 are non-binding ``` #### Ligands Define small molecule ligands using CCD codes or SMILES: ```yaml # Using Chemical Component Dictionary (CCD) code entities: - ligand: id: [E, F] # specify list of IDs to copy the entity ccd: WHL binding_types: B # Using SMILES string entities: - ligand: id: Q smiles: 'N[C@@H](Cc1ccc(O)cc1)C(=O)O' binding_types: B ``` #### Structure Files Include existing protein structures from PDB/mmCIF files: ```yaml entities: - file: path: 7rpz.cif # Include specific chains include: - chain: id: A - chain: id: B # Include by proximity include_proximity: - chain: id: A res_index: 10..16 radius: 35 # Exclude specific regions exclude: - chain: id: A res_index: ..5 # Exclude residues 1-5 # Reset residue numbering reset_res_index: - chain: id: A ``` # Advanced Options **Design regions:** Specify which residues to redesign ```yaml entities: ... - file: ... design: - chain: id: A res_index: ..4,20..27 # Redesign residues 1-4 and 20-27 ``` **Secondary structure constraints:** ```yaml entities: ... - protein: ... secondary_structure: - chain: id: A loop: 1 # Residue 1 should be loop helix: 2..3 # Residues 2-3 should be helix sheet: 4 # Residue 4 should be sheet ``` **Structure visibility groups:** ```yaml entities: ... - file: ... structure_groups: - group: visibility: 1 # Visibility level (0=hidden, 1=visible, 2=highlighted) id: A res_index: 10..16 ``` **Design insertions:** ```yaml entities: ... - file: ... design_insertions: - insertion: id: A res_index: 20 # Insert after residue 20 num_residues: 2..9 # Insert 2-9 residues secondary_structure: HELIX # UNSPECIFIED, LOOP, HELIX, or SHEET ``` **Binding type specifications:** ```yaml entities: ... - protein: ... binding_types: - chain: id: A binding: 5..7,13 - chain: id: B not_binding: "all" ``` ### Constraints Section Define structural constraints between components: #### Bond Constraints Create covalent bonds between specific atoms: ```yaml constraints: - bond: atom1: [R, 4, SG] # [chain_id, residue_number, atom_name] atom2: [Q, 1, CK] # Connect sulfur of Cys-4 in chain R to atom CK in ligand Q ``` We now support constraints specifications of small molecules from the input file and from smiles. Check `examples/small_molecule_from_file_and_smiles/4g37.yaml`. Below is brief guidelines: * Small molecules from the file: check `atom_name` from the CCD and specify it. * Small molecules from the smiles: count index of target element from the smiles and specify its element type with index (e.g. C6, for 6th carbon from the smiles). Here is a comprehensive list of all the keys from your YAML file with explanations for each. *** ### Top-Level Keys * `entities`: The main list containing all molecular components of the system, such as proteins, ligands, or imported files. * `constraints`: A list of rules or conditions to apply to the system, like specific bonds between entities or total length restrictions. --- ### Entity Types (Keys within the `entities` list) * `protein`: Defines a protein entity. * `ligand`: Defines a small molecule ligand. * `file`: Specifies an external structure file (e.g., a `.cif` file) to import parts of the system from. --- ### Keys for `protein` Entities * `id`: A unique identifier for the protein chain (e.g., 'A', 'G'). * `sequence`: Defines the amino acid sequence of the protein. This can include numbers to specify lengths of residues to be designed. * `secondary_structure`: Specifies the secondary structure of the protein. * `binding_types`: Defines which residues are involved in binding. Can be a string or a more detailed dictionary. * `cyclic`: A boolean (`true` or `false`) indicating if the protein is cyclic. --- ### Keys for `ligand` Entities * `id`: A unique identifier for the ligand. Can be a single ID or a list of IDs. * `ccd`: The Chemical Component Dictionary ID for the ligand (e.g., 'SAH'). * `smiles`: The SMILES string representing the ligand's chemical structure. * `binding_types`: Specifies binding information, often a simple character like 'B' for binding. --- ### Keys for `file` Entities * `path`: The file path to the structure file to be included (e.g., 'example/7rpz.cif'). * `msa`: A global flag for Multiple Sequence Alignment for the chains in the file. Can be overwritten by individual chain settings. * `include`: Specifies which parts of the file to include. Can be the string `"all"` or a list of chains. * `exclude`: Specifies which parts of an included file to exclude. * `fuse`: Specifies a chain to which subsequent protein entities will be fused. * `include_proximity`: Includes residues from the file that are within a certain distance of a specified chain. * `binding_types`: Defines binding interactions for specific chains within the file. * `structure_groups`: Defines groups of residues for visualization or other purposes. * `design`: Specifies which residues in the included chains are designable. * `secondary_structure`: Defines the secondary structure for specific residues within included chains. * `design_insertions`: Specifies where to insert new designable residues. --- ### Keys for `constraints` * `bond`: Defines a covalent bond to be formed between two specified atoms in the system. * `atom1`: The first atom in the bond. * `atom2`: The second atom in the bond. * `total_len`: Constrains the total length of the polymeric system. * `min`: The minimum allowed total length. * `max`: The maximum allowed total length. --- ### Nested Keys (found within multiple entity types) * `chain`: A sub-dictionary used in `include`, `exclude`, `binding_types`, `design`, and `secondary_structure` to specify a particular protein chain. * `id`: The identifier of the chain. * `msa`: A specific MSA setting for this chain, overriding the global `msa` flag. * `res_index`: Specifies a range or list of residue indices. * `radius`: Used in `include_proximity` to define a distance in Angstroms. * `binding`: Specifies residues that are part of a binding site. * `not_binding`: Specifies residues that are not part of a binding site. * `loop`, `helix`, `sheet`: Used in `secondary_structure` to define the structure of specific residues. * `group`: Used in `structure_groups` to define a residue group. * `id`: The identifier of the chain or `"all"`. * `visibility`: A numerical value to control how the group is displayed. * `res_index`: The residues included in this group. * `insertion`: Used in `design_insertions`. * `id`: The chain ID where the insertion occurs. * `res_index`: The residue index after which the insertion is made. * `num_residues`: The number or range of residues to be inserted. * `secondary_structure`: The desired secondary structure for the inserted residues (e.g., `HELIX`).