diff --git a/doc/changelog.rst b/doc/changelog.rst index 859725b55a9b9c00ed0e543fc290093183cac879..0063f90e5dfb701d98cdf877060bf852443a026f 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -13,6 +13,7 @@ unreleased - update documentation on knife-edge scan and fluence calcuation :mr:`276`, :mr:`278` - update scannerY mnemonics :mr:`281` + - move loading logic to mnemonics :mr:`283` - **New Features** diff --git a/src/toolbox_scs/constants.py b/src/toolbox_scs/constants.py index 6c041d3d154a5fd817113de8be4e44bb8f63e14d..eb57f0c6f1aecfec1755baf623f56272a7a0a65d 100644 --- a/src/toolbox_scs/constants.py +++ b/src/toolbox_scs/constants.py @@ -47,23 +47,30 @@ mnemonics = { # Bunch Arrival Monitors "BAM414": ({'source': 'SCS_ILH_LAS/DOOCS/BAM_414_B2:output', 'key': 'data.absoluteTD', - 'dim': ['BAMbunchId']}, + 'dim': ['BAMbunchId'], + 'extract': 'BAM'}, {'source': 'SCS_ILH_LAS/DOOCS/BAM_414_B2:output', 'key': 'data.lowChargeArrivalTime', - 'dim': ['BAMbunchId']},), + 'dim': ['BAMbunchId'], + 'extract': 'BAM'},), "BAM1932M": ({'source': 'SCS_ILH_LAS/DOOCS/BAM_1932M_TL:output', 'key': 'data.absoluteTD', - 'dim': ['BAMbunchId']}, + 'dim': ['BAMbunchId'], + 'extract': 'BAM'}, {'source': 'SCS_ILH_LAS/DOOCS/BAM_1932M_TL:output', 'key': 'data.lowChargeArrivalTime', - 'dim': ['BAMbunchId']},), + 'dim': ['BAMbunchId'], + 'extract': 'BAM'},), "BAM1932S": ({'source': 'SCS_ILH_LAS/DOOCS/BAM_1932S_TL:output', 'key': 'data.absoluteTD', - 'dim': ['BAMbunchId']}, + 'dim': ['BAMbunchId'], + 'extract': 'BAM'}, {'source': 'SCS_ILH_LAS/DOOCS/BAM_1932S_TL:output', 'key': 'data.lowChargeArrivalTime', - 'dim': ['BAMbunchId']},), + 'dim': ['BAMbunchId'], + 'extract': 'BAM'},), + # SA3 "nrj": ({'source': 'SA3_XTD10_MONO/MDL/PHOTON_ENERGY', 'key': 'actualEnergy.value', @@ -80,6 +87,9 @@ mnemonics = { "tpi": ({'source': 'SCS_XTD10_TPI/DCTRL/SHUTTER', 'key': 'operationModePLC.value', 'dim': None},), + "TPI_STATE": ({'source': 'SCS_XTD10_TPI/DCTRL/SHUTTER', + 'key': 'hardwareStatusBitField.value', + 'dim': None},), "VSLIT": ({'source': 'SA3_XTD10_VSLIT/MDL/BLADE', 'key': 'actualGap.value', 'dim': None},), @@ -228,22 +238,28 @@ mnemonics = { # ADC "XTD10_XGM": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output', 'key': 'data.intensityTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "XTD10_XGM_sigma": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output', 'key': 'data.intensitySigmaTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "XTD10_SA3": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa3TD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "XTD10_SA3_sigma": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa3SigmaTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "XTD10_SA1": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa1TD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "XTD10_SA1_sigma": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa1SigmaTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), # low pass averaged ADC "XTD10_slowTrain": ({'source': 'SA3_XTD10_XGM/XGM/DOOCS', 'key': 'controlData.slowTrain.value', @@ -269,22 +285,28 @@ mnemonics = { # ADC "SCS_XGM": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output', 'key': 'data.intensityTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "SCS_XGM_sigma": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output', 'key': 'data.intensitySigmaTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "SCS_SA1": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa1TD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "SCS_SA1_sigma": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa1SigmaTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "SCS_SA3": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa3TD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), "SCS_SA3_sigma": ({'source': 'SCS_BLU_XGM/XGM/DOOCS:output', 'key': 'data.intensitySa3SigmaTD', - 'dim': ['XGMbunchId']},), + 'dim': ['XGMbunchId'], + 'extract': 'XGM'},), # low pass averaged ADC "SCS_slowTrain": ({'source': 'SCS_BLU_XGM/XGM/DOOCS', 'key': 'controlData.slowTrain.value', @@ -379,6 +401,9 @@ mnemonics = { "PP800_FocusLens": ({'source': 'SCS_ILH_LAS/MOTOR/LT_SPARE1', 'key': 'actualPosition.value', 'dim': None},), + "PP800_HWP_POLARIZATION": ({'source': 'SCS_CDIFFT_FDM/MOTOR/FOCUS_1', + 'key': 'actualPosition.value', + 'dim': None},), "LIN_FocusLens": ({'source': 'SCS_CDIFFT_FDM/MOTOR/FOCUS_2', 'key': 'actualPosition.value', 'dim': None},), @@ -526,6 +551,12 @@ mnemonics = { "scannerY_enc": ({'source': 'SCS_CDIFFT_SAM/ENC/SCANNERY', 'key': 'value.value', 'dim': None},), + "sampleH": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE', + 'key': 'actualH.value', + 'dim': None},), + "sampleK": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE', + 'key': 'actualK.value', + 'dim': None},), "FFT_SAM_Z": ({'source': 'SCS_CDIFFT_MOV/MOTOR/SAM_Z', 'key': 'actualPosition.value', 'dim': None},), @@ -697,6 +728,12 @@ mnemonics = { "MTE3": ({'source': 'SCS_CDIDET_MTE3/CAM/CAMERA:daqOutput', 'key': 'data.image.pixels', 'dim': ['x', 'y']},), + "GRID_H": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE', + 'key': 'actualH.value', + 'dim': None},), + "GRID_K": ({'source': 'SCS_CDIFFT_SAM/MDL/GRIDSAMPLE', + 'key': 'actualK.value', + 'dim': None},), # Andor Newton CCD camera "newton": ({'source': 'SCS_EXP_NEWTON/CAM/CAMERA:daqOutput', @@ -742,25 +779,29 @@ mnemonics = { 'dim': ['apdId']},), "MCP1raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network', 'key': 'digitizers.channel_1_D.raw.samples', - 'dim': ['samplesId']},), + 'dim': ['samplesId'], + 'extract': 'peaks'},), "MCP2apd": ({'source': 'SCS_UTC1_ADQ/ADC/1:network', 'key': 'digitizers.channel_1_C.apd.pulseIntegral', 'dim': ['apdId']},), "MCP2raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network', 'key': 'digitizers.channel_1_C.raw.samples', - 'dim': ['samplesId']},), + 'dim': ['samplesId'], + 'extract': 'peaks'},), "MCP3apd": ({'source': 'SCS_UTC1_ADQ/ADC/1:network', 'key': 'digitizers.channel_1_B.apd.pulseIntegral', 'dim': ['apdId']},), "MCP3raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network', 'key': 'digitizers.channel_1_B.raw.samples', - 'dim': ['samplesId']},), + 'dim': ['samplesId'], + 'extract': 'peaks'},), "MCP4apd": ({'source': 'SCS_UTC1_ADQ/ADC/1:network', 'key': 'digitizers.channel_1_A.apd.pulseIntegral', 'dim': ['apdId']},), "MCP4raw": ({'source': 'SCS_UTC1_ADQ/ADC/1:network', 'key': 'digitizers.channel_1_A.raw.samples', - 'dim': ['samplesId']},), + 'dim': ['samplesId'], + 'extract': 'peaks'},), # FastADC "FastADC0peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_0.output', @@ -768,61 +809,71 @@ mnemonics = { 'dim': ['peakId']},), "FastADC0raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_0.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC1peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_1.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC1raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_1.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC2peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_2.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_2.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC3peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_3.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC3raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_3.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC4peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_4.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC4raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_4.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC5peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_5.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC5raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_5.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC6peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_6.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC6raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_6.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC7peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_7.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC7raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_7.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC8peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_8.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC8raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_8.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), "FastADC9peaks": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_9.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC9raw": ({'source': 'SCS_UTC1_MCP/ADC/1:channel_9.output', 'key': 'data.rawData', - 'dim': ['fadc_samplesId']},), + 'dim': ['fadc_samplesId'], + 'extract': 'peaks'},), # FastADC 2 "FastADC2_0peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_0.output', @@ -830,61 +881,95 @@ mnemonics = { 'dim': ['peakId']},), "FastADC2_0raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_0.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_1peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_1.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_1raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_1.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_2peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_2.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_2raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_2.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_3peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_3.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_3raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_3.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_4peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_4.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_4raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_4.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_5peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_5.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_5raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_5.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_6peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_6.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_6raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_6.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_7peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_7.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_7raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_7.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_8peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_8.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_8raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_8.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), "FastADC2_9peaks": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_9.output', 'key': 'data.peaks', 'dim': ['peakId']},), "FastADC2_9raw": ({'source': 'SCS_UTC2_FADC/ADC/1:channel_9.output', 'key': 'data.rawData', - 'dim': ['fadc2_samplesId']},), + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), + "FFT_PD2raw": ({'source': 'SCS_FFT_DIAG/ADC/PD2:output', + 'key': 'data.rawData', + 'dim': ['fftpd2_samplesId'], + 'extract': 'peaks'},), + "FFT_MCPraw": ({'source': 'SCS_FFT_MCP/ADC/MCP:output', + 'key': 'data.rawData', + 'dim': ['fftmcp_samplesId'], + 'extract': 'peaks'},), + "FFT_REFLraw": ({'source': 'SCS_FFT_REFL/ADC/DIODE_UP:output', + 'key': 'data.rawData', + 'dim': ['fftrefl_samplesId'], + 'extract': 'peaks'},), + "I0_ILHraw": ({'source': 'SCS_ILH_LAS/ADC/I0_ILH:output', + 'key': 'data.rawData', + 'dim': ['i0ilh_samplesId'], + 'extract': 'peaks'},), + "I0_LINraw": ({'source': 'SCS_LIN_LAS/ADC/I0:output', + 'key': 'data.rawData', + 'dim': ['i0lin_samplesId'], + 'extract': 'peaks'},), + "REFLECTOMETERraw": ({'source': 'SCS_LIN_LAS/ADC/REFLECTOMETER:output', + 'key': 'data.rawData', + 'dim': ['linrefl_samplesId'], + 'extract': 'peaks'},), # KARABACON "KARABACON": ({'source': 'SCS_DAQ_SCAN/MDL/KARABACON', diff --git a/src/toolbox_scs/detectors/digitizers.py b/src/toolbox_scs/detectors/digitizers.py index 29a98d97312c791d3d62ee3ec50fb32855d68b76..d69efd42d7ff39b0f740ca057f25489cc31cfbf0 100644 --- a/src/toolbox_scs/detectors/digitizers.py +++ b/src/toolbox_scs/detectors/digitizers.py @@ -240,9 +240,10 @@ def get_peaks(run, arr = run.get_array(source, key) if isinstance(data, str): log.debug(f'Loading array from mnemonic {data}') - arr = run.get_array(*run_mnemonics[data].values()) - source = run_mnemonics[data]['source'] - key = run_mnemonics[data]['key'] + m = run_mnemonics[data] + source = m['source'] + key = m['key'] + arr = run.get_array(source, key, m['dim']) if arr is None: log.debug('Using array provided in data argument.') if source is None or key is None: @@ -257,7 +258,8 @@ def get_peaks(run, extra_dims=['pulse_slot']) pattern = bunchPattern['pattern'] if 'bunchPatternTable' in run_mnemonics: - bpt = run.get_array(*run_mnemonics['bunchPatternTable'].values()) + m = run_mnemonics['bunchPatternTable'] + bpt = run.get_array(m['source'], m['key'], m['dim']) pattern = bunchPattern else: pattern = bunchPattern @@ -397,7 +399,8 @@ def get_dig_avg_trace(run, mnemonic, ntrains=None): total_tid = len(run.train_ids) stride = int(np.max([1, np.floor(total_tid/ntrains)])) sel = run.select_trains(np.s_[0:None:stride]) - raw_trace = sel.get_array(*run_mnemonics[mnemonic].values()) + m =run_mnemonics[mnemonic] + raw_trace = sel.get_array(m['source'], m['key'], m['dim']) raw_trace = raw_trace.mean(dim='trainId') return raw_trace @@ -729,7 +732,8 @@ def check_peak_params(run, mnemonic, raw_trace=None, ntrains=200, params=None, if 'bunchPatternTable' in run_mnemonics and bunchPattern != 'None': sel = run.select_trains(np.s_[:ntrains]) bp_params = {} - bpt = sel.get_array(*run_mnemonics['bunchPatternTable'].values()) + m = run_mnemonics['bunchPatternTable'] + bpt = sel.get_array(m['source'], m['key'], m['dim']) mask = is_pulse_at(bpt, bunchPattern) pid = np.sort(np.unique(np.where(mask)[1])) bp_params['npulses'] = len(pid) @@ -830,6 +834,8 @@ def digitizer_type(mnemonic=None, mnemo_dict=None, source=None): source = mnemo_dict[mnemonic]['source'] if ':channel' in source: return 'FastADC' + if ':output' in source: + return 'FastADC' if ':network' in source: return 'ADQ412' dic = {'XTD10_MCP': 'FastADC', @@ -1010,10 +1016,12 @@ def get_digitizer_peaks(run, mnemonics=None, merge_with=None, bpt = merge_with['bunchPatternTable'] log.debug('Using bpt from merge_with dataset.') elif 'bunchPatternTable' in run_mnemonics: - bpt = run.get_array(*run_mnemonics['bunchPatternTable'].values()) + m = run_mnemonics['bunchPatternTable'] + bpt = run.get_array(m['source'], m['key'], m['dim']) log.debug('Loaded bpt from DataCollection.') elif 'bunchPatternTable_SA3' in run_mnemonics: - bpt = run.get_array(*run_mnemonics['bunchPatternTable_SA3'].values()) + m = run_mnemonics['bunchPatternTable_SA3'] + bpt = run.get_array(m['source'], m['key'], m['dim']) log.debug('Loaded bpt from DataCollection.') else: bpt = None diff --git a/src/toolbox_scs/load.py b/src/toolbox_scs/load.py index f7608ccc7e644a66eecad9846e22229f00be0a7b..c42b083897d5b3d36b87c3c31f12c90a4bc5ac36 100644 --- a/src/toolbox_scs/load.py +++ b/src/toolbox_scs/load.py @@ -44,14 +44,10 @@ def load(proposalNB=None, runNB=None, validate=False, subset=None, rois={}, - extract_adq412=True, - extract_fadc=True, - extract_fadc2=True, + extract_digitizers=True, extract_xgm=True, extract_bam=True, - adq412_bp='sase3', - fadc_bp='scs_ppl', - fadc2_bp='sase3', + bunchPattern='sase3', extract_tim=None, extract_laser=None, tim_bp=None, @@ -92,17 +88,9 @@ def load(proposalNB=None, runNB=None, 'dim': ['ref_x', 'ref_y']}, 'sam': {'roi':by_index[1050:1210, 535:720], 'dim': ['sam_x', 'sam_y']}}} - extract_adq412: bool - If True, extracts the peaks from ADQ412 variables (e.g. 'MCP2raw', - 'MCP3apd') and aligns the pulse Id with the sase3 bunch pattern. - extract_fadc: bool - If True, extracts the peaks from FastADC variables (e.g. 'FastADC5raw', - 'FastADC3peaks') and aligns the pulse Id according to the fadc_bp bunch - pattern. - extract_fadc2: bool - If True, extracts the peaks from FastADC2 variables (e.g. - 'FastADC2_5raw', 'FastADC2_3peaks') and aligns the pulse Id according - to the fadc2_bp bunch pattern. + extract_digitizers: bool + If True, extracts the peaks from digitizer variables and aligns the + pulse Id according to the fadc_bp bunch pattern. extract_xgm: bool If True, extracts the values from XGM variables (e.g. 'SCS_SA3', 'XTD10_XGM') and aligns the pulse Id with the sase1 / sase3 bunch @@ -110,15 +98,13 @@ def load(proposalNB=None, runNB=None, extract_bam: bool If True, extracts the values from BAM variables (e.g. 'BAM1932M') and aligns the pulse Id with the sase3 bunch pattern. - adq412_bp: str - bunch pattern used to extract the ADQ412 digitizer pulses. - Ignored if extract_adq412=False. - fadc_bp: str + bunchpattern: str bunch pattern used to extract the Fast ADC pulses. - Ignored if extract_fadc=False. - fadc2_bp: str - bunch pattern used to extract the Fast ADC 2 pulses. - Ignored if extract_fadc2=False. + A string or a dict as in:: + + {'FFT_PD2': 'sase3', 'ILH_I0': 'scs_ppl'} + + Ignored if extract_digitizers=False. DEPRECATED ARGUMENTS: extract_tim: DEPRECATED. Use extract_adq412 instead. @@ -185,9 +171,30 @@ def load(proposalNB=None, runNB=None, log.warning(f'Source {v["source"]} not found in run. Skipping!') print(f'Source {v["source"]} not found in run. Skipping!') continue - if k not in rois: + if k == 'MTE3': + arr = run.get_array(v['source'], v['key'], + extra_dims=v['dim'], name=k) + tpi = run.get_array('SCS_XTD10_TPI/DCTRL/SHUTTER', + 'hardwareStatusBitField.value', name=k) + tpi_open = iter(tpi.trainId[tpi & (1 << 12) > 0]) + + mte3_tids = [] + last = 0 + current = next(tpi_open, None) + if current is None: + data_arrays.append(arr) + else: + for tid in arr.trainId: + while current < tid: + last = current + current = next(tpi_open, tid) + mte3_tids.append(last) + data_arrays.append( + arr.assign_coords(trainId=np.array(mte3_tids, dtype='u8'))) + elif k not in rois: # no ROIs selection, we read everything - arr = run.get_array(*v.values(), name=k) + arr = run.get_array(v['source'], v['key'], + extra_dims=v['dim'], name=k) if len(arr) == 0: log.warning(f'Empty array for {f}: {v["source"]}, {v["key"]}. ' 'Skipping!') @@ -222,42 +229,28 @@ def load(proposalNB=None, runNB=None, data = xr.merge(data_arrays, join='inner') data.attrs['runFolder'] = runFolder - # backward compatibility with old-defined variables: - if extract_tim is not None: - extract_adq412 = extract_tim - if extract_laser is not None: - extract_fadc = extract_laser - if tim_bp is not None: - adq412_bp = tim_bp - if laser_bp is not None: - fadc_bp = laser_bp - - adq412 = [k for k in run_mnemonics if 'MCP' in k and k in data] - if extract_adq412 and len(adq412) > 0: - data = tbdet.get_digitizer_peaks(run, mnemonics=adq412, - merge_with=data, - bunchPattern=adq412_bp) - - fadc = [k for k in run_mnemonics if ('FastADC' in k) - and ('FastADC2_' not in k) and (k in data)] - if extract_fadc and len(fadc) > 0: - data = tbdet.get_digitizer_peaks(run, mnemonics=fadc, merge_with=data, - bunchPattern=fadc_bp) - fadc2 = [k for k in run_mnemonics if 'FastADC2_' in k and k in data] - if extract_fadc2 and len(fadc2) > 0: - data = tbdet.get_digitizer_peaks(run, mnemonics=fadc2, merge_with=data, - bunchPattern=fadc2_bp) - - xgm = ['XTD10_XGM', 'XTD10_XGM_sigma', 'XTD10_SA3', 'XTD10_SA3_sigma', - 'XTD10_SA1', 'XTD10_SA1_sigma', 'SCS_XGM', 'SCS_XGM_sigma', - 'SCS_SA1', 'SCS_SA1_sigma', 'SCS_SA3', 'SCS_SA3_sigma'] - xgm = [k for k in xgm if k in data] - if extract_xgm and len(xgm) > 0: - data = tbdet.get_xgm(run, mnemonics=xgm, merge_with=data) - - bam = [k for k in run_mnemonics if 'BAM' in k and k in data] - if extract_bam and len(bam) > 0: - data = tbdet.get_bam(run, mnemonics=bam, merge_with=data) + if extract_digitizers: + bp = bunchPattern + for k, v in run_mnemonics.items(): + if k not in data or v.get('extract') != 'peaks': + continue + if isinstance(bunchPattern, dict): + bp = bunchPattern.get(k) + if bp is None: + continue + data = tbdet.get_digitizer_peaks( + run, mnemonics=k, merge_with=data, bunchPattern=bp) + if extract_xgm: + for k, v in run_mnemonics.items(): + if k not in data or v.get('extract') != 'XGM': + continue + data = tbdet.get_xgm(run, mnemonics=k, merge_with=data) + + if extract_bam: + for k, v in run_mnemonics.items(): + if k not in data or v.get('extract') != 'BAM': + continue + data = tbdet.get_bam(run, mnemonics=k, merge_with=data) return run, data