Skip to content
Snippets Groups Projects
Commit 6509af20 authored by Steffen Hauf's avatar Steffen Hauf
Browse files

Make defaults available

parent 012b7a07
No related branches found
No related tags found
2 merge requests!18Feat/lpd corr lib,!17Add a notebook to genererically write calibration constants to file
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Constants from DB to HDF5 # # Constants from DB to HDF5 #
Version 0.1, Author: S. Hauf Version 0.1, Author: S. Hauf
Currently available instances are LPD1M1 and AGIPD1M1
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
detector_instance = "LPD1M1" # the detector instance to get constants for, required detector_instance = "LPD1M1" # the detector instance to get constants for e.g. LPD1M1, required
out_file = "/gpfs/exfel/data/scratch/haufs/test/test.h5" # HDF5 file to output constants into, required out_file = "/gpfs/exfel/data/scratch/haufs/test/test.h5" # HDF5 file to output constants into, required
valid_at = "" # ISO formatted date for which constants shoudl be valid. Leave empty to get most current ones valid_at = "" # ISO formatted date for which constants shoudl be valid. Leave empty to get most current ones
cal_db_interface = "tcp://max-exfl015:5005" cal_db_interface = "tcp://max-exfl015:5005"
modules = [-1] # modules to get data from, in terms of numerical quadrant indices, range allowed modules = [-1] # modules to get data from, in terms of numerical quadrant indices, range allowed
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
dtype = "LPD" if "LPD" in detector_instance.upper() else "AGIPD" dtype = "LPD" if "LPD" in detector_instance.upper() else "AGIPD"
darkconst = ["Offset", "Noise", "SlopesPC", "SlopesCI", "BadPixelsDark", "BadPixelsPC", "BadPixelsCI"] darkconst = ["Offset", "Noise", "SlopesPC", "SlopesCI", "BadPixelsDark", "BadPixelsPC", "BadPixelsCI"]
skip = ["BadPixels"] skip = ["BadPixels"]
overwrites = {"LPD": {"SlopesFF": {"memory_cells": 1}, overwrites = {"LPD": {"SlopesFF": {"memory_cells": 1},
"BadPixelsFF": {"memory_cells": 1}}} "BadPixelsFF": {"memory_cells": 1}}}
if modules[0] == -1: if modules[0] == -1:
modules = list(range(16)) modules = list(range(16))
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
import copy import copy
import datetime import datetime
import h5py import h5py
import inspect import inspect
from iCalibrationDB import ConstantMetaData, Constants, Conditions, Detectors, Versions from iCalibrationDB import ConstantMetaData, Constants, Conditions, Detectors, Versions
def extend_parms(detector_instance): def extend_parms(detector_instance):
from iCalibrationDB import Conditions from iCalibrationDB import Conditions
import inspect import inspect
existing = set()
def extract_parms(cls): def extract_parms(cls):
args, varargs, varkw, defaults = inspect.getargspec(cls.__init__) args, varargs, varkw, defaults = inspect.getargspec(cls.__init__)
pList = [] pList = []
for i, arg in enumerate(args[1:][::-1]): for i, arg in enumerate(args[1:][::-1]):
if arg in existing:
continue
existing.add(arg)
if i < len(defaults): if i < len(defaults):
default = defaults[::-1][i] default = defaults[::-1][i]
if str(default).isdigit(): if str(default).isdigit():
pList.append("{} = 0. # required".format(arg)) pList.append("{} = {}".format(arg, default))
elif default is None or default == "None": elif default is None or default == "None":
pList.append("{} = \"\" # required".format(arg)) pList.append("{} = \"None\"".format(arg))
else: else:
pList.append("{} = \"\" # required".format(arg)) pList.append("{} = \"{}\"".format(arg, default))
else: else:
pList.append("{} = 0. # required".format(arg)) pList.append("{} = 0. # required".format(arg))
return set(pList[::-1]) # mandatories first return set(pList[::-1]) # mandatories first
dtype = "LPD" if "LPD" in detector_instance.upper() else "AGIPD" dtype = "LPD" if "LPD" in detector_instance.upper() else "AGIPD"
all_conditions = set() all_conditions = set()
for c in dir(Conditions): for c in dir(Conditions):
if c[:2] != "__": if c[:2] != "__":
condition = getattr(Conditions, c) condition = getattr(Conditions, c)
parms = extract_parms(getattr(condition, dtype)) parms = extract_parms(getattr(condition, dtype))
[all_conditions.add(p) for p in parms] [all_conditions.add(p) for p in parms]
return "\n".join(all_conditions) return "\n".join(all_conditions)
extend_parms("LPD1M1")
``` ```
%% Output %% Output
'pixels_y = 0. # required\ncapacitor = "" # required\nmemory_cells = 0. # required\npixels_x = 0. # required\nphoton_energy = 0. # required\nbias_voltage = 0. # required\nbeam_energy = "" # required' Skipping capacitor
Skipping pixels_y
Skipping pixels_x
Skipping bias_voltage
Skipping memory_cells
'memory_cells = 0. # required\npixels_y = 256 # required\ncapacitor = "5pF" # required\nbias_voltage = 0. # required\nphoton_energy = 0. # required\nbeam_energy = "" # required\npixels_x = 256 # required'
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
det = getattr(Detectors, detector_instance) det = getattr(Detectors, detector_instance)
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
ip = get_ipython() ip = get_ipython()
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
first_cell = next(ip.history_manager.get_range(ip.history_manager.get_last_session_id(), 1, 2, raw=True)) first_cell = next(ip.history_manager.get_range(ip.history_manager.get_last_session_id(), 1, 2, raw=True))
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
_, _, code = first_cell _, _, code = first_cell
code = code.split("\n") code = code.split("\n")
parms = {} parms = {}
for c in code: for c in code:
n, v = c.split("=") n, v = c.split("=")
n = n.strip() n = n.strip()
v = v.strip() v = v.strip()
try: try:
parms[n] = float(v) parms[n] = float(v)
except: except:
parms[n] = str(v) if not isinstance(v, str) else v parms[n] = str(v) if not isinstance(v, str) else v
if parms[n] == "None" or parms[n] == "'None'": if parms[n] == "None" or parms[n] == "'None'":
parms[n] = None parms[n] = None
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
ofile = h5py.File(out_file, "w") ofile = h5py.File(out_file, "w")
detector = getattr(Detectors, detector_instance) detector = getattr(Detectors, detector_instance)
for i in modules: for i in modules:
qm = "Q{}M{}".format(i//4+1, i%4+1) qm = "Q{}M{}".format(i//4+1, i%4+1)
module = getattr(detector, qm) module = getattr(detector, qm)
dconstants = getattr(Constants, dtype) dconstants = getattr(Constants, dtype)
for const in dir(dconstants): for const in dir(dconstants):
if const[:2] != "__": if const[:2] != "__":
if const in skip: if const in skip:
continue continue
cparms = copy.copy(parms) cparms = copy.copy(parms)
if dtype in overwrites: if dtype in overwrites:
do = overwrites[dtype] do = overwrites[dtype]
if const in do: if const in do:
for arg, v in do[const].items(): for arg, v in do[const].items():
cparms[arg] = v cparms[arg] = v
try: try:
metadata = ConstantMetaData() metadata = ConstantMetaData()
cons = getattr(dconstants, const)() cons = getattr(dconstants, const)()
metadata.calibration_constant = cons metadata.calibration_constant = cons
# set the operating condition # set the operating condition
cond = Conditions.Dark if const in darkconst else Conditions.Illuminated cond = Conditions.Dark if const in darkconst else Conditions.Illuminated
condition = getattr(cond, dtype) condition = getattr(cond, dtype)
args, varargs, varkw, defaults = inspect.getargspec(condition.__init__) args, varargs, varkw, defaults = inspect.getargspec(condition.__init__)
alist = [] alist = []
plist = {} plist = {}
for i, arg in enumerate(args[1:][::-1]): for i, arg in enumerate(args[1:][::-1]):
#if i < len(defaults): #if i < len(defaults):
# plist[arg] = parms[arg] # plist[arg] = parms[arg]
#else: #else:
# alist.append(parms[arg]) # alist.append(parms[arg])
plist[arg] = cparms[arg] plist[arg] = cparms[arg]
condition = condition(**plist) condition = condition(**plist)
metadata.detector_condition = condition metadata.detector_condition = condition
# specify the a version for this constant # specify the a version for this constant
if valid_at is None or valid_at == "": if valid_at is None or valid_at == "":
creation_time = datetime.datetime.now() creation_time = datetime.datetime.now()
metadata.calibration_constant_version = Versions.Now( metadata.calibration_constant_version = Versions.Now(
device=module) device=module)
else: else:
metadata.calibration_constant_version = Versions.Timespan( metadata.calibration_constant_version = Versions.Timespan(
device=module, device=module,
start=valid_at) start=valid_at)
creation_time = valid_at creation_time = valid_at
ctime = creation_time.isoformat() if not isinstance(creation_time, str) else creation_time ctime = creation_time.isoformat() if not isinstance(creation_time, str) else creation_time
metadata.retrieve(cal_db_interface, when=ctime) metadata.retrieve(cal_db_interface, when=ctime)
ofile["{}/{}/data".format(qm, const)] = metadata.calibration_constant.data ofile["{}/{}/data".format(qm, const)] = metadata.calibration_constant.data
except Exception as e: except Exception as e:
print("Failed for const {} of {}: {}".format(const, qm, e)) print("Failed for const {} of {}: {}".format(const, qm, e))
ofile.close() ofile.close()
``` ```
%% Output %% Output
Failed for const RelativeGain of Q2M1: Error sending to database: {'reason': '\'NoneType\' object has no attribute \'get\': File "/gpfs/exfel/data/scratch/haufs/karabo-2.2.1/karabo/devices/calibrationDbRemote/src/calibrationDBRemote/calibration_db_remote.py", line 373, in zmq_server_runner\n krb_ccv)\n File "/gpfs/exfel/data/scratch/haufs/karabo-2.2.1/karabo/devices/calibrationDbRemote/src/calibrationDBRemote/calibration_karabo.py", line 53, in get_calib_const_version_file\n file_name_abs_url = \'{0}{1}\'.format(ccv_krb_h.get(\'hdf5path\'),\n', 'success': False} Failed for const RelativeGain of Q2M1: Error sending to database: {'reason': '\'NoneType\' object has no attribute \'get\': File "/gpfs/exfel/data/scratch/haufs/karabo-2.2.1/karabo/devices/calibrationDbRemote/src/calibrationDBRemote/calibration_db_remote.py", line 373, in zmq_server_runner\n krb_ccv)\n File "/gpfs/exfel/data/scratch/haufs/karabo-2.2.1/karabo/devices/calibrationDbRemote/src/calibrationDBRemote/calibration_karabo.py", line 53, in get_calib_const_version_file\n file_name_abs_url = \'{0}{1}\'.format(ccv_krb_h.get(\'hdf5path\'),\n', 'success': False}
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
......
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