ATLAS Offline Software
Loading...
Searching...
No Matches
JsonFileWriterHLT.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
8#include <iomanip>
9#include <fstream>
10#include <algorithm>
11
12#include <nlohmann/json.hpp>
13using json = nlohmann::json;
14
15using namespace std;
16
20
21
23template<typename T>
24std::vector<T> ToVector(const TrigConf::DataStructure& ds, const std::string& child){
25 using ptree = boost::property_tree::ptree;
26 std::vector<T> return_vector;
27 for( const ptree::value_type& entry : ds.data().get_child(child) ) {
28 return_vector.push_back( entry.second.get_value<T>() );
29 }
30 return return_vector;
31}
32
34template<typename T>
35std::vector<std::vector<T>> ToVectorVector(const TrigConf::DataStructure& ds, const std::string& child){
36 using ptree = boost::property_tree::ptree;
37 std::vector<std::vector<T>> return_vector;
38 for( const ptree::value_type& outer : ds.data().get_child(child) ) {
39 return_vector.push_back(std::vector<T>());
40 for (const ptree::value_type& inner : outer.second) {
41 return_vector.back().push_back( inner.second.get_value<T>() );
42 }
43 }
44 return return_vector;
45}
46
47
48bool
49TrigConf::JsonFileWriterHLT::writeJsonFile(const std::string & filename, const HLTMenu & menu) const
50{
51 json chains({});
52 for ( const auto & chain : menu ) {
53 json jChain({});
54 jChain["counter"] = chain.counter();
55 jChain["nameHash"] = chain.namehash();
56 jChain["l1item"] = chain.l1item();
57 jChain["legMultiplicities"] = chain.legMultiplicities();
58 jChain["l1thresholds"] = chain.l1thresholds();
59 jChain["groups"] = chain.groups();
60 jChain["streams"] = chain.streams();
61 jChain["seqeuncers"] = chain.sequencers();
62
63 // Optional Run2 payload
64 if (chain.hasChild("signature")) {
65 json jSig({});
66 jSig["counters"] = ToVector<uint32_t>(chain, "signature.counters");
67 jSig["logics"] = ToVector<int>(chain, "signature.logics");
68 jSig["labels"] = ToVector<std::string>(chain, "signature.labels");
69 jSig["outputTEs"] = ToVectorVector<std::string>(chain, "signature.outputTEs");
70 jChain["signature"] = std::move(jSig);
71 }
72
73 chains[chain.name()] = std::move(jChain);
74 }
75
76 json sequencers({});
77 for ( const auto& [seqName, algsList]: menu.sequencers() ) {
78 json jSeq( algsList );
79 sequencers[seqName] = std::move(jSeq);
80 }
81 json streams({});
82 for ( const auto& stream: menu.streams() ) {
83 json jStream({});
84 jStream["name"] = stream["name"];
85 jStream["type"] = stream["type"];
86 jStream["obeyLB"] = stream.getAttribute<bool>("obeyLB");
87 jStream["forceFullEventBuilding"] = stream.getAttribute<bool>("forceFullEventBuilding");
88 streams[stream["name"]] = std::move(jStream);
89 }
90
91
92 json j({});
93 j["filetype"] = "hltmenu";
94 j["name"] = menu.name();
95 j["chains"] = std::move(chains);
96 j["sequencers"] = std::move(sequencers);
97 j["streams"] = std::move(streams);
98
99 // Optional Run2 payload
100 if (menu.hasChild("sequence_run2")) {
101 json jSequence({});
102 jSequence["outputTEs"] = ToVector<std::string>(menu, "sequence_run2.outputTEs");
103 jSequence["inputTEs"] = ToVectorVector<std::string>(menu, "sequence_run2.inputTEs");
104 jSequence["algorithms"] = ToVectorVector<std::string>(menu, "sequence_run2.algorithms");
105 j["sequence_run2"] = std::move(jSequence);
106 }
107
108 std::ofstream outfile(filename);
109 outfile << std::setw(4) << j << std::endl;
110
111 TRG_MSG_INFO("Saved file " << filename);
112 return true;
113}
114bool
115TrigConf::JsonFileWriterHLT::writeJsonFile(const std::string & filename, const HLTMenu & menu, const HLTPrescalesSet & ps) const
116{
117 json chains({});
118 for ( const auto & chain : menu ) {
119 json jChain({});
120 jChain["name"] = chain.name();
121 jChain["counter"] = chain.counter();
122 jChain["hash"] = chain.namehash();
123 jChain["prescale"] = ps.prescale(chain.name()).prescale;
124 jChain["enabled"] = ps.prescale(chain.name()).enabled;
125 chains[chain.name()] = std::move(jChain);
126 }
127 json j({});
128 j["filetype"] = "hltprescale";
129 j["name"] = ps.name();
130 j["prescales"] = std::move(chains);
131 std::ofstream outfile(filename);
132 outfile << std::setw(4) << j << std::endl;
133
134 TRG_MSG_INFO("Saved file " << filename);
135 return true;
136}
nlohmann::json json
boost::property_tree::ptree ptree
Base class for Trigger configuration data and wrapper around underlying representation.
HLT menu configuration.
Definition HLTMenu.h:21
HLT menu configuration.
bool writeJsonFile(const std::string &filename, const HLTMenu &menu) const
TrigConfMessaging(const std::string &name)
Constructor with parameters.
make the sidebar many part of the config
Definition hcg.cxx:552
std::vector< std::vector< T > > ToVectorVector(const TrigConf::DataStructure &ds, const std::string &child)
Helper function ptree key->[[]] to std::vector<std::vector<T>>
std::vector< T > ToVector(const TrigConf::DataStructure &ds, const std::string &child)
Helper function ptree key->[] to std::vector<T>
STL namespace.