edat = <energy_data> | objective function parameters | |
viol_report_cut = <float:35> | 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 999 999 999 999 4.5 4.5 4.5 4.5 4.5 4.5 999 6.5 4.5 4.5 4.5 4.5 4.5 999 999 999 4.5 4.5 | cutoffs for selecting violated restraints |
pick_hot_cutoff = <float:1> | 4.0 | radius for picking hot atoms |
selection_mode = <str:1> | 'ATOM' | selecting what: 'ATOM' | 'RESIDUE' |
extend_hot_spot = <int:1> | 0 | whether to extend hot spots |
residue_span_range = <int:2> | 0 99999 | range of residues spanning the allowed distances; for MAKE_RESTRAINTS, PICK_RESTRAINTS, non-bonded dynamic pairs |
More precisely, the command first flags violated selected atoms. An atom is violated if it is part of a violated restraint. A restraint of physical group (Table 4.5) is violated when its relative deviation from the optimal value is larger than specified in viol_report_cut[i]. For restraints that are based on probability density functions, relative violation is defined as the difference between the actual and the ideal values divided by the standard deviation (`relative heavy violation'); energy based restraints have ad hoc definition of violations (Table 4.3).
The command then flags those selected atoms that are within the pick_hot_cutoff angstroms of any of the already flagged atoms.
Next, if selection_mode is 'RESIDUE', all atoms in the residues that have at least one atom flagged are also flagged. In addition, the contiguous segments of flagged residues are extended for extend_hot_spot residues on either side.
This command is usually followed by the model.restraints.pick() and model.optimize() commands to select all the restraints that operate on selected (hot) atoms and optimize positions of these hot atoms.
# Example for: model.pick_hot_atoms() # This will pick atoms violated by some restraints (bond length restraints here), # select restraints operating on violated atoms, and calculate the energy for # the selected restraints only (note that a list of violated restraints # can be obtained by the ENERGY command alone, without preceding it with # PICK_HOT_ATOMS). env = environ() env.edat.dynamic_sphere = False env.libs.topology.read(file='$(LIB)/top_heav.lib') env.libs.parameters.read(file='$(LIB)/par.lib') # Read the sequence, calculate its topology and coordinates: code = '1fas' mdl = model(env, file=code) aln = alignment(env) aln.append_model(mdl, atom_files=code, align_codes=code) aln.append_model(mdl, atom_files=code+'.ini', align_codes=code+'-ini') mdl.generate_topology(aln, sequence=code+'-ini') mdl.transfer_xyz(aln) # Just to get some violations: mdl.randomize_xyz(deviation=0.03) # Create the bond length restraints and ignore the hard sphere overlap: mdl.restraints.make(aln, restraint_type='bond', spline_on_site=False) # Pick hot atoms and the corresponding violated and neighbouring restraints: mdl.pick_hot_atoms(pick_hot_cutoff=4.0) mdl.restraints.pick(add_restraints=False) # Calculate the energy of the selected restraints and write them out in detail: mdl.energy(output='VERY_LONG')