def run(self): """Run the script.""" from dials.util.options import flatten_reflections, flatten_experiments # Parse the command line arguments params, options = self.parser.parse_args(show_diff_phil=True) # Show the help if len(params.input.reflections) != 1 and not len( params.input.experiments): self.parser.print_help() exit(0) from dials.util.options import flatten_reflections, flatten_experiments reflections = flatten_reflections(params.input.reflections)[0] experiments = flatten_experiments(params.input.experiments) assert len(experiments) == 1 report = generate_integration_report( experiments[0], reflections, n_resolution_bins=params.n_resolution_bins, d_max=params.d_max, d_min=params.d_min, ) # Construct the per resolution table from dials.util.report import Table table = Table() table.name = "integration.resolution.summary" table.title = "Summary vs resolution" table.cols.append(("d_max", "d_max")) table.cols.append(("d_mid", "d_mid")) table.cols.append(("d_min", "d_min")) table.cols.append(("n_full", "# full")) table.cols.append(("n_part", "# part")) table.cols.append(("n_over", "# over")) table.cols.append(("n_ice", "# ice")) table.cols.append(("n_sum", "# sum")) table.cols.append(("n_prf", "# prf")) table.cols.append(("ibg", "Ibg")) table.cols.append(("i_sum", "<I>\n (sum)")) table.cols.append(("ios_sum", "I/sigI\n (sum)")) table.cols.append(("ios_prf", "I/sigI\n (prf)")) table.cols.append(("cc_prf", "CC prf")) table.cols.append(("rmsd_xy", "RMSD XY")) # extract resolution report report = report["resolution"] report["d_mid"] = [] for i in range(len(report["bins"]) - 1): report["d_mid"].append( (report["bins"][i + 1] + report["bins"][i]) / 2.0) table.rows.append([ "%.2f" % report["bins"][i + 1], "%.2f" % report["d_mid"][i], "%.2f" % report["bins"][i], "%d" % report["n_full"][i], "%d" % report["n_partial"][i], "%d" % report["n_overload"][i], "%d" % report["n_ice"][i], "%d" % report["n_summed"][i], "%d" % report["n_fitted"][i], "%.4f" % report["mean_background"][i], "%.4f" % report["i_sum"][i], "%.4f" % report["ios_sum"][i], "%.4f" % report["ios_prf"][i], "%.4f" % report["cc_prf"][i], "%.4f" % report["rmsd_xy"][i], ]) print(table.as_str()) # plot mean background first # from matplotlib import pyplot # fig = pyplot.figure() # ax = fig.add_subplot(111) # ax.set_xlabel(r'resolution ($\AA$)') # ax.set_ylabel(r'$\langle I_b \rangle$') # d_mid = flex.double(report['d_mid']) # I_bg = flex.double(report['mean_background'][:-1]) # dm2 = 1/flex.pow2(d_mid) # ax.plot(dm2, I_bg) # xticks = ax.get_xticks() # from math import sqrt # x_tick_labs = ["" if e <= 0.0 else "{:.2f}".format(sqrt(1./e)) # for e in xticks] # ax.set_xticklabels(x_tick_labs) # # pyplot.show() # try plot of log intensity and background templ = experiments[0].imageset.get_template() import os title = os.path.basename(templ) import matplotlib matplotlib.use("Agg") from matplotlib import pyplot fig = pyplot.figure() ax = fig.add_subplot(111) ax.set_xlabel(r"$d_{mid}$ ($\AA$)") ax.set_ylabel(r"$\langle Intensity \rangle$") d_mid = flex.double(report["d_mid"]) I_bg = flex.double(report["mean_background"][:-1]) I_sum = flex.double(report["i_sum"][:-1]) dm2 = 1 / flex.pow2(d_mid) ax.plot(dm2, I_bg, label="Background") ax.plot(dm2, I_sum, label="Peak") ax.legend(loc="upper right") ax.set_title(title) ax.set_ylim(-2, 100) pyplot.minorticks_on() ax.grid(True, which="both") xticks = ax.get_xticks() from math import sqrt x_tick_labs = [ "" if e <= 0.0 else "{:.2f}".format(sqrt(1.0 / e)) for e in xticks ] ax.set_xticklabels(x_tick_labs) pyplot.savefig("intensity_vs_resolution.png")