3 from __future__
import print_function
6 from IMP
import OptionParser
8 __doc__ =
"Write assembly transformation file in other formats."
10 class Formatter(object):
15 def write_header(self, settings):
19 class ChimeraFormatter(Formatter):
21 """Each line in 'chimera' format lists the transformation index, the
22 cross correlation score, and then the transformation for each component,
23 as a rotation matrix (row-major order) and a translation in angstroms."""
25 def write_line(self, ind, score, transforms):
26 self.fh.write(str(ind) +
"\t" + score +
"\t")
29 v = t.get_rotation().get_rotation_matrix_row(k)
31 str(v[0]) +
" " + str(v[1]) +
" " + str(v[2]) +
" ")
32 v = t.get_translation()
34 str(v[0]) +
" " + str(v[1]) +
" " + str(v[2]) +
" | ")
38 class DockRefFormatter(Formatter):
40 """Each line in 'dockref' format lists the transformation for each component,
41 as a set of three Euler angles (in radians about the fixed x, y and z axes)
42 and a translation in angstroms."""
44 def write_header(self, sd):
46 for i
in range(sd.get_number_of_component_headers()):
47 self.fh.write(sd.get_component_header(i).get_name() +
"|")
50 def write_line(self, ind, score, transforms):
53 tr = t.get_translation()
55 self.fh.write(
"%.6g %.6g %.6g %.6g %.6g %.6g|"
56 % (eulers.get_x(), eulers.get_y(), eulers.get_z(),
61 formatters = {
'chimera': ChimeraFormatter,
62 'dockref': DockRefFormatter}
66 usage =
"""%prog [options] <asmb.input> <scores> <output file>
68 Write assembly transformation file in other formats.
70 """ +
"\n\n".join(x.__doc__
for x
in formatters.values())
73 parser.add_option(
"-f",
"--format", default=
'chimera', type=
"choice",
74 choices=list(formatters.keys()),
75 help=
"type of output to generate ("
76 +
", ".join(formatters.keys())
77 +
"; default: chimera)")
78 options, args = parser.parse_args()
80 parser.error(
"incorrect number of arguments")
84 def run(asmb_fn, combs_fn, fmt):
90 for i
in range(sd.get_number_of_component_headers()):
91 fn = sd.get_component_header(i).get_transformations_fn()
93 for ind, line
in enumerate(open(combs_fn)):
97 fmt.write_line(ind, score,
98 [fits[i][int(c)].get_fit_transformation()
99 for i, c
in enumerate(comb.split())])
103 options, args = parse_args()
104 fmt = formatters[options.format](open(args[2],
'w'))
105 run(args[0], args[1], fmt)
107 if __name__ ==
"__main__":
SettingsData * read_settings(const char *filename)
FixedXYZ get_fixed_xyz_from_rotation(const Rotation3D &r)
The inverse of rotation_from_fixed_xyz()
def __init__
Set up a new graphXL object.
Fitting atomic structures into a cryo-electron microscopy density map.
IMP::kernel::OptionParser OptionParser
FittingSolutionRecords read_fitting_solutions(const char *fitting_fn)
Fitting solutions reader.