7 from IMP 
import ArgumentParser
 
   11 __doc__ = 
"Fit subunits into a density map with FFT." 
   13 multiproc_exception = 
None 
   15     import multiprocessing
 
   19     if sys.platform == 
'win32' and 'WINELOADERNOEXEC' in os.environ:
 
   20         multiproc_exception = 
"Wine does not currently support multiprocessing" 
   21 except ImportError 
as detail:
 
   22     multiproc_exception = str(detail)
 
   28     if 'forkserver' in multiprocessing.get_all_start_methods():
 
   29         return multiprocessing.get_context(
'forkserver')
 
   31         return multiprocessing.get_context()
 
   50         self.spacing = spacing
 
   51         self.resolution = resolution
 
   52         self.threshold = density_threshold
 
   53         self.originx = origin[0]
 
   54         self.originy = origin[1]
 
   55         self.originz = origin[2]
 
   57         self.fits_fn = fits_fn
 
   59         self.num_fits = num_fits
 
   60         self.angles_per_voxel = angles_per_voxel
 
   61         self.ref_pdb = ref_pdb
 
   64         print(
"resolution is:", self.resolution)
 
   65         dmap = IMP.em.read_map(self.em_map)
 
   66         dmap.get_header().set_resolution(self.resolution)
 
   67         dmap.update_voxel_size(self.spacing)
 
   71         dmap.set_was_used(
True)
 
   72         dmap.get_header().
show()
 
   79         fits = ff.do_global_fitting(dmap, self.threshold, mol2fit,
 
   80                                     self.angle / 180.0 * math.pi,
 
   81                                     self.num_fits, self.spacing, 0.5,
 
   82                                     True, self.angles_per_voxel)
 
   83         fits.set_was_used(
True)
 
   84         final_fits = fits.best_fits_
 
   85         if self.ref_pdb != 
'':
 
   89         for i, fit 
in enumerate(final_fits):
 
   91             if self.ref_pdb != 
'':
 
   92                 trans = fit.get_fit_transformation()
 
   98                 fit.set_rmsd_to_reference(rmsd)
 
  100         if self.ref_pdb != 
'':
 
  101             print(
'from all fits, lowest rmsd to ref:', cur_low)
 
  110     desc = 
"""Fit subunits into a density map with FFT.""" 
  111     p = ArgumentParser(description=desc)
 
  112     p.add_argument(
"-c", 
"--cpu", dest=
"cpus", type=int, default=1,
 
  113                    help=
"number of cpus to use (default 1)")
 
  114     p.add_argument(
"-a", 
"--angle", dest=
"angle", type=float, default=30,
 
  115                    help=
"angle delta (degrees) for FFT rotational " 
  116                         "search (default 30)")
 
  118     p.add_argument(
"-n", 
"--num", dest=
"num", type=int,
 
  119                    default=100, help=
"Number of fits to report (default 100)")
 
  121     p.add_argument(
"-v", 
"--angle_voxel", dest=
"angle_voxel", type=int,
 
  123                    help=
"Number of angles to keep per voxel (default 10)")
 
  125     p.add_argument(
"assembly_file", help=
"assembly file name")
 
  132     return p.parse_args()
 
  135 def run(asmb_fn, options):
 
  136     if multiproc_exception 
is None and options.cpus > 1:
 
  139     asmb_input.set_was_used(
True)
 
  140     em_map = asmb_input.get_assembly_header().get_dens_fn()
 
  142     spacing = asmb_input.get_assembly_header().get_spacing()
 
  143     origin = asmb_input.get_assembly_header().get_origin()
 
  144     for i 
in range(asmb_input.get_number_of_component_headers()):
 
  145         fits_fn = asmb_input.get_component_header(i).get_transformations_fn()
 
  146         pdb_fn = asmb_input.get_component_header(i).get_filename()
 
  152             asmb_input.get_assembly_header().get_threshold(),
 
  158         if multiproc_exception 
is None and options.cpus > 1:
 
  164 The Python 'multiprocessing' module (available in Python 2.6 and later) is 
  165 needed to run on multiple CPUs, and could not be found 
  166 (Python error: '%s'). 
  167 Running on a single processor.""" % multiproc_exception, file=sys.stderr)
 
  169     if multiproc_exception 
is None and options.cpus > 1:
 
  171         nproc = min(options.cpus, asmb_input.get_number_of_component_headers())
 
  173         p = ctx.Pool(processes=nproc)
 
  174         _ = list(p.imap_unordered(do_work, work_units))
 
  180     run(args.assembly_file, args)
 
  183 if __name__ == 
"__main__":
 
Fit a molecule inside its density by local or global FFT. 
 
SettingsData * read_settings(const char *filename)
 
GenericHierarchies get_leaves(Hierarchy mhd)
Get all the leaves of the bit of hierarchy. 
 
void read_pdb(TextInput input, int model, Hierarchy h)
 
Class for storing model, its restraints, constraints, and particles. 
 
double get_rmsd(const Selection &s0, const Selection &s1)
 
void transform(Hierarchy h, const algebra::Transformation3D &tr)
Transform a hierarchy. This is aware of rigid bodies. 
 
Fitting atomic structures into a cryo-electron microscopy density map. 
 
Basic utilities for handling cryo-electron microscopy 3D density maps. 
 
void write_fitting_solutions(const char *fitting_fn, const FittingSolutionRecords &fit_sols, int num_sols=-1)
Write fitting solutions to a file. 
 
std::ostream & show(Hierarchy h, std::ostream &out=std::cout)
Print the hierarchy using a given decorator to display each node. 
 
IMP::core::RigidBody create_rigid_body(Hierarchy h)
 
double get_resolution(Model *m, ParticleIndex pi)
Estimate the resolution of the hierarchy as used by Representation. 
 
Functionality for loading, creating, manipulating and scoring atomic structures.