diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx index 4c4270d67faaeb2e19c4a735ca857d8c99dbc837..8c4c4385af80ba8cf5ca145f3027f829c84d93de 100644 --- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx +++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx @@ -29,6 +29,7 @@ #include <TH1.h> #include <TH2.h> #include <THttpServer.h> +#include <TProfile.h> #include <TStopwatch.h> template<> @@ -962,6 +963,21 @@ void CbmAlgoBuildRawEvents::CreateHistograms() outFolder->Add(fhCpuTimePerTsHist); outFolder->Add(fhRealTimePerTsHist); + if (EOverlapModeRaw::AllowOverlap == fOverMode) { + fhOverEventShare = new TH1I("fhOverEventShare", "Share of overlap evt; Overlap? []; Events", 2, -0.5, 1.5); + fhOverEventShareTs = new TProfile( + "fhOverEventShareTs", "Share of overlap evt per TS; TS index []; Overlap Events prop. []", 2500, 0, 2500); + fhOverEventSizeTs = + new TH2I("fhOverEventSizeTs", "Size of overlap of evt per TS; TS index []; Size of overlap between events [ns]", + 2500, 0, 2500, 200, 0, 1000); + AddHistoToVector(fhOverEventShare, "evtbuild"); + AddHistoToVector(fhOverEventShareTs, "evtbuild"); + AddHistoToVector(fhOverEventSizeTs, "evtbuild"); + outFolder->Add(fhOverEventShare); + outFolder->Add(fhOverEventShareTs); + outFolder->Add(fhOverEventSizeTs); + } + /// Loop on selection detectors for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) { /// In case name not provided, do not create the histo to avoid name conflicts! @@ -1181,7 +1197,26 @@ void CbmAlgoBuildRawEvents::FillHistos() Double_t dPreEvtTime = -1.0; for (CbmEvent* evt : fEventVector) { fhEventTime->Fill(evt->GetStartTime() * 1e-9); - if (0.0 <= dPreEvtTime) { fhEventDt->Fill((evt->GetStartTime() - dPreEvtTime) * 1e-9); } + if (0.0 <= dPreEvtTime) { + fhEventDt->Fill((evt->GetStartTime() - dPreEvtTime) * 1e-9); + + if (EOverlapModeRaw::AllowOverlap == fOverMode) { + if (evt->GetStartTime() - dPreEvtTime < fdWidestTimeWinRange) { + fhOverEventShare->Fill(1); + fhOverEventShareTs->Fill(fuNrTs, 1); + fhOverEventSizeTs->Fill(fuNrTs, fdWidestTimeWinRange - (evt->GetStartTime() - dPreEvtTime)); + } + else { + fhOverEventShare->Fill(0); + fhOverEventShareTs->Fill(fuNrTs, 0); + } + } + } + else if (EOverlapModeRaw::AllowOverlap == fOverMode) { + /// First event cannot be in overlap + fhOverEventShare->Fill(0); + fhOverEventShareTs->Fill(fuNrTs, 0); + } fhEventSize->Fill(evt->GetNofData()); fhNbDigiPerEvtTime->Fill(evt->GetStartTime() * 1e-9, evt->GetNofData()); diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h index 1388f5af259990954c2e1fd3fcb7301521cc0e9c..8a17452d69e293c71e861b904b18323ac0fe9cc6 100644 --- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h +++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h @@ -35,6 +35,7 @@ class CbmBmonDigi; class TClonesArray; class TH1; class TH2; +class TProfile; class TNamed; class TStopwatch; class TCanvas; @@ -353,6 +354,10 @@ private: std::vector<TH1*> fvhOutRatioPerTsSz = {}; /// ratio of selected digi size in total event size vs TS in run TH1* fhSizeReductionPerTs = nullptr; /// ratio of total selected size to input size selected vs TS in run + TH1* fhOverEventShare = nullptr; //! histogram with proportion of overlap evt, AllowOverlap only + TProfile* fhOverEventShareTs = nullptr; //! histogram with proportion of overlap evt vs TS index, AllowOverlap only + TH2* fhOverEventSizeTs = nullptr; //! histogram with size of overlap between evt vs TS index, AllowOverlap only + /// Internal state variables UInt_t fuCurEv = 0; //! Event Counter UInt_t fuNrTs = 0; //! Timeslice Counter