CbmRoot
Loading...
Searching...
No Matches
reco/offline/steer/Config.cxx
Go to the documentation of this file.
1/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Volker Friese [committer] */
4
9
10
11#include "Config.h"
12
13#include <Logger.h>
14
15#include <fstream>
16
17#include <yaml-cpp/yaml.h>
18
19using std::string;
20
21namespace cbm::reco::offline
22{
23
24
25 // ----- Load settings from YAML file -------------------------------------
26 void Config::LoadYaml(const string& fileName)
27 {
28
29 LOG(info) << "Config: Reading configuration from " << fileName;
30 YAML::Node settings = YAML::LoadFile(fileName);
31
32 // --- Global settings
33 f_glb_logLevel = settings["global"]["log_level"].as<string>();
34 f_glb_logVerbose = settings["global"]["log_verbose"].as<string>();
35 f_glb_logColor = settings["global"]["log_color"].as<string>();
36 f_glb_mode = ToCbmRecoMode(settings["global"]["mode"].as<string>());
37 f_glb_numTs = settings["global"]["nTimeslices"].as<Int_t>();
38 f_glb_firstTs = settings["global"]["firstTimeslice"].as<Int_t>();
39
40 // --- Event builder
41 f_evbuild_type = ToCbmEvbuildType(settings["evbuild"]["type"].as<string>());
42 f_evbuild_ovlapmode = ToOverlapModeRaw(settings["evbuild"]["overlap"].as<string>());
43 f_evbuild_trigDet = cbm::util::FromString<ECbmModuleId>(settings["evbuild"]["triggerDetector"].as<string>(), false)
44 .value_or(ECbmModuleId::kNotExist);
46 throw std::runtime_error("cbm::reco::offline::Config: invalid trigger detector "
47 + settings["evbuild"]["triggerDetector"].as<string>());
48 }
49
50
51 f_evbuild_trigNumMin = settings["evbuild"]["minNumDigis"].as<int64_t>();
52 f_evbuild_trigNumMax = settings["evbuild"]["maxNumDigis"].as<int64_t>();
53 f_evbuild_trigWinMin = settings["evbuild"]["trigWinMin"].as<float>();
54 f_evbuild_trigWinMax = settings["evbuild"]["trigWinMax"].as<float>();
55
56 // --- STS
57 f_sts_usegpu = settings["sts"]["usegpu"].as<bool>();
58
59 // --- TRD
60 f_trd_trigThresh = settings["trd"]["trigThresh"].as<double>();
61
62 // --- littrack
63 f_lit_trackType = settings["littrack"]["trackingType"].as<string>();
64 f_lit_mergeType = settings["littrack"]["mergingType"].as<string>();
65 }
66 // ----------------------------------------------------------------------------
67
68
69 // ------ String to ECbmEvbuildType ---------------------------------------
71 {
72 string temp = choice;
73 std::transform(temp.begin(), temp.end(), temp.begin(), [](unsigned char c) { return std::tolower(c); });
74 if (temp == "ideal")
76 else if (temp == "real")
78 else
80 }
81 // ----------------------------------------------------------------------------
82
83
84 // ------ String to ECbmRecoMode ------------------------------------------
86 {
87 string temp = choice;
88 std::transform(temp.begin(), temp.end(), temp.begin(), [](unsigned char c) { return std::tolower(c); });
89 if (temp == "timeslice")
91 else if (temp == "event")
93 else
95 }
96 // ----------------------------------------------------------------------------
97
98
99 // ------ String to EOverlapModeRaw ---------------------------------------
101 {
102 string temp = choice;
103 std::transform(temp.begin(), temp.end(), temp.begin(), [](unsigned char c) { return std::tolower(c); });
104 if (temp == "no")
106 else if (temp == "allow")
108 else if (temp == "merge")
110 else
112 }
113 // ----------------------------------------------------------------------------
114
115
116 // ----- ECbmEvbuildType to string ----------------------------------------
118 {
119 if (type == ECbmEvbuildType::Ideal)
120 return "ideal";
121 else if (type == ECbmEvbuildType::Real)
122 return "real";
123 else
124 return "undefined";
125 }
126 // ----------------------------------------------------------------------------
127
128
129 // ----- ECbmRecoMode to string -------------------------------------------
131 {
132 if (mode == ECbmRecoMode::Timeslice)
133 return "timeslice";
134 else if (mode == ECbmRecoMode::EventByEvent)
135 return "event";
136 else
137 return "undefined";
138 }
139 // ----------------------------------------------------------------------------
140
141
142 // ----- EOverlapMode to string -------------------------------------------
144 {
145 if (mode == EOverlapModeRaw::NoOverlap)
146 return "no";
147 else if (mode == EOverlapModeRaw::AllowOverlap)
148 return "allow";
149 else if (mode == EOverlapModeRaw::MergeOverlap)
150 return "merge";
151 else
152 return "undefined";
153 }
154 // ----------------------------------------------------------------------------
155
156
157 // ----- Save settings to YAML node ---------------------------------------
158 YAML::Node Config::ToYaml()
159 {
160 YAML::Node settings;
161
162 // --- Global settings
163 settings["global"]["log_level"] = f_glb_logLevel;
164 settings["global"]["log_verbose"] = f_glb_logVerbose;
165 settings["global"]["log_color"] = f_glb_logColor;
166 settings["global"]["mode"] = ToString(f_glb_mode);
167 settings["global"]["nTimeslices"] = f_glb_numTs;
168 settings["global"]["firstTimeslice"] = f_glb_firstTs;
169
170 // --- Event builder
171 settings["evbuild"]["type"] = ToString(f_evbuild_type);
172 settings["evbuild"]["overlap"] = ToString(f_evbuild_ovlapmode);
173 settings["evbuild"]["triggerDetector"] = std::string(cbm::util::ToString(f_evbuild_trigDet));
174 settings["evbuild"]["minNumDigis"] = f_evbuild_trigNumMin;
175 settings["evbuild"]["maxNumDigis"] = f_evbuild_trigNumMax;
176 settings["evbuild"]["trigWinMin"] = f_evbuild_trigWinMin;
177 settings["evbuild"]["trigWinMax"] = f_evbuild_trigWinMax;
178
179 // --- STS
180 settings["sts"]["usegpu"] = f_sts_usegpu;
181
182 // --- TRD
183 settings["trd"]["trigThresh"] = f_trd_trigThresh;
184
185 // --- littrack
186 settings["littrack"]["trackingType"] = f_lit_trackType;
187 settings["littrack"]["mergingType"] = f_lit_mergeType;
188
189 return settings;
190 }
191 // ----------------------------------------------------------------------------
192
193} // namespace cbm::reco::offline
ECbmRecoMode
Reconstruct the full time slice or event-by-event.
Definition CbmDefs.h:202
@ kNotExist
If not found.
Definition CbmDefs.h:68
int Int_t
YAML::Node ToYaml()
Save to YAML node.
EOverlapModeRaw ToOverlapModeRaw(std::string tag)
std::string ToString()
String output (YAML format)
ECbmEvbuildType ToCbmEvbuildType(std::string tag)
ECbmRecoMode ToCbmRecoMode(std::string tag)
void LoadYaml(const std::string &filename)
Load from YAML file.
std::optional< T > FromString(std::string_view str, bool caseSensitive=false)
Definition CbmEnumDict.h:50
std::string_view ToString(T t)
Definition CbmEnumDict.h:64