ATLAS Offline Software
Loading...
Searching...
No Matches
MuonTriggerSFFilesTest.cxx File Reference
#include <string>
#include <map>
#include <fstream>
#include <set>
#include <sstream>
#include <algorithm>
#include <TFile.h>
#include <TError.h>
#include <TH2.h>
#include <TKey.h>

Go to the source code of this file.

Functions

int main (int argc, char *argv[])

Variables

static const std::vector< std::string > qualities { "HighPt", "Tight", "Medium", "Loose" }
static const std::vector< std::string > types { "data", "mc" }
static const std::vector< std::string > regions { "barrel", "endcap" }
static const std::vector< std::string > bins { "coarse", "fine" }
static const std::vector< std::string > systematics { "nominal", "stat_up", "stat_down", "syst_up", "syst_down" }

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 25 of file MuonTriggerSFFilesTest.cxx.

25 {
26
27 const char* APP_NAME = argv[0];
28
29 if (argc < 3) {
30 Error(APP_NAME, "No scale factors or configuration file name received!");
31 Error(APP_NAME, " Usage: %s [configuration file name] [scale factors file name]", APP_NAME);
32 return 1;
33 }
34
35 std::ifstream confFileStream(argv[1], std::ifstream::in);
36 if (!confFileStream.good()) {
37 Error(APP_NAME, " Unable to load configuration file");
38 return 1;
39 }
40
41 std::map<std::string, std::set<std::string>> triggersByPeriods;
42 std::string periodInfo;
43 while (std::getline(confFileStream, periodInfo, ';')) {
44 // Ignore spaces and line changes
45 periodInfo.erase(std::remove(periodInfo.begin(), periodInfo.end(), ' '), periodInfo.end());
46 periodInfo.erase(std::remove(periodInfo.begin(), periodInfo.end(), '\n'), periodInfo.end());
47 if (periodInfo.empty()) continue;
48
49 std::stringstream ss;
50 ss.str(periodInfo);
51 std::string period;
52 if (!std::getline(ss, period, ':')) {
53 Error(APP_NAME, " Configuration file contains invalid period description: %s", periodInfo.c_str());
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]);
71 if (!file) {
72 Error(APP_NAME, " Unable to load scale factors file");
73 return 1;
74 }
75
76 for (size_t i = 0; i < qualities.size(); i++) {
77 TDirectory* qualityDirectory = file->GetDirectory(qualities[i].c_str());
78 if (!qualityDirectory) {
79 Error(APP_NAME, " Directory for quality %s is missing", qualities[i].c_str());
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 {
92 std::string period = x.first;
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;
121 std::string path = "eff_etaphi_" + bins[ibins] + "_" + regions[iregion] + "_" + types[itype] + "_" + systematics[isys];
122 TH2* hist = dynamic_cast<TH2*>(triggerDirectory->Get(path.c_str()));
123 if (!hist) {
124 Error(APP_NAME, " Histogram %s not found under trigger %s, period %s and quality %s", path.c_str(), trigger.c_str(), period.c_str(), qualities[i].c_str());
125 continue;
126 }
127 if (hist->GetEntries() == 0) {
128 Error(APP_NAME, " Histogram %s under trigger %s, period %s and quality %s is empty", path.c_str(), trigger.c_str(), period.c_str(), qualities[i].c_str());
129 }
130 }
131 }
132 }
133 }
134 }
135 }
136 }
137 file->Close();
138 delete file;
139
140 return 0;
141}
#define APP_NAME
static Double_t ss
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
#define x
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138
Error
The different types of error that can be flagged in the L1TopoRDO.
Definition Error.h:16
path
python interpreter configuration --------------------------------------—
Definition athena.py:128
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.
TFile * file

Variable Documentation

◆ bins

const std::vector<std::string> bins { "coarse", "fine" }
static

Definition at line 22 of file MuonTriggerSFFilesTest.cxx.

22{ "coarse", "fine" };

◆ qualities

const std::vector<std::string> qualities { "HighPt", "Tight", "Medium", "Loose" }
static

Definition at line 19 of file MuonTriggerSFFilesTest.cxx.

19{ "HighPt", "Tight", "Medium", "Loose" };

◆ regions

const std::vector<std::string> regions { "barrel", "endcap" }
static

Definition at line 21 of file MuonTriggerSFFilesTest.cxx.

21{ "barrel", "endcap" };

◆ systematics

const std::vector<std::string> systematics { "nominal", "stat_up", "stat_down", "syst_up", "syst_down" }
static

Definition at line 23 of file MuonTriggerSFFilesTest.cxx.

23{ "nominal", "stat_up", "stat_down", "syst_up", "syst_down" };

◆ types

const std::vector<std::string> types { "data", "mc" }
static

Definition at line 20 of file MuonTriggerSFFilesTest.cxx.

20{ "data", "mc" };