Skip to content
Snippets Groups Projects
Commit 23a1b9fa authored by Martin Teichmann's avatar Martin Teichmann
Browse files

Adds additional mnemonics and proper xarray coordinates now

parent 1656cb11
No related branches found
No related tags found
No related merge requests found
...@@ -11,47 +11,160 @@ from karabo_data import RunDirectory ...@@ -11,47 +11,160 @@ from karabo_data import RunDirectory
import xarray as xr import xarray as xr
mnemonics = { mnemonics = {
"SCS_XGM": ['SCS_BLU_XGM/XGM/DOOCS:output', 'data.intensityTD', 1], # Machine
"SCS_XGM_SLOW": ['SCS_BLU_XGM/XGM/DOOCS', 'pulseEnergy.photonFlux.value', 0], "sase3": {'source':'SCS_RR_UTC/MDL/BUNCH_DECODER',
"SA3_XGM": ['SA3_XTD10_XGM/XGM/DOOCS:output', 'data.intensityTD', 1], 'key':'sase3.pulseIds.value',
"SA3_XGM_SLOW": ['SA3_XTD10_XGM/XGM/DOOCS', 'pulseEnergy.photonFlux.value', 0], 'dim':['bunchId']},
"MCP1apd": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_D.apd.pulseIntegral', 1], "sase2": {'source':'SCS_RR_UTC/MDL/BUNCH_DECODER',
"MCP1raw": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_D.raw.samples', 1], 'key':'sase2.pulseIds.value',
"MCP2apd": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_C.apd.pulseIntegral', 1], 'dim':['bunchId']},
"MCP2raw": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_D.raw.samples', 1], "sase1": {'source':'SCS_RR_UTC/MDL/BUNCH_DECODER',
"MCP3apd": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_B.apd.pulseIntegral', 1], 'key':'sase1.pulseIds.value',
"MCP3raw": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_D.raw.samples', 1], 'dim':['bunchId']},
"MCP4apd": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_A.apd.pulseIntegral', 1], "maindump": {'source':'SCS_RR_UTC/MDL/BUNCH_DECODER',
"MCP4raw": ['SCS_UTC1_ADQ/ADC/1:network', 'digitizers.channel_1_D.raw.samples', 1], 'key':'maindump.pulseIds.value',
"nrj": ['SA3_XTD10_MONO/MDL/PHOTON_ENERGY','actualEnergy.value', 0], 'dim':['bunchId']},
"sase3": ['SCS_RR_UTC/MDL/BUNCH_DECODER','sase3.pulseIds.value', 1], "bunchpattern": {'source':'SCS_RR_UTC/TSYS/TIMESERVER',
"sase2": ['SCS_RR_UTC/MDL/BUNCH_DECODER','sase2.pulseIds.value', 1], 'key':'readBunchPatternTable.value',
"sase1": ['SCS_RR_UTC/MDL/BUNCH_DECODER','sase1.pulseIds.value', 1], 'dim':None},
"maindump": ['SCS_RR_UTC/MDL/BUNCH_DECODER','maindump.pulseIds.value', 1], "npulses_sase3": {'source':'SCS_RR_UTC/MDL/BUNCH_DECODER',
"bunchpattern": ['SCS_RR_UTC/TSYS/TIMESERVER','readBunchPatternTable.value', 0], 'key':'sase3.nPulses.value',
"npulses_sase3": ['SCS_RR_UTC/MDL/BUNCH_DECODER','sase3.nPulses.value',0], 'dim':None},
"npulses_sase1": ['SCS_RR_UTC/MDL/BUNCH_DECODER','sase1.nPulses.value',0], "npulses_sase1": {'source':'SCS_RR_UTC/MDL/BUNCH_DECODER',
"fastccd": ['SCS_CDIDET_FCCD2M/DAQ/FCCD:daqOutput','data.image.pixels', 0], 'key':'sase1.nPulses.value',
"transmission": ['SA3_XTD10_GATT/MDL/GATT_TRANSMISSION_MONITOR', 'Estimated_Tr.value', 0], 'dim':None},
"GATT_pressure": ['P_GATT', 'value.value', 0], # SA3
"scannerX": ['SCS_CDIFFT_SAM/LMOTOR/SCANNERX', 'actualPosition.value', 0], "nrj": {'source':'SA3_XTD10_MONO/MDL/PHOTON_ENERGY',
"scannerY": ['SCS_CDIFFT_SAM/MOTOR/SCANNERY', 'actualPosition.value', 0], 'key':'actualEnergy.value',
"scannerY_enc": ['SCS_CDIFFT_SAM/ENC/SCANNERY', 'value.value', 0], 'dim':None},
"magnet": ['SCS_CDIFFT_MAG/SUPPLY/CURRENT', 'actual_current.value', 0]
"M2BEND": {'source': 'SA3_XTD10_MIRR-2/MOTOR/BENDER',
'key': 'actualPosition.value',
'dim':None},
"VSLIT": {'source':'SA3_XTD10_VSLIT/MDL/BLADE',
'key':'actualGap.value',
'dim':None},
"ESLIT": {'source':'SCS_XTD10_ESLIT/MDL/MAIN',
'key':'actualGap.value',
'dim':None},
"HSLIT": {'source':'SCS_XTD10_HSLIT/MDL/BLADE',
'key':'actualGap.value',
'dim':None},
"transmission": {'source':'SA3_XTD10_GATT/MDL/GATT_TRANSMISSION_MONITOR',
'key':'Estimated_Tr.value',
'dim':None},
"GATT_pressure": {'source':'P_GATT',
'key':'value.value',
'dim':None},
# XGMs
"SA3_XGM": {'source':'SA3_XTD10_XGM/XGM/DOOCS:output',
'key':'data.intensityTD',
'dim':['XGMbunchId']},
"SA3_XGM_SLOW": {'source':'SA3_XTD10_XGM/XGM/DOOCS',
'key':'pulseEnergy.photonFlux.value',
'dim':None},
"SCS_XGM": {'source':'SCS_BLU_XGM/XGM/DOOCS:output',
'key':'data.intensityTD',
'dim':['XGMbunchId']},
"SCS_XGM_SLOW": {'source':'SCS_BLU_XGM/XGM/DOOCS',
'key':'pulseEnergy.photonFlux.value',
'dim':None},
# KBS
"HFM_CAPB": {'source':'SCS_KBS_HFM/ASENS/CAPB',
'key':'value.value',
'dim':None},
"HFM_CAPF": {'source':'SCS_KBS_HFM/ASENS/CAPF',
'key':'value.value',
'dim':None},
"HFM_CAPM": {'source':'SCS_KBS_HFM/ASENS/CAPM',
'key':'value.value',
'dim':None},
"HFM_BENDERB": {'source':'SCS_KBS_HFM/MOTOR/BENDERB',
'key':'encoderPosition.value',
'dim':None},
"HFM_BENDERF": {'source':'SCS_KBS_HFM/MOTOR/BENDERF',
'key':'encoderPosition.value',
'dim':None},
"VFM_CAPB": {'source':'SCS_KBS_VFM/ASENS/CAPB',
'key':'value.value',
'dim':None},
"VFM_CAPF": {'source':'SCS_KBS_VFM/ASENS/CAPF',
'key':'value.value',
'dim':None},
"VFM_CAPM": {'source':'SCS_KBS_VFM/ASENS/CAPM',
'key':'value.value',
'dim':None},
"VFM_BENDERB": {'source':'SCS_KBS_VFM/MOTOR/BENDERB',
'key':'encoderPosition.value',
'dim':None},
"VFM_BENDERF": {'source':'SCS_KBS_VFM/MOTOR/BENDERF',
'key':'encoderPosition.value',
'dim':None},
# FFT
"scannerX": {'source':'SCS_CDIFFT_SAM/LMOTOR/SCANNERX',
'key':'actualPosition.value',
'dim':None},
"scannerY": {'source':'SCS_CDIFFT_SAM/MOTOR/SCANNERY',
'key':'actualPosition.value',
'dim':None},
"scannerY_enc": {'source':'SCS_CDIFFT_SAM/ENC/SCANNERY',
'key':'value.value',
'dim':None},
"SAM-Z": {'source':'SCS_CDIFFT_MOV/ENC/SAM_Z',
'key':'value.value',
'dim':None},
"magnet": {'source':'SCS_CDIFFT_MAG/SUPPLY/CURRENT',
'key':'actual_current.value',
'dim':None},
# FastCCD
"fastccd": {'source':'SCS_CDIDET_FCCD2M/DAQ/FCCD:daqOutput',
'key':'data.image.pixels',
'dim':['x', 'y']},
# TIM
"MCP1apd": {'source':'SCS_UTC1_ADQ/ADC/1:network',
'key':'digitizers.channel_1_D.apd.pulseIntegral',
'dim':['apdId']},
"MCP1raw": {'source':'SCS_UTC1_ADQ/ADC/1:network',
'key':'digitizers.channel_1_D.raw.samples',
'dim':['samplesId']},
"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_D.raw.samples',
'dim':['samplesId']},
"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_D.raw.samples',
'dim':['samplesId']},
"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_D.raw.samples',
'dim': ['samplesId']}
} }
def load(fields, runNB, proposalNB, semesterNB, topic='SCS', display=False): def load(fields, runNB, proposalNB, semesterNB, topic='SCS', display=False, validate=False):
""" Load a run and extract the data. Output is record array """ Load a run and extract the data. Output is an xarray with aligned trainIds
Inputs: Inputs:
fields: list of mnemonic strings to load specific data such as "fastccd", "SCS_XGM", fields: list of mnemonic strings to load specific data such as "fastccd", "SCS_XGM",
or dictionnaries defining a custom mnemonic such as or dictionnaries defining a custom mnemonic such as
{"extra": ['SCS_CDIFFT_MAG/SUPPLY/CURRENT', 'actual_current.value', 0]} {"extra": {'SCS_CDIFFT_MAG/SUPPLY/CURRENT', 'actual_current.value', None}}
runNB: run number as integer runNB: run number as integer
proposalNB: string of the proposal number proposalNB: string of the proposal number
semesterNB: string of the semester number where the proposal data are saved semesterNB: string of the semester number where the proposal data are saved
topic: string of the topic topic: string of the topic
display: boolean, whether to show the run.info or not display: boolean, whether to show the run.info or not
validate: boolean, whether to run karabo-data-validate or not
Outputs: Outputs:
res: an xarray DataSet with aligned trainIds res: an xarray DataSet with aligned trainIds
...@@ -59,48 +172,48 @@ def load(fields, runNB, proposalNB, semesterNB, topic='SCS', display=False): ...@@ -59,48 +172,48 @@ def load(fields, runNB, proposalNB, semesterNB, topic='SCS', display=False):
runFolder = '/gpfs/exfel/exp/{}/{}/{}/raw/r{:04d}/'.format(topic, semesterNB, proposalNB, runNB) runFolder = '/gpfs/exfel/exp/{}/{}/{}/raw/r{:04d}/'.format(topic, semesterNB, proposalNB, runNB)
run = RunDirectory(runFolder) run = RunDirectory(runFolder)
get_ipython().system('karabo-data-validate ' + runFolder)
if validate:
get_ipython().system('karabo-data-validate ' + runFolder)
if display: if display:
run.info() run.info()
keys = [] keys = []
vals = [] vals = []
# always load pulse pattern infos # always load pulse pattern infos
fields += ["sase1", "sase3", "npulses_sase3", "npulses_sase1"] fields += ["sase1", "sase3", "npulses_sase3", "npulses_sase1"]
for f in fields: for f in fields:
if type(f) == dict: if type(f) == dict:
# extracting mnemomic defined on the spot # extracting mnemomic defined on the spot
for k in f.keys(): if len(f.keys()) > 1:
if display: print('Loading only one "on-the-spot" mnemonic at a time, skipping all others !')
print('Loading {}'.format(f)) k = list(f.keys())[0]
v = f[k]
if f[k][2]:
vals.append(run.get_array(f[k][0], f[k][1], extra_dims=[k+'_dim',]))
else:
vals.append(run.get_array(f[k][0], f[k][1]))
keys.append(k)
else: else:
# extracting mnemomic from the table
if f in mnemonics: if f in mnemonics:
if f in keys: v = mnemonics[f]
continue k = f
if display:
print('Loading {}'.format(f))
if mnemonics[f][0] not in run.all_sources:
print('source {} not found in run. Skipping!'.format(mnemonics[f][0]))
continue
if mnemonics[f][2]:
vals.append(run.get_array(mnemonics[f][0], mnemonics[f][1], extra_dims=[f+'_dim',]))
else:
vals.append(run.get_array(mnemonics[f][0], mnemonics[f][1]))
keys.append(f)
else: else:
print('Unknow mnemonic "{}". Skipping!'.format(f)) print('Unknow mnemonic "{}". Skipping!'.format(f))
if k in keys:
continue # already loaded, skip
if display:
print('Loading {}'.format(k))
if v['source'] not in run.all_sources:
print('Source {} not found in run. Skipping!'.format(v['source']))
continue
vals.append(run.get_array(v['source'], v['key'], extra_dims=v['dim']))
keys.append(k)
aligned_vals = xr.align(*vals, join='inner') aligned_vals = xr.align(*vals, join='inner')
result = dict(zip(keys, aligned_vals)) result = dict(zip(keys, aligned_vals))
return xr.Dataset(result) return xr.Dataset(result)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment