def run(show_plots,args): from xfel.command_line.cxi_merge import master_phil phil = iotbx.phil.process_command_line(args=args, master_string=master_phil).show() work_params = phil.work.extract() from xfel.merging.phil_validation import application,samosa application(work_params) samosa(work_params) if ("--help" in args) : libtbx.phil.parse(master_phil.show()) return datadir = "." written_files = [] if work_params.levmar.compute_cc_half: for half_data_flag in [1,2,0]: case = execute_case(datadir, work_params, plot=show_plots, half_data_flag=half_data_flag) assert len(case.Fit_I)==len(case.ordered_intensities.indices())==len(case.reference_millers.indices()) model_subset = case.reference_millers[0:len(case.Fit_I)] fitted_miller_array = miller.array (miller_set = model_subset, data = case.Fit_I, sigmas = case.Fit_I_stddev) fitted_miller_array.set_observation_type_xray_intensity() output_result = fitted_miller_array.select(case.I_visited==1) outfile = "%s_s%1d_levmar.mtz"%(work_params.output.prefix,half_data_flag) output_result.show_summary(prefix="%s: "%outfile) mtz_out = output_result.as_mtz_dataset(column_root_label="Iobs",title=outfile,wavelength=None) mtz_obj = mtz_out.mtz_object() mtz_obj.write(outfile) written_files.append(outfile) print "OK s%1d"%half_data_flag #raw_input("OK?") """Guest code to retrieve the modified orientations after rotational fitting is done""" if "Rxy" in work_params.levmar.parameter_flags: all_A = [e.crystal.get_A() for e in case.experiments.get_experiments()] all_files = case.experiments.get_files() all_x = case.Fit["Ax"] all_y = case.Fit["Ay"] from scitbx import matrix x_axis = matrix.col((1.,0.,0.)) y_axis = matrix.col((0.,1.,0.)) out = open("aaaaa","w") for x in xrange(len(all_A)): Rx = x_axis.axis_and_angle_as_r3_rotation_matrix(angle=all_x[x], deg=True) Ry = y_axis.axis_and_angle_as_r3_rotation_matrix(angle=all_y[x], deg=True) modified_A = Rx * Ry * all_A[x] filename = all_files[x] print >>out, filename, " ".join([str(a) for a in modified_A.elems]) work_params.scaling.algorithm="levmar" from xfel.cxi.cxi_cc import run_cc run_cc(work_params,work_params.model_reindex_op,sys.stdout) else: execute_case(datadir, work_params, plot=show_plots)
def run(show_plots,args): from xfel.command_line.cxi_merge import master_phil phil = iotbx.phil.process_command_line(args=args, master_string=master_phil).show() work_params = phil.work.extract() from xfel.merging.phil_validation import application,samosa application(work_params) samosa(work_params) if ("--help" in args) : libtbx.phil.parse(master_phil.show()) return datadir = "." written_files = [] if work_params.levmar.compute_cc_half: for half_data_flag in [1,2,0]: case = execute_case(datadir, work_params, plot=show_plots, half_data_flag=half_data_flag) assert len(case.Fit_I)==len(case.ordered_intensities.indices())==len(case.reference_millers.indices()) model_subset = case.reference_millers[0:len(case.Fit_I)] fitted_miller_array = miller.array (miller_set = model_subset, data = case.Fit_I, sigmas = case.Fit_I_stddev) fitted_miller_array.set_observation_type_xray_intensity() output_result = fitted_miller_array.select(case.I_visited==1) outfile = "%s_s%1d_levmar.mtz"%(work_params.output.prefix,half_data_flag) output_result.show_summary(prefix="%s: "%outfile) mtz_out = output_result.as_mtz_dataset(column_root_label="Iobs",title=outfile,wavelength=None) mtz_obj = mtz_out.mtz_object() mtz_obj.write(outfile) written_files.append(outfile) print "OK s%1d"%half_data_flag #raw_input("OK?") """Guest code to retrieve the modified orientations after rotational fitting is done""" if "Rxy" in work_params.levmar.parameter_flags: all_A = [e.crystal.get_A() for e in case.experiments.get_experiments()] all_files = case.experiments.get_files() all_x = case.Fit["Ax"] all_y = case.Fit["Ay"] from scitbx import matrix x_axis = matrix.col((1.,0.,0.)) y_axis = matrix.col((0.,1.,0.)) out = open("aaaaa","w") for x in xrange(len(all_A)): Rx = x_axis.axis_and_angle_as_r3_rotation_matrix(angle=all_x[x], deg=True) Ry = y_axis.axis_and_angle_as_r3_rotation_matrix(angle=all_y[x], deg=True) modified_A = Rx * Ry * all_A[x] filename = all_files[x] print >>out, filename, " ".join([str(a) for a in modified_A.elems]) work_params.scaling.algorithm="levmar" from xfel.cxi.cxi_cc import run_cc run_cc(work_params,work_params.model_reindex_op,sys.stdout)
def run(args): phil = iotbx.phil.process_command_line(args=args, master_string=master_phil).show() work_params = phil.work.extract() from xfel.merging.phil_validation import application, samosa application(work_params) samosa(work_params) if ("--help" in args): libtbx.phil.parse(master_phil.show()) return if ((work_params.d_min is None) or (work_params.data is None)): command_name = os.environ["LIBTBX_DISPATCHER_NAME"] raise Usage(command_name + " " "d_min=4.0 " "data=~/scratch/r0220/006/strong/ " "model=3bz1_3bz2_core.pdb") if ((work_params.rescale_with_average_cell) and (not work_params.set_average_unit_cell)): raise Usage( "If rescale_with_average_cell=True, you must also specify " + "set_average_unit_cell=True.") if work_params.raw_data.sdfac_auto and work_params.raw_data.sdfac_refine: raise Usage("Cannot specify both sdfac_auto and sdfac_refine") # Read Nat's reference model from an MTZ file. XXX The observation # type is given as F, not I--should they be squared? Check with Nat! log = open("%s.log" % work_params.output.prefix, "w") out = multi_out() out.register("log", log, atexit_send_to=None) out.register("stdout", sys.stdout) print >> out, "I model" if work_params.model is not None: from xfel.merging.general_fcalc import run i_model = run(work_params) work_params.target_unit_cell = i_model.unit_cell() work_params.target_space_group = i_model.space_group_info() i_model.show_summary() else: i_model = None print >> out, "Target unit cell and space group:" print >> out, " ", work_params.target_unit_cell print >> out, " ", work_params.target_space_group miller_set, i_model = consistent_set_and_model(work_params, i_model) frame_files = get_observations(work_params) scaler = scaling_manager(miller_set=miller_set, i_model=i_model, params=work_params, log=out) scaler.scale_all(frame_files) if scaler.n_accepted == 0: return None scaler.show_unit_cell_histograms() if (work_params.rescale_with_average_cell): average_cell_abc = scaler.uc_values.get_average_cell_dimensions() average_cell = uctbx.unit_cell( list(average_cell_abc) + list(work_params.target_unit_cell.parameters()[3:])) work_params.target_unit_cell = average_cell print >> out, "" print >> out, "#" * 80 print >> out, "RESCALING WITH NEW TARGET CELL" print >> out, " average cell: %g %g %g %g %g %g" % \ work_params.target_unit_cell.parameters() print >> out, "" scaler.reset() scaler.scale_all(frame_files) scaler.show_unit_cell_histograms() if False: #(work_params.output.show_plots) : try: plot_overall_completeness(completeness) except Exception as e: print "ERROR: can't show plots" print " %s" % str(e) print >> out, "\n" # Sum the observations of I and I/sig(I) for each reflection. sum_I = flex.double(miller_set.size(), 0.) sum_I_SIGI = flex.double(miller_set.size(), 0.) for i in xrange(miller_set.size()): index = miller_set.indices()[i] if index in scaler.ISIGI: for t in scaler.ISIGI[index]: sum_I[i] += t[0] sum_I_SIGI[i] += t[1] miller_set_avg = miller_set.customized_copy( unit_cell=work_params.target_unit_cell) table1 = show_overall_observations(obs=miller_set_avg, redundancy=scaler.completeness, summed_wt_I=scaler.summed_wt_I, summed_weight=scaler.summed_weight, ISIGI=scaler.ISIGI, n_bins=work_params.output.n_bins, title="Statistics for all reflections", out=out, work_params=work_params) print >> out, "" n_refl, corr = ((scaler.completeness > 0).count(True), 0) print >> out, "\n" table2 = show_overall_observations( obs=miller_set_avg, redundancy=scaler.summed_N, summed_wt_I=scaler.summed_wt_I, summed_weight=scaler.summed_weight, ISIGI=scaler.ISIGI, n_bins=work_params.output.n_bins, title="Statistics for reflections where I > 0", out=out, work_params=work_params) #from libtbx import easy_pickle #easy_pickle.dump(file_name="stats.pickle", obj=stats) #stats.report(plot=work_params.plot) #miller_counts = miller_set_p1.array(data=stats.counts.as_double()).select( # stats.counts != 0) #miller_counts.as_mtz_dataset(column_root_label="NOBS").mtz_object().write( # file_name="nobs.mtz") if work_params.data_subsubsets.subsubset is not None and work_params.data_subsubsets.subsubset_total is not None: easy_pickle.dump( "scaler_%d.pickle" % work_params.data_subsubsets.subsubset, scaler) print >> out, "" mtz_file, miller_array = scaler.finalize_and_save_data() #table_pickle_file = "%s_graphs.pkl" % work_params.output.prefix #easy_pickle.dump(table_pickle_file, [table1, table2]) loggraph_file = os.path.abspath("%s_graphs.log" % work_params.output.prefix) f = open(loggraph_file, "w") f.write(table1.format_loggraph()) f.write("\n") f.write(table2.format_loggraph()) f.close() result = scaling_result(miller_array=miller_array, plots=scaler.get_plot_statistics(), mtz_file=mtz_file, loggraph_file=loggraph_file, obs_table=table1, all_obs_table=table2, n_reflections=n_refl, overall_correlation=corr) easy_pickle.dump("%s.pkl" % work_params.output.prefix, result) return result
def run(args): phil = iotbx.phil.process_command_line(args=args, master_string=master_phil).show() work_params = phil.work.extract() from xfel.merging.phil_validation import application, samosa application(work_params) samosa(work_params) if ("--help" in args): libtbx.phil.parse(master_phil.show()) return if ((work_params.d_min is None) or (work_params.data is None)): command_name = os.environ["LIBTBX_DISPATCHER_NAME"] raise Usage(command_name + " " "d_min=4.0 " "data=~/scratch/r0220/006/strong/ " "model=3bz1_3bz2_core.pdb") if ((work_params.rescale_with_average_cell) and (not work_params.set_average_unit_cell)): raise Usage( "If rescale_with_average_cell=True, you must also specify " + "set_average_unit_cell=True.") if work_params.raw_data.sdfac_auto and work_params.raw_data.sdfac_refine: raise Usage("Cannot specify both sdfac_auto and sdfac_refine") # Read Nat's reference model from an MTZ file. XXX The observation # type is given as F, not I--should they be squared? Check with Nat! log = open("%s.log" % work_params.output.prefix, "w") out = multi_out() out.register("log", log, atexit_send_to=None) out.register("stdout", sys.stdout) print >> out, "I model" if work_params.model is not None: from xfel.merging.general_fcalc import run i_model = run(work_params) work_params.target_unit_cell = i_model.unit_cell() work_params.target_space_group = i_model.space_group_info() i_model.show_summary() else: i_model = None print >> out, "Target unit cell and space group:" print >> out, " ", work_params.target_unit_cell print >> out, " ", work_params.target_space_group miller_set, i_model = consistent_set_and_model(work_params, i_model) frame_files = get_observations(work_params) scaler = scaling_manager(miller_set=miller_set, i_model=i_model, params=work_params, log=out) scaler.scale_all(frame_files) if scaler.n_accepted == 0: return None scaler.show_unit_cell_histograms() if (work_params.rescale_with_average_cell): average_cell_abc = scaler.uc_values.get_average_cell_dimensions() average_cell = uctbx.unit_cell( list(average_cell_abc) + list(work_params.target_unit_cell.parameters()[3:])) work_params.target_unit_cell = average_cell print >> out, "" print >> out, "#" * 80 print >> out, "RESCALING WITH NEW TARGET CELL" print >> out, " average cell: %g %g %g %g %g %g" % \ work_params.target_unit_cell.parameters() print >> out, "" scaler.reset() scaler.scale_all(frame_files) scaler.show_unit_cell_histograms() if False: #(work_params.output.show_plots) : try: plot_overall_completeness(completeness) except Exception, e: print "ERROR: can't show plots" print " %s" % str(e)
def run(args): phil = iotbx.phil.process_command_line(args=args, master_string=master_phil).show() work_params = phil.work.extract() from xfel.merging.phil_validation import application,samosa application(work_params) samosa(work_params) if ("--help" in args) : libtbx.phil.parse(master_phil.show()) return if ((work_params.d_min is None) or (work_params.data is None) ) : command_name = os.environ["LIBTBX_DISPATCHER_NAME"] raise Usage(command_name + " " "d_min=4.0 " "data=~/scratch/r0220/006/strong/ " "model=3bz1_3bz2_core.pdb") if ((work_params.rescale_with_average_cell) and (not work_params.set_average_unit_cell)) : raise Usage("If rescale_with_average_cell=True, you must also specify "+ "set_average_unit_cell=True.") if work_params.raw_data.sdfac_auto and work_params.raw_data.sdfac_refine: raise Usage("Cannot specify both sdfac_auto and sdfac_refine") # Read Nat's reference model from an MTZ file. XXX The observation # type is given as F, not I--should they be squared? Check with Nat! log = open("%s.log" % work_params.output.prefix, "w") out = multi_out() out.register("log", log, atexit_send_to=None) out.register("stdout", sys.stdout) print >> out, "I model" if work_params.model is not None: from xfel.merging.general_fcalc import run i_model = run(work_params) work_params.target_unit_cell = i_model.unit_cell() work_params.target_space_group = i_model.space_group_info() i_model.show_summary() else: i_model = None print >> out, "Target unit cell and space group:" print >> out, " ", work_params.target_unit_cell print >> out, " ", work_params.target_space_group # Adjust the minimum d-spacing of the generated Miller set to assure # that the desired high-resolution limit is included even if the # observed unit cell differs slightly from the target. If a # reference model is present, ensure that Miller indices are ordered # identically. miller_set = symmetry( unit_cell=work_params.target_unit_cell, space_group_info=work_params.target_space_group ).build_miller_set( anomalous_flag=not work_params.merge_anomalous, d_max=work_params.d_max, d_min=work_params.d_min / math.pow( 1 + work_params.unit_cell_length_tolerance, 1 / 3)) miller_set = miller_set.change_basis( work_params.model_reindex_op).map_to_asu() if i_model is not None: matches = miller.match_indices(i_model.indices(), miller_set.indices()) assert not matches.have_singles() miller_set = miller_set.select(matches.permutation()) frame_files = get_observations(work_params) scaler = scaling_manager( miller_set=miller_set, i_model=i_model, params=work_params, log=out) scaler.scale_all(frame_files) if scaler.n_accepted == 0: return None scaler.show_unit_cell_histograms() if (work_params.rescale_with_average_cell) : average_cell_abc = scaler.uc_values.get_average_cell_dimensions() average_cell = uctbx.unit_cell(list(average_cell_abc) + list(work_params.target_unit_cell.parameters()[3:])) work_params.target_unit_cell = average_cell print >> out, "" print >> out, "#" * 80 print >> out, "RESCALING WITH NEW TARGET CELL" print >> out, " average cell: %g %g %g %g %g %g" % \ work_params.target_unit_cell.parameters() print >> out, "" scaler.reset() scaler.scale_all(frame_files) scaler.show_unit_cell_histograms() if False : #(work_params.output.show_plots) : try : plot_overall_completeness(completeness) except Exception, e : print "ERROR: can't show plots" print " %s" % str(e)