Commit 298c66d1 authored by Zhang, Yuanpeng's avatar Zhang, Yuanpeng
Browse files

move the align and focus to subprocess

parent f1fc382c
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+1 −0
Original line number Diff line number Diff line
tmp/

align_focus_can.py

0 → 100644
+41 −0
Original line number Diff line number Diff line
from mantid import simpleapi
import json
import os

# -----> Config: Conda environment to use for the reduction
central_config = "/SNS/PG3/shared/livereduce/live_config.json"
# <----- Config: Conda environment to use for the reduction

# -----> Config: Read in the config file
with open(central_config, "r") as f:
    input_c_config = json.load(f)

    cycle = input_c_config["Cycle"]
    sam_env = input_c_config["SampleEnvironment"]
    config_file = input_c_config["ConfigFile"][sam_env]
    config_file_f = os.path.join("/SNS/PG3/shared/livereduce/live_config_files",
                                 cycle,
                                 config_file)

    with open(config_file_f, "r") as f:
        input_config = json.load(f)

    cal_dir = input_config["CalibDirectory"]
    cal_file = os.path.join(cal_dir,
                            input_config["InputFiles"]["CalibFile"])
# <----- Config: Read in the config file

simpleapi.LoadDiffCal(InstrumentName="PG3",
                      Filename=cal_file,
                      WorkspaceName="PG3")

with open("/SNS/PG3/shared/livereduce/tmp/alignandfocuspowder.json", "r") as f:
    af_config = json.load(f)
with open("/SNS/PG3/shared/livereduce/tmp/can.name", "r") as f:
    can = f.readline().strip()

simpleapi.AlignAndFocusPowderFromFiles(Filename=can,
                                       OutputWorkspace="can_af",
                                       **af_config)
simpleapi.SaveNexus(InputWorkspace="can_af",
                    Filename=f"/SNS/PG3/shared/livereduce/tmp/can_{can}.nxs")

align_focus_van.py

0 → 100644
+43 −0
Original line number Diff line number Diff line
from mantid import simpleapi
import json
import os

# -----> Config: Conda environment to use for the reduction
central_config = "/SNS/PG3/shared/livereduce/live_config.json"
# <----- Config: Conda environment to use for the reduction

# -----> Config: Read in the config file
with open(central_config, "r") as f:
    input_c_config = json.load(f)

    cycle = input_c_config["Cycle"]
    sam_env = input_c_config["SampleEnvironment"]
    config_file = input_c_config["ConfigFile"][sam_env]
    config_file_f = os.path.join("/SNS/PG3/shared/livereduce/live_config_files",
                                 cycle,
                                 config_file)

    with open(config_file_f, "r") as f:
        input_config = json.load(f)

    cal_dir = input_config["CalibDirectory"]
    cal_file = os.path.join(cal_dir,
                            input_config["InputFiles"]["CalibFile"])
# <----- Config: Read in the config file

simpleapi.LoadDiffCal(InstrumentName="PG3",
                      Filename=cal_file,
                      WorkspaceName="PG3")

with open("/SNS/PG3/shared/livereduce/tmp/alignandfocuspowder.json", "r") as f:
    af_config = json.load(f)
with open("/SNS/PG3/shared/livereduce/tmp/van.name", "r") as f:
    van = f.readline().strip()

simpleapi.LoadEventNexus(Filename=van,
                         OutputWorkspace=van)
simpleapi.AlignAndFocusPowderFromFiles(Filename=van,
                                       OutputWorkspace="van_af",
                                       **af_config)
simpleapi.SaveNexus(InputWorkspace="van_af",
                    Filename=f"/SNS/PG3/shared/livereduce/tmp/van_{van}.nxs")

align_focus_vanback.py

0 → 100644
+41 −0
Original line number Diff line number Diff line
from mantid import simpleapi
import json
import os

# -----> Config: Conda environment to use for the reduction
central_config = "/SNS/PG3/shared/livereduce/live_config.json"
# <----- Config: Conda environment to use for the reduction

# -----> Config: Read in the config file
with open(central_config, "r") as f:
    input_c_config = json.load(f)

    cycle = input_c_config["Cycle"]
    sam_env = input_c_config["SampleEnvironment"]
    config_file = input_c_config["ConfigFile"][sam_env]
    config_file_f = os.path.join("/SNS/PG3/shared/livereduce/live_config_files",
                                 cycle,
                                 config_file)

    with open(config_file_f, "r") as f:
        input_config = json.load(f)

    cal_dir = input_config["CalibDirectory"]
    cal_file = os.path.join(cal_dir,
                            input_config["InputFiles"]["CalibFile"])
# <----- Config: Read in the config file

simpleapi.LoadDiffCal(InstrumentName="PG3",
                      Filename=cal_file,
                      WorkspaceName="PG3")

with open("/SNS/PG3/shared/livereduce/tmp/alignandfocuspowder.json", "r") as f:
    af_config = json.load(f)
with open("/SNS/PG3/shared/livereduce/tmp/vanback.name", "r") as f:
    vanback = f.readline().strip()

simpleapi.AlignAndFocusPowderFromFiles(Filename=vanback,
                                       OutputWorkspace="vanback_af",
                                       **af_config)
simpleapi.SaveNexus(InputWorkspace="vanback_af",
                    Filename=f"/SNS/PG3/shared/livereduce/tmp/vanback_{vanback}.nxs")
+38 −17
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@ import json
import mantid
from mantid import simpleapi
import os
import subprocess
import time

# -----> Config: Conda environment to use for the reduction
CONDA_ENV = 'mantid-qa'
@@ -66,15 +68,23 @@ processingParams = {'CalibrationWorkspace': 'PG3_cal',
                    'MaskWorkspace': 'PG3_mask',
                    'Params': [tof_bin_width_pproc],
                    'RemovePromptPulseWidth': rppw_pproc,
                    'ReductionProperties': '__pd_reduction_properties'}
                    'ReductionProperties': '__pd_reduction_properties',
                    'PreserveEvents': False,
                    'CompressTolerance': 0.}

can = getRunId(manager, 'container')
with open("/SNS/PG3/shared/livereduce/tmp/alignandfocuspowder.json", "w") as f:
    json.dump(processingParams, f, indent=4)
with open("/SNS/PG3/shared/livereduce/tmp/can.name", "w") as f:
    f.write(can)

if can is not None and not simpleapi.mtd.doesExist(can):
    mantid.logger.information("processing container '%s'" % can)
    simpleapi.AlignAndFocusPowderFromFiles(Filename=can,
                                           OutputWorkspace=can,
                                           CacheDir='/tmp',
                                           **processingParams)
    subprocess.run(["mantidpython", "/SNS/PG3/shared/livereduce/align_focus_can.py"])
    while not os.path.exists(f"/SNS/PG3/shared/livereduce/tmp/can_{can}.nxs"):
        time.sleep(1)
    simpleapi.LoadNexus(Filename=f"/SNS/PG3/shared/livereduce/tmp/can_{can}.nxs",
                        OutputWorkspace=can)
    simpleapi.ConvertUnits(InputWorkspace=can,
                           OutputWorkspace=can,
                           Target='dSpacing',
@@ -83,42 +93,50 @@ if can is not None and not simpleapi.mtd.doesExist(can):
                                 OutputWorkspace=can)

if can is not None:
    simpleapi.RebinToWorkspace(WorkspaceToRebin=can,
                               WorkspaceToMatch=output,
                               OutputWorkspace=can)
    simpleapi.Minus(LHSWorkspace=output,
                    RHSWorkspace=can,
                    OutputWorkspace=output)

van = getRunId(manager, 'vanadium')
with open("/SNS/PG3/shared/livereduce/tmp/van.name", "w") as f:
    f.write(van)
if van is not None and not simpleapi.mtd.doesExist(van):
    mantid.logger.information("processing vanadium '%s'" % van)
    simpleapi.LoadEventNexus(Filename=van,
    subprocess.run(["mantidpython", "/SNS/PG3/shared/livereduce/align_focus_van.py"])
    while not os.path.exists(f"/SNS/PG3/shared/livereduce/tmp/van_{van}.nxs"):
        time.sleep(1)
    simpleapi.LoadNexus(Filename=f"/SNS/PG3/shared/livereduce/tmp/van_{van}.nxs",
                        OutputWorkspace=van)
    simpleapi.AlignAndFocusPowderFromFiles(Filename=van,
                                           OutputWorkspace=van,
                                           CacheDir='/tmp',
                                           **processingParams)
    simpleapi.NormaliseByCurrent(InputWorkspace=van,
                                 OutputWorkspace=van)

    vanback = getRunId(manager, 'vanadium_background')
    with open("/SNS/PG3/shared/livereduce/tmp/vanback.name", "w") as f:
        f.write(vanback)
    if vanback is not None:
        mantid.logger.information("processing vanadium background '%s'" % vanback)
        simpleapi.AlignAndFocusPowderFromFiles(Filename=vanback,
                                               OutputWorkspace='__vanback',
                                               CacheDir='/tmp',
                                               **processingParams)
        subprocess.run(["mantidpython", "/SNS/PG3/shared/livereduce/align_focus_vanback.py"])
        while not os.path.exists(f"/SNS/PG3/shared/livereduce/tmp/vanback_{vanback}.nxs"):
            time.sleep(1)
        simpleapi.LoadNexus(Filename=f"/SNS/PG3/shared/livereduce/tmp/vanback_{vanback}.nxs",
                            OutputWorkspace="__vanback")
        vanback = '__vanback'
        simpleapi.NormaliseByCurrent(InputWorkspace=vanback,
                                     OutputWorkspace=vanback)

        mantid.logger.information("subtracting vanadium background")
        simpleapi.RebinToWorkspace(WorkspaceToRebin=vanback,
                                   WorkspaceToMatch=van,
                                   OutputWorkspace=vanback)
        simpleapi.Minus(LHSWorkspace=van,
                        RHSWorkspace=vanback,
                        OutputWorkspace=van,
                        ClearRHSWorkspace=True)

        simpleapi.DeleteWorkspace(Workspace=vanback)
        simpleapi.CompressEvents(InputWorkspace=van,
                                 OutputWorkspace=van)

    simpleapi.ConvertUnits(InputWorkspace=van,
                           OutputWorkspace=van,
@@ -132,6 +150,9 @@ if van is not None and not simpleapi.mtd.doesExist(van):
    smooth(van)

if van is not None:
    simpleapi.RebinToWorkspace(WorkspaceToRebin=van,
                               WorkspaceToMatch=output,
                               OutputWorkspace=van)
    simpleapi.Divide(LHSWorkspace=output,
                     RHSWorkspace=van,
                     OutputWorkspace=output)
Loading