diff --git a/src/toolbox_scs/constants.py b/src/toolbox_scs/constants.py index 6c041d3d154a5fd817113de8be4e44bb8f63e14d..c54d72e30033d1bd1d1eb2a83c017d8846708ab9 100644 --- a/src/toolbox_scs/constants.py +++ b/src/toolbox_scs/constants.py @@ -47,22 +47,28 @@ 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', @@ -228,22 +234,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 +281,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', @@ -742,25 +760,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 +790,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 +862,87 @@ 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': ['fadc2_samplesId'], + 'extract': 'peaks'},), + "FFT_MCPraw": ({'source': 'SCS_FFT_MCP/ADC/MCP:output', + 'key': 'data.rawData', + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), + "FFT_REFLraw": ({'source': 'SCS_FFT_REFL/ADC/DIODE_UP:output', + 'key': 'data.rawData', + 'dim': ['fadc2_samplesId'], + 'extract': 'peaks'},), + "I0_ILHraw": ({'source': 'SCS_ILH_LAS/ADC/I0_ILH:output', + 'key': 'data.rawData', + 'dim': ['fadc2_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..2fb86b511c1dd0cef161b5d578566e650c12a79a 100644 --- a/src/toolbox_scs/detectors/digitizers.py +++ b/src/toolbox_scs/detectors/digitizers.py @@ -830,6 +830,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', diff --git a/src/toolbox_scs/load.py b/src/toolbox_scs/load.py index f7608ccc7e644a66eecad9846e22229f00be0a7b..a038c025a619de85de53830d43aab567fc89d8bf 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. @@ -187,7 +173,8 @@ def load(proposalNB=None, runNB=None, continue if 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 +209,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