From 4f4719df566e5b2aa4728330940dc4701968e447 Mon Sep 17 00:00:00 2001 From: Dominik Smith <smith@th.physik.uni-frankfurt.de> Date: Fri, 23 Jul 2021 14:23:24 +0200 Subject: [PATCH] Added deconstructor to CbmStsUnpackMonitor which deletes all histograms and canvases. Set axes of several histograms to adaptive and adjusted ranges to account for new timing convention. --- .../detectors/sts/unpack/CbmStsUnpackAlgo.cxx | 9 +--- .../sts/unpack/CbmStsUnpackMonitor.cxx | 47 ++++++++++++------- .../sts/unpack/CbmStsUnpackMonitor.h | 2 - 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx index d9e52e169b..7eb60a6fd6 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx @@ -33,7 +33,6 @@ uint32_t CbmStsUnpackAlgo::getAsicIndex(uint32_t dpbidx, uint32_t crobidx, uint1 if (febtype == 1) asicidx = fElinkIdxToAsicIdxVec.at(elinkidx).second; // else would be inactive feb, this was not handled in the previous implementation, this I expect it should not happen - uint32_t uAsicIdx = (dpbidx * fNrCrobPerDpb + crobidx) * fNrAsicsPerCrob + asicidx; return uAsicIdx; } @@ -82,7 +81,6 @@ void CbmStsUnpackAlgo::initDpbIdIndexMap(CbmMcbm2018StsPar* parset) } } - // ---- initParSet(FairParGenericSet* parset) ---- Bool_t CbmStsUnpackAlgo::initParSet(FairParGenericSet* parset) { @@ -509,8 +507,8 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess) auto tsreltime = static_cast<uint64_t>((ulHitTime - (fTsStartTime / stsxyter::kdClockCycleNs)) * stsxyter::kdClockCycleNs); */ - double_t tsreltime = ulHitTime * stsxyter::kdClockCycleNs; - double dTimeInNs = tsreltime - fSystemTimeOffset; + const double_t tsreltime = ulHitTime * stsxyter::kdClockCycleNs; + double dTimeInNs = tsreltime - fSystemTimeOffset; if (uAsicIdx < fvdTimeOffsetNsAsics.size()) dTimeInNs -= fvdTimeOffsetNsAsics[uAsicIdx]; const uint64_t ulTimeInNs = static_cast<uint64_t>(dTimeInNs); @@ -520,10 +518,7 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess) LOG(error) << Form("Digi on disabled FEB %02u has address 0x%08x and side %d", uFebIdx, fviFebAddress[uFebIdx], fviFebSide[uFebIdx]); } - fOutputVec.emplace_back(CbmStsDigi(fviFebAddress[uFebIdx], uChanInMod, ulTimeInNs, dCalAdc)); - // REMARK This seems to be double looping, I do not see any reason here, to first store the stsxyter hits in a vector over which we loop afterwards again. May be I miss something @sts-experts? - // fvmHitsInMs.push_back(stsxyter::FinalHit(ulHitTime, usRawAdc, uAsicIdx, usChan, fuCurrDpbIdx, uCrobIdx)); } } diff --git a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx index 975ea19115..5c8185eb62 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx @@ -30,7 +30,17 @@ CbmStsUnpackMonitor::CbmStsUnpackMonitor(/* args */) : fvpAllHistoPointers() } } -CbmStsUnpackMonitor::~CbmStsUnpackMonitor() {} +CbmStsUnpackMonitor::~CbmStsUnpackMonitor() +{ + for (auto iter = fvpAllHistoPointers.begin(); iter != fvpAllHistoPointers.end();) { + if (iter->first != nullptr) { delete iter->first; } + iter = fvpAllHistoPointers.erase(iter); + } + for (auto iter = fvpAllCanvasPointers.begin(); iter != fvpAllCanvasPointers.end();) { + if (iter->first != nullptr) { delete iter->first; } + iter = fvpAllCanvasPointers.erase(iter); + } +} Bool_t CbmStsUnpackMonitor::CreateHistograms(CbmMcbm2018StsPar* pUnpackPar) { @@ -42,11 +52,12 @@ Bool_t CbmStsUnpackMonitor::CreateHistograms(CbmMcbm2018StsPar* pUnpackPar) const UInt_t uNbChanPerFeb = pUnpackPar->GetNbChanPerFeb(); /// Create general unpacking histograms - fhDigisTimeInRun = - new TH1I("hStsDigisTimeInRun", "Digis Nb vs Time in Run; Time in run [s]; Digis Nb []", 36000, 0, 3600); + fhDigisTimeInRun = new TH1I("hStsDigisTimeInRun", "Digis Nb vs Time in Run; Time in run [s]; Digis Nb []", 10, 0, 1); + fhDigisTimeInRun->SetCanExtend(TH1::kAllAxes); AddHistoToVector(fhDigisTimeInRun, ""); - fhVectorSize = new TH1I("fhVectorSize", "Size of the vector VS TS index; TS index; Size [bytes]", 10000, 0., 10000.); + fhVectorSize = new TH1I("fhVectorSize", "Size of the vector VS TS index; TS index; Size [bytes]", 10, 0, 10); + fhVectorSize->SetCanExtend(TH1::kAllAxes); AddHistoToVector(fhVectorSize, ""); fhVectorCapacity = @@ -62,13 +73,15 @@ Bool_t CbmStsUnpackMonitor::CreateHistograms(CbmMcbm2018StsPar* pUnpackPar) /// Hit rates evo per FEB in system sHistName = "hStsAllFebsHitRateEvo"; title = "Hits per second & FEB; Time [s]; FEB []; Hits []"; - fhStsAllFebsHitRateEvo = new TH2I(sHistName, title, 1800, 0, 1800, uNbFebs, -0.5, uNbFebs - 0.5); + fhStsAllFebsHitRateEvo = new TH2I(sHistName, title, 5, 0, 5, uNbFebs, -0.5, uNbFebs - 0.5); + fhStsAllFebsHitRateEvo->SetCanExtend(TH1::kAllAxes); AddHistoToVector(fhStsAllFebsHitRateEvo, ""); /// Hit rates evo per ASIC in system sHistName = "hStsAllAsicsHitRateEvo"; title = "Hits per second & ASIC; Time [s]; ASIC []; Hits []"; - fhStsAllAsicsHitRateEvo = new TH2I(sHistName, title, 1800, 0, 1800, uNbAsics, -0.5, uNbAsics - 0.5); + fhStsAllAsicsHitRateEvo = new TH2I(sHistName, title, 5, 0, 5, uNbAsics, -0.5, uNbAsics - 0.5); + fhStsAllAsicsHitRateEvo->SetCanExtend(TH1::kAllAxes); AddHistoToVector(fhStsAllAsicsHitRateEvo, ""); /// Hit counts map in system @@ -141,40 +154,42 @@ Bool_t CbmStsUnpackMonitor::CreateHistograms(CbmMcbm2018StsPar* pUnpackPar) title = Form("Missed Evt flags per second & channel in FEB #%03u; Time " "[s]; Channel []; Missed Evt flags []", uFebIdx); - fvhStsFebChanMissEvtEvo.push_back( - new TH2I(sHistName, title, 1800, 0, 1800, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5)); + fvhStsFebChanMissEvtEvo.push_back(new TH2I(sHistName, title, 5, 0, 5, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5)); + fvhStsFebChanMissEvtEvo.back()->SetCanExtend(TH1::kAllAxes); /// Missed event flag counts evolution sHistName = Form("hStsFebAsicMissEvtEvo_%03u", uFebIdx); title = Form("Missed Evt flags per second & StsXyter in FEB #%03u; Time " "[s]; Asic []; Missed Evt flags []", uFebIdx); - fvhStsFebAsicMissEvtEvo.push_back( - new TH2I(sHistName, title, 1800, 0, 1800, uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5)); + fvhStsFebAsicMissEvtEvo.push_back(new TH2I(sHistName, title, 5, 0, 5, uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5)); + fvhStsFebAsicMissEvtEvo.back()->SetCanExtend(TH1::kAllAxes); /// Missed event flag counts evolution sHistName = Form("hStsFebMissEvtEvo_%03u", uFebIdx); title = Form("Missed Evt flags per second & channel in FEB #%03u; Time " "[s]; Missed Evt flags []", uFebIdx); - fvhStsFebMissEvtEvo.push_back(new TH1I(sHistName, title, 1800, 0, 1800)); + fvhStsFebMissEvtEvo.push_back(new TH1I(sHistName, title, 5, 0, 5)); + fvhStsFebMissEvtEvo.back()->SetCanExtend(TH1::kAllAxes); /// Hit rates evo per channel sHistName = Form("hStsFebChanRateEvo_%03u", uFebIdx); title = Form("Hits per second & channel in FEB #%03u; Time [s]; Channel []; Hits []", uFebIdx); - fvhStsFebChanHitRateEvo.push_back( - new TH2I(sHistName, title, 1800, 0, 1800, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5)); + fvhStsFebChanHitRateEvo.push_back(new TH2I(sHistName, title, 5, 0, 5, uNbChanPerFeb, -0.5, uNbChanPerFeb - 0.5)); + fvhStsFebChanHitRateEvo.back()->SetCanExtend(TH1::kAllAxes); /// Hit rates evo per StsXyter sHistName = Form("hStsFebAsicRateEvo_%03u", uFebIdx); title = Form("Hits per second & StsXyter in FEB #%03u; Time [s]; Asic []; Hits []", uFebIdx); - fvhStsFebAsicHitRateEvo.push_back( - new TH2I(sHistName, title, 1800, 0, 1800, uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5)); + fvhStsFebAsicHitRateEvo.push_back(new TH2I(sHistName, title, 5, 0, 5, uNbAsicsPerFeb, -0.5, uNbAsicsPerFeb - 0.5)); + fvhStsFebAsicHitRateEvo.back()->SetCanExtend(TH1::kAllAxes); /// Hit rates evo per FEB sHistName = Form("hStsFebRateEvo_%03u", uFebIdx); title = Form("Hits per second in FEB #%03u; Time [s]; Hits []", uFebIdx); - fvhStsFebHitRateEvo.push_back(new TH1I(sHistName, title, 1800, 0, 1800)); + fvhStsFebHitRateEvo.push_back(new TH1I(sHistName, title, 5, 0, 5)); + fvhStsFebHitRateEvo.back()->SetCanExtend(TH1::kAllAxes); /// Hit rates evo per channel, 1 minute bins, 24h sHistName = Form("hStsFebChanRateEvoLong_%03u", uFebIdx); diff --git a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.h b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.h index 29c76af75d..8246c93201 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.h @@ -19,8 +19,6 @@ #include "StsXyterMessage.h" -/** @remark On pointers to histograms: Why not use shared pointers here, than you do not need to take care of deleting them. Right now I think you have a massive memory leak. PR */ - class CbmQaCanvas; class CbmStsUnpackMonitor { -- GitLab