CbmRoot
Loading...
Searching...
No Matches
DigiEventSelectorConfig.cxx
Go to the documentation of this file.
1/* Copyright (C) 2022-2025 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Shreya Roy. Pierre-Alain Loizeau, Volker Friese [committer], Dominik Smith, Sergei Zharko */
4
6
8
9#include <iomanip>
10
11namespace cbm::algo::evbuild
12{
13
14 // ----- Constructor from YAML ------------------------------------------
16 {
17 if (!config) return;
18 if (auto numDigis = config["minDigis"]) {
19 for (YAML::const_iterator it = numDigis.begin(); it != numDigis.end(); it++) {
20 auto det = ToCbmModuleIdCaseInsensitive(it->first.as<std::string>());
21 auto value = it->second.as<size_t>();
22 if (value > 0)
23 fMinNumDigis[det] = value;
24 else
25 L_(warning) << "DigiEventSelectorConfig: Ignoring minimum 0 for digis in " << ::ToString(det);
26 }
27 }
28 if (auto numLayers = config["minLayers"]) {
29 for (YAML::const_iterator it = numLayers.begin(); it != numLayers.end(); it++) {
30 auto det = ToCbmModuleIdCaseInsensitive(it->first.as<std::string>());
31 auto value = it->second.as<size_t>();
32 if (value > 0)
33 fMinNumLayers[det] = value;
34 else
35 L_(warning) << "DigiEventSelectorConfig: Ignoring minimum 0 for layers in " << ::ToString(det);
36 }
37 }
38 if (auto maskedChannels = config["maskedChannels"]) {
39 for (YAML::const_iterator it = maskedChannels.begin(); it != maskedChannels.end(); ++it) {
40 auto det = ToCbmModuleIdCaseInsensitive(it->first.as<std::string>());
41 auto value = it->second.as<std::vector<uint32_t>>();
42 if (value.size() > 0) {
43 fMaskedChannels[det] = std::unordered_set<uint32_t>(value.begin(), value.end());
44 L_(info) << "Masking following " << ToString(det) << " channels from event selecting: ";
45 for (auto address : fMaskedChannels[det]) {
46 L_(info) << " - 0x" << std::hex << std::setw(8) << std::setfill('0') << address << std::dec;
47 }
48 }
49 }
50 }
51 }
52 // --------------------------------------------------------------------------
53
54
55 // ----- Save to YAML ---------------------------------------------------
57 {
58 YAML::Node result;
59 for (const auto& entry : fMinNumDigis) {
60 auto det = ToString(entry.first);
61 result["minDigis"][det] = entry.second;
62 }
63 for (const auto& entry : fMinNumLayers) {
64 auto det = ToString(entry.first);
65 result["minLayers"][det] = entry.second;
66 }
67 // FIXME: implement masked channels storage
68 return result;
69 }
70 // --------------------------------------------------------------------------
71
72
73} // namespace cbm::algo::evbuild
#define L_(level)
ECbmModuleId ToCbmModuleIdCaseInsensitive(std::string modIdStr)
Definition CbmDefs.cxx:86
std::map< ECbmModuleId, size_t > fMinNumLayers
Key: detector, value: Minimal number of layers.
std::map< ECbmModuleId, std::unordered_set< uint32_t > > fMaskedChannels
A map of masked digi addresses, which should not participate in the event building.
std::map< ECbmModuleId, size_t > fMinNumDigis
Key: detector, value: minimal number of digis.
DigiEventSelectorConfig(YAML::Node config)
Constructor from YAML.
std::string_view ToString(T t)
Definition EnumDict.h:64