22 std::string inputList =
"rootFileList.txt";
23 std::string outputRoot =
"histograms.root";
24 std::string
json =
"json_2016g.txt";
26 float btagcut[3] = {0.46,0.84,0.92};
28 float ptmin[3] = { 100.0, 100.0, 40.0 };
29 float etamax[3] = { 2.2, 2.2 , 2.2 };
30 float btagmin[3] = { btagcut[bWP], btagcut[bWP], btagcut[bWP]};
36 TH1::SetDefaultSumw2();
41 analysis.addTree<
Jet> (
"Jets",
"MssmHbb/Events/slimmedJetsPuppiReapplyJEC");
43 std::vector<std::string> triggerObjects;
44 triggerObjects.push_back(
"hltL1sDoubleJetC100");
45 triggerObjects.push_back(
"hltDoubleJetsC100");
46 triggerObjects.push_back(
"hltBTagCaloCSVp014DoubleWithMatching");
47 triggerObjects.push_back(
"hltDoublePFJetsC100");
48 triggerObjects.push_back(
"hltDoublePFJetsC100MaxDeta1p6");
57 if( !isMC )
analysis.processJsonFile(json);
59 TFile hout(outputRoot.c_str(),
"recreate");
61 std::map<std::string, TH1F*> h1;
62 h1[
"n"] =
new TH1F(
"n" ,
"" , 30, 0, 30);
63 h1[
"n_csv"] =
new TH1F(
"n_csv" ,
"" , 30, 0, 30);
64 h1[
"n_ptmin20"]=
new TH1F(
"n_ptmin20" ,
"" , 30, 0, 30);
65 h1[
"n_ptmin20_csv"] =
new TH1F(
"n_ptmin20_csv" ,
"" , 30, 0, 30);
66 for (
int i = 0 ; i < 3 ; ++i )
68 h1[Form(
"pt_%i",i)] =
new TH1F(Form(
"pt_%i",i) ,
"" , 100, 0, 1000);
69 h1[Form(
"eta_%i",i)] =
new TH1F(Form(
"eta_%i",i) ,
"" , 100, -5, 5);
70 h1[Form(
"phi_%i",i)] =
new TH1F(Form(
"phi_%i",i) ,
"" , 100, -4, 4);
71 h1[Form(
"btag_%i",i)] =
new TH1F(Form(
"btag_%i",i) ,
"" , 100, 0, 1);
73 h1[Form(
"pt_%i_csv",i)] =
new TH1F(Form(
"pt_%i_csv",i) ,
"" , 100, 0, 1000);
74 h1[Form(
"eta_%i_csv",i)] =
new TH1F(Form(
"eta_%i_csv",i) ,
"" , 100, -5, 5);
75 h1[Form(
"phi_%i_csv",i)] =
new TH1F(Form(
"phi_%i_csv",i) ,
"" , 100, -4, 4);
76 h1[Form(
"btag_%i_csv",i)] =
new TH1F(Form(
"btag_%i_csv",i) ,
"" , 100, 0, 1);
78 h1[
"m12"] =
new TH1F(
"m12" ,
"" , 50, 0, 1000);
79 h1[
"m12_csv"] =
new TH1F(
"m12_csv" ,
"" , 50, 0, 1000);
83 std::cout <<
"This analysis has " <<
analysis.size() <<
" events" << std::endl;
95 std::string prevFile =
"";
96 for (
int i = 0 ; i <
analysis.size() ; ++i )
100 bool goodEvent =
true;
102 if ( i > 0 && i%100000==0 ) std::cout << i <<
" events processed! " << std::endl;
109 if ( prevFile ==
"" || prevFile !=
analysis.fileName() )
112 std::cout << prevFile << std::endl;
115 if (!
analysis.selectJson() )
continue;
127 auto slimmedJets =
analysis.collection<
Jet>(
"Jets");
128 std::vector<Jet *> selectedJets;
129 for (
int j = 0 ; j < slimmedJets->size() ; ++j )
131 if ( slimmedJets->at(j).idLoose() ) selectedJets.push_back(&slimmedJets->at(j));
133 if ( selectedJets.size() < 2 )
continue;
138 for (
int j = 0; j < 2; ++j )
140 Jet * jet = selectedJets[j];
141 if ( jet->
pt() < ptmin[j] || fabs(jet->
eta()) > etamax[j] )
148 if ( ! goodEvent )
continue;
152 for (
int j1 = 0; j1 < 1; ++j1 )
154 const Jet & jet1 = *selectedJets[j1];
155 for (
int j2 = j1+1; j2 < 2; ++j2 )
157 const Jet & jet2 = *selectedJets[j2];
158 if ( jet1.
deltaR(jet2) < dRmin ) goodEvent =
false;
162 if ( ! goodEvent )
continue;
166 if ( fabs(selectedJets[0]->eta() - selectedJets[1]->eta()) > detamax )
continue;
172 for (
int j = 0 ; j < (
int)selectedJets.size() ; ++j )
174 if ( selectedJets[j]->pt() < 20. )
continue;
178 h1[
"n"] -> Fill(selectedJets.size());
179 h1[
"n_ptmin20"] -> Fill(njets);
180 for (
int j = 0; j < 2; ++j )
182 Jet * jet = selectedJets[j];
183 h1[Form(
"pt_%i",j)] -> Fill(jet->
pt());
184 h1[Form(
"eta_%i",j)] -> Fill(jet->
eta());
185 h1[Form(
"phi_%i",j)] -> Fill(jet->
phi());
186 h1[Form(
"btag_%i",j)] -> Fill(jet->
btag(
"btag_csvivf"));
188 if ( j < 2 && jet->btag(
"btag_csvivf") < btagmin[j] ) goodEvent =
false;
199 h1[
"m12"] -> Fill((selectedJets[0]->p4() + selectedJets[1]->p4()).M());
201 if ( ! goodEvent )
continue;
250 for (
auto & ih1 : h1)
252 ih1.second -> Write();
268 std::string cuts[10];
269 cuts[0] =
"Triggered";
270 cuts[1] =
"Triple idloose-jet";
271 cuts[2] =
"Triple jet kinematics";
272 cuts[3] =
"Delta R(i;j)";
273 cuts[4] =
"Delta eta(j1;j2)";
274 cuts[5] =
"btagged (bbnb)";
275 if ( isbbb ) cuts[5] =
"btagged (bbb)";
276 cuts[6] =
"Matched to online j1;j2";
278 printf (
"%-23s %10s %10s %10s \n", std::string(
"Cut flow").c_str(), std::string(
"# events").c_str(), std::string(
"absolute").c_str(), std::string(
"relative").c_str() );
279 for (
int i = 0; i < 7; ++i )
281 fracAbs[i] = double(nsel[i])/nsel[0];
283 fracRel[i] = double(nsel[i])/nsel[i-1];
285 fracRel[i] = fracAbs[i];
286 printf (
"%-23s %10d %10.3f %10.3f \n", cuts[i].c_str(), nsel[i], fracAbs[i], fracRel[i] );
289 printf (
"%-23s , %10s , %10s , %10s \n", std::string(
"Cut flow").c_str(), std::string(
"# events").c_str(), std::string(
"absolute").c_str(), std::string(
"relative").c_str() );
290 for (
int i = 0; i < 7; ++i )
291 printf (
"%-23s , %10d , %10.3f , %10.3f \n", cuts[i].c_str(), nsel[i], fracAbs[i], fracRel[i] );
294 std::cout << std::endl;
295 printf (
"%-40s %10s \n", std::string(
"Trigger object").c_str(), std::string(
"# events").c_str() );