CbmRoot
Loading...
Searching...
No Matches
MainConfig.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
6
7#include <fstream>
8
9#include <yaml-cpp/yaml.h>
10
11namespace cbm::algo
12{
13
14 // ----- Load configuration from YAML file --------------------------------
15 void MainConfig::LoadYaml(const std::string& filename)
16 {
17 YAML::Node config = YAML::LoadFile(filename);
18
19 // --- Digi trigger
20 auto sTriggerDet = config["trigger"]["detector"].as<std::string>();
23 throw std::runtime_error("MainConfig: Invalid trigger det. " + sTriggerDet);
24 }
25 fTriggerWin = config["trigger"]["window"].as<double>();
26 fTriggerThreshold = config["trigger"]["threshold"].as<size_t>();
27 fTriggerDeadTime = config["trigger"]["deadtime"].as<double>();
28
29 // --- Event builder: (detector -> (tMin, tMax))
30 if (auto eventbuilder = config["eventbuilder"]) {
31 if (auto windows = eventbuilder["windows"]) {
32 for (YAML::const_iterator it = windows.begin(); it != windows.end(); ++it) {
33 auto det = util::FromString<ECbmModuleId>(sTriggerDet, false);
34 if (!det.has_value()) {
35 throw std::runtime_error("MainConfig: Invalid detector " + it->first.as<std::string>());
36 }
37 auto lower = it->second[0].as<double>();
38 auto upper = it->second[1].as<double>();
39 fEvtbuildWindows[det.value()] = std::make_pair(lower, upper);
40 }
41 }
42 }
43
44 // --- Event selector parameters
45 fSelectMinStationsSts = config["selector"]["minStationsSts"].as<size_t>();
46 fSelectMinStationsTof = config["selector"]["minStationsTof"].as<size_t>();
47 fSelectMinDigisBmon = config["selector"]["minDigisBmon"].as<size_t>();
48
49 // --- Branch persistence in output file
50 fStoreTimeslice = config["store"]["timeslice"].as<bool>();
51 fStoreTrigger = config["store"]["triggers"].as<bool>();
52 fStoreEvents = config["store"]["events"].as<bool>();
53
54 // --- QA publishing
55 fHttpServerRefreshRate = config["qa"]["refreshrate"].as<int32_t>(fHttpServerRefreshRate);
56 }
57 // ----------------------------------------------------------------------------
58
59
60 // ----- Save configuration to YAML file ----------------------------------
61 void MainConfig::SaveYaml(const std::string& filename)
62 {
63 YAML::Node config;
64
65 // --- Digi trigger
66 config["trigger"]["detector"] = std::string(util::ToString(fTriggerDet));
67 config["trigger"]["window"] = fTriggerWin;
68 config["trigger"]["threshold"] = fTriggerThreshold;
69 config["trigger"]["deadtime"] = fTriggerDeadTime;
70
71 // --- Event builder: (detector -> (tMin, tMax))
72 for (const auto& [key, value] : fEvtbuildWindows) {
73 auto det = std::string(util::ToString(key));
74 config["eventbuilder"]["windows"][det].push_back(value.first);
75 config["eventbuilder"]["windows"][det].push_back(value.second);
76 };
77
78 // --- Event selector
79 config["selector"]["minStationsSts"] = fSelectMinStationsSts;
80 config["selector"]["minStationsTof"] = fSelectMinStationsTof;
81 config["selector"]["minDigisBmon"] = fSelectMinDigisBmon;
82
83
84 // --- Branch persistence in output file
85 config["store"]["timeslice"] = fStoreTimeslice;
86 config["store"]["triggers"] = fStoreTrigger;
87 config["store"]["events"] = fStoreEvents;
88 // --- QA publishing
89 config["qa"]["refreshrate"] = fHttpServerRefreshRate;
90 // ---
91 std::ofstream fout(filename);
92 fout << config;
93 }
94 // ----------------------------------------------------------------------------
95
96} /* namespace cbm::algo */
@ kNotExist
If not found.
Definition CbmDefs.h:68
void SaveYaml(const std::string &filename)
Save to YAML file.
ECbmModuleId fTriggerDet
Definition MainConfig.h:37
int32_t fHttpServerRefreshRate
Definition MainConfig.h:56
void LoadYaml(const std::string &filename)
Load from YAML file.
std::map< ECbmModuleId, std::pair< double, double > > fEvtbuildWindows
Definition MainConfig.h:43
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