Defining new residue types is generally one of the more painful areas in developing and using a molecular modeling program. MODELLER has two quick-and-dirty solutions described in the next two sections that are often sufficient for comparative modeling involving new residue types. On the other hand, if you are willing to spend some time and define a new entry or complete an incomplete entry in the residue topology or parameter libraries, see the FAQ Section 3.1, Question 8.
The parameter library is used by the Restraints.make() command to construct bond, angle, dihedral angle, improper dihedral angle, and non-bonded Lennard-Jones restraints. If some parameters for these restraints are missing, they are guessed on the fly from the current Cartesian coordinates of the MODEL. Thus, when there are missing parameters, the MODEL coordinates must be defined before calling Restraints.make(). The coordinates can be defined by the Model.build() command (from the IC entries in the residue topology library), by the Model.read() command (from an existing coordinate file for MODEL), or by the Model.transfer_xyz() command (from template coordinate files aligned with MODEL). The bonds, angles, and improper dihedral angles are restrained by a harmonic potential with the mean equal to the value in the current structure and a force constant typical for chemical bonds, angles, and improper dihedral angles, respectively. The dihedral angles are restrained by a tri-modal cosine term with the mean equal to the angle in the current structure. A message detailing MODELLER's improvisation is written to the log file.
The second relatively easy way of dealing with missing entries in the residue topology and/or parameters libraries is to use a “block” residue. These residues are restrained more or less as rigid bodies to the conformation of the equivalent residue(s) in the template(s). No chemical information is used. The template residues can themselves be defined as block residues. The symbol for the block residues is ‘BLK’ in the four- and three-letter codes and ‘.’ in the single-letter code. The atoms in a BLK residue include all uniquely named atoms from the equivalent residues in all the templates. The atom type of all BLK atoms is the CHARMM type ‘undf’ (but note that this can be changed by assigning to Atom.type). The IUPAC atom names (as opposed to the atom types) are the same as in the templates.
BLK atoms are treated differently from the other atoms during preparation of dynamic restraints: No pairs of intra-BLK atoms are put on the dynamic non-bonded list. Only the “inter-BLK” atom pairs and “BLK-other” atom pairs are considered for the dynamic non-bonded restraints. The radius of all block atoms (for soft-sphere restraints) is that of the CHARMM ‘undf’ atom type. All intra-BLK and inter-residue BLK restraints other than the non-bonded restraints have to be derived separately and explicitly by the Restraints.make_distance() command. See AutoModel.nonstd_restraints() for the routine that makes block restraints for comparative modeling with the AutoModel class. Lennard-Jones terms use the CHARMM parameters for ‘undf’ atoms (par.lib assumes these are similar to those for typical heavy atoms). Coulomb terms involving ‘undf’ atoms are ignored by MODELLER. Non-bonded spline restraints (see EnergyData.dynamic_modeller and GroupRestraints()) derive their atom classes simply from the atom and residue names, so will function with BLK atoms only if the names of the BLK atoms and residues are given in the spline restraints atom class file. GB/SA restraints (see gbsa.Scorer()) will treat all BLK atoms as uncharged and with the same radius (that given in solv.lib for the ‘undf’ atom type).
See also AutoModel.guess_atom_types(), to obtain improved interaction parameters for BLK residues.
Please note that if you use ‘BLK’ residues, you should set IOData.hetatm to True, as most ‘BLK’ residues are PDB HETATM residues (note, however, that ‘BLK’ residues can be either HETATM or ATOM; for example, any DNA or RNA residues handled as ‘BLK’ will be ATOM residues).
For an example of how to use block residues, see Section 2.2.1.