## selection.hot_atoms() — atoms violating restraints

`hot_atoms(pick_hot_cutoff, residue_span_range=(0, 99999), viol_report_cut=physical.values(default=4.500000, chi1_dihedral=999.000000, chi2_dihedral=999.000000, chi3_dihedral=999.000000, chi4_dihedral=999.000000, chi5_dihedral=999.000000, phi_psi_dihedral=6.500000, nonbond_spline=999.000000, accessibility=999.000000, density=999.000000, gbsa=999.000000, em_density=999.000000), schedule_scale=None, edat=None)`

Output:
  selection

> This command evaluates the energy for all atoms in the selection, and returns a new selection containing atoms that should be optimized to remove hot spots in the model; only selected restraints are considered. The scaling factors for the physical restraint types are given by schedule_scale.

> 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 6.1) is violated when its relative heavy violation (see Section 5.3.1) is larger than specified in viol_report_cut[x].

> The command then flags those selected atoms that are within the pick_hot_cutoff angstroms of any of the already flagged atoms.

> It is often sensible to follow this command with selection.extend_by_residue(), to select sidechains and neighboring residues.

> This command is usually followed by the Restraints.pick() command, to select all the restraints that operate on selected (hot) atoms, and then an optimization (see Section 6.11).

Example: examples/commands/pick_hot_atoms.py

      # Example for: selection.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).

      from modeller import *
      from modeller.scripts import complete_pdb

      env = environ()
      env.io.atom_files_directory = ['../atom_files']
      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:
      mdl = complete_pdb(env, "1fas")

      # Just to get some violations:
      atmsel = selection(mdl)
      atmsel.randomize_xyz(deviation=0.06)
      # Create the bond length restraints and ignore the hard sphere overlap:
      mdl.restraints.make(atmsel, restraint_type='bond', spline_on_site=False)
      # Pick hot residues and the corresponding violated and neighboring restraints:
      atmsel = atmsel.hot_atoms(pick_hot_cutoff=4.0).by_residue()
      mdl.restraints.unpick_all()
      mdl.restraints.pick(atmsel)
      # Calculate the energy of the selected restraints and write them out in detail:
      atmsel.energy(output='VERY_LONG')