IMP logo
IMP Reference Guide  develop.63b38c487d,2024/12/22
The Integrative Modeling Platform
add_fit_rmsd.py
1 #!/usr/bin/env python
2 
3 import IMP.multifit
4 from IMP import ArgumentParser
5 
6 __doc__ = "Add RMSD to reference to each fitting file."
7 
8 
9 def parse_args():
10  desc = """
11 Given a set of local fits (e.g. generated by fit_fft), the RMSD between each
12 subunit and a reference orientation is calculated and added to each fitting
13 file, in the final "RMSD to reference" column. (The original fitting file is
14 not modified; a new fitting file is created with a '.RMSD' extension.)
15 
16 Note that the assembly input file must contain a reference PDB filename for
17 each subunit (in the rightmost column).
18 """
19  p = ArgumentParser(description=desc)
20  p.add_argument("-d", action="store_true", dest="use_dock",
21  help="if set the docking transformation is used (and not "
22  "the fitting transformation)")
23  p.add_argument("assembly_file", help="assembly file name")
24  p.add_argument("proteomics_file", help="proteomics file name")
25  p.add_argument("mapping_file", help="mapping file name")
26  p.add_argument("param_file", help="parameter file name")
27  return p.parse_args()
28 
29 
30 def run(asmb_fn, proteomics_fn, mapping_fn, params_fn, dock_trans):
31  asmb = IMP.multifit.read_settings(asmb_fn)
32 
33  prot_data = IMP.multifit.read_proteomics_data(proteomics_fn)
34  print("=========3")
36  prot_data, mapping_fn)
37  alignment_params = IMP.multifit.AlignmentParams(params_fn)
39  mapping_data, asmb, alignment_params)
40  print("=========6")
41  # load all proteomics restraints
42  mdl = align.get_model()
43  mhs = align.get_molecules()
44  for i, mh in enumerate(mhs):
45  fits_fn = asmb.get_component_header(i).get_transformations_fn()
47  print("calculating rmsd for", len(fits), "fits of protein",
48  mh.get_name())
50  mh_ref = IMP.atom.read_pdb(
51  asmb.get_component_header(i).get_reference_fn(),
52  mdl)
53  rb = IMP.atom.create_rigid_body(mh_ref)
54  xyz_ref = IMP.core.XYZs(IMP.core.get_leaves(mh_ref))
55  new_fits = []
56  for i, rec in enumerate(fits):
57  fit_t = rec.get_fit_transformation()
58  if dock_trans:
59  fit_t = rec.get_dock_transformation()
60  IMP.core.transform(rb, fit_t)
61  rmsd = IMP.atom.get_rmsd(xyz, xyz_ref)
62  rec.set_rmsd_to_reference(rmsd)
63  new_fits.append(rec)
64  IMP.core.transform(rb, fit_t.get_inverse())
65  IMP.multifit.write_fitting_solutions(fits_fn + ".RMSD", new_fits)
66 
67 
68 def main():
69  args = parse_args()
70  run(args.assembly_file, args.proteomics_file, args.mapping_file,
71  args.param_file, args.use_dock)
72 
73 
74 if __name__ == "__main__":
75  main()
def main
Run a set of tests; similar to unittest.main().
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)
ProteinsAnchorsSamplingSpace read_protein_anchors_mapping(multifit::ProteomicsData *prots, const std::string &anchors_prot_map_fn, int max_paths=INT_MAX)
Align proteomics graph to EM density map.
double get_rmsd(const Selection &s0, const Selection &s1)
void transform(XYZ a, const algebra::Transformation3D &tr)
Apply a transformation to the particle.
Fitting atomic structures into a cryo-electron microscopy density map.
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.
FittingSolutionRecords read_fitting_solutions(const char *fitting_fn)
Fitting solutions reader.
IMP::core::RigidBody create_rigid_body(Hierarchy h)