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
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 = ToCbmModuleIdCaseInsensitive(settings["evbuild"]["triggerDetector"].as<string>());
44 f_evbuild_trigNumMin = settings["evbuild"]["minNumDigis"].as<int64_t>();
45 f_evbuild_trigNumMax = settings["evbuild"]["maxNumDigis"].as<int64_t>();
46 f_evbuild_trigWinMin = settings["evbuild"]["trigWinMin"].as<float>();
47 f_evbuild_trigWinMax = settings["evbuild"]["trigWinMax"].as<float>();
48
49 // --- STS
50 f_sts_usegpu = settings["sts"]["usegpu"].as<bool>();
51
52 // --- TRD
53 f_trd_trigThresh = settings["trd"]["trigThresh"].as<double>();
54
55 // --- littrack
56 f_lit_trackType = settings["littrack"]["trackingType"].as<string>();
57 f_lit_mergeType = settings["littrack"]["mergingType"].as<string>();
58 }
59 // ----------------------------------------------------------------------------
60
61
62 // ------ String to ECbmEvbuildType ---------------------------------------
64 {
65 string temp = choice;
66 std::transform(temp.begin(), temp.end(), temp.begin(), [](unsigned char c) { return std::tolower(c); });
67 if (temp == "ideal")
69 else if (temp == "real")
71 else
73 }
74 // ----------------------------------------------------------------------------
75
76
77 // ------ String to ECbmRecoMode ------------------------------------------
79 {
80 string temp = choice;
81 std::transform(temp.begin(), temp.end(), temp.begin(), [](unsigned char c) { return std::tolower(c); });
82 if (temp == "timeslice")
84 else if (temp == "event")
86 else
88 }
89 // ----------------------------------------------------------------------------
90
91
92 // ------ String to EOverlapModeRaw ---------------------------------------
94 {
95 string temp = choice;
96 std::transform(temp.begin(), temp.end(), temp.begin(), [](unsigned char c) { return std::tolower(c); });
97 if (temp == "no")
99 else if (temp == "allow")
101 else if (temp == "merge")
103 else
105 }
106 // ----------------------------------------------------------------------------
107
108
109 // ----- ECbmEvbuildType to string ----------------------------------------
111 {
112 if (type == ECbmEvbuildType::Ideal)
113 return "ideal";
114 else if (type == ECbmEvbuildType::Real)
115 return "real";
116 else
117 return "undefined";
118 }
119 // ----------------------------------------------------------------------------
120
121
122 // ----- ECbmRecoMode to string -------------------------------------------
124 {
125 if (mode == ECbmRecoMode::Timeslice)
126 return "timeslice";
127 else if (mode == ECbmRecoMode::EventByEvent)
128 return "event";
129 else
130 return "undefined";
131 }
132 // ----------------------------------------------------------------------------
133
134
135 // ----- EOverlapMode to string -------------------------------------------
137 {
138 if (mode == EOverlapModeRaw::NoOverlap)
139 return "no";
140 else if (mode == EOverlapModeRaw::AllowOverlap)
141 return "allow";
142 else if (mode == EOverlapModeRaw::MergeOverlap)
143 return "merge";
144 else
145 return "undefined";
146 }
147 // ----------------------------------------------------------------------------
148
149
150 // ----- Save settings to YAML node ---------------------------------------
151 YAML::Node Config::ToYaml()
152 {
153 YAML::Node settings;
154
155 // --- Global settings
156 settings["global"]["log_level"] = f_glb_logLevel;
157 settings["global"]["log_verbose"] = f_glb_logVerbose;
158 settings["global"]["log_color"] = f_glb_logColor;
159 settings["global"]["mode"] = ToString(f_glb_mode);
160 settings["global"]["nTimeslices"] = f_glb_numTs;
161 settings["global"]["firstTimeslice"] = f_glb_firstTs;
162
163 // --- Event builder
164 settings["evbuild"]["type"] = ToString(f_evbuild_type);
165 settings["evbuild"]["overlap"] = ToString(f_evbuild_ovlapmode);
166 settings["evbuild"]["triggerDetector"] = ::ToString(f_evbuild_trigDet);
167 settings["evbuild"]["minNumDigis"] = f_evbuild_trigNumMin;
168 settings["evbuild"]["maxNumDigis"] = f_evbuild_trigNumMax;
169 settings["evbuild"]["trigWinMin"] = f_evbuild_trigWinMin;
170 settings["evbuild"]["trigWinMax"] = f_evbuild_trigWinMax;
171
172 // --- STS
173 settings["sts"]["usegpu"] = f_sts_usegpu;
174
175 // --- TRD
176 settings["trd"]["trigThresh"] = f_trd_trigThresh;
177
178 // --- littrack
179 settings["littrack"]["trackingType"] = f_lit_trackType;
180 settings["littrack"]["mergingType"] = f_lit_mergeType;
181
182 return settings;
183 }
184 // ----------------------------------------------------------------------------
185
186} // namespace cbm::reco::offline
ECbmModuleId ToCbmModuleIdCaseInsensitive(std::string modIdStr)
Definition CbmDefs.cxx:86
ECbmRecoMode
Reconstruct the full time slice or event-by-event.
Definition CbmDefs.h:162
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.