Source code for ewoksid22.sum
import os
import shutil
from ewokscore import Task
from .id22sum import run
from . import dirutils
[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",
],
output_names=["outfile"],
):
[docs]
def run(self):
# TODO: only outdirs["primary"] is used
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"),
}
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
options["outdir"] = outdirs_fortran["primary"][1]
else:
options["outdir"] = outdirs["primary"][1]
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
resfile = dirutils.primary_file(resbasename, outdirs_fortran)
dirname = os.path.dirname(resfile)
if dirname:
os.makedirs(dirname, exist_ok=True)
shutil.copyfile(self.inputs.resfile, resfile)
print(f"Result will be saved in: {options['outdir']}")
self.outputs.outfile = run(**options)