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
(
**model.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 restraint_type = 'chi1_dihedral' sidechain dihedral restraint_type = 'chi2_dihedral' sidechain dihedral restraint_type = 'chi3_dihedral' sidechain dihedral 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' block distance restraints restraint_type = 'distance' user defined **automodel.special_restraints()**routinenon-bonded pairs distance restraint_type = 'sphere'; calculated on the fly - Write all restraints to a file with extension
`.rsr`(**model.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)

(**model.schedule.make()**). - 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 (**model.randomize_xyz()**). - optimize the model:
- Partially optimize the model by VTFM; Repeat the following steps
as many times as specified by the optimization schedule:
- Read all the restraints by
``rd_restraints'`(**model.restraints.append()**). - Select only the restraints that operate on the atoms that are
close enough in sequence, as specified by the current step of
VTFM (
**model.restraints.pick()**). - Optimize the model by conjugate gradients, using only currently
selected restraints (
**model.optimize()**).

- Read all the restraints by
- Refine the model by simulated annealing with molecular dynamics,
if so selected:
- do a short conjugate gradients optimization (
**model.optimize()**). - increase temperature in several steps and do molecular dynamics
optimization at each temperature (
**model.optimize()**). - decrease temperature in several steps and do molecular dynamics
optimization at each temperature (
**model.optimize()**). - do a short conjugate gradients optimization (
**model.optimize()**).

- 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
(
**model.energy()**). - write out the final model to a file with extension
`.B9999????`where`????`indicates the model number (**model.write()**). Also write out the violations profile. Also write superposed templates and models if so selected by*automodel.final_malign3d*=`True`. - superpose the models and the templates, if so selected, and write
them out (
**alignment.expand()**,**alignment.malign3d()**). - do loop modeling if so selected using the
`loopmodel`class.

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