From 0611cbe0eab447999f1797ac982594b5fd17e197 Mon Sep 17 00:00:00 2001 From: splitPoleDAQ Date: Wed, 14 Jun 2023 15:41:26 -0400 Subject: [PATCH] replace OnlineEventBuilder with MultiBuilder. OnlineEventBuidler is obsolete --- Analyser.cpp | 26 ++++++++++++++++++-------- Analyser.h | 13 ++++++++++--- FSUDAQ_Qt6.pro | 2 ++ MultiBuilder.cpp | 12 ++++++++++++ MultiBuilder.h | 22 ++++++++++++---------- SplitPoleAnalyzer.h | 14 +++++++++----- 6 files changed, 63 insertions(+), 26 deletions(-) diff --git a/Analyser.cpp b/Analyser.cpp index ce5ad9e..953811a 100644 --- a/Analyser.cpp +++ b/Analyser.cpp @@ -11,8 +11,10 @@ Analyzer::Analyzer(Digitizer ** digi, unsigned int nDigi, QMainWindow * parent ) setWindowTitle("Online Analyzer"); setGeometry(0, 0, 1000, 800); - oeb = new OnlineEventBuilder * [nDigi]; - for( unsigned int i = 0; i < nDigi; i++ ) oeb[i] = new OnlineEventBuilder(digi[i]); + //oeb = new OnlineEventBuilder * [nDigi]; + //for( unsigned int i = 0; i < nDigi; i++ ) oeb[i] = new OnlineEventBuilder(digi[i]); + + mb = new MultiBuilder(digi, nDigi); buildTimerThread = new TimingThread(this); buildTimerThread->SetWaitTimeinSec(1.0); //^Set event build interval @@ -29,13 +31,17 @@ Analyzer::Analyzer(Digitizer ** digi, unsigned int nDigi, QMainWindow * parent ) } Analyzer::~Analyzer(){ - for( unsigned int i = 0; i < nDigi; i++ ) delete oeb[i]; - delete [] oeb; + // for( unsigned int i = 0; i < nDigi; i++ ) delete oeb[i]; + // delete [] oeb; + + delete mb; } void Analyzer::StartThread(){ // printf("%s\n", __func__); - for( unsigned int i = 0; i < nDigi; i++) oeb[i]->ClearEvents(); + //for( unsigned int i = 0; i < nDigi; i++) oeb[i]->ClearEvents(); + + mb->ClearEvents(); buildTimerThread->start(); } @@ -49,9 +55,13 @@ void Analyzer::StopThread(){ void Analyzer::BuildEvents(){ //Set with digitizer to be event build - digiMTX[digiID].lock(); - oeb[digiID]->BuildEvents(100, false); - digiMTX[digiID].unlock(); + // digiMTX[digiID].lock(); + // oeb[digiID]->BuildEvents(100, false); + // digiMTX[digiID].unlock(); + + for( unsigned int i = 0; i < nDigi; i++ ) digiMTX[digiID].lock(); + mb->BuildEvents(0, 0, 0); + for( unsigned int i = 0; i < nDigi; i++ ) digiMTX[digiID].unlock(); } diff --git a/Analyser.h b/Analyser.h index 5acc2e9..a2aa16a 100644 --- a/Analyser.h +++ b/Analyser.h @@ -15,7 +15,8 @@ #include "ClassDigitizer.h" #include "CustomThreads.h" #include "CustomWidgets.h" -#include "OnlineEventBuilder.h" +//#include "OnlineEventBuilder.h" +#include "MultiBuilder.h" /************************************** @@ -42,7 +43,10 @@ public: virtual void SetUpCanvas(); - OnlineEventBuilder * GetEventBuilder() {return oeb[digiID];} + //OnlineEventBuilder * GetEventBuilder() {return oeb[digiID];} + + MultiBuilder * GetEventBuilder() { return mb;} + public slots: void StartThread(); @@ -65,7 +69,10 @@ private: int digiID; // the digi that will event double waitTimeinSec; - OnlineEventBuilder ** oeb; + //OnlineEventBuilder ** oeb; + + MultiBuilder * mb; + TimingThread * buildTimerThread; }; diff --git a/FSUDAQ_Qt6.pro b/FSUDAQ_Qt6.pro index f13dea1..246fdd8 100644 --- a/FSUDAQ_Qt6.pro +++ b/FSUDAQ_Qt6.pro @@ -36,6 +36,7 @@ HEADERS += ClassData.h \ Scope.h \ SingleSpectra.h \ OnlineEventBuilder.h \ + MultiBuilder.h \ Analyser.h \ qcustomplot.h \ SplitPoleAnalyzer.h @@ -47,5 +48,6 @@ SOURCES += ClassDigitizer.cpp \ Scope.cpp \ SingleSpectra.cpp \ OnlineEventBuilder.cpp \ + MultiBuilder.cpp \ Analyser.cpp \ qcustomplot.cpp diff --git a/MultiBuilder.cpp b/MultiBuilder.cpp index 6012374..c2fa002 100644 --- a/MultiBuilder.cpp +++ b/MultiBuilder.cpp @@ -2,6 +2,18 @@ #include +MultiBuilder::MultiBuilder(Digitizer ** digi, unsigned int nDigi) : nData(nDigi){ + + data = new Data *[nData]; + for( unsigned int i = 0; i < nData; i++){ + data[i] = digi[i]->GetData(); + typeList.push_back(digi[i]->GetDPPType()); + timeWindow = 100; + ClearEvents(); + } + +} + MultiBuilder::MultiBuilder(Data ** inData, std::vector type) : nData(type.size()){ data = inData; typeList = type; diff --git a/MultiBuilder.h b/MultiBuilder.h index 113d948..a8363bb 100644 --- a/MultiBuilder.h +++ b/MultiBuilder.h @@ -2,6 +2,7 @@ #define MuLTI_BUILDER_H #include "ClassData.h" +#include "ClassDigitizer.h" #define MaxNEvent 5000 // circular @@ -20,16 +21,16 @@ public: Clear(); } - EventMember operator = (EventMember e){ - bd = e.bd; - ch = e.ch; - energy = e.energy; - energy2 = e.energy2; - timestamp = e.timestamp; - fineTime = e.fineTime; - trace = e.trace; - return *this; - } + // EventMember operator = (EventMember e){ + // bd = e.bd; + // ch = e.ch; + // energy = e.energy; + // energy2 = e.energy2; + // timestamp = e.timestamp; + // fineTime = e.fineTime; + // trace = e.trace; + // return *this; + // } void Clear(){ bd = 0; @@ -47,6 +48,7 @@ public: class MultiBuilder { public: + MultiBuilder(Digitizer ** digi, unsigned int nDigi); MultiBuilder(Data ** inData, std::vector type); ~MultiBuilder(); diff --git a/SplitPoleAnalyzer.h b/SplitPoleAnalyzer.h index dea378a..4711a6f 100644 --- a/SplitPoleAnalyzer.h +++ b/SplitPoleAnalyzer.h @@ -27,7 +27,9 @@ public: SetDigiID(0); // define which digitizer to build event SetUpdateTimeInSec(1.0); - oeb = GetEventBuilder(); // get the event builder pointer from mother class; + //evtbder = GetEventBuilder(); // get the event builder pointer from mother class; + evtbder = GetEventBuilder(); + SetUpCanvas(); } @@ -40,7 +42,8 @@ public slots: private: - OnlineEventBuilder * oeb; + //OnlineEventBuilder * evtbder; + MultiBuilder *evtbder; // declaie histograms Histogram2D * h2; @@ -70,10 +73,10 @@ inline void SplitPole::UpdateHistograms(){ //oeb->PrintStat(); //============ Get events, and do analysis - long eventBuilt = oeb->eventBuilt; + long eventBuilt = evtbder->eventBuilt; if( eventBuilt == 0 ) return; - long eventIndex = oeb->eventIndex; + long eventIndex = evtbder->eventIndex; long eventStart = eventIndex - eventBuilt + 1; if(eventStart < 0 ) eventStart += MaxNEvent; @@ -81,7 +84,8 @@ inline void SplitPole::UpdateHistograms(){ unsigned short e1 = 0, e2 = 0; for( long i = eventStart ; i <= eventIndex; i ++ ){ - std::vector event = oeb->events[i]; + //std::vector event = evtbder->events[i]; + std::vector event = evtbder->events[i]; for( int k = 0; k < (int) event.size(); k++ ){ if( event[k].ch == 9 ) e1 = event[k].energy;