Flowchart of comparative modeling by MODELLER

Input: script file, alignment file, PDB file(s) for template(s).

Output:

job.log |
log file |

job.ini |
initial conformation for optimization |

job.rsr |
restraints file |

job.sch |
VTFM schedule file |

job.B9999???? |
PDB atom file(s) for the model(s) of the target sequence |

job.V9999???? |
violation profiles for the model(s) |

job.D9999???? |
progress of optimization |

job.BL9999???? |
optional loop model(s) |

job.DL9999???? |
progress of optimization for loop model(s) |

job.IL9999???? |
initial structures for loop model(s) |

The main MODELLER routines used in each step are given in parentheses.

- Read and check the alignment between the target sequence and the template
structures

(**Alignment.append()**and**Alignment.check()**). - Calculate restraints on the target from its alignment with the templates:
- Generate molecular topology for the target sequence
(
**Model.generate_topology()**). Disulfides in the target are assigned here from the equivalent disulfides in the templates (**Model.patch_ss_templates()**). Any user defined patches are also done here (as defined in the**AutoModel.special_patches()**routine). - Calculate coordinates for atoms that have equivalent atoms in the
templates as an average over all templates (
**Model.transfer_xyz()**) (alternatively, read the initial coordinates from a file). - Build the remaining unknown coordinates using internal coordinates
from the CHARMM topology library (
**Model.build()**). - Write the initial model to a file with extension
`.ini`(**Model.write()**). - Generate stereochemical, homology-derived, and special restraints
(
**Restraints.make()**) (alternatively, skip this and assume the restraints file already exists):stereochemical restraint_type = 'bond angle dihedral improper' mainchain dihedrals Φ, Ψ restraint_type = 'phi-psi_binormal' mainchain dihedral ω restraint_type = 'omega_dihedral' sidechain dihedral χ _{1}restraint_type = 'chi1_dihedral' sidechain dihedral χ _{2}restraint_type = 'chi2_dihedral' sidechain dihedral χ _{3}restraint_type = 'chi3_dihedral' sidechain dihedral χ _{4}restraint_type = 'chi4_dihedral' mainchain CA-CA distance restraint_type = 'distance' mainchain N-O distance restraint_type = 'distance' sidechain-mainchain distance restraint_type = 'distance' sidechain-sidechain distance restraint_type = 'distance' ligand distance restraints **AutoModel.nonstd_restraints()**routineuser defined **AutoModel.special_restraints()**routinenon-bonded pairs distance restraint_type = 'sphere'; calculated on the fly - Write all restraints to a file with extension
`.rsr`(**Restraints.write()**).

- Generate molecular topology for the target sequence
(
- Calculate model(s) that satisfy the restraints as well as possible.
For each model:
- Generate the optimization schedule for the variable target function
method (VTFM).
- Read the initial model (usually from the
`.ini`file from 2.d) (**Model.read()**). - Randomize the initial structure by adding a random number between
*AutoModel.deviation*angstroms to all atomic positions (**Selection.randomize_xyz()**). - Optimize the model:
- Partially optimize the model by VTFM; Repeat the following steps
as many times as specified by the optimization schedule:
- Select only the restraints that operate on the atoms that are
close enough in sequence, as specified by the current step of
VTFM (
**Restraints.pick()**). - Optimize the model by conjugate gradients, using only currently
selected restraints (
**ConjugateGradients()**).

- Select only the restraints that operate on the atoms that are
close enough in sequence, as specified by the current step of
VTFM (
- Refine the model by simulated annealing with molecular dynamics,
if so selected:
- Do a short conjugate gradients optimization (
**ConjugateGradients()**). - Increase temperature in several steps and do molecular dynamics
optimization at each temperature (
**MolecularDynamics()**). - Decrease temperature in several steps and do molecular dynamics
optimization at each temperature (
**MolecularDynamics()**). - Do a short conjugate gradients optimization (
**ConjugateGradients()**).

- Do a short conjugate gradients optimization (

- Partially optimize the model by VTFM; Repeat the following steps
as many times as specified by the optimization schedule:
- Calculate the remaining restraint violations and write them out
(
**Selection.energy()**). - Write out the final model to a file with extension
`.B9999????.pdb`where`????`indicates the model number (**Model.write()**). Also write out the violations profile. - Superpose the models and the templates, if so selected by
*AutoModel.final_malign3d*=`True`, and write them out (**Alignment.append_model()**,**Alignment.malign3d()**). - Do loop modeling if so selected using the
`LoopModel`class.

- Generate the optimization schedule for the variable target function
method (VTFM).