26 TH1::SetDefaultSumw2();
34 analysis.addTree<
Jet> (
"Jets",
"MssmHbb/Events/slimmedJetsPuppi");
41 analysis.triggerResults(
"MssmHbb/Events/TriggerResults");
46 if ( json_status < 0 )
48 std::cout <<
"Error from processing json. Please check your json file." << std::endl;
53 std::string sr_s =
"SR";
55 boost::algorithm::replace_last(
outputRoot_,
".root",
"_"+sr_s+
".root");
59 std::map<std::string, TH1F*> h1;
60 h1[
"n"] =
new TH1F(
"n" ,
"" , 30, 0, 30);
61 h1[
"n_csv"] =
new TH1F(
"n_csv" ,
"" , 30, 0, 30);
62 h1[
"n_ptmin20"]=
new TH1F(
"n_ptmin20" ,
"" , 30, 0, 30);
63 h1[
"n_ptmin20_csv"] =
new TH1F(
"n_ptmin20_csv" ,
"" , 30, 0, 30);
66 h1[Form(
"pt_%i",i)] =
new TH1F(Form(
"pt_%i",i) ,
"" , 100, 0, 1000);
67 h1[Form(
"eta_%i",i)] =
new TH1F(Form(
"eta_%i",i) ,
"" , 100, -5, 5);
68 h1[Form(
"phi_%i",i)] =
new TH1F(Form(
"phi_%i",i) ,
"" , 100, -4, 4);
69 h1[Form(
"btag_%i",i)] =
new TH1F(Form(
"btag_%i",i) ,
"" , 500, 0, 1);
71 h1[Form(
"pt_%i_csv",i)] =
new TH1F(Form(
"pt_%i_csv",i) ,
"" , 100, 0, 1000);
72 h1[Form(
"eta_%i_csv",i)] =
new TH1F(Form(
"eta_%i_csv",i) ,
"" , 100, -5, 5);
73 h1[Form(
"phi_%i_csv",i)] =
new TH1F(Form(
"phi_%i_csv",i) ,
"" , 100, -4, 4);
74 h1[Form(
"btag_%i_csv",i)] =
new TH1F(Form(
"btag_%i_csv",i) ,
"" , 500, 0, 1);
76 h1[
"m12"] =
new TH1F(
"m12" ,
"" , 50, 0, 1000);
77 h1[
"m12_csv"] =
new TH1F(
"m12_csv" ,
"" , 50, 0, 1000);
82 TTree *tree =
new TTree(
"MssmHbb_13TeV",
"");
83 tree->Branch(
"mbb",&mbb,
"mbb/D");
84 tree->Branch(
"weight",&weight,
"weight/D");
87 std::cout <<
"This analysis has " <<
analysis.size() <<
" events" << std::endl;
101 for (
int i = 0 ; i <
nevtmax_ ; ++i )
105 bool goodEvent =
true;
107 if ( i > 0 && i%100000==0 ) std::cout << i <<
" events processed! " << std::endl;
112 if (!
analysis.selectJson() )
continue;
116 if ( !triggerFired )
continue;
124 auto slimmedJets =
analysis.collection<
Jet>(
"Jets");
125 std::vector<Jet *> selectedJets;
126 for (
int j = 0 ; j < slimmedJets->size() ; ++j )
128 if ( slimmedJets->at(j).idLoose() ) selectedJets.push_back(&slimmedJets->at(j));
130 if ( (
int)selectedJets.size() <
njetsmin_ )
continue;
137 Jet * jet = selectedJets[j];
145 if ( ! goodEvent )
continue;
149 for (
int j1 = 0; j1 < njetsmin_-1; ++j1 )
151 const Jet & jet1 = *selectedJets[j1];
152 for (
int j2 = j1+1; j2 <
njetsmin_; ++j2 )
154 const Jet & jet2 = *selectedJets[j2];
159 if ( ! goodEvent )
continue;
163 if ( fabs(selectedJets[0]->eta() - selectedJets[1]->eta()) >
detamax_ )
continue;
169 for (
int j = 0 ; j < (
int)selectedJets.size() ; ++j )
171 if ( selectedJets[j]->pt() < 20. )
continue;
175 h1[
"n"] -> Fill(selectedJets.size());
176 h1[
"n_ptmin20"] -> Fill(njets);
179 Jet * jet = selectedJets[j];
180 h1[Form(
"pt_%i",j)] -> Fill(jet->
pt());
181 h1[Form(
"eta_%i",j)] -> Fill(jet->
eta());
182 h1[Form(
"phi_%i",j)] -> Fill(jet->
phi());
183 h1[Form(
"btag_%i",j)] -> Fill(jet->
btag(
"btag_csvivf"));
185 if ( j < 2 && jet->btag(
"btag_csvivf") < btagmin[j] ) goodEvent =
false;
188 if ( j == 2 && jet->
btag(
"btag_csvivf") >
nonbtagwp_ ) goodEvent =
false;
192 if ( j == 2 && jet->
btag(
"btag_csvivf") < btagmin[j] ) goodEvent =
false;
196 h1[
"m12"] -> Fill((selectedJets[0]->p4() + selectedJets[1]->p4()).M());
198 if ( ! goodEvent )
continue;
206 bool matched[10] = {
true,
true,
true,
true,
true,
true,
true,
true,
true,
true};
207 for (
int j = 0; j < 2; ++j )
209 Jet * jet = selectedJets[j];
211 for (
size_t io = 0; io < triggerObjects_.size() ; ++io )
213 if ( ! jet->
matched(triggerObjects_[io]) ) matched[io] =
false;
217 for (
size_t io = 0; io < triggerObjects_.size() ; ++io )
219 if ( matched[io] ) ++nmatch[io];
220 goodEvent = ( goodEvent && matched[io] );
223 if ( ! goodEvent )
continue;
228 for (
int j = 0 ; j < (
int)selectedJets.size() ; ++j )
230 if ( selectedJets[j]->pt() < 20. )
continue;
233 h1[
"n_csv"] -> Fill(selectedJets.size());
234 h1[
"n_ptmin20_csv"] -> Fill(njets_csv);
237 Jet * jet = selectedJets[j];
238 h1[Form(
"pt_%i_csv",j)] -> Fill(jet->
pt());
239 h1[Form(
"eta_%i_csv",j)] -> Fill(jet->
eta());
240 h1[Form(
"phi_%i_csv",j)] -> Fill(jet->
phi());
241 h1[Form(
"btag_%i_csv",j)] -> Fill(jet->
btag(
"btag_csvivf"));
243 mbb = (selectedJets[0]->p4() + selectedJets[1]->p4()).M();
246 h1[
"m12_csv"] -> Fill(mbb);
253 for (
auto & ih1 : h1)
255 ih1.second -> Write();
274 std::string cuts[10];
275 cuts[0] =
"Triggered";
276 cuts[1] =
"Triple idloose-jet";
277 cuts[2] =
"Triple jet kinematics";
278 cuts[3] =
"Delta R(i;j)";
279 cuts[4] =
"Delta eta(j1;j2)";
280 cuts[5] =
"btagged (bbnb)";
282 cuts[6] =
"Matched to online j1;j2";
284 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() );
285 for (
int i = 0; i < 7; ++i )
287 fracAbs[i] = double(nsel[i])/nsel[0];
289 fracRel[i] = double(nsel[i])/nsel[i-1];
291 fracRel[i] = fracAbs[i];
292 printf (
"%-23s %10d %10.3f %10.3f \n", cuts[i].c_str(), nsel[i], fracAbs[i], fracRel[i] );
295 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() );
296 for (
int i = 0; i < 7; ++i )
297 printf (
"%-23s , %10d , %10.3f , %10.3f \n", cuts[i].c_str(), nsel[i], fracAbs[i], fracRel[i] );
300 std::cout << std::endl;
301 printf (
"%-40s %10s \n", std::string(
"Trigger object").c_str(), std::string(
"# events").c_str() );
std::vector< float > jetsetamax_
int macro_config(int argc, char *argv[])
std::vector< float > jetsptmin_
std::vector< std::string > triggerObjects_