25 {
26
28
29 if (argc < 3) {
30 Error(
APP_NAME,
"No scale factors or configuration file name received!");
32 return 1;
33 }
34
35 std::ifstream confFileStream(argv[1], std::ifstream::in);
36 if (!confFileStream.good()) {
38 return 1;
39 }
40
41 std::map<std::string, std::set<std::string>> triggersByPeriods;
43 while (std::getline(confFileStream,
periodInfo,
';')) {
44
48
52 if (!std::getline(
ss, period,
':')) {
54 return 1;
55 }
56 if (triggersByPeriods.find(period) != triggersByPeriods.end()) {
57 Error(
APP_NAME,
" Period %s is defined multiple times in configuration file",
period.c_str());
58 }
59
60 std::set<std::string> triggers;
61 std::string trigger;
62 while (std::getline(
ss, trigger,
',')) {
63 triggers.insert(trigger);
64 }
65 triggersByPeriods[
period] = triggers;
66 }
67 confFileStream.close();
68
69
70 TFile*
file = TFile::Open(argv[2]);
73 return 1;
74 }
75
77 TDirectory* qualityDirectory =
file->GetDirectory(
qualities[i].c_str());
78 if (!qualityDirectory) {
80 continue;
81 }
82 TKey* periodKey;
83 TIter nextPeriod(qualityDirectory->GetListOfKeys());
84 while ((periodKey = (TKey*)nextPeriod())) {
85 if (triggersByPeriods.find(periodKey->GetName()) == triggersByPeriods.end()) {
86 Error(
APP_NAME,
" Quality %s contains period %s, which is not defined in configuration file",
qualities[i].c_str(), periodKey->GetName());
87 }
88 }
89
90 for (
auto const&
x : triggersByPeriods)
91 {
93 std::set<std::string> triggers =
x.second;
94 TDirectory* periodDirectory = qualityDirectory->GetDirectory(
period.c_str());
95 if (!periodDirectory) {
96 Error(
APP_NAME,
" Configuration file contains period %s, but this is missing in scale factors file under quality %s",
period.c_str(),
qualities[i].c_str());
97 continue;
98 }
99
100 TKey* triggerKey;
101 TIter nextTrigger(periodDirectory->GetListOfKeys());
102 while ((triggerKey = (TKey*)nextTrigger())) {
103 if (triggers.find(triggerKey->GetName()) == triggers.end()) {
104 Error(
APP_NAME,
" Period %s under quality %s contains trigger %s, which is not defined in configuration file",
period.c_str(),
qualities[i].c_str(), triggerKey->GetName());
105 }
106 }
107
108 for (auto const& trigger : triggers)
109 {
110 TDirectory* triggerDirectory = periodDirectory->GetDirectory(trigger.c_str());
111 if (!triggerDirectory) {
112 Error(
APP_NAME,
" Configuration file contains trigger %s under period %s, but this is missing in scale factors file under quality %s", trigger.c_str(),
period.c_str(),
qualities[i].c_str());
113 continue;
114 }
115
116 for (
size_t ibins = 0; ibins <
bins.size(); ++ibins) {
117 for (
size_t iregion = 0; iregion <
regions.size(); ++iregion) {
118 for (
size_t itype = 0; itype <
types.size(); ++itype) {
119 for (
size_t isys = 0; isys <
systematics.size(); ++isys) {
120 if (
types[itype].
find(
"data") != std::string::npos &&
systematics[isys].
find(
"syst") != std::string::npos)
continue;
122 TH2*
hist =
dynamic_cast<TH2*
>(triggerDirectory->Get(
path.c_str()));
123 if (!hist) {
125 continue;
126 }
127 if (
hist->GetEntries() == 0) {
129 }
130 }
131 }
132 }
133 }
134 }
135 }
136 }
139
140 return 0;
141}
static const std::vector< std::string > bins
static const std::vector< std::string > qualities
static const std::vector< std::string > systematics
static const std::vector< std::string > types
static const std::vector< std::string > regions
std::string find(const std::string &s)
return a remapped string
Error
The different types of error that can be flagged in the L1TopoRDO.
path
python interpreter configuration --------------------------------------—
DataModel_detail::iterator< DVL > remove(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end, const T &value)
Specialization of remove for DataVector/List.