We add a command that uses the fitmap command with the search option to randomly place an atomic structure in an map many time and optimize the positions. Then we save the resulting positions where correlation is greater than some value each in a separate PDB file. Opening the Python code defines the new “fitsearch” command
open fit_search.py
For an example use open GroEL atomic structure 1GRL from the PDB and an map 1080 from the EMDB and compute and save fits. I only want to fit chain A so I delete all other chains. The resolution option is to simulate a map from the atomic structure used in fitting. Only fits with correlation at least 0.9 are saved.
open 1grl
delete ~/A
open 1080 from emdb
fitsearch #1 in #2 resolution 11.5 search 50 cutoff 0.9 save ~/Desktop/results/fit_%d.pdb
Here is the fit_search.py code. It requires a ChimeraX version newer than July 27, 2021.
# Create command fitsearch to run fitmap with the search option,
# then save the results that have correlation higher than a specified value.
#
# fitsearch #1 in #2 resolution 11.5 search 50 cutoff 0.9 save ~/Desktop/results/mol.pdb
def fit_search(session, atoms, in_map, resolution = None, search = 10, cutoff = 0.5,
save = None):
if resolution is None:
resolution = 3*min(in_map.grid.step)
from chimerax.map_fit.fitcmd import fitmap
fits = fitmap(session, atoms, in_map, resolution = resolution, search = search)
good_fits = [f for f in fits if f.correlation() >= cutoff]
from chimerax.map_fit.search import save_fits
save_fits(session, good_fits, save)
def register_command(session):
from chimerax.core.commands import CmdDesc, register, ObjectsArg, FloatArg, IntArg, SaveFileNameArg
from chimerax.map import MapArg
desc = CmdDesc(required=[('atoms', ObjectsArg)],
keyword=[('in_map', MapArg),
('resolution', FloatArg),
('search', IntArg),
('cutoff', FloatArg),
('save', SaveFileNameArg)],
required_arguments = ['in_map'],
synopsis='Save atomic structures fit in a map')
register('fitsearch', desc, fit_search, logger=session.logger)
register_command(session)
Tom Goddard, July 26, 2021