From 3f8b1e740aaefa59716ae6dd81e871d4cabe37c1 Mon Sep 17 00:00:00 2001 From: "Marvin V. Ascencio S." Date: Fri, 7 Nov 2025 11:10:00 -0600 Subject: [PATCH 1/6] Add CalcMinMaxAmp method to LAPPDTraceMax Added CalcMinMaxAmp method to LAPPDTraceMax class. --- UserTools/LAPPDTraceMax/LAPPDTraceMax.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UserTools/LAPPDTraceMax/LAPPDTraceMax.h b/UserTools/LAPPDTraceMax/LAPPDTraceMax.h index d25be8c26..24e175cd5 100644 --- a/UserTools/LAPPDTraceMax/LAPPDTraceMax.h +++ b/UserTools/LAPPDTraceMax/LAPPDTraceMax.h @@ -5,6 +5,7 @@ #include #include "Tool.h" +#include class LAPPDTraceMax: public Tool { @@ -22,6 +23,7 @@ class LAPPDTraceMax: public Tool { double CalcIntegral(Waveform hwav, double lowR, double hiR); double CalcIntegralSmoothed(Waveform hwav, double lowR, double hiR); std::vector CalcAmp(Waveform hwav, double lowR, double hiR); + std::vector CalcMinMaxAmp(Waveform hwav); std::vector CalcAmpSmoothed(Waveform hwav, double lowR, double hiR); int DimSize; double Deltat; From 650ed248a491740958fbd21892f8724ee1bd74d3 Mon Sep 17 00:00:00 2001 From: "Marvin V. Ascencio S." Date: Fri, 7 Nov 2025 11:11:13 -0600 Subject: [PATCH 2/6] Implement CalcMinMaxAmp function for waveform analysis Added a new function to calculate minimum and maximum amplitudes along with RMS, standard deviation, variance, and integral of the waveform. --- UserTools/LAPPDTraceMax/LAPPDTraceMax.cpp | 69 ++++++++++++++++++++++- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/UserTools/LAPPDTraceMax/LAPPDTraceMax.cpp b/UserTools/LAPPDTraceMax/LAPPDTraceMax.cpp index 9f63db90b..4f9ade4bc 100644 --- a/UserTools/LAPPDTraceMax/LAPPDTraceMax.cpp +++ b/UserTools/LAPPDTraceMax/LAPPDTraceMax.cpp @@ -84,6 +84,9 @@ bool LAPPDTraceMax::Execute(){ vector ampvect = CalcAmp(bwav,lowR,hiR); vector ampvect_sm = CalcAmpSmoothed(bwav,lowR,hiR); + // find min max amplitude + vector ampminmaxvect = CalcMinMaxAmp(bwav); + // integrate the pulse from the low range to high range in units of mV*psec double Qmvpsec = CalcIntegral(bwav,lowR,hiR); // convert to coulomb @@ -112,6 +115,13 @@ bool LAPPDTraceMax::Execute(){ astripsumL.push_back(ampvect_sm.at(1)); astripsumL.push_back(Qelectrons); astripsumL.push_back(sQelectrons); + + astripsumL.push_back(ampminmaxvect.at(0)); + astripsumL.push_back(ampminmaxvect.at(1)); + astripsumL.push_back(ampminmaxvect.at(2)); + astripsumL.push_back(ampminmaxvect.at(3)); + astripsumL.push_back(ampminmaxvect.at(4)); + astripsumL.push_back(ampminmaxvect.at(5)); } if(stripside==1){ @@ -121,6 +131,13 @@ bool LAPPDTraceMax::Execute(){ astripsumR.push_back(ampvect_sm.at(1)); astripsumR.push_back(Qelectrons); astripsumR.push_back(sQelectrons); + + astripsumR.push_back(ampminmaxvect.at(0)); + astripsumR.push_back(ampminmaxvect.at(1)); + astripsumR.push_back(ampminmaxvect.at(2)); + astripsumR.push_back(ampminmaxvect.at(3)); + astripsumR.push_back(ampminmaxvect.at(4)); + astripsumR.push_back(ampminmaxvect.at(5)); } vastripsumL.push_back(astripsumL); @@ -175,12 +192,58 @@ double LAPPDTraceMax::CalcIntegral(Waveform hwav, double lowR, double hi for(int i=lowb; i LAPPDTraceMax::CalcMinMaxAmp(Waveform hwav){ + + // Get the Samples from Waveform + std::vector *theWav = hwav.GetSamples(); + int nbins = theWav->size(); + + // Find the minimum and maximum values + auto minmax = std::minmax_element(theWav->begin(), theWav->end()); + + // Get the minimum and maximum values + double maxAmp = *minmax.first; + double minAmp = *minmax.second; + + // Get the RMS + double sumOfSquares = 0.0; + for (int i=0; iat(i),2); + double rms = sqrt(sumOfSquares / nbins); + // Get the integral + double sumInt = 0.0; + for (int i=0; iat(i); + + double sumint = sumInt / nbins; + + // Get Variance + double mean = 0.0; + double variance = 0.0; + for (int i=0; iat(i); + mean = mean/nbins; + + for (int i=0; iat(i) - mean,2); + variance = variance / nbins; + + // Get Standard deviation + double StandDev = sqrt(variance); + + vector minmaxVect; + minmaxVect.push_back(minAmp); + minmaxVect.push_back(maxAmp); + minmaxVect.push_back(rms); + minmaxVect.push_back(StandDev); + minmaxVect.push_back(variance); + minmaxVect.push_back(sumint); + + return minmaxVect; +} std::vector LAPPDTraceMax::CalcAmp(Waveform hwav, double lowR, double hiR){ @@ -202,7 +265,7 @@ std::vector LAPPDTraceMax::CalcAmp(Waveform hwav, double lowR, d tTime=(double)i; } } - } else std::cout<<"OUT OF RANGE!!!!"< tAmpVect; tAmpVect.push_back(tAmp); @@ -240,7 +303,7 @@ std::vector LAPPDTraceMax::CalcAmpSmoothed(Waveform hwav, double tTime=(double)i - (Nsmooth/2.) ; } } - } else std::cout<<"OUT OF RANGE!!!!"< tAmpVect; tAmpVect.push_back(tAmp); From 9398240bd013d38f00295e55ac2178fcf5eaac13 Mon Sep 17 00:00:00 2001 From: "Marvin V. Ascencio S." Date: Fri, 7 Nov 2025 11:13:10 -0600 Subject: [PATCH 3/6] Add noise study variables and metadata timestamps Added new variables for noise study and metadata timestamps also adding RMS, min and max waveform amplitudes fro dark room data --- UserTools/LAPPDClusterTree/LAPPDClusterTree.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/UserTools/LAPPDClusterTree/LAPPDClusterTree.h b/UserTools/LAPPDClusterTree/LAPPDClusterTree.h index c0faf9713..e170327b6 100644 --- a/UserTools/LAPPDClusterTree/LAPPDClusterTree.h +++ b/UserTools/LAPPDClusterTree/LAPPDClusterTree.h @@ -76,6 +76,14 @@ class LAPPDClusterTree: public Tool { Double_t StripQ[60]; Double_t StripQ_Sm[60]; + //Noise Study + Double_t StripMaxAmp[60]; + Double_t StripMinAmp[60]; + Double_t StripRMSAmp[60]; + Double_t StripVarianceAmp[60]; + Double_t StripStandDevAmp[60]; + Double_t StripInt[60]; + //NEW!!! Int_t NHits_simp; Double_t hQ_simp[60]; @@ -113,7 +121,8 @@ class LAPPDClusterTree: public Tool { Int_t pulsestrip_simp[60]; Int_t pulseside_simp[60]; - + // NEW Mrv! + Int_t timestamps_meta; private: int LAPPDClusterTreeVerbosity; From e9c60c254cb57f0f88d2990341bb0bcc5c8c2e89 Mon Sep 17 00:00:00 2001 From: "Marvin V. Ascencio S." Date: Fri, 7 Nov 2025 11:15:29 -0600 Subject: [PATCH 4/6] Add new timestamp metadata and related branches --- .../LAPPDClusterTree/LAPPDClusterTree.cpp | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp b/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp index aaa36826f..60d316929 100644 --- a/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp +++ b/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp @@ -30,6 +30,7 @@ bool LAPPDClusterTree::Initialise(std::string configfile, DataModel &data) WraparoundBin=0; QualityVar=0; TrigDeltaT1=0.; TrigDeltaT2=0.; PulseHeight=0.; MaxAmp0=0.; MaxAmp1=0.; BeamTime=0.; EventTime=0.; TotalCharge=0.; Npulses_cfd=0; Npulses_simp=0; T0Bin=0; NHits=0; NHits_simp=0; Npulses_cfd=0; Npulses_simp=0; Nchannels=60; + timestamps_meta=0; for(int i=0; i<60; i++){ hQ[i]=0; hxpar[i]=0; hxperp[i]=0; htime[i]=0; hdeltime[i]=0; hvpeak[i]=0; @@ -42,7 +43,7 @@ bool LAPPDClusterTree::Initialise(std::string configfile, DataModel &data) SelectedAmp0[i]=0; SelectedAmp1[i]=0; SelectedTime0[i]=0; SelectedTime1[i]=0; - StripPeak[i]=0; StripPeak_Sm[i]=0; StripPeakT[i]=0; StripPeakT_Sm[i] =0; + StripPeak[i]=0; StripPeak_Sm[i]=0; StripPeakT[i]=0; StripPeakT_Sm[i] =0; StripMaxAmp[i]=0.; StripMinAmp[i]=0.; StripRMSAmp[i]=0.; StripStandDevAmp[i]=0.; StripVarianceAmp[i]=0.; StripInt[i]=0.; StripQ[i]=0; StripQ_Sm[i]=0; } @@ -66,6 +67,7 @@ bool LAPPDClusterTree::Initialise(std::string configfile, DataModel &data) fMyTree->Branch("EventTime", &EventTime, "EventTime/D" ); fMyTree->Branch("TotalCharge", &TotalCharge, "TotalCharge/D" ); + fMyTree->Branch("timestamps_meta", ×tamps_meta, "timestamps_meta/I" ); //Hit parameters (from CFD) fMyTree->Branch("NHits", &NHits, "NHits/I" ); @@ -86,6 +88,14 @@ bool LAPPDClusterTree::Initialise(std::string configfile, DataModel &data) fMyTree->Branch("StripQ", StripQ, "StripQ[Nchannels]/D" ); fMyTree->Branch("StripQ_Sm", StripQ_Sm, "StripQ_Sm[Nchannels]/D" ); + // Information of the waveforms + fMyTree->Branch("StripMaxAmp", StripMaxAmp, "StripMaxAmp[Nchannels]/D" ); + fMyTree->Branch("StripMinAmp", StripMinAmp, "StripMinAmp[Nchannels]/D" ); + fMyTree->Branch("StripRMSAmp", StripRMSAmp, "StripRMSAmp[Nchannels]/D" ); + fMyTree->Branch("StripStandDevAmp", StripStandDevAmp, "StripStandDevAmp[Nchannels]/D" ); + fMyTree->Branch("StripVarianceAmp", StripVarianceAmp, "StripVarianceAmp[Nchannels]/D" ); + fMyTree->Branch("StripInt", StripInt, "StripInt[Nchannels]/D" ); + //Hit parameters (from simple FindPeak) fMyTree->Branch("NHits_simp", &NHits_simp, "NHits_simp/I" ); @@ -185,7 +195,19 @@ bool LAPPDClusterTree::Execute() m_data->Stores["ANNIEEvent"]->Get("TML",TML); m_data->Stores["ANNIEEvent"]->Get("TMR",TMR); + vector acdcmetadata; + m_data->Stores["ANNIEEvent"]->Get("ACDCmetadata",acdcmetadata); + //std::cout<<"-------------TIMESTAMP In tree ---------------------------------"<> std::hex >> meta_timestamp_int; + timestamps_meta = meta_timestamp_int; + //std::cout << meta_timestamp_int << std::endl; + //std::cout << acdcmetadata[204] << acdcmetadata[206] << acdcmetadata[208] << acdcmetadata[210] << std::endl; + //std::cout << acdcmetadata[205] << acdcmetadata[207] << acdcmetadata[209] << acdcmetadata[211] << std::endl; + //std::cout<<"----------------------------------------------"<>> :: iterator TMitr; for (TMitr = TML.begin(); TMitr != TML.end(); ++TMitr){ @@ -198,6 +220,12 @@ bool LAPPDClusterTree::Execute() StripPeakT_Sm[stripno] = aTML.at(3); StripQ[stripno] = aTML.at(4); StripQ_Sm[stripno] = aTML.at(5); + StripMaxAmp[stripno] = aTML.at(6); + StripMinAmp[stripno] = aTML.at(7); + StripRMSAmp[stripno] = aTML.at(8); + StripStandDevAmp[stripno] = aTML.at(9); + StripVarianceAmp[stripno] = aTML.at(10); + StripInt[stripno] = aTML.at(11); //cout<<"Trace on Strip in ClusterTree "<<(int) stripno<<" amplitude:"<GetStripNum(); int mystripside = mychannel->GetStripSide(); - if(LAPPDClusterTreeVerbosity>2) cout<<"vPsize: "<2) cout<<"vPsize: "<=59) { cout<<"MORE THAN 60 SIMPLE PULSES!!!!!!"<1) cout<<"DONE WITH SIMP Npulses: "< Date: Fri, 7 Nov 2025 12:12:38 -0600 Subject: [PATCH 5/6] Clean up LAPPDClusterTree.cpp formatting Removed unnecessary closing brace and adjusted formatting. --- UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp b/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp index 60d316929..0580b3097 100644 --- a/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp +++ b/UserTools/LAPPDClusterTree/LAPPDClusterTree.cpp @@ -475,5 +475,3 @@ bool LAPPDClusterTree::Finalise(){ cout<<"Done closing the file"< Date: Fri, 7 Nov 2025 12:13:26 -0600 Subject: [PATCH 6/6] Fix missing newline at end of LAPPDClusterTree.cpp