12 #include "TDirectory.h" 14 #include "baby_full.hh" 15 #include "utilities.hh" 16 #include "cross_sections.hh" 24 int main(
int argc,
char *argv[]){
25 gErrorIgnoreLevel=6000;
26 time_t begtime, endtime;
30 cout<<
"Format: ./run/change_weights.exe <infolder>=. <sample>=\"*.root\" <outfolder>=infolder"<<endl<<endl<<endl;
35 TString
folder(
"."), sample(
"*.root");
36 if(argc>=2)
folder=argv[1];
37 if(argc>=3) sample=argv[2];
39 if(argc>=4) outfolder=argv[3];
41 if(!outfolder.EndsWith(
"/")) outfolder.Append(
"/");
42 gSystem->mkdir(outfolder, kTRUE);
45 if (!sample.Contains(
"SMS")){
46 TChain
chglob(
"treeglobal");
47 chglob.Add((
folder+sample).Data());
48 size_t foundent = chglob.GetEntries();
50 cout<<
"[Change Weights] ERROR: No entries found! Exit."<<endl;
53 cout<<
"[Change Weights] Found "<<foundent<<
" entries."<<endl;
55 chglob.SetBranchAddress(
"xsec", &xsec);
57 cout<<
"Found xsec = "<<xsec<<endl;
64 vector<TString> var_type, var;
65 vector<vector<TString> > var_val(
NSYSTS);
66 double nent_eff=0,
nent=0, sum_weff_l0=0, sum_weff_l1=0, sum_btag=0, sum_pu=0, sum_toppt=0, sum_wisr=0;
70 vector<double> sum_isr(ch.
sys_isr().size());
73 double nent_zlep=0, sum_wlep=0, sum_fs_wlep=0;
74 vector<double> sum_slep(ch.
sys_lep().size()), sum_fs_slep(ch.
sys_fs_lep().size());
81 for(
int ientry=0; ientry<nentries; ientry++){
84 if(ientry%500000==0 || ientry==nentries-1) {
86 int seconds(difftime(endtime,begtime));
88 <<
" Took "<<setw(6)<<seconds<<
" seconds at " 89 <<setw(4)<<
roundNumber(ientry,1,seconds*1000.)<<
" kHz"<<endl;
91 float lsign = ch.
w_lumi()>0 ? 1:-1;
104 for(
unsigned int isys=0;isys<ch.
sys_mur().size();isys++) sum_mur[isys] +=
noNaN(ch.
sys_mur().at(isys));
105 for(
unsigned int isys=0;isys<ch.
sys_muf().size();isys++) sum_muf[isys] +=
noNaN(ch.
sys_muf().at(isys));
106 for(
unsigned int isys=0;isys<ch.
sys_murf().size();isys++) sum_murf[isys] +=
noNaN(ch.
sys_murf().at(isys));
109 if (sample.Contains(
"SMS") && !sample.Contains(
"TChi")){
110 vector<float> sys_isr;
112 for(
unsigned int isys=0;isys<ch.
sys_isr().size();isys++) sum_isr[isys] += sys_isr[isys];
116 for(
unsigned int isys=0;isys<ch.
sys_isr().size();isys++) sum_isr[isys] +=
noNaN(ch.
sys_isr().at(isys));
124 sum_weff_l0 += weight;
126 sum_weff_l1 += weight;
127 sum_wlep += ch.
w_lep();
129 for(
unsigned int isys=0;isys<ch.
sys_lep().size();isys++) sum_slep[isys] += ch.
sys_lep().at(isys);
130 for(
unsigned int isys=0;isys<ch.
sys_fs_lep().size();isys++) sum_fs_slep[isys] += ch.
sys_fs_lep().at(isys);
136 const float luminosity = 1000.;
137 if (sample.Contains(
"SMS")){
143 float w_lumi = xsec*luminosity / nent_eff;
147 double wanted_toppt(1.);
148 if(sample.Contains(
"TTJets_HT-600to800")) wanted_toppt = 0.8577;
149 if(sample.Contains(
"TTJets_HT-800to1200")) wanted_toppt = 0.8352;
150 if(sample.Contains(
"TTJets_HT-1200to2500")) wanted_toppt = 0.8201;
151 if(sample.Contains(
"TTJets_HT-2500toInf")) wanted_toppt = 0.8198;
154 double wanted_w_isr(1.);
155 vector<double> wanted_sys_isr(2,1.);
156 if(sample.Contains(
"TTJets_HT-600to800")) {
157 wanted_w_isr = 0.7838;
158 wanted_sys_isr[0] = 0.8965;
159 wanted_sys_isr[1] = 0.6604;
161 if(sample.Contains(
"TTJets_HT-800to1200")) {
162 wanted_w_isr = 0.7600;
163 wanted_sys_isr[0] = 0.8851;
164 wanted_sys_isr[1] = 0.6230;
166 if(sample.Contains(
"TTJets_HT-1200to2500")) {
167 wanted_w_isr = 0.7365;
168 wanted_sys_isr[0] = 0.8739;
169 wanted_sys_isr[1] = 0.5861;
171 if(sample.Contains(
"TTJets_HT-2500toInf")) {
172 wanted_w_isr = 0.7254;
173 wanted_sys_isr[0] = 0.8686;
174 wanted_sys_isr[1] = 0.5687;
178 int seconds = difftime(endtime, begtime);
179 float hertz = nentries; hertz /= seconds;
180 cout<<
"[Change Weights] Completed in "<<seconds<<
" seconds ("<<
hoursMinSec(seconds)<<
") for "<<nentries
181 <<
" events -> "<<
roundNumber(hertz,1,1000)<<
" kHz, "<<
roundNumber(1000,2,hertz)<<
" ms per event"<<endl<<endl;
184 var_type.push_back(
"float"); var.push_back(
"weight");
185 var_type.push_back(
"float"); var.push_back(
"w_btag");
186 var_type.push_back(
"float"); var.push_back(
"w_pu");
187 var_type.push_back(
"float"); var.push_back(
"w_toppt");
188 var_type.push_back(
"float"); var.push_back(
"w_isr");
190 var_type.push_back(
"vfloat"); var.push_back(
"sys_bctag");
191 var_type.push_back(
"vfloat"); var.push_back(
"sys_udsgtag");
192 var_type.push_back(
"vfloat"); var.push_back(
"sys_fs_bctag");
193 var_type.push_back(
"vfloat"); var.push_back(
"sys_fs_udsgtag");
194 var_type.push_back(
"vfloat"); var.push_back(
"sys_isr");
195 var_type.push_back(
"vfloat"); var.push_back(
"sys_pdf");
196 var_type.push_back(
"vfloat"); var.push_back(
"sys_mur");
197 var_type.push_back(
"vfloat"); var.push_back(
"sys_muf");
198 var_type.push_back(
"vfloat"); var.push_back(
"sys_murf");
199 var_type.push_back(
"float"); var.push_back(
"w_lep");
200 var_type.push_back(
"float"); var.push_back(
"w_fs_lep");
201 var_type.push_back(
"vfloat"); var.push_back(
"sys_lep");
202 var_type.push_back(
"vfloat"); var.push_back(
"sys_fs_lep");
203 var_type.push_back(
"float"); var.push_back(
"w_lumi");
208 float w_corr_l0 = (
nent-sum_wlep)/nent_zlep * (
nent-sum_fs_wlep)/nent_zlep;
209 if(nent_zlep==0) w_corr_l0 = 1.;
210 var_val[0].push_back(
"*"+to_string(
nent*wanted_w_isr/(sum_weff_l0*w_corr_l0 + sum_weff_l1)));
211 var_val[1].push_back(
"*"+to_string(
nent/sum_btag));
212 var_val[2].push_back(
"*"+to_string(
nent/sum_pu));
213 var_val[3].push_back(
"*"+to_string(
nent*wanted_toppt/sum_toppt));
214 var_val[4].push_back(
"*"+to_string(
nent*wanted_w_isr/sum_wisr));
216 for(
unsigned int idx=0;idx<sum_bctag.size();idx++) var_val[5].push_back(
"*"+to_string(
nent/sum_bctag[idx]));
217 for(
unsigned int idx=0;idx<sum_udsgtag.size();idx++) var_val[6].push_back(
"*"+to_string(
nent/sum_udsgtag[idx]));
218 for(
unsigned int idx=0;idx<sum_fs_bctag.size();idx++) var_val[7].push_back(
"*"+to_string(
nent/sum_fs_bctag[idx]));
219 for(
unsigned int idx=0;idx<sum_fs_udsgtag.size();idx++) var_val[8].push_back(
"*"+to_string(
nent/sum_fs_udsgtag[idx]));
220 for(
unsigned int idx=0;idx<sum_isr.size();idx++) var_val[9].push_back(
"*"+to_string(
nent*wanted_sys_isr[idx]/sum_isr[idx]));
222 for(
unsigned int idx=0;idx<sum_mur.size();idx++) var_val[11].push_back(
"*"+to_string(
nent/sum_mur[idx]));
223 for(
unsigned int idx=0;idx<sum_muf.size();idx++) var_val[12].push_back(
"*"+to_string(
nent/sum_muf[idx]));
224 for(
unsigned int idx=0;idx<sum_murf.size();idx++) var_val[13].push_back(
"*"+to_string(
nent/sum_murf[idx]));
226 var_val[14].push_back(
"*"+to_string((
nent-sum_wlep)/nent_zlep));
227 var_val[15].push_back(
"*"+to_string((
nent-sum_fs_wlep)/nent_zlep));
228 for(
unsigned int idx=0;idx<sum_slep.size();idx++)
229 var_val[16].push_back(
"*"+to_string((
nent-sum_slep[idx])/nent_zlep));
230 for(
unsigned int idx=0;idx<sum_fs_slep.size();idx++)
231 var_val[17].push_back(
"*"+to_string((
nent-sum_fs_slep[idx])/nent_zlep));
237 for(
unsigned int i=0; i<files.size(); i++){
238 cout<<
"[Change Weights] File "<<i+1<<
"/"<<files.size()<<
": "<<files[i]<<endl;
243 seconds = difftime(endtime, begtime);
244 hertz = totentries; hertz /= seconds;
245 cout<<endl<<
"Took "<<seconds<<
" seconds ("<<
hoursMinSec(seconds)<<
") for "<<totentries
246 <<
" events -> "<<
roundNumber(hertz,1,1000)<<
" kHz, "<<
roundNumber(1000,2,hertz)<<
" ms per event"<<endl<<endl;
TString hoursMinSec(long seconds)
int const & mgluino() const
float const & w_lumi() const
float const & w_fs_lep() const
std::vector< float > const & sys_muf() const
std::vector< float > const & sys_fs_bctag() const
std::vector< float > const & sys_fs_lep() const
void stopCrossSection(int stop_mass, float &xsec, float &xsec_unc)
std::vector< float > const & sys_lep() const
float const & w_isr() const
void higgsinoCrossSection(int hig_mass, float &xsec, float &xsec_unc)
float const & nisr() const
void signalCrossSection(int glu_mass, float &xsec, float &xsec_unc)
TString addCommas(double num)
TString roundNumber(double num, int decimals, double denom=1.)
T noNaN(T val, T defval=1.)
std::vector< float > const & sys_isr() const
std::vector< float > const & sys_mur() const
int change_branch_one(TString indir, TString name, TString outdir, std::vector< TString > var_type, std::vector< TString > var, std::vector< std::vector< TString > > var_val, int totentries)
int main(int argc, char *argv[])
std::vector< float > const & sys_udsgtag() const
virtual void GetEntry(const long entry)
std::vector< float > const & sys_fs_udsgtag() const
float const & w_lep() const
std::vector< float > const & sys_murf() const
float const & w_pu() const
std::vector< float > const & sys_bctag() const
float const & w_toppt() const
float const & w_btag() const
float wISR(int nisr, std::vector< float > &sys_isr)
std::vector< TString > dirlist(const TString &folder, const TString &inname="dir", const TString &tag="")
int const & nleps() const