Source code for nectarchain.dqm.mean_waveforms

import numpy as np
from matplotlib import pyplot as plt

from .dqm_summary_processor import DQMSummary

__all__ = ["MeanWaveFormsHighLowGain"]


[docs] class MeanWaveFormsHighLowGain(DQMSummary): def __init__(self, gaink): self.k = gaink self.Pix = None self.Samp = None self.Mwf = None self.Mwf_ped = None self.counter_evt = None self.counter_ped = None self.Mwf_average = None self.Mwf_ped_average = None self.Mwf_Mean_overPix = [] self.Mwf_ped_Mean_overPix = [] self.MeanWaveForms_Results_Dict = {} self.MeanWaveForms_Figures_Dict = {} self.MeanWaveForms_Figures_Names_Dict = {} def ConfigureForRun(self, path, Pix, Samp, Reader1, **kwargs): # define number of pixels and samples self.Pix = Pix self.Samp = Samp self.Mwf = np.zeros((self.Pix, self.Samp)) self.Mwf_ped = np.zeros((self.Pix, self.Samp)) self.counter_evt = 0 self.counter_ped = 0 self.Mwf_average = np.zeros((self.Pix, self.Samp)) self.Mwf_ped_average = np.zeros((self.Pix, self.Samp)) self.wf_list_plot = list(range(1, self.Samp + 1)) # used for plotting later on return None def ProcessEvent(self, evt, noped): if evt.trigger.event_type.value == 32: # count peds self.counter_ped += 1 else: self.counter_evt += 1 for ipix in range(self.Pix): # loop over pixels, 1855 should be redefined as a variable if evt.trigger.event_type.value == 32: # only peds now self.Mwf_ped[ipix, :] += evt.r0.tel[0].waveform[self.k][ ipix ] # fill pixels one by one and sum them for peds only else: self.Mwf[ipix, :] += evt.r0.tel[0].waveform[self.k][ ipix ] # fill pixels one by one and sum them return None def FinishRun(self): # if (self.k == 0): # gain_c = 'High' # if (self.k == 1): # gain_c = 'Low' self.Mwf_average = self.Mwf / self.counter_evt # get average # get average over pixels self.Mwf_Mean_overPix = np.mean(self.Mwf_average, axis=0) if self.counter_ped > 0: # get average pedestals self.Mwf_ped_average = self.Mwf_ped / self.counter_ped self.Mwf_ped_Mean_overPix = np.mean(self.Mwf_ped_average, axis=0) return None def GetResults(self): # ASSIGN RESUTLS TO DICT if self.k == 0: self.MeanWaveForms_Results_Dict[ "WF-PHY-AVERAGE-PIX-HIGH-GAIN" ] = self.Mwf_Mean_overPix if self.counter_ped > 0: self.MeanWaveForms_Results_Dict[ "WF-AVERAGE-PED-PIX-HIGH-GAIN" ] = self.Mwf_ped_Mean_overPix if self.k == 1: self.MeanWaveForms_Results_Dict[ "WF-AVERAGE-PIX-LOW-GAIN" ] = self.Mwf_Mean_overPix if self.counter_ped > 0: self.MeanWaveForms_Results_Dict[ "WF-PHY-AVERAGE-PED-PIX-LOW-GAIN" ] = self.Mwf_ped_Mean_overPix return self.MeanWaveForms_Results_Dict def PlotResults(self, name, FigPath): wf_list = np.array(self.wf_list_plot) counter_fig = 0 colors = ["blue", "red"] # colors2 = ['cyan', 'orange'] titles = ["Physical", "Pedestals"] # Set characters of gain: high or lo if self.k == 0: gain_c = "High" if self.k == 1: gain_c = "Low" full_fig, full_ax = plt.subplots() if self.counter_ped > 0: array_plot = [self.Mwf_average, self.Mwf_ped_average] else: array_plot = [self.Mwf_average] for x in array_plot: part_fig, part_ax = plt.subplots() for ipix in range(self.Pix): full_ax.plot( wf_list, x[ipix, :], color=colors[counter_fig], alpha=0.005, linewidth=1, ) part_ax.plot( wf_list, x[ipix, :], color=colors[counter_fig], alpha=0.005, linewidth=1, ) part_ax.set_title( "Mean Waveforms %s (%s Gain)" % (titles[counter_fig], gain_c) ) part_ax.set_xlabel("Samples") part_ax.set_ylabel("Amplitude (DC)") # part_ax.legend() part_ax.grid() part_name = name + "_MeanWaveforms_%s_%sGain.png" % ( titles[counter_fig], gain_c, ) PartPath = FigPath + part_name self.MeanWaveForms_Figures_Dict[ "FIGURE-WF-%s-%s-GAIN" % (titles[counter_fig], gain_c) ] = part_fig self.MeanWaveForms_Figures_Names_Dict[ "FIGURE-WF-%s-%s-GAIN" % (titles[counter_fig], gain_c) ] = PartPath plt.close() counter_fig += 1 full_ax.set_title("Mean Waveforms Combined Plot (%s Gain)" % gain_c) full_ax.set_xlabel("Samples") full_ax.set_ylabel("Amplitude (DC)") # full_ax.legend() full_ax.grid() full_name = name + "_MeanWaveforms_CombinedPlot_%sGain.png" % gain_c FullPath = FigPath + full_name self.MeanWaveForms_Figures_Dict[ "FIGURE-WF-COMBINED-%s-GAIN" % gain_c ] = full_fig self.MeanWaveForms_Figures_Names_Dict[ "FIGURE-WF-COMBINED-%s-GAIN" % gain_c ] = FullPath plt.close() return self.MeanWaveForms_Figures_Dict, self.MeanWaveForms_Figures_Names_Dict