ra4_draw  4bd0201e3d922d42bd545d4b045ed44db33454a4
abcd_method.cpp
Go to the documentation of this file.
1 // Class defining ABCD planes
2 
3 #include "core/abcd_method.hpp"
4 
5 using namespace std;
6 
8 abcd_method::abcd_method(TString imethod, vector<TString> iplanecuts, vector<TString> ibincuts,
9  vector<TString> iabcdcuts, TString icaption, TString ibasecuts):
10  method(imethod),
11  planecuts(iplanecuts),
12  abcdcuts(iabcdcuts),
13  caption(icaption),
14  basecuts(ibasecuts){
15 
16  // Pushing bincuts for each planecut. This will allow to have different bins in different planes
17  for(size_t ind=0; ind<planecuts.size(); ind++) bincuts.push_back(ibincuts);
18 
19  // Set up dilepton and region name
20  is2l = (method.Contains("2l") || method.Contains("veto"));
21  rd_letter = is2l?"D":"R";
22 
23  // Set up whether we integrate R1/R3 in Nb and Njets
24  int_nbnj = true;
25 
26  serializeCuts();
27 
28  } // Constructor
29 
31 void abcd_method::setIntNbNj(bool int_nbnj_b){
32  int_nbnj = int_nbnj_b;
33  serializeCuts();
34 }
35 
36 // Setting up all the cuts serially
38  allcuts.clear();
39  for(size_t iplane=0; iplane < planecuts.size(); iplane++) {
41  TString c_allnbnj = "(("+bincuts[iplane][0];
42  for(size_t ibin=1; ibin < bincuts[iplane].size(); ibin++)
43  c_allnbnj += ")||("+bincuts[iplane][ibin];
44  c_allnbnj += "))";
45 
47  for(size_t ibin=0; ibin < bincuts[iplane].size(); ibin++){
48  for(size_t iabcd=0; iabcd < abcdcuts.size(); iabcd++){
49  TString totcut = "";
50  if(basecuts != "") totcut += basecuts +" && ";
51  totcut += planecuts[iplane] +" && "+ abcdcuts[iabcd];
52 
53  // Setting up the nbm/njets cuts
54  if(method.Contains("agg_")){
55  totcut.ReplaceAll("nj_all_1l", "nbm>=1&&njets>=6");
56  }else if(int_nbnj && bincuts[iplane].size()>1){
57  totcut.ReplaceAll("nj_all_1l", c_allnbnj);
58  totcut.ReplaceAll("nj_all_2l", lowerNjets(c_allnbnj));
59  } else {
60  totcut.ReplaceAll("nj_all_1l", bincuts[iplane][ibin]);
61  totcut.ReplaceAll("nj_all_2l", lowerNjets(bincuts[iplane][ibin]));
62  }
63  totcut.ReplaceAll("nj_1l", bincuts[iplane][ibin]);
64  totcut.ReplaceAll("nj_2l", lowerNjets(bincuts[iplane][ibin]));
65 
66  allcuts.push_back(totcut);
67  } // Loop over ABCD cuts
68  } // Loop over bin cuts
69  } // Loop over plane cuts
70 } //serializeCuts
71 
73 size_t abcd_method::indexBin(size_t indplane, size_t indbin, size_t indabcd){
74  if(indplane >= planecuts.size()) {
75  cout<<"Plane index "<<indplane<<" greater than Nplanes = "<<planecuts.size()<<". Exiting"<<endl;
76  exit(1);
77  }
78  size_t Nabcd = abcdcuts.size(), index = 0;
79  for(size_t iplane=0; iplane < indplane; iplane++) index += Nabcd*bincuts[iplane].size();
80 
81  return index + Nabcd*indbin + indabcd;
82 }
83 
86  for(size_t iabcd=0; iabcd < abcdcuts.size(); iabcd++) abcdcuts[iabcd].ReplaceAll("mj14", "mj");
87  basecuts.ReplaceAll("mj14", "mj");
88  serializeCuts();
89 }
90 
91 
94  for(size_t iplane=0; iplane < planecuts.size(); iplane++) {
95  if(method.Contains("_el")) planecuts[iplane].ReplaceAll("nleps", "nels");
96  if(method.Contains("_mu")) planecuts[iplane].ReplaceAll("nleps", "nmus");
97  if(method.Contains("_emu")) planecuts[iplane].ReplaceAll("nleps==2", "(nels==1&&nmus==1)");
98  for(size_t ibin=0; ibin < bincuts[iplane].size(); ibin++){
99  if(method.Contains("_el")) bincuts[iplane][ibin].ReplaceAll("nleps", "nels");
100  if(method.Contains("_mu")) bincuts[iplane][ibin].ReplaceAll("nleps", "nmus");
101  if(method.Contains("_emu")) bincuts[iplane][ibin].ReplaceAll("nleps==2", "(nels==1&&nmus==1)");
102  } // Loop over bin cuts
103  } // Loop over plane cuts
104  for(size_t iabcd=0; iabcd < abcdcuts.size(); iabcd++){
105  if(method.Contains("_el")) abcdcuts[iabcd].ReplaceAll("nleps", "nels");
106  if(method.Contains("_mu")) abcdcuts[iabcd].ReplaceAll("nleps", "nmus");
107  if(method.Contains("_emu")) abcdcuts[iabcd].ReplaceAll("nleps==2", "(nels==1&&nmus==1)");
108  } // Loop over ABCD cuts
109  if(method.Contains("_el")) basecuts.ReplaceAll("nleps", "nels");
110  if(method.Contains("_mu")) basecuts.ReplaceAll("nleps", "nmus");
111  if(method.Contains("_emu")) basecuts.ReplaceAll("nleps==2", "(nels==1&&nmus==1)");
112 
113  serializeCuts();
114 }
115 
116 
119  cout<<endl<<endl<<"=================== Printing cuts for method "<<method<<" ==================="<<endl;
120 
121  for(size_t iplane=0; iplane < planecuts.size(); iplane++) {
122  cout<<endl<<" **** Plane "<<planecuts[iplane]<<" ***"<<endl;
123  for(size_t ibin=0; ibin < bincuts[iplane].size(); ibin++){
124  for(size_t iabcd=0; iabcd < abcdcuts.size(); iabcd++)
125  cout<<allcuts[indexBin(iplane, ibin, iabcd)]<<endl;
126  cout<<endl;
127  } // Loop over bin cuts
128  } // Loop over plane cuts
129 }
130 
131 
133 TString abcd_method::lowerNjets(TString &cut){
134  TString lowcut = cut;
135  for(int nj=6; nj<=9; nj++){
136  TString nj_s = ""; nj_s += nj;
137  TString njlo_s = ""; njlo_s += nj-1;
138  lowcut.ReplaceAll(nj_s, njlo_s);
139  }
140  return lowcut;
141 }
142 
143 
void serializeCuts()
Definition: abcd_method.cpp:37
abcd_method(TString imethod, std::vector< TString > iplanecuts, std::vector< TString > ibincuts, std::vector< TString > iabcdcuts, TString icaption="", TString ibasecuts="")
Definition: abcd_method.cpp:8
TString lowerNjets(TString &cut)
void setLeptons()
Definition: abcd_method.cpp:93
void ReplaceAll(std::string &str, const std::string &orig, const std::string &rep)
Definition: utilities.cpp:52
STL namespace.
size_t indexBin(size_t iplane, size_t ibin, size_t iabcd)
Definition: abcd_method.cpp:73
void printCuts()
TString rd_letter
Definition: abcd_method.hpp:18
void setMj12()
Definition: abcd_method.cpp:85
std::vector< std::vector< TString > > bincuts
Definition: abcd_method.hpp:17
std::vector< TString > allcuts
Definition: abcd_method.hpp:16
std::vector< TString > abcdcuts
Definition: abcd_method.hpp:16
std::vector< TString > planecuts
Definition: abcd_method.hpp:16
TString method
Definition: abcd_method.hpp:15
void setIntNbNj(bool int_nbnj_b)
Definition: abcd_method.cpp:31
TString basecuts
Definition: abcd_method.hpp:18