import numpy as np import json, os, glob, yaml, time import argparse, pickle, h5py from pathlib import Path from sfdata import SFDataFile, SFDataFiles from alvra_tools.load_data import * from alvra_tools.channels import * from alvra_tools.utils import * #EventChan = 'SAR-CVME-TIFALL4:EvtSet' Detector = 'JF06T32V07' chIzero110 = 'SAROP11-PBPS110:INTENSITY' chIzero122 = 'SAROP11-PBPS122:INTENSITY' chIzeroAPD = 'SARES11-GES1:PR1_CH1_VAL_GET' #roi = [900, 1300, 850, 1250] roi = [800, 1400, 750, 1350] def get_acq_from_pth(path): import re return re.search(r"acq(\d+)", path).group(1).zfill(4) parser = argparse.ArgumentParser() parser.add_argument("--input", "-i", required=True) args = parser.parse_args() filename = Path(args.input) output_file = Path(str(filename).replace("/raw/", "/res/processed/").replace(".h5",".corr_PROCESSED.h5") ) output_file.parent.mkdir(parents=True, exist_ok=True, mode=0o775) acq = get_acq_from_pth(args.input) acq_meta_pth = Path(str(filename).replace("/data/ac", "/meta/ac")).parent acq_info_pth = acq_meta_pth.joinpath(f"acq{acq}.json") with open(acq_info_pth, "r") as f: acq_parameters = json.load(f) rbk_value = acq_parameters.get("scan_info", {}).get("scan_readbacks", 0) #xlabel = acq_parameters.get("scan_info", {}).get("name", None) #units = acq_parameters.get("scan_info", {}).get("units", None) file2load = args.input.replace('BSDATA', "*") #print ('sleeping 30 seconds, ROI = {}'.format(roi)) #time.sleep(30) #file2load = args.input.replace('JF06T32V07', "*") with SFDataFiles(file2load) as step: subset = step[Detector, chIzero110, chIzero122, chIzeroAPD] subset.drop_missing() JF = crop_roi(subset[Detector].data, roi) JF_flat = JF.reshape(JF.shape[0], -1) Izero110 = subset[chIzero110].data Izero122 = subset[chIzero122].data IzeroAPD = subset[chIzeroAPD].data before = len(Izero110) q_low = np.percentile(Izero110, 5) q_high = np.percentile(Izero110, 95) outliers = (Izero110 < q_low) | (Izero110 > q_high) JF_flat = JF_flat[~outliers] Izero110 = Izero110[~outliers] Izero122 = Izero122[~outliers] IzeroAPD = IzeroAPD[~outliers] print ("Survived {} out of {} shots".format(len(Izero110), before)) JF_int = np.sum(JF_flat, axis=1) with h5py.File(output_file, 'w') as f: gr1 = f.create_group("data") gr1['Izero110'] = Izero110 gr1['Izero122'] = Izero122 gr1['IzeroAPD'] = IzeroAPD gr1['Int_JF'] = JF_int gr2 = f.create_group("meta") gr2["roi"] = roi