CbmRoot
Loading...
Searching...
No Matches
CbmRecoSetupManager.cxx
Go to the documentation of this file.
1/* Copyright (C) 2025 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10#include "CbmRecoSetupManager.h"
11
12#include "CbmDigiManager.h"
16#include "CbmSetup.h"
20
21#include <FairRun.h>
22#include <FairRuntimeDb.h>
23#include <Logger.h>
24
25#include <type_traits>
26#include <utility>
27
29
30
31// ---------------------------------------------------------------------------------------------------------------------
32//
33RecoSetupManager::RecoSetupManager() : FairTask("cbm::RecoSetupManager", 0) {}
34
35// ---------------------------------------------------------------------------------------------------------------------
36//
38{
39 if (fGeoNodeMap == nullptr) {
40 LOG(warn) << "cbm::RecoSetupManager: the geo node map was not built. Please, request the geo node map building "
41 "with the cbm::RecoSetupManager::Instance()->BuildGeoNodeMaps() method at a point of registering "
42 "the task in FairRunAna";
43 return false;
44 }
45
46 return true;
47}
48
49// ---------------------------------------------------------------------------------------------------------------------
50//
52try {
53 //CbmDigiManager::Instance()->Init();
54
55 auto CreateSetupUnit = [&](auto&& factory) {
56 using RecoSetupUnit_t = typename std::remove_reference_t<decltype(factory)>::RecoSetupUnit_t;
57 LOG(info) << "Creating reconstruction setup unit for " << RecoSetupUnit_t::GetDetectorName();
58 return factory.Create();
59 };
60
61 GeoNodeMapBuilder nodeMapBuilder;
62
63 if (CbmSetup::Instance()->IsActive(ECbmModuleId::kMuch)) {
64 fSetup.SetMuch(std::move(CreateSetupUnit(much::RecoSetupUnitFactory{})));
65 nodeMapBuilder.Request(ECbmModuleId::kMuch);
66 }
67 if (CbmSetup::Instance()->IsActive(ECbmModuleId::kMvd)) {
68 fSetup.SetMvd(std::move(CreateSetupUnit(mvd::RecoSetupUnitFactory{})));
69 nodeMapBuilder.Request(ECbmModuleId::kMvd);
70 }
71 if (CbmSetup::Instance()->IsActive(ECbmModuleId::kSts)) {
72 fSetup.SetSts(std::move(CreateSetupUnit(sts::RecoSetupUnitFactory{})));
73 nodeMapBuilder.Request(ECbmModuleId::kSts);
74 }
75 if (CbmSetup::Instance()->IsActive(ECbmModuleId::kTof)) {
76 fSetup.SetTof(std::move(CreateSetupUnit(tof::RecoSetupUnitFactory{})));
77 nodeMapBuilder.Request(ECbmModuleId::kTof);
78 }
79 if (CbmSetup::Instance()->IsActive(ECbmModuleId::kTrd)) {
80 fSetup.SetTrd(std::move(CreateSetupUnit(trd::RecoSetupUnitFactory{})));
81 nodeMapBuilder.Request(ECbmModuleId::kTrd);
82 }
83
85 LOG(info) << "RecoSetupManager: building geo-node map ...";
86 fGeoNodeMap = std::make_shared<const GeoNodeMap>(std::move(nodeMapBuilder.Build()));
87 LOG(info) << "RecoSetupManager: building geo-node map ... done";
88 }
89
90 LOG(info) << fSetup.ToString();
91
92 fbInitialized = true;
93
94 if (!fSetupOutFilename.empty()) {
95 LOG(info) << "RecoSetupManger: storing setup to file " << fSetupOutFilename;
96 if (!fbInitialized) {
97 throw std::logic_error("cbm::RecoSetupManager: attempt to store a setup from uninitialized manager instance");
98 }
99
101 LOG(info) << "RecoSetupManger: storing setup to file: done";
102 }
103
104 return kSUCCESS;
105}
106catch (const std::exception& err) {
107 LOG(error) << "RecoSetupManager: Initialization failed, because " << err.what();
108 return kFATAL;
109}
110
111// ---------------------------------------------------------------------------------------------------------------------
112//
114{
115 static RecoSetupManager instance;
116 return &instance;
117}
118
119// ---------------------------------------------------------------------------------------------------------------------
120//
122{
123 if (!fbInitialized) {
124 LOG(error) << "The cbm::RecoSetupManager is not initialized. Please, register the cbm::RecoSetupManager instance "
125 "as a FairTask in your FairRunAna: \n run->AddTask(cbm::RecoSetupManager::Instance())";
126 }
127 return fbInitialized;
128}
129
130// ---------------------------------------------------------------------------------------------------------------------
131//
132void RecoSetupManager::LoadSetup(const std::string& filename)
133{
134 LOG(info) << "RecoSetupManger: loading setup from file " << filename;
135 fSetup = std::move(algo::RecoSetup::Load(filename));
136 LOG(info) << "RecoSetupManger: loading setup from file: done";
137}
138
139// ---------------------------------------------------------------------------------------------------------------------
140//
142{
143 // Touch the containers to force their creation and initialization
144 auto* db = FairRun::Instance()->GetRuntimeDb();
145 // STS
146 db->getContainer("CbmStsParSetModule");
147 db->getContainer("CbmStsParSetSensor");
148 db->getContainer("CbmStsParSetSensorCond");
149 // TRD
150 db->getContainer("CbmTrdParSetAsic");
151 db->getContainer("CbmTrdParSetGas");
152 db->getContainer("CbmTrdParSetDigi");
153 db->getContainer("CbmTrdParSetGain");
154 db->getContainer("CbmTrdParSetGeo");
155 // TOF
156 db->getContainer("CbmTofDigiPar");
157 db->getContainer("CbmTofDigiBdfPar");
158}
@ kMvd
Micro-Vertex Detector.
Definition CbmDefs.h:47
@ kTrd
Transition Radiation Detector.
Definition CbmDefs.h:51
@ kTof
Time-of-flight Detector.
Definition CbmDefs.h:52
@ kSts
Silicon Tracking System.
Definition CbmDefs.h:48
@ kMuch
Muon detection system.
Definition CbmDefs.h:50
A builder for the cbm::GeoNodeMap class (source)
A factory for the MuCh RecoSetupUnit.
A factory for the MVD RecoSetupUnit.
A manager for setup representation in CBM reconstruction.
A factory for the STS RecoSetupUnit.
A factory for the TOF RecoSetupUnit.
A factory for the TOF RecoSetupUnit.
static CbmSetup * Instance()
Definition CbmSetup.cxx:160
RecoSetupManager()
Constructor.
A builder for GeoNodeMap in CBM.
void Request(ECbmModuleId moduleId)
Requests the builder to add geo-nodes for the detector subsystem.
GeoNodeMap Build() const
Builds the geo-node map.
A manager for setup representation in CBM reconstruction.
std::shared_ptr< const GeoNodeMap > fGeoNodeMap
A mapper for node address -> path in TGeoManager.
RecoSetupManager(const RecoSetupManager &)=delete
static RecoSetupManager * Instance()
Instance access.
bool fbInitialized
Flag, if the instance was initialized.
bool IsInitialized() const
Returns initialization status.
algo::RecoSetup fSetup
Instance of reconstruction setup.
void LoadSetup(const std::string &filename)
Loads setup from a binary file.
void SetParContainers() override
Sets parameter containers for different subsystems.
bool fbBuildGeoNodeMaps
Flag, if to create the geo node map.
bool HasGeoNodeMaps() const
Checks, if the geo node maps were built.
std::string fSetupOutFilename
Output name for the setup (if not empty, the setup is stored)
InitStatus Init() override
Initialization method.
static RecoSetup Load(const std::string &filename)
Loads setup from a file.
Definition RecoSetup.cxx:42
static void Store(const RecoSetup &setup, const std::string &filename)
Stores setup in a file.
Definition RecoSetup.cxx:69
A factory class for the MuCh RecoSetupUnit.
A factory class for the MVD RecoSetupUnit.
A factory class for the STS RecoSetupUnit.
A builder class for the STS RecoSetupUnit.
A factory class for the STS RecoSetupUnit.