32 TFile* f = TFile::Open(inFilename.c_str(),
"UPDATE");
35 if (f == 0 || !f->IsOpen()) {
49 if (f->GetSize() < 1000.) {
63 TIter next_run(f->GetListOfKeys());
67 while ((key_run =
dynamic_cast<TKey*
>(next_run())) != 0) {
68 TObject* obj_run = key_run->ReadObj();
69 TDirectory* tdir_run =
dynamic_cast<TDirectory*
>(obj_run);
78 std::string runDirName(tdir_run->GetName());
81 if (runDirName.find(
"run") == std::string::npos) {
87 std::string taumonDirName = runDirName +
"/HLT/TauMon";
88 TDirectory* taumonDir(0);
89 if (!(taumonDir = f->GetDirectory(taumonDirName.c_str()))) {
95 std::vector<std::string> varName;
96 varName.push_back(
"Et");
97 varName.push_back(
"Eta");
98 varName.push_back(
"Phi");
100 std::vector<std::string> lvlName;
101 lvlName.push_back(
"L1");
102 lvlName.push_back(
"L2");
103 lvlName.push_back(
"EF");
105 std::vector< std::pair< int, int > > ratioIndex;
106 ratioIndex.push_back(std::make_pair(2, 0));
107 ratioIndex.push_back(std::make_pair(1, 0));
108 ratioIndex.push_back(std::make_pair(2, 1));
112 std::vector<std::string> varName0;
113 varName0.push_back(
"Pt");
114 varName0.push_back(
"Eta");
115 varName0.push_back(
"Phi");
116 varName0.push_back(
"Nvtx");
118 std::vector<std::string> lvlNameO;
119 lvlNameO.push_back(
"L1");
120 lvlNameO.push_back(
"L2");
121 lvlNameO.push_back(
"EF");
122 lvlNameO.push_back(
"");
124 std::vector< std::pair< int, int > > ratioIndexO;
125 ratioIndexO.push_back(std::make_pair(0, 3));
126 ratioIndexO.push_back(std::make_pair(1, 3));
127 ratioIndexO.push_back(std::make_pair(2, 3));
131 TIter next_trig(taumonDir->GetListOfKeys());
133 while ((key_trig =
dynamic_cast<TKey*
>(next_trig())) != 0) {
134 TObject* obj_trig = key_trig->ReadObj();
135 TDirectory* dir_trig =
dynamic_cast<TDirectory*
>(obj_trig);
136 if (!dir_trig)
continue;
140 HLTTauPostProcess(f, dir_trig,
"/RelativeEfficiency",
"/RelativeEfficiency/Efficiency",
141 lvlName, varName, ratioIndex, 1);
143 lvlNameO, varName0, ratioIndexO, 2);
144 HLTTauPostProcess(f, dir_trig,
"/OfflineRatio/BDTMedium",
"/OfflineRatio/Ratio/BDTMedium",
145 lvlNameO, varName0, ratioIndexO, 2,
"BDTMedium");
154 const std::string& pathApp,
155 const std::string& pathAppEff,
156 const std::vector<std::string>& lvlN,
157 const std::vector<std::string>& varN,
158 const std::vector< std::pair< int, int > >& ratioIndex,
int nameStyle,
159 const std::string& nameApp) {
160 std::string path =
getPath(dir);
164 std::string basePath = path + pathApp +
"/";
165 if (f->cd(basePath.c_str()) == 0) {
170 TH1F* hRoI[100][100];
171 for (
unsigned int iLvl = 0; iLvl < lvlN.size(); iLvl++) {
172 for (
unsigned int iVar = 0; iVar < varN.size(); iVar++) {
174 if (nameStyle == 1) hName = basePath +
"h" + lvlN[iLvl] +
"RoI" + varN[iVar] + (iLvl == 0 ?
"Denom" :
"Num") + nameApp;
175 if (nameStyle == 2) hName = basePath +
"hTau" + varN[iVar] + lvlN[iLvl] + nameApp;
179 hRoI[iLvl][iVar] = (TH1F*) (f->Get(hName.c_str()))->Clone();
184 basePath += path + pathAppEff +
"/";
185 f->cd(basePath.c_str());
186 for (
unsigned int iVar = 0; iVar < varN.size(); iVar++) {
187 for (
unsigned int iRatio = 0; iRatio < ratioIndex.size(); iRatio++) {
190 hName = basePath +
"h" +
191 lvlN[ ratioIndex[ iRatio ].first ] +
"vs" + lvlN[ ratioIndex[ iRatio ].second ] +
192 varN[iVar] +
"Efficiency" + nameApp;
195 hName = basePath +
"h" +
196 lvlN[ ratioIndex[ iRatio ].first ] +
"OfflineRatio" +
197 varN[iVar] + nameApp;
201 TH1F* hEff = (TH1F*) (f->Get(hName.c_str()));
202 hEff->Divide(hRoI[ ratioIndex[ iRatio ].first ][iVar],
203 hRoI[ ratioIndex[ iRatio ].second ][iVar],
206 hEff->Write(
"", TObject::kOverwrite);