Skip to content
Snippets Groups Projects

Master

Merged Loïc Le Guyader requested to merge master into load
1 file
+ 171
58
Compare changes
  • Side-by-side
  • Inline
+ 171
58
@@ -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)
Loading