Commit 53987619 authored by Zhang, Yuanpeng's avatar Zhang, Yuanpeng
Browse files

updating to the 2024 cycle

parent 298c66d1
Loading
Loading
Loading
Loading
+192 −0
Original line number Diff line number Diff line
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'
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)
# <----- Config: Read in the config file

# -----> Config: Live post processing parameters
tof_bin_width_pproc = input_config["Params"]["PostProc"]["TOFBinWidthPProc"]
rppw_pproc = input_config["Params"]["PostProc"]["RemovePromptPulseWidth"]
strip_v_pp_tol = input_config["Params"]["PostProc"]["StripVPeaksPosTol"]
strip_v_bt = input_config["Params"]["PostProc"]["StripVPeaksBkgType"]
# <----- Config: Live post processing parameters

simpleapi.CompressEvents(InputWorkspace=input, OutputWorkspace=output)
# simpleapi.LoadNexus(Filename="/SNS/PG3/shared/livereduce/tmp/result.nxs",
#                     OutputWorkspace=output)
if simpleapi.mtd[str(input)].run().getProtonCharge() > 0.:
    simpleapi.NormaliseByCurrent(InputWorkspace=input, OutputWorkspace=output)
# if simpleapi.mtd[output].run().getProtonCharge() > 0.:
#     simpleapi.NormaliseByCurrent(InputWorkspace=output, OutputWorkspace=output)

simpleapi.SaveNexus(InputWorkspace=output,
                    Filename="/SNS/PG3/shared/livereduce/tmp/output.nxs")
simpleapi.LoadNexus(Filename=f"/SNS/PG3/shared/livereduce/tmp/output.nxs",
                    OutputWorkspace="output_reloaded")

# simpleapi.PDDetermineCharacterizations(InputWorkspace=output,
#                                        Characterizations='characterizations',
#                                        ReductionProperties='__pd_reduction_properties')
simpleapi.PDDetermineCharacterizations(InputWorkspace="output_reloaded",
                                       Characterizations='characterizations',
                                       ReductionProperties='__pd_reduction_properties')
manager = mantid.PropertyManagerDataService.retrieve('__pd_reduction_properties')
mantid.logger.information("In post processing ...")


def getRunId(manager, key):
    value = manager[key].value[0]
    if value == 0:
        return None
    else:
        return 'PG3_'+str(value)


def smooth(wksp):
    simpleapi.ConvertUnits(InputWorkspace=wksp, OutputWorkspace=wksp,
                           Target='TOF', EMode='Elastic')
    simpleapi.FFTSmooth(InputWorkspace=wksp,
                        OutputWorkspace=wksp,
                        Filter="Butterworth",
                        Params='20,2',
                        IgnoreXBins=True,
                        AllSpectra=True)
    simpleapi.ConvertUnits(InputWorkspace=wksp, OutputWorkspace=wksp,
                           Target='dSpacing', EMode='Elastic')


processingParams = {'CalibrationWorkspace': 'PG3_cal',
                    'GroupingWorkspace': 'PG3_group',
                    'MaskWorkspace': 'PG3_mask',
                    'Params': [tof_bin_width_pproc],
                    'RemovePromptPulseWidth': rppw_pproc,
                    '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)

if can is not None and not simpleapi.mtd.doesExist(can):
    with open("/SNS/PG3/shared/livereduce/tmp/can.name", "w") as f:
        f.write(can)
    mantid.logger.information("processing container '%s'" % can)
    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',
                           EMode='Elastic')
    simpleapi.NormaliseByCurrent(InputWorkspace=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')
if van is not None and not simpleapi.mtd.doesExist(van):
    with open("/SNS/PG3/shared/livereduce/tmp/van.name", "w") as f:
        f.write(van)
    mantid.logger.information("processing vanadium '%s'" % 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.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)
        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.ConvertUnits(InputWorkspace=van,
                           OutputWorkspace=van,
                           Target='dSpacing',
                           EMode='Elastic')

    simpleapi.StripVanadiumPeaks(InputWorkspace=van,
                                 OutputWorkspace=van,
                                 BackgroundType=strip_v_bt,
                                 PeakPositionTolerance=strip_v_pp_tol)
    smooth(van)

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

div = simpleapi.SavePlot1D(InputWorkspace=output,
                           OutputType='plotly',
                           XLabel='d-spacing (A)')
runNumber = simpleapi.mtd[output].getRunNumber()
if runNumber > 0:
    mantid.logger.information('Posting plot of PG3_%s' % runNumber)
    try:
        from postprocessing.publish_plot import publish_plot
    except ImportError:
        from finddata import publish_plot

    request = publish_plot('PG3', runNumber, files={'file': div})

    mantid.logger.information("post returned %d" % request.status_code)
    mantid.logger.information("resulting document:")
    mantid.logger.information(str(request.text))
else:
    s_part1 = "Not posting becuase run number is "
    s_part2 = "not greater than zero: %s" % runNumber
    mantid.logger.information(s_part1 + s_part2)
+85 −0
Original line number Diff line number Diff line
import mantid
from mantid import simpleapi
import os
import json

# -----> Config: Conda environment to use for the reduction
CONDA_ENV = 'mantid-qa'
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)
# <----- Config: Read in the config file

# -----> Config: Calib and char files
must_keys = ["CalibDirectory", "InputFiles"]
infiles_must_keys = ["CalibFile", "CharBackgrounds", "CharInPlane"]
for key in must_keys:
    if key not in input_config.keys():
        raise Exception(f"No {key} found in {config_file_f}.")
for key in infiles_must_keys:
    if key not in input_config["InputFiles"].keys():
        raise Exception(f"No {key} found under 'InputFiles' in {config_file_f}.")

cal_dir = input_config["CalibDirectory"]
cal_file = os.path.join(cal_dir,
                        input_config["InputFiles"]["CalibFile"])
char_backgrounds = os.path.join(cal_dir,
                                input_config["InputFiles"]["CharBackgrounds"])
char_inplane = os.path.join(cal_dir,
                            input_config["InputFiles"]["CharInPlane"])
# <----- Config: Calib and char files

# -----> Config: Live reduction parameters
tof_bin_width_init = input_config["Params"]["Proc"]["TOFBinWidthInit"]
tof_bin_width_proc = input_config["Params"]["Proc"]["TOFBinWidthProc"]
rppw = input_config["Params"]["Proc"]["RemovePromptPulseWidth"]
# <----- Config: Live reduction parameters

mantid.logger.information('Number events = %d' % input.getNumberEvents())

simpleapi.PDLoadCharacterizations(Filename=char_backgrounds + ',' + char_inplane,
                                  OutputWorkspace='characterizations')
simpleapi.SaveNexus(InputWorkspace=input,
                    Filename="/SNS/PG3/shared/livereduce/tmp/input.nxs")
simpleapi.LoadNexus(Filename=f"/SNS/PG3/shared/livereduce/tmp/input.nxs",
                    OutputWorkspace="input_reloaded")
simpleapi.PDDetermineCharacterizations(InputWorkspace="input_reloaded",
                                       Characterizations='characterizations',
                                       ReductionProperties='__pd_reduction_properties')
# simpleapi.PDDetermineCharacterizations(InputWorkspace=input,
#                                        Characterizations='characterizations',
#                                        ReductionProperties='__pd_reduction_properties')
manager = mantid.PropertyManagerDataService.retrieve('__pd_reduction_properties')

simpleapi.Rebin(InputWorkspace=input,
                OutputWorkspace=input,
                Params=(manager['tof_min'].value,
                        tof_bin_width_init,
                        manager['tof_max'].value))

if True:
    simpleapi.AlignAndFocusPowder(InputWorkspace=input,
                                  OutputWorkspace=output,
                                  CalFilename=cal_file,
                                  Params=[tof_bin_width_proc],
                                  RemovePromptPulseWidth=rppw,
                                  ReductionProperties='__pd_reduction_properties')
    simpleapi.ConvertUnits(InputWorkspace=output, OutputWorkspace=output,
                           Target='dSpacing', EMode='Elastic')
    # simpleapi.Rebin(InputWorkspace=output, OutputWorkspace=output,
    #                 Params="0, 0.0001, 10.0")
    # simpleapi.SaveNexus(InputWorkspace=output,
    #                     Filename="/SNS/PG3/shared/livereduce/tmp/result.nxs")
+5 −3
Original line number Diff line number Diff line
{
    "Cycle": "2023-1_11A_CAL",
    "Cycle": "2024-2_11A_CAL",
    "SampleEnvironment": "PAC",
    "OverwriteUserJsonFile": "N",
         "ConfigFile": {
        "PAC": "PAC_default.json",
        "HTJANIS": "HTJANIS_default.json",
@@ -11,6 +12,7 @@
        "JANIS_GAS_noscale":"JANIS_GAS_noscale.json",
        "GASJANIS":"GASJANIS_Default.json",
        "JANIS_GAS_intensifier_no_scale":"LTJANIS_intensifier.json",
        "LTJANIS_GAS_Dec":"LTJANIS_GAS_Dec_2022.json"
        "LTJANIS_GAS_Dec":"LTJANIS_GAS_Dec_2022.json",
          "MAG": "MAG_default.json"
    }
}
+22 −0
Original line number Diff line number Diff line
{
    "CalibDirectory": "/SNS/PG3/shared/CALIBRATION/2023-1_11A_CAL/",
    "InputFiles": {
        "CalibFile": "PG3_Mag08_d56237_2023_08_11.h5",
        "CharBackgrounds": "PG3_char_2023_8_11-HighRes_Mag.txt",
        "CharInPlane": "PG3_char_2023_8_11_MAG_limit.txt",
        "GroupInPlane": "grouping/PG3_Grouping-IP.xml"
    },
    "Params": {
        "Proc": {
            "TOFBinWidthInit": 100.0,
            "TOFBinWidthProc": -0.0008,
            "RemovePromptPulseWidth": 0
        },
        "PostProc": {
            "TOFBinWidthPProc": -0.0008,
            "RemovePromptPulseWidth": 0,
            "StripVPeaksPosTol": 0.05,
            "StripVPeaksBkgType": "Quadratic"
        }
    }
}
+22 −0
Original line number Diff line number Diff line
{
    "CalibDirectory": "/SNS/PG3/shared/CALIBRATION/2023-1_11A_CAL/",
    "InputFiles": {
        "CalibFile": "PG3_Mag08_d56237_2023_08_11.h5",
        "CharBackgrounds": "PG3_char_2023_8_11-HighRes_Mag.txt",
        "CharInPlane": "PG3_char_2023_8_11_MAG_limit.txt",
        "GroupInPlane": "grouping/PG3_Grouping-IP.xml"
    },
    "Params": {
        "Proc": {
            "TOFBinWidthInit": 100.0,
            "TOFBinWidthProc": -0.0008,
            "RemovePromptPulseWidth": 0
        },
        "PostProc": {
            "TOFBinWidthPProc": -0.0008,
            "RemovePromptPulseWidth": 0,
            "StripVPeaksPosTol": 0.05,
            "StripVPeaksBkgType": "Quadratic"
        }
    }
}
Loading