7 from IMP
import ArgumentParser
9 __doc__ =
"Refine fitting subunits into a density map with FFT."
30 self.spacing = spacing
31 self.resolution = resolution
32 self.threshold = density_threshold
33 self.originx = origin[0]
34 self.originy = origin[1]
35 self.originz = origin[2]
37 self.fits_fn = fits_fn
39 self.num_fits = num_fits
40 self.angles_per_voxel = angles_per_voxel
41 self.max_trans = max_trans
42 self.max_angle = max_angle
43 self.ref_pdb = ref_pdb
46 def run_local_fitting(self, mol2fit, rb, initial_transformation):
47 print(
"resolution is:", self.resolution)
48 dmap = IMP.em.read_map(self.em_map)
49 dmap.get_header().set_resolution(self.resolution)
50 dmap.update_voxel_size(self.spacing)
54 dmap.set_was_used(
True)
55 dmap.get_header().show()
60 do_cluster_fits =
True
61 max_clustering_translation = 3
62 max_clustering_rotation = 5
63 num_fits_to_report = 100
65 fits = ff.do_local_fitting(dmap, self.threshold, mol2fit,
66 self.angle / 180.0 * math.pi,
67 self.max_angle / 180.0 * math.pi,
68 self.max_trans, num_fits_to_report,
69 do_cluster_fits, self.angles_per_voxel,
70 max_clustering_translation,
71 max_clustering_rotation)
72 fits.set_was_used(
True)
73 final_fits = fits.best_fits_
74 if self.ref_pdb !=
'':
78 for i, fit
in enumerate(final_fits):
80 if self.ref_pdb !=
'':
81 trans = fit.get_fit_transformation()
87 fit.set_rmsd_to_reference(rmsd)
89 fit.set_fit_transformation(trans * initial_transformation)
90 if self.ref_pdb !=
'':
91 print(
'from all fits, lowest rmsd to ref:', cur_low)
101 Fit subunits locally around a combination solution with FFT."""
102 p = ArgumentParser(description=desc)
103 p.add_argument(
"-a",
"--angle", dest=
"angle", type=float, default=5,
104 help=
"angle delta (degrees) for FFT rotational "
105 "search (default 5)")
107 p.add_argument(
"-n",
"--num", dest=
"num", type=int, default=100,
108 help=
"Number of fits to report (default 100)")
110 p.add_argument(
"-v",
"--angle_voxel", dest=
"angle_voxel", type=int,
112 help=
"Number of angles to keep per voxel (default 10)")
114 p.add_argument(
"-t",
"--max_trans", dest=
"max_trans", type=float,
116 help=
"maximum translational search in A (default 10)")
118 p.add_argument(
"-m",
"--max_angle", dest=
"max_angle", type=float,
120 help=
"maximum angular search in degrees (default 50)")
121 p.add_argument(
"assembly_file", help=
"assembly file name")
122 p.add_argument(
"ref_assembly_file", help=
"refined assembly file name")
123 p.add_argument(
"proteomics_file", help=
"proteomics file name")
124 p.add_argument(
"mapping_file", help=
"mapping file name")
125 p.add_argument(
"combinations_file", help=
"combinations file name")
126 p.add_argument(
"combination_index", type=int,
127 help=
"number of the combination to read from the "
129 return p.parse_args()
145 asmb_input.set_was_used(
True)
147 asmb_refined_input.set_was_used(
True)
152 ensmb.set_was_used(
True)
153 mhs = ensmb.get_molecules()
156 ensmb_ref.set_was_used(
True)
157 _ = ensmb_ref.get_molecules()
159 ensmb.load_combination(combs[comb_ind])
161 em_map = asmb_input.get_assembly_header().get_dens_fn()
163 spacing = asmb_input.get_assembly_header().get_spacing()
164 origin = asmb_input.get_assembly_header().get_origin()
166 rbs_ref = ensmb_ref.get_rigid_bodies()
167 rbs = ensmb.get_rigid_bodies()
169 for i, mh
in enumerate(mhs):
170 fits_fn = asmb_refined_input.get_component_header(
171 i).get_transformations_fn()
177 initial_transformation = \
179 rb_ref.get_reference_frame(), rb.get_reference_frame())
181 pdb_fn = asmb_input.get_component_header(i).get_filename()
183 f = Fitter(em_map, spacing, resolution, origin,
184 asmb_input.get_assembly_header().get_threshold(), pdb_fn,
185 fits_fn, options.angle, options.num, options.angle_voxel,
186 options.max_trans, options.max_angle)
187 f.run_local_fitting(mh, rb, initial_transformation)
192 run(args.assembly_file, args.ref_assembly_file, args.proteomics_file,
193 args.mapping_file, args.combinations_file, args.combination_index,
197 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.
Transformation3D get_transformation_from_first_to_second(const ReferenceFrame3D &a, const ReferenceFrame3D &b)
ProteinsAnchorsSamplingSpace read_protein_anchors_mapping(multifit::ProteomicsData *prots, const std::string &anchors_prot_map_fn, int max_paths=INT_MAX)
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.
def __init__
input a list of particles, the slope and theta of the sigmoid potential theta is the cutoff distance ...
Ensemble * load_ensemble(multifit::SettingsData *sd, Model *mdl, const ProteinsAnchorsSamplingSpace &mapping_data)
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.
ProteomicsData * read_proteomics_data(const char *proteomics_fn)
Proteomics reader.
IntsList read_paths(const char *txt_filename, int max_paths=INT_MAX)
Read paths.
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.