3 from __future__
import print_function, division
6 from IMP
import ArgumentParser
8 __doc__ =
"Align proteomics graph with the EM map."
14 def __init__(self, minValue=0, maxValue=10, totalWidth=12):
18 self.span = maxValue - minValue
19 self.width = totalWidth
23 def updateAmount(self, newAmount=0):
24 if newAmount < self.min:
26 if newAmount > self.max:
28 self.amount = newAmount
31 diffFromMin = float(self.amount - self.min)
32 percentDone = (diffFromMin / float(self.span)) * 100.0
33 percentDone = round(percentDone)
34 percentDone = int(percentDone)
37 allFull = self.width - 2
38 numHashes = (percentDone / 100.0) * allFull
39 numHashes = int(round(numHashes))
42 self.progBar =
"[" +
'#' * numHashes + \
43 ' ' * (allFull - numHashes) +
"]"
46 percentPlace = (len(self.progBar) // 2) - len(str(percentDone))
47 percentString = str(percentDone) +
"%"
50 self.progBar = self.progBar[
51 0:percentPlace] + percentString + self.progBar[
56 return str(self.progBar)
60 desc =
"""Align proteomics graph with the EM map."""
61 p = ArgumentParser(description=desc)
62 p.add_argument(
"-m",
"--max", type=int, dest=
"max", default=999999999,
63 help=
"maximum number of fits considered")
64 p.add_argument(
"assembly_file", help=
"assembly file name")
65 p.add_argument(
"proteomics_file", help=
"proteomics file name")
66 p.add_argument(
"mapping_file", help=
"mapping file name")
67 p.add_argument(
"param_file", help=
"parameter file name")
68 p.add_argument(
"combinations_file", help=
"combinations file name (output)")
69 p.add_argument(
"scores_file", help=
"fitting scores file name (output)")
74 def report_solutions(asmb, mdl, mhs, restraint_set, dmap, mapping_data, combs,
75 combs_fn_output_fn, scored_comb_output_fn, max_comb):
78 for i, mh
in enumerate(mhs):
79 fn = asmb.get_component_header(i).get_transformations_fn()
80 ensmb.add_component_and_fits(mh,
84 mh_res = IMP.atom.get_by_type(mh, IMP.atom.RESIDUE_TYPE)
87 all_leaves = all_leaves + s1.get_selected_particles()
88 print(
"number of leaves:", len(all_leaves))
89 print(
"Get number of restraints:", len(restraint_set.get_restraints()))
90 pb = progressBar(0, len(combs))
94 print(
"going to calculate fits for:", len(combs))
95 for i, comb
in enumerate(combs):
98 ensmb.load_combination(comb)
99 ranked_combs.append([comb, fitr.evaluate(
False)])
100 ensmb.unload_combination(comb)
105 ranked_combs.sort(key=
lambda a: a[1])
107 print(
"ranked combs:", len(ranked_combs))
108 ranked_combs[max_comb:] = []
109 print(
"ranked combs:", len(ranked_combs))
110 for comb
in ranked_combs:
111 sorted_combs.append(comb[0])
113 output = open(scored_comb_output_fn,
"w")
114 for comb, score
in ranked_combs:
117 output.write(str(ind) +
" ")
118 output.write(
"|" + str(1. - score) +
"|\n")
122 def run(asmb_fn, proteomics_fn, mapping_fn, params_fn,
123 combs_fn_output_fn, scored_comb_output_fn, max_comb):
125 asmb.set_was_used(
True)
126 dmap = IMP.em.read_map(asmb.get_assembly_header().get_dens_fn())
127 dmap.get_header().set_resolution(
129 threshold = asmb.get_assembly_header().get_threshold()
130 dmap.update_voxel_size(asmb.get_assembly_header().get_spacing())
131 dmap.set_origin(asmb.get_assembly_header().get_origin())
134 alignment_params = IMP.multifit.AlignmentParams(params_fn)
135 alignment_params.show()
142 em_anchors = mapping_data.get_anchors()
148 align.set_fast_scoring(
False)
149 align.set_density_map(dmap, threshold)
150 align.add_states_and_filters()
151 align.add_all_restraints()
153 print(
"before align")
156 combs = align.get_combinations()
159 f = open(combs_fn_output_fn,
"w")
160 f.write(
"NO SOLUTIONS FOUND\n")
164 report_solutions(asmb, align.get_model(), align.get_molecules(),
165 align.get_restraint_set(), dmap,
166 mapping_data, combs, combs_fn_output_fn,
167 scored_comb_output_fn, max_comb)
172 run(args.assembly_file, args.proteomics_file, args.mapping_file,
173 args.param_file, args.combinations_file, args.scores_file, args.max)
175 if __name__ ==
"__main__":
An ensemble of fitting solutions.
def main
Run a set of tests; similar to unittest.main().
void write_paths(const IntsList &paths, const std::string &txt_filename)
SettingsData * read_settings(const char *filename)
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.
Fitting atomic structures into a cryo-electron microscopy density map.
ProteomicsData * read_proteomics_data(const char *proteomics_fn)
Proteomics reader.
void set_log_level(LogLevel l)
Set the current global log level.
Calculate score based on fit to EM map.
FittingSolutionRecords read_fitting_solutions(const char *fitting_fn)
Fitting solutions reader.
double get_resolution(Model *m, ParticleIndex pi)
Estimate the resolution of the hierarchy as used by Representation.
Select hierarchy particles identified by the biological name.