42 TIter next_run(f->GetListOfKeys());
44 while ((key_run =
dynamic_cast<TKey*
> (next_run())) != 0) {
45 if (!key_run->IsFolder())
continue;
46 run_dir = key_run->GetName();
47 if (run_dir.find(
"run") == std::string::npos) {
52 std::string run_dir2 = run_dir;
57 std::string jetmon_dir = run_dir +
"/HLT/JetMon";
60 std::string akt4topo_dir = jetmon_dir +
"/AntiKt4TopoJets/TrigEff";
65 if (!(dir = f->GetDirectory(akt4topo_dir.c_str()))) {
66 std::cerr <<
"--> HLTJetCalcEfficiencyAndRate: directory " << akt4topo_dir <<
" not found." << std::endl;
75 static const std::vector<std::string> effobs = {
81 static const std::vector<std::string> TrigItems = {
118 std::string snum, sden, hnumname;
119 for (
const std::string& item : TrigItems) {
120 for (
const std::string& eff : effobs) {
121 hnumname = item + eff +
"_num";
122 snum = akt4topo_dir +
"/" + hnumname;
123 sden = akt4topo_dir +
"/" + item + eff +
"_den";
132 if (f->Get(snum.c_str()) && f->Get(sden.c_str())) {
133 hnum =
dynamic_cast<TH1F*
>(f->Get(snum.c_str()));
135 std::cerr<<
"MonitoringFile::HLTJetCalcEfficiencyAndRate: Dynamic cast of hnum failed"<<std::endl;
139 hden =
dynamic_cast<TH1F*
>(f->Get(sden.c_str()));
141 std::cerr<<
"MonitoringFile::HLTJetCalcEfficiencyAndRate: Dynamic cast of hden failed"<<std::endl;
155 hnum->Divide(hnum, hden, 1., 1.,
"B");
158 hnum->Write(
"", TObject::kOverwrite);
216 if (hnum == 0 || hden == 0)
return -1;
218 Int_t nbins_num = hnum->GetNbinsX();
219 Int_t nbins_den = hden->GetNbinsX();
221 if (nbins_num != nbins_den)
return -2;
223 if (hden->GetEntries() == 0)
return -3;
226 for (Int_t i = -1; i <= nbins_num; ++i) {
227 float n = hden->GetBinContent(i);
228 if (n == 0)
continue;
229 float k = hnum->GetBinContent(i);
230 if (k < 0 || n < 0) {
232 <<
" for histograms " << hnum->GetName() <<
" , " << hden->GetName() << std::endl;
235 float num1 = (k + 1) * (k + 2);
236 float den1 = (n + 2) * (n + 3);
237 float num2 = (k + 1) * (k + 1);
238 float den2 = (n + 2) * (n + 2);
239 float variance = num1 / den1 - num2 / den2;
240 float err = sqrt(variance);
241 errors.push_back(err);
243 Int_t num_err = (Int_t) errors.size();
245 if (num_err != nbins_num) retval = -4;