diff --git a/notebooks/LPD/PlotFromCalDB.py b/notebooks/LPD/PlotFromCalDB.py deleted file mode 100644 index 511f0b23f6da63db1114ba029385691154c2fd3a..0000000000000000000000000000000000000000 --- a/notebooks/LPD/PlotFromCalDB.py +++ /dev/null @@ -1,232 +0,0 @@ -import sys -import warnings -import os -import h5py -import numpy as np -import matplotlib -import matplotlib.pyplot as plt -import matplotlib.ticker as ticker -import datetime -import dateutil.parser - -import seaborn -from iCalibrationDB import ConstantMetaData, Constants, Conditions, Detectors, Versions -from cal_tools.cal_tools import gain_map_files, parse_runs, run_prop_seq_from_path, get_notebook_name, get_dir_creation_date, get_constant_from_db -from cal_tools.influx import InfluxLogger -from cal_tools.enums import BadPixels -from cal_tools.plotting import show_overview, plot_badpix_3d, create_constant_overview - -warnings.filterwarnings('ignore') -matplotlib.use("agg") - - -start_date = "2018-06-25" # date to start investigation interval from -end_date = "now" # date to end investigation interval at, can be "now" -interval = 3 # interval for evaluation in days -detector = "LPD1M1" # detector to investigate -constants = ["Offset", "Noise"] # constants to plot -cal_db_interface = "tcp://max-exfl016:8015" # the database interface to use -bias_voltage = 500 -max_cells = 128 -modules = [3] -out_folder = "/gpfs/exfel/data/scratch/karnem/test/" -all_ready_printed = {} - - -detector = detector.upper() -dclass = "AGIPD" if "AGIPD" in detector else "LPD" - - -if modules[0] == -1: - modules = list(range(16)) - - -def get_constant_from_db(device, constant, condition, empty_constant, - cal_db_interface, creation_time = None, - print_once=True): - - if device: - metadata = ConstantMetaData() - metadata.calibration_constant = constant - metadata.detector_condition = condition - if creation_time is None: - metadata.calibration_constant_version = Versions.Now(device=device) - else: - metadata.calibration_constant_version = \ - Versions.Timespan(device=device, start=creation_time) - - try: - print ("Send requiests") - metadata.retrieve(cal_db_interface, when=creation_time.isoformat()) - if constant.name not in all_ready_printed or not print_once: - all_ready_printed[constant.name] = True - print("{} was injected on: {}".format(constant.name, - metadata.calibration_constant_version.begin_at)) - return constant.data - except Exception as e: - return empty_constant - else: - return empty_constant - - -dt = dateutil.parser.parse(start_date) -end = datetime.datetime.now() if end_date.upper() == "NOW" else dateutil.parser.parse(end_date) -step = datetime.timedelta(days=interval) - -det = getattr(Detectors, detector) -dconstants = getattr(Constants, dclass) -ret_constants = {} -while dt < end: - creation_time = dt - print("Retreiving data from: {}".format(creation_time.isoformat())) - for const in constants: - if not const in ret_constants: - ret_constants[const] = {} - if (const in ["Offset", "Noise"] or "DARK" in const.upper()): - dcond = Conditions.Dark - else: - Conditions.Illuminated - - for i in modules: - qm = "Q{}M{}".format(i//4+1, i%4+1) - cdata = get_constant_from_db(getattr(det, qm), - getattr(dconstants, const)(), - getattr(dcond, dclass)(memory_cells=max_cells, - bias_voltage=bias_voltage), - None, - cal_db_interface, - creation_time=creation_time) - - print("Found constant {}: {}".format(const, cdata is not None)) - - if not qm in ret_constants[const]: - ret_constants[const][qm] = [] - - if cdata is not None: - carr = np.zeros((5, max_cells, 3)) - carr_glob = np.zeros((5, 3)) - carr_px = np.zeros((cdata.shape[0], max_cells, 3, 2)) - for g in range(3): - td = np.nanmean(cdata[...,g], axis=(0,1)) - print (td.shape) - carr[0,:td.shape[0],g] = td - - td = np.nanmedian(cdata[...,g], axis=(0,1)) - carr[1,:td.shape[0],g] = td - - td = np.nanmin(cdata[...,g], axis=(0,1)) - carr[2,:td.shape[0],g] = td - - td = np.nanmax(cdata[...,g], axis=(0,1)) - carr[3,:td.shape[0],g] = td - - td = np.nanstd(cdata[...,g], axis=(0,1)) - carr[4,:td.shape[0],g] = td - - td = np.nanmean(cdata[...,g]) - carr_glob[0, g] = td - - td = np.nanmedian(cdata[...,g]) - carr_glob[1, g] = td - - td = np.nanmin(cdata[...,g]) - carr_glob[2, g] = td - - td = np.nanmax(cdata[...,g]) - carr_glob[3, g] = td - - td = np.nanstd(cdata[...,g]) - carr_glob[3, g] = td - - carr_px[...,g, 0] = np.nanmedian(cdata[...,g], axis=0) - carr_px[...,g, 1] = np.nanmedian(cdata[...,g], axis=1) - - ret_constants[const][qm].append((creation_time, - (carr, carr_glob, carr_px))) - - dt += step - - -types = ["mean", "median", "min", "max", "std"] -colors = ["red", "green", "orange", "blue"] -skip = [False, False, False, False, False] - -# loop over constat type -for const, modules in ret_constants.items(): - fig = plt.figure(figsize=(15,7)) - tt = 0 - print (const) - - # loop over type of stat parameter - for typ in range(len(types)): - if skip[typ]: - continue - ax = plt.subplot2grid((np.count_nonzero(~np.array(skip)), 1), (tt, 0)) - - # loop over modules - for mod, data in modules.items(): - ctimes, cd = list(zip(*data)) - pmm, glob, _ = list(zip(*cd)) - pma = np.array(pmm) - ga = np.array(glob) - d = pma[:,typ,:,:] - - if np.allclose(d, 0): - continue - dd = pma[:,typ,:,:]#-pma[0,typ,:,:])/pma[0,typ,:,:] - y = dd.flatten() - x = np.repeat(np.array(ctimes)[:,None], - dd[0,:,:].size, axis=1).flatten() - hue = np.repeat(np.array(['gain 0', 'gain 1', 'gain 2'])[:,None], - dd[:,:,0].size, axis=1).swapaxes(0,1).flatten() - seaborn.violinplot(x, y, hue, scale="width", dodge=False, saturation=0.7) - - #ax.set_ylim(-0.25, .25) - - if typ != len(types)-1: - ax.axes.get_xaxis().set_visible(False) - else: - def format_date(x, pos=None): - return ctimes[x].strftime('%d-%m') - ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date)) - ax.set_xlabel("Date") - ax.set_ylabel("{}".format(types[typ])) - - tt += 1 - plt.subplots_adjust(wspace=0.2, hspace=0.2) - - if out_folder != "": - fig.savefig("{}/{}_time_development.pdf".format(out_folder, const), - bbox_inches='tight') - - - fig = plt.figure(figsize=(15,7)) - ax = plt.subplot2grid((1, 1), (0, 0)) - - # loop over modules - for mod, data in modules.items(): - ctimes, cd = list(zip(*data)) - _, _, px = list(zip(*cd)) - px = np.array(px) - print (px.shape) - y = px[:,:,5,0,:].flatten() - x = np.repeat(np.array(ctimes)[:,None], - px[0,:,5,0,:].size, axis=1).flatten() - hue = np.repeat(np.array(['px','py'])[:,None], px[:,:,5,0,0].size, - axis=1).swapaxes(0,1).flatten() - - seaborn.violinplot(x, y, hue, palette="muted", split=True) - - def format_date(x, pos=None): - return ctimes[x].strftime('%d-%m') - ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date)) - ax.set_xlabel("Date") - ax.set_ylabel("Median over pixels") - - plt.subplots_adjust(wspace=0.2, hspace=0.2) - - if out_folder != "": - fig.savefig("{}/{}_pxtime_development.pdf".format(out_folder, const), - bbox_inches='tight') - -