Source code for pydiana.pat.trigger_tryout

from pydiana import *
import plotly.graph_objects as go
from plotly.subplots import make_subplots

ROOT.gInterpreter.ProcessLine(f"#include \"{diana_install}/pkg/triggers/QTriggerFactory.hh\"")

[docs] def list2stdvector(stream:list): ds = ROOT.std.vector(ROOT.double)(len(stream)) for i in range(len(stream)): ds[i] = stream[i] return ds
[docs] def main(trigger:str,stream:list,params:list,channel:int,SamplingFrequency:float,Window:float=0.2,Debounce:float=0.1): if Debounce >=1: print("Please insert a debounce value smaller than 1") exit(-1) Trigger = Diana.QTriggerFactory(trigger) Trigger.SetSamplingFrequency(SamplingFrequency) Trigger.SetWindow(int(Window*SamplingFrequency)) Trigger.SetDebounce(int(Window*SamplingFrequency*Debounce)) Trigger.SetChannel(channel) Trigger.SetCFGParameters(*params) print("Trigger Algo: ", Trigger.GetTriggerAlgo()) print("Trigger Params: \n\t", "\n\t ".join(Trigger.GetParameters(True).split("\n"))) Trigger.TriggerStream(list2stdvector(stream)) trigs = Trigger.GetTriggers() filt_stream = Trigger.GetFilteredStream() from array import array import numpy as np filt_stream2 = np.array(array("d",filt_stream)) rms=-1 rms_new=-1 #rms_eval step = SamplingFrequency//10 if 4*step>len(filt_stream2): step = (windowsize*SamplingFrequency)//5 step = int(step) rmsss=[] for i in range(0,len(filt_stream2),step): if rms_new==-1: rms_new = np.std(filt_stream2[i:i+step]) rms = rms_new+1; else: rms_new = np.std(filt_stream2[i:i+step]) if(rms_new<=rms and rms_new>0): rms=rms_new rmsss.append(rms_new) print("Number of triggers found: ",trigs.size()) print("RMS: ",rms) print("RMSSS: ",np.mean(rmsss),np.median(rmsss),np.std(rmsss)) print("Trigger Heights: ", Trigger.GetTriggerHeights()) fig=make_subplots(specs=[[{"secondary_y": True}]])#go.Figure() fig.add_trace(go.Scatter(y = stream,name="Data"),secondary_y=False) fig.add_trace(go.Scatter(y = [filt_stream[i] for i in range(filt_stream.size())],name='Filtered Stream'),secondary_y=True) fig.add_trace(go.Scatter(x = [trigs[i] for i in range(trigs.size())], y = [filt_stream[trigs[i]] for i in range(trigs.size())],name="Triggers (Filtered)",mode='markers'),secondary_y=True) fig.add_trace(go.Scatter(x = [trigs[i] for i in range(trigs.size())], y = [stream[trigs[i]] for i in range(trigs.size())],name="Triggers (Original)",mode='markers'),secondary_y=False) fig.update_xaxes(title="Samples") fig.update_yaxes(title_text="Amplitude [ADC]", secondary_y=False) fig.update_yaxes(title_text="Filtered Amplitude [ADC]", secondary_y=True) fig.update_layout(title=f"Channel {channel} triggered with {trigger}<br>Total triggers found: {trigs.size()}") return fig