Docking
Same as ligTBM, but sampling is replaced with Brikard. [add more content]
MC refinement
On the pages “MC From Sequence” and “MC From Mol2” you can run macrocycle modeling, optionally with distance restraints or NOE back-calculation refinement. The modeling consists of the following steps:
- Exhaustive sampling with BRIKARD - robotics inspired algorithm designed for sampling of cyclic molecules.
- LBFGS energy minimization using Amber 19 (GAFF) parameters, with user-provided distance restraints and/or experimental NOESY peaks.
- Clustering followed by energy ranking to output top 20 cluster centers.
MC From Sequence (recommended)
Macrocycle will be constructed from the user-provided sequence of amino acids. Sequence can contain 20 standard amino acids as well as non-standard residues. With standard amino acids you can switch between D/L forms by using capitals for L form and lower case for D form. For example, if your sequence is “AcfGKLMCG”, then 2-Cys and 3-Phe will be D-isomers and the rest will be L-isomers. Check out a full example with all sequence construction features.
Non-standard residues
You can incorporate non-standard residues by adding
their 3-letter codes in parentheses. For example, to add a residue named “ABC”, type “Acf(ABC)GKLMCG”. You will also
need to upload a mol2 file containing structure of this new residue using “Upload non-standard residues” button. If
your sequence contains several new residues you can upload all of them using the same button, just select multiple
mol2 files. Each file must be named XXX.mol2
, where XXX is the 3-letter code used in the sequence.
PS. Atom names must be unique within each mol2 file and the residue name must be set to the residue's 3-letter code.
Cross-links
You can add cross-linking bonds such as disulfide bridges using the field “Cross-Links”. For example, to add a bridge between 2-CYS and 9-CYS in “Acf(ABC)GKLMCG”, you need to type “2 SG 9 SG 1”, where “2” and “9” are the residue numbers, “SG” are names of the atoms you want to connect and “1” is the bond type (can be 1, 2 or 3). You can add cross-connections for non-CYS residues as well, however, while SS-bridges are automated, for other residues you will have to remove the appropriate hydrogen atoms from the mol2 files of those residue and treat them as non-standard. For example, to connect 1-ALA and 7-LYS by their CB and NZ atoms, you need to:
- Download mol2 structures for ALA and LYS (for example from here) and rename them into say ALX, LYX.
- Remove HZ1 and HB1 protons connected to lysine's NZ atom and alanine's CB atom (manually or using Pymol or Chimera)
- Change the sequence to “(ALX)cf(ABC)GK(LYX)MCG”
and upload
ALX.mol2
andLYX.mol2
using “Upload non-standard residues” button. - Add a line “1 CB 7 NZ 1” to “Cross-Links” section.
PS. You can download residues structures from SwissSidechain or from LigandExpo (here you'll need to convert sdf format into mol2). Atom names in standard amino acids match the PDB convention.
Non-standard backbones
If a non-standard residue you're uploading does not have a N-CA-C backbone like natural amino acids do, you can specify its backbone in “Non-standard backbones” section. Brikard needs this information to connect the residue with the rest. For example, if your new residue called OZ1 has 6 backbone atoms, just add a line “OZ1 N CA C1 N1 C2 C” to the “Non-standard backbones” section.
MC From Mol2
If your macrocycle cannot be constructed using the sequence mode, you can upload a single conformation in mol2 format and Brikard will run modeling using it. If the macrocycle consists of several amino acid like residues connected by peptide bonds, you can check “Peptidic” switch and the known amino acids and bonds will be sampled according to Ramachandran maps. The amino acids are recognized by their names in the mol2 file, so make sure they are properly named.
If the macrocycle is non-peptidic you can submit it without checking “Peptidic” flag, in which case all torsions will be sampled randomly. If you have a SMILES string of your macrocycle, a proper mol2 file can be generated, for example, with openbabel:
mol.smi:
C1CCCCCCCCCC1
> obabel mol.smi -h --gen3d -O mol.mol2
PS. The submitted mol2 file must contain all hydrogens and the atom names must be unique within each residue.
Pairwise distance restraints
When pairwise distance information is known for some atoms in the macrocycle (from NOESY or hydrogen-bonding analysis), you can add that data into the modeling pipeline as distance restraints, which will be imposed as an extra potential during minimization. The restraints can be uploaded as a JSON file using “Pairwise distance restraints” button. Try running a real example.
Pairwise restraints JSON file format
Should be a file that contains an array of dictionaries, where each dictionary represents a single restraint. Here is an example:
springs.json:
[
{ # First restraint
"distance": 10.0,
"weight": 10.0,
"lerror": 1.0,
"rerror": 1.0,
"potential": 2, # Square-Well (0), Biharmonic (1), Soft-Square (2)
"average": 0, # SUM (0) and R-6 (1)
"group1": [0, 1, 2], # Groups of atoms the ends of the spring will be attached to
"group2": [5]
},
{ # Second restraint
"distance": 13,
...
},
...
]
The first restraint adds a soft-square potential with
distance of 10 Angstroms between a group of atoms with indices (0, 1, 2) and atom 5. You can choose other parameters
for each restraint, such as distance averaging mode, which affects the way the distance is computed between groups
of atoms. "average": 0
means 1/6 averaging: \((< R_{ij}^{-6} >)^{-1/6}\), "average": 1
means sum: \( (\sum_{ij} R_{ij}^{-6} )^{-1/6} \), where \( R_{ij} \) is the distance between i and j atom. You can
choose the potential type: 0 - Square-Well, 1- Biharmonic, 2 - Soft-Square. The potentials are described in detail
here.
All atom numbering starts with zero. You can use atom names instead of their indices: “{residue_number}:{atom_name}”. For example, if in a macrocycle “AcfGKLMCG” the distance between the group [HB1, HB2, HB3] in the first Alanine and the NZ atom of the Lysine is 10 A, this can be written down as
{
...
"distance": 10.0,
"group1": ["1:HB1", "1:HB2", "1:HB3"],
"group2": ["5:NZ"]
...
}
NOE
All atomic IDs are zero-based. Like in distance restraints names (“resnum:atom_name”) can be used instead of indices.
Let's say our mol2 file contains 6 Hs with IDs from 0 to 5 and [1, 2] and [3, 4, 5] are groups of magnetically equivalent Hs and must be treated as a single spin (different from overlapping peaks). Spectrometer frequency is 600 MGz and mixing time is 0.2 seconds. Spectrum contains 3 peaks: (0, [1,2]), (0, [3,4,5]) and ([1,2], [3,4,5]), which is described by “experiment” property. Other values that need to be specified are:
t_cor
- should probably be tested for different values as there is no equation for itpower
- usually 1/6weight
- weight of the NOE relaxation term in the energy functioncutoff
- during minimization NOE peaks will be computed only for hydrogens closer, than this value (different for each conformation)
noe.json:
{
"groups": [
[0],
[1, 2],
[3, 4, 5]
],
"frequency": 0.6, # GGz
"t_cor": 0.1, # ns
"t_mix": 0.2, # s
"cutoff": 100, # A
"power": 0.1666, #
"weight": 300, #
"experiment": [
{
"group1": 0, # atom 0
"group2": 1, # atoms 1, 2
"value": 121.5, # Peak volume
"error": 1.5 # Error in peak volume
},
{
"group1": 0,
"group2": 2,
"value": 3.570,
"error": 1.0
},
{
"group1": 1,
"group2": 2,
"value": 24.0,
"error": 1.4
},
]
}
Now if the chemical shifts of 0 and [1, 2] are too close and the peaks are overlapping on the spectrum, the can be specified as follows:
"groups": [
[0],
[1, 2],
[3, 4, 5]
],
"frequency": 0.6, # GGz
"t_cor": 0.1, # ns
"t_mix": 0.2, # s
"cutoff": 100, # A
"power": 0.1666, #
"weight": 300, #
"experiment": [
{
"group1": [0, 1], # peaks for (0, [3, 4, 5]) and ([1, 2], [3, 4, 5]) will be added
"group2": 2,
"value": 167.0, # observed volume of overlapping peaks
"error": 10.0
},
]
}
Partial auto-assignment
If you have two hydrogens [0, 1] with close chemical shifts and you're not sure whether the peak is produced only by one of them, by both of them overlapping or if they are magnetically equivalent you can specify all these 4 options as follows:
"groups": [
[
{
"atoms": [0], # atom 0 only
"equivalent": false,
},
{
"atoms": [1], # atom 1 only
"equivalent": false,
},
{
"atoms": [0, 1], # separate spins overlapping
"equivalent": false,
},
{
"atoms": [0, 1], # single spin (magnetically equivalent protons)
"equivalent": true,
}
],
[2],
[3],
[4]
],
"frequency": 0.6, # GGz
"t_cor": 0.1, # ns
"t_mix": 0.2, # s
"cutoff": 100, # A
"power": 0.1666, #
"weight": 300, #
"experiment": [
{
"group1": 0, #
"group2": 1,
"value": 123.0,
"error": 10.0
},
...
]
}
Check the box “NOE assignment scanning” to select assignment scanning instead of a regular run. The program will generate 4 different assignments and present you with the best one. This way you can specify multiple ambiguous groups, so if there is two such groups with 4 possible assignments each, 16 assigments will be generated in total.
Same atoms can be present in different ambiguous groups, let's say peak_1 and peak_2 can be produced by either atom 0 or atom 1. However if you specify
"groups": [[{"atoms": [0], "equivalent": false}, {"atoms": [1], "equivalent": false}], ...],
"experiment": [
{"group1": 0, "group2": 10, "value": 123.0},
{"group1": 0, "group2": 11, "value": 134.0},
]
The assignments you get will be:
"groups": [[0, ...]],
"experiment": [
{"group1": 0, "group2": 10, "value": 123.0},
{"group1": 0, "group2": 11, "value": 134.0},
]
and
"groups": [[1, ...]],
"experiment": [
{"group1": 1, "group2": 10, "value": 123.0},
{"group1": 1, "group2": 11, "value": 134.0},
]
However, if you want the two peaks to be independent, you can use the following:
"groups": [
[{"atoms": [0], "equivalent": false}, {"atoms": [1], "equivalent": false}],
[{"atoms": [0], "equivalent": false}, {"atoms": [1], "equivalent": false}],
...
],
"experiment": [
{"group1": 0, "group2": 10, "value": 123.0},
{"group1": 1, "group2": 11, "value": 134.0},
]
Then the assignments will be:
"groups": [[0], ...],
"experiment": [
{"group1": 0, "group2": 10, "value": 123.0},
{"group1": 0, "group2": 11, "value": 134.0},
]
"groups": [[0],[1], ...],
"experiment": [
{"group1": 0, "group2": 10, "value": 123.0},
{"group1": 1, "group2": 11, "value": 134.0},
]
"groups": [[1],[0], ...],
"experiment": [
{"group1": 0, "group2": 10, "value": 123.0},
{"group1": 1, "group2": 11, "value": 134.0},
]
"groups": [[1], ...],
"experiment": [
{"group1": 0, "group2": 10, "value": 123.0},
{"group1": 0, "group2": 11, "value": 134.0},
]
Correlation time search
You can also try different correlation times by
entering "t_cor": [0.1, 0.5, 1.0, 5.0]
. This can be added together with ambiguous peaks, in this case
the number of tested assignments will be a product of ambiguous peaks and correlation times.