Source code for ewoksid22.sum

import logging
import os

from ewokscore import Task

from . import dirutils
from .id22sum import run

logger = logging.getLogger(__name__)


[docs] class ID22Sum( Task, input_names=["filename", "binsize"], optional_input_names=[ "entries", "lowtth", "scaling", "sum_single", "sum_all", "advanced", "resfile", "outdirs", "primary_outdir", "outprefix", "raw_filename", "ascii_extension", "overwrite", ], output_names=["outfile"], ): """Produce final 1D powder diffractograms in XYE format from rebinned HDF5 data. This task reads the rebinned per-crystal 1D ROI data generated by `ID22Rebin` and processes it to generate summed and optionally scaled 1D diffraction patterns. It can sum individual scans (sum_single) or all scans together (sum_all) and save the results in ASCII files. """
[docs] def run(self): # TODO: only outdirs["primary"] is used overwrite = self.get_input_value("overwrite", False) options = { "filename": self.inputs.filename, "entries": self.inputs.entries, "binsize": self.inputs.binsize, "lowtth": self.get_input_value("lowtth", 0), "scaling": self.get_input_value("scaling", None), "sum_single": self.get_input_value("sum_single", 1), "sum_all": self.get_input_value("sum_all", 1), "advanced": self.get_input_value("advanced", None), "ascii_extension": self.get_input_value("ascii_extension", ".dat"), "overwrite": overwrite, } do_sum = options["sum_single"] or options["sum_all"] if not do_sum: self.outputs.outfile = None return if self.missing_inputs.raw_filename: primary_outdir = None else: primary_outdir = self.get_input_value("primary_outdir", None) outdirs = self.get_input_value("outdirs", dict()) outdirs = dirutils.prepare_outdirs(outdirs, primary_outdir) # Save results in a subdirectory if do_sum: prefix = os.path.splitext(os.path.basename(self.inputs.filename))[0] outdirs_fortran = dict() for name, (userhost, dirname) in outdirs.items(): sbinsize = str(options["binsize"]).replace(".", "") subdirname = f"{prefix}_b{sbinsize}" if not self.missing_inputs.outprefix: subdirname = self.inputs.outprefix + "_" + subdirname dirname = os.path.join(dirname, subdirname) outdirs_fortran[name] = userhost, dirname primary = outdirs_fortran.get("primary") else: primary = outdirs.get("primary") if primary: options["outdir"] = primary[1] else: options["outdir"] = None if do_sum and not self.missing_inputs.resfile: # The fortran rebin program will be executed in outdir. # It needs the file res-file in that directory. resbasename = os.path.basename(self.inputs.resfile) options["resbasename"] = resbasename dirutils.copy_file_to_primary( self.inputs.resfile, outdirs_fortran, overwrite=True ) if options["outdir"]: print(f"Result will be saved in: {options['outdir']}") self.outputs.outfile = run(**options) else: self.outputs.outfile = None