Skip to content
Snippets Groups Projects
Commit e8770d97 authored by Dominik Smith's avatar Dominik Smith Committed by Felix Weiglhofer
Browse files

Integrated cbm::algo::Calibrate into cbm::algo::Reco.

parent 81495853
No related branches found
No related tags found
1 merge request!1450Separated TOF calibration from hitfinding. Integrated new calibrator class into cbm::algo::Reco.
Pipeline #25085 passed
......@@ -95,6 +95,7 @@ set(SRCS
detectors/tof/Unpack.cxx
detectors/tof/Hitfind.cxx
detectors/tof/HitfinderChain.cxx
detectors/tof/CalibratorChain.cxx
detectors/bmon/ReadoutConfig.cxx
detectors/bmon/Unpack.cxx
detectors/trd/ReadoutConfig.cxx
......
......@@ -15,7 +15,7 @@ using fles::Subsystem;
namespace cbm::algo::tof
{
// ----- Execution -------------------------------------------------------
Calibrate::resultType Calibrate::operator()(gsl::span<CbmTofDigi> digiIn)
Calibrate::resultType Calibrate::operator()(gsl::span<const CbmTofDigi> digiIn)
{
xpu::push_timer("TofCalibrate");
xpu::t_add_bytes(digiIn.size_bytes());
......@@ -97,7 +97,6 @@ namespace cbm::algo::tof
}
monitor.fTime = xpu::pop_timer();
L_(debug) << MakeReport("Calibrate", monitor.fTime);
return result;
}
......
......@@ -29,6 +29,7 @@ namespace cbm::algo::tof
**/
struct CalibrateMonitorData {
xpu::timings fTime;
size_t fNumDigis = 0;
size_t fDigiCalibUnknownRPC = 0;
std::string print() const
......@@ -56,7 +57,7 @@ namespace cbm::algo::tof
**
** @note Modifies input digis for time calibration
**/
resultType operator()(gsl::span<CbmTofDigi> digiIn);
resultType operator()(gsl::span<const CbmTofDigi> digiIn);
/** @brief Default constructor **/
Calibrate() {};
......@@ -68,8 +69,6 @@ namespace cbm::algo::tof
tof::HitfindSetup fTofConfig {};
private: // members
/** @brief Applies calibration to input digis **/
std::vector<CbmTofDigi> CalibRawDigis(gsl::span<CbmTofDigi> digiVec, CalibrateMonitorData& monitor);
};
} // namespace cbm::algo::tof
......
/* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Dominik Smith [committer], Felix Weiglhofer */
#include "CalibratorChain.h"
#include "config/Yaml.h"
using namespace cbm::algo;
using namespace cbm::algo::tof;
void CalibratorChain::Init()
{
auto setup = config::ReadFromFile<HitfindSetup>(Opts().ParamsDir() / "TofHitfinderPar.yaml");
fCalibrate = std::make_unique<Calibrate>();
fCalibrate->fTofConfig = setup;
}
CalibratorChain::ReturnType CalibratorChain::Run(gsl::span<CbmTofDigi> digis)
{
auto ret = (*fCalibrate)(digis);
L_(error) << "TOF Digis with unknown RPCs: " << std::get<1>(ret).fDigiCalibUnknownRPC;
return ret;
}
/* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Dominik Smith [committer], Felix Weiglhofer */
#pragma once
#include "CbmTofDigi.h"
#include <gsl/span>
#include <memory>
#include "Calibrate.h"
#include "HitfindSetup.h"
#include "SubChain.h"
namespace cbm::algo::tof
{
class CalibratorChain : public SubChain {
public:
using ReturnType = Calibrate::resultType;
CalibratorChain() = default;
~CalibratorChain() = default;
void Init();
/**
* @brief Apply calibration to digis
*/
ReturnType Run(gsl::span<CbmTofDigi> digis);
private:
std::unique_ptr<Calibrate> fCalibrate;
};
} // namespace cbm::algo::tof
......@@ -81,7 +81,6 @@ namespace cbm::algo::tof
monitor.fTime = xpu::pop_timer();
monitor.fNumDigis = digiIn.size();
monitor.fNumHits = clustersFlat.size();
L_(debug) << MakeReport("Hitfind", monitor.fTime);
// Create ouput vector
clusterTs = PartitionedVector(std::move(clustersFlat), rpcSizes, rpcAddresses);
......
......@@ -87,6 +87,7 @@ void Reco::Init(const Options& opts)
// TOF Hitfinder
fTofHitFinder.Init();
fTofCalibrator.Init();
// Tracking
fTracking.Init();
......@@ -153,9 +154,11 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
PartitionedVector<tof::Hit> tofHits;
if (Opts().HasStep(Step::LocalReco) && Opts().HasDetector(fles::Subsystem::TOF)) {
auto [hits, monitor, caldigis] = fTofHitFinder.Run(unpackResult.first.fTof);
tofHits = std::move(hits);
QueueTofRecoMetrics(monitor);
auto [caldigis, calmonitor] = fTofCalibrator.Run(unpackResult.first.fTof);
auto [hits, hitmonitor] = fTofHitFinder.Run(caldigis);
tofHits = std::move(hits);
QueueTofCalibMetrics(calmonitor);
QueueTofRecoMetrics(hitmonitor);
}
// --- Tracking
......@@ -294,6 +297,20 @@ void Reco::QueueTofRecoMetrics(const tof::HitfindMonitorData& mon)
});
}
void Reco::QueueTofCalibMetrics(const tof::CalibrateMonitorData& mon)
{
if (!HasMonitor()) return;
GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}, {"child", Opts().ChildId()}},
{
{"tofCalibTimeTotal", mon.fTime.wall()},
{"tofCalibThroughput", mon.fTime.throughput()},
{"tofCalibNumDigisIn", mon.fNumDigis},
{"tofCalibUnknownRPC", mon.fDigiCalibUnknownRPC},
});
}
void Reco::QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData& mon)
{
if (!HasMonitor()) return;
......
......@@ -4,6 +4,7 @@
#ifndef CBM_ALGO_GLOBAL_RECO_H
#define CBM_ALGO_GLOBAL_RECO_H
#include "tof/CalibratorChain.h"
#include "tof/HitfinderChain.h"
#include <xpu/host.h>
......@@ -58,6 +59,7 @@ namespace cbm::algo
// TOF
tof::HitfinderChain fTofHitFinder;
tof::CalibratorChain fTofCalibrator;
// Eventbuilding
std::unique_ptr<evbuild::EventbuildChain> fEventBuild;
......@@ -70,6 +72,7 @@ namespace cbm::algo
void QueueUnpackerMetrics(const fles::Timeslice&, const UnpackMonitorData&, const DigiData&);
void QueueStsRecoMetrics(const sts::HitfinderMonitor&);
void QueueTofRecoMetrics(const tof::HitfindMonitorData&);
void QueueTofCalibMetrics(const tof::CalibrateMonitorData&);
void QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData&);
void QueueTrackingMetrics(const ca::TrackingMonitorData&);
void QueueProcessingMetrics(const ProcessingMonitor&);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment