def __init__( self, intensities, anomalous=False, n_resolution_bins=20, xtriage_analyses=None, run_xtriage_analysis=True, ): self.n_bins = n_resolution_bins self._xanalysis = xtriage_analyses if anomalous: intensities = intensities.as_anomalous_array() intensities.setup_binner(n_bins=self.n_bins) merged = intensities.merge_equivalents() self.binner = intensities.binner() self.merged_intensities = merged.array() self.multiplicities = merged.redundancies().complete_array( new_data_value=0) if not self._xanalysis and run_xtriage_analysis: # imports needed here or won't work, unsure why. from mmtbx.scaling.xtriage import xtriage_analyses from mmtbx.scaling.xtriage import master_params as xtriage_master_params xtriage_params = xtriage_master_params.fetch(sources=[]).extract() xtriage_params.scaling.input.xray_data.skip_sanity_checks = True xanalysis = xtriage_analyses( miller_obs=self.merged_intensities, unmerged_obs=intensities, text_out="silent", params=xtriage_params, ) self._xanalysis = xanalysis
def xtriage_report(self): xtriage_success = [] xtriage_warnings = [] xtriage_danger = [] s = StringIO() pout = printed_output(out=s) from mmtbx.scaling.xtriage import xtriage_analyses from mmtbx.scaling.xtriage import master_params as xtriage_master_params xtriage_params = xtriage_master_params.fetch(sources=[]).extract() xtriage_params.scaling.input.xray_data.skip_sanity_checks = True xanalysis = xtriage_analyses( miller_obs=self.merged_intensities, unmerged_obs=self.intensities, text_out=pout, params=xtriage_params, ) if self.report_dir is not None: with open(os.path.join(self.report_dir, "xtriage.log"), "wb") as f: f.write(s.getvalue()) xia2.Handlers.Files.FileHandler.record_log_file( "Xtriage", os.path.join(self.report_dir, "xtriage.log")) xs = StringIO() xout = xtriage_output(xs) xanalysis.show(out=xout) xout.flush() sub_header_to_out = xout._sub_header_to_out issues = xanalysis.summarize_issues() # issues.show() for level, text, sub_header in issues._issues: summary = sub_header_to_out.get(sub_header, StringIO()).getvalue() d = { "level": level, "text": text, "summary": summary, "header": sub_header } if level == 0: xtriage_success.append(d) elif level == 1: xtriage_warnings.append(d) elif level == 2: xtriage_danger.append(d) self._xanalysis = xanalysis return xtriage_success, xtriage_warnings, xtriage_danger
def xtriage_report(self): xtriage_success = [] xtriage_warnings = [] xtriage_danger = [] s = StringIO() pout = printed_output(out=s) from mmtbx.scaling.xtriage import xtriage_analyses from mmtbx.scaling.xtriage import master_params as xtriage_master_params xtriage_params = xtriage_master_params.fetch(sources=[]).extract() xtriage_params.scaling.input.xray_data.skip_sanity_checks = True xanalysis = xtriage_analyses( miller_obs=self.merged_intensities, unmerged_obs=self.intensities, text_out=pout, params=xtriage_params, ) with open(os.path.join(self.report_dir, 'xtriage.log'), 'wb') as f: f.write(s.getvalue()) xia2.Handlers.Files.FileHandler.record_log_file( 'Xtriage', os.path.join(self.report_dir, 'xtriage.log')) xs = StringIO() xout = xtriage_output(xs) xanalysis.show(out=xout) xout.flush() sub_header_to_out = xout._sub_header_to_out issues = xanalysis.summarize_issues() #issues.show() for level, text, sub_header in issues._issues: summary = sub_header_to_out.get(sub_header, StringIO()).getvalue() summary = summary.replace('<', '<').replace('>', '>') d = { 'level': level, 'text': text, 'summary': summary, 'header': sub_header, } if level == 0: xtriage_success.append(d) elif level == 1: xtriage_warnings.append(d) elif level == 2: xtriage_danger.append(d) self._xanalysis = xanalysis return xtriage_success, xtriage_warnings, xtriage_danger
def __init__( self, intensities, anomalous=False, n_resolution_bins=20, xtriage_analyses=None, run_xtriage_analysis=True, ): self.n_bins = n_resolution_bins self._xanalysis = xtriage_analyses if anomalous: intensities = intensities.as_anomalous_array() intensities.setup_binner(n_bins=self.n_bins) merged = intensities.merge_equivalents() self.binner = intensities.binner() self.merged_intensities = merged.array() self.multiplicities = merged.redundancies().complete_array( new_data_value=0) intensities.setup_binner_d_star_sq_step(auto_binning=True) self.wilson_plot_result = intensities.wilson_plot(use_binning=True) mr = matthews_rupp(intensities.crystal_symmetry(), out=StringIO()) self.n_residues = mr.n_residues if not self._xanalysis and run_xtriage_analysis: # imports needed here or won't work, unsure why. from mmtbx.scaling.xtriage import master_params as xtriage_master_params from mmtbx.scaling.xtriage import xtriage_analyses xtriage_params = xtriage_master_params.fetch(sources=[]).extract() xtriage_params.scaling.input.xray_data.skip_sanity_checks = True try: self._xanalysis = xtriage_analyses( miller_obs=self.merged_intensities, unmerged_obs=intensities, text_out="silent", params=xtriage_params, ) except RuntimeError: logger.warning("Xtriage analysis failed.", exc_info=True) self._xanalysis = None