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
5#include "MainConfig.h"
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 fTriggerDet = ToCbmModuleIdCaseInsensitive(config["trigger"]["detector"].as<std::string>());
21 fTriggerWin = config["trigger"]["window"].as<double>();
22 fTriggerThreshold = config["trigger"]["threshold"].as<size_t>();
23 fTriggerDeadTime = config["trigger"]["deadtime"].as<double>();
24
25 // --- Event builder: (detector -> (tMin, tMax))
26 if (auto eventbuilder = config["eventbuilder"]) {
27 if (auto windows = eventbuilder["windows"]) {
28 for (YAML::const_iterator it = windows.begin(); it != windows.end(); ++it) {
29 auto det = ToCbmModuleIdCaseInsensitive(it->first.as<std::string>());
30 auto lower = it->second[0].as<double>();
31 auto upper = it->second[1].as<double>();
32 fEvtbuildWindows[det] = std::make_pair(lower, upper);
33 }
34 }
35 }
36
37 // --- Event selector parameters
38 fSelectMinStationsSts = config["selector"]["minStationsSts"].as<size_t>();
39 fSelectMinStationsTof = config["selector"]["minStationsTof"].as<size_t>();
40 fSelectMinDigisBmon = config["selector"]["minDigisBmon"].as<size_t>();
41
42 // --- Branch persistence in output file
43 fStoreTimeslice = config["store"]["timeslice"].as<bool>();
44 fStoreTrigger = config["store"]["triggers"].as<bool>();
45 fStoreEvents = config["store"]["events"].as<bool>();
46
47 // --- QA publishing
48 fHttpServerRefreshRate = config["qa"]["refreshrate"].as<int32_t>(fHttpServerRefreshRate);
49 }
50 // ----------------------------------------------------------------------------
51
52
53 // ----- Save configuration to YAML file ----------------------------------
54 void MainConfig::SaveYaml(const std::string& filename)
55 {
56 YAML::Node config;
57
58 // --- Digi trigger
59 config["trigger"]["detector"] = ToString(fTriggerDet);
60 config["trigger"]["window"] = fTriggerWin;
61 config["trigger"]["threshold"] = fTriggerThreshold;
62 config["trigger"]["deadtime"] = fTriggerDeadTime;
63
64 // --- Event builder: (detector -> (tMin, tMax))
65 for (const auto& [key, value] : fEvtbuildWindows) {
66 auto det = ToString(key);
67 config["eventbuilder"]["windows"][det].push_back(value.first);
68 config["eventbuilder"]["windows"][det].push_back(value.second);
69 };
70
71 // --- Event selector
72 config["selector"]["minStationsSts"] = fSelectMinStationsSts;
73 config["selector"]["minStationsTof"] = fSelectMinStationsTof;
74 config["selector"]["minDigisBmon"] = fSelectMinDigisBmon;
75
76
77 // --- Branch persistence in output file
78 config["store"]["timeslice"] = fStoreTimeslice;
79 config["store"]["triggers"] = fStoreTrigger;
80 config["store"]["events"] = fStoreEvents;
81 // --- QA publishing
82 config["qa"]["refreshrate"] = fHttpServerRefreshRate;
83 // ---
84 std::ofstream fout(filename);
85 fout << config;
86 }
87 // ----------------------------------------------------------------------------
88
89} /* namespace cbm::algo */
ECbmModuleId ToCbmModuleIdCaseInsensitive(std::string modIdStr)
Definition CbmDefs.cxx:86
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::string_view ToString(T t)
Definition EnumDict.h:64