diff --git a/algo/detectors/sts/StsHitfinder.h b/algo/detectors/sts/StsHitfinder.h index f41ce3354cfdff4d0dd86d865e9f560759441f22..e1f80a47e7f6855e1dd24c7fa26c200c064a32b5 100644 --- a/algo/detectors/sts/StsHitfinder.h +++ b/algo/detectors/sts/StsHitfinder.h @@ -112,8 +112,11 @@ namespace cbm::algo::sts }; struct HitfinderMonitor { - u32 fNumClusterBucketOverflow = 0; - u32 fNumHitBucketOverflow = 0; + i32 fNumClusterBucketOverflow = 0; + i32 fNumHitBucketOverflow = 0; + u64 fNumClusterTotal = 0; + u64 fNumHitsTotal = 0; + f64 fTimeTotal = 0.; bool HasErrors() const { return fNumClusterBucketOverflow > 0 || fNumHitBucketOverflow > 0; } }; diff --git a/algo/detectors/sts/StsHitfinderChain.cxx b/algo/detectors/sts/StsHitfinderChain.cxx index e1bde280a4ebff83a0e72c7018d6833f5c6c72a6..5fe1579989238a0aacd0c04d2bc26c8aa4c95a26 100644 --- a/algo/detectors/sts/StsHitfinderChain.cxx +++ b/algo/detectors/sts/StsHitfinderChain.cxx @@ -23,11 +23,11 @@ void sts::HitfinderChain::Finalize() xpu::set<TheHitfinder>(fHitfinder); } -void sts::HitfinderChain::operator()(gsl::span<const CbmStsDigi> digis) +sts::HitfinderMonitor sts::HitfinderChain::operator()(gsl::span<const CbmStsDigi> digis) { EnsureParameters(); - xpu::scoped_timer t_("STS Hitfinder"); + xpu::push_timer("STS Hitfinder"); int nModules = fPars->modules.size(); int nModuleSides = nModules * 2; @@ -197,6 +197,13 @@ void sts::HitfinderChain::operator()(gsl::span<const CbmStsDigi> digis) xpu::k_add_bytes<FindHits>(nClustersTotal * sizeof(sts::Cluster)); L_(info) << "Timeslice contains " << nHitsTotal << " STS hits and " << nClustersTotal << " STS clusters"; + + auto timings = xpu::pop_timer(); + + monitor[0].fTimeTotal = timings.wall(); + monitor[0].fNumClusterTotal = nClustersTotal; + monitor[0].fNumHitsTotal = nHitsTotal; + return monitor[0]; } void sts::HitfinderChain::EnsureParameters() diff --git a/algo/detectors/sts/StsHitfinderChain.h b/algo/detectors/sts/StsHitfinderChain.h index 7bd7e0e6d088279b44c5380715aa3e1eb9413bb0..c811a19ab9c91a2c0981e8932b99fb989374465d 100644 --- a/algo/detectors/sts/StsHitfinderChain.h +++ b/algo/detectors/sts/StsHitfinderChain.h @@ -48,7 +48,7 @@ namespace cbm::algo::sts */ void Finalize(); - void operator()(gsl::span<const CbmStsDigi>); + sts::HitfinderMonitor operator()(gsl::span<const CbmStsDigi>); private: // Shorthands to map module-address onto digis in that module diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index 3dad3a6a01bebf3e7fd94c4a8e750c97653bca1c..72d87493c5d952dac4e04270053692e430806dbc 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -118,13 +118,14 @@ RecoResults Reco::Run(const fles::Timeslice& ts) std::vector<CbmDigiEvent> events; if (Opts().HasStep(Step::DigiTrigger)) events = fEventBuild.Run(digiTs); - + sts::HitfinderMonitor stsHitfinderMonitor; if (Opts().HasStep(Step::LocalReco) && Opts().HasDetector(fles::Subsystem::STS)) - fStsHitFinder(unpackResult.first.fData.fSts.fDigis); + stsHitfinderMonitor = fStsHitFinder(unpackResult.first.fData.fSts.fDigis); xpu::timings ts_times = xpu::pop_timer(); QueueUnpackerMetrics(ts, unpackMonitor, unpackResult.first); + QueueStsRecoMetrics(stsHitfinderMonitor); PrintTimings(ts_times); @@ -214,3 +215,17 @@ void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorDa {"unpackNumErrInvalidSysVer", monitor.fNumErrInvalidSysVer}, }); } + +void Reco::QueueStsRecoMetrics(const sts::HitfinderMonitor& monitor) +{ + if (!HasMonitor()) return; + + GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}}, + { + {"stsRecoTimeTotal", monitor.fTimeTotal}, + {"stsRecoNumClusters", monitor.fNumClusterTotal}, + {"stsRecoNumHits", monitor.fNumHitsTotal}, + {"stsRecoNumClusterBucketOverflow", monitor.fNumClusterBucketOverflow}, + {"stsRecoNumHitBucketOverflow", monitor.fNumHitBucketOverflow}, + }); +} diff --git a/algo/global/Reco.h b/algo/global/Reco.h index 8cd099c806e510f5f321ab1d3a2217f7bd7991e8..ce048fe559b9e55ba4ff6097134fdfb56cec2783 100644 --- a/algo/global/Reco.h +++ b/algo/global/Reco.h @@ -50,6 +50,7 @@ namespace cbm::algo void Validate(const Options& opts); void QueueUnpackerMetrics(const fles::Timeslice&, const UnpackMonitorData&, const CbmDigiTimeslice&); + void QueueStsRecoMetrics(const sts::HitfinderMonitor&); }; } // namespace cbm::algo