5 #include "utilities.hh" 21 #include "TDirectory.h" 29 int main(
int argc,
char *argv[]){
34 cout<<endl<<
"Required at least 2 arguments: " 35 <<
"./plot/skim_ntuples.exe infolder outfolder [cuts=\"nleps==1&&st>500&&met>200&&njets>=6&&nbdm>=1&&mj14>250&&nveto==0\"] " 36 <<
"[njobs=0] [ijob=0] [filetag=\"\"]"<<endl<<endl;;
39 TString
folder(argv[1]),
outfolder(argv[2]), cuts=
"nleps==1&&st>500&&met>200&&njets>=6&&nbdm>=1&&mj14>250&&nveto==0";
40 if(argc >= 4) cuts = argv[3];
43 njobs = atoi(argv[4]);
47 if(argc >= 7) filetag = argv[6];
50 if(cuts==
"standard") cuts=
"nleps>=1&&st>500&&met>100";
51 if(cuts==
"nl1met200ht500") cuts=
"nleps>=1&&ht>500&&met>200";
52 if(cuts==
"stdnj5") cuts=
"nleps>=1 && st>500 && met>100 && njets>=5";
53 if(cuts==
"abcd") cuts=
"nleps==1&&st>500&&met>200&&njets>=6&&nbdm>=1&&mj14>250&&nveto==0";
54 if(cuts==
"baseline") cuts=
"nleps==1&&st>500&&met>200&&njets>=6&&nbdm>=1";
56 cuts =
"nleps==1&&max(st,Max$(sys_st))>500&&max(met,Max$(sys_met))>200&&max(njets,Max$(sys_njets))>=6&&max(nbdm,Max$(sys_nbdm))>=1&&max(mj14,Max$(sys_mj14))>250";
58 cuts =
"nleps==2&&Max$(leps_pt)>40&&((elel_m>80&&elel_m<100)||(mumu_m>80&&mumu_m<100))";
60 cuts =
"nvleps==2&&nleps>=1&&Max$(leps_pt)>30&&((elelv_m>80&&elelv_m<100)||(mumuv_m>80&&mumuv_m<100))&&ht>300";
62 cuts =
"nleps==2&&Max$(leps_pt)>40&&nbdm==2";
64 cuts =
"met>100&&Max$(leps_pt)>40&&nbdl==0";
66 cuts =
"ht>200&&met>100&&Max$(leps_pt)>40&&nbdl==0";
68 cuts =
"ht>1000&&met<50&&(nvmus+nvels)==0";
69 if(cuts==
"qcd_njet10")
70 cuts =
"ht>1000&&met<50&&(nvmus+nvels)==0&&njets>=10";
72 cuts=
"Sum$(mm_nleps>=1&&mm_st>500.&&mm_met>200.)>0";
73 if(cuts==
"mm_std_nj5mj250")
74 cuts=
"Sum$(mm_nleps>=1&&mm_st>500&&mm_met>200&&mm_njets>=5&&mm_mj14_lep>250)>0||Sum$(mm_nleps>=1&&mm_st>500&&mm_met>200&&mm_njets>=5&&mm_mj14_nolep>250)>0";
76 cuts =
"max(st,Max$(sys_st))>1200&&max(njets,Max$(sys_njets))>=4&&max(nbdm,Max$(sys_nbdm))>=1&&(max(mj12,Max$(sys_mj12))>500)";
78 cuts =
"((nleps==0&&ht>1500)||(nleps==1&&ht>1200))&&njets>=4&&mj12>=300&&(nbdm>=1||nbdm>=1)";
80 cuts =
"max(st,Max$(sys_st))>1000";
82 cuts =
"(mumuv_m>60||elelv_m>60)&&njets>=2";
84 cuts =
"pass&&nvleps==0&&(trig[11]||trig[12]||trig[47]||trig[48]||trig[49]||trig[50]||trig[51]||trig[52]||trig[53]||trig[54])";
85 if(cuts==
"httrig_w_leps")
86 cuts =
"pass&&(trig[11]||trig[12]||trig[47]||trig[48]||trig[49]||trig[50]||trig[51]||trig[52]||trig[53]||trig[54])";
89 TString njcut =
"njets>=4&&njets<=5";
90 TString sys_njcut =
"(njets==4||sys_njets[1]==4||sys_njets[2]==4||njets==5||sys_njets[1]==5||sys_njets[2]==5)";
91 TString nbcut =
"&&(nbt>=2||nbdt>=2)";
92 TString sys_nbcut =
"&&max(nbdt,Max$(sys_nbdt))>=2";
93 TString zcand =
"&&(mumu_m*(mumu_m>0)+elel_m*(elel_m>0))>80&&(mumu_m*(mumu_m>0)+elel_m*(elel_m>0))<100";
94 TString higtrim =
"&&higd_drmax<2.2&&higd_dm<=40&&higd_am<=200";
95 TString sys_higtrim =
"&&min(higd_drmax,Min$(sys_higd_drmax))<2.2&&min(higd_dm,Min$(sys_higd_dm))<=40&&min(higd_am,Min$(sys_higd_am))<=200";
96 if(cuts==
"higqcd") cuts = njcut +
"&& met>150 && nvleps==0";
97 if(cuts==
"higloose") cuts = njcut+nbcut+
"&& met>150 && nvleps==0";
98 if(cuts==
"higtight") cuts = njcut+nbcut+
"&& met>150 && nvleps==0 && ntks==0&&!low_dphi"+higtrim;
99 if(cuts==
"higsys") cuts = sys_njcut+sys_nbcut+
"&& max(met,Max$(sys_met))>150 && nvleps==0 && ntks==0&&!low_dphi"+sys_higtrim;
100 if(cuts==
"higlep1") cuts = njcut+nbcut+
"&& nleps==1 && Max$(leps_pt)>30";
101 if(cuts==
"higlep2") cuts = njcut+zcand+
"&& nleps==2 && Max$(leps_pt)>40";
104 if(cuts==
"nl2nj3nbdm2zveto")
105 cuts =
"nleps>=2&&(elel_m<80||elel_m>100)&&(mumu_m<80||mumu_m>100)&&njets>=3&&nbdm>=2";
107 if(cuts.Contains(
"mchi")){
108 cuts.ReplaceAll(
"mchi",
"");
109 cuts =
"Sum$(mc_id==1000023&&mc_mass=="+cuts+
")>0";
113 TString pass=
"globalTightHalo2016Filter==1&&HBHENoiseFilter==1&&HBHEIsoNoiseFilter==1&&eeBadScFilter==1";
114 pass +=
"&&EcalDeadCellTriggerPrimitiveFilter==1&&BadChargedCandidateFilter&&BadPFMuonFilter&&NVtx>0&&JetID";
115 if(cuts==
"ra2_qcd") cuts = pass+
"&&(@Electrons.size()+@Muons.size())==0&&NJets>=3";
116 if(cuts==
"ra2_ht300") cuts = pass+
"&&HT>300";
117 if(cuts==
"ra2_eht300") cuts = pass+
"&&Max$(Electrons.Pt()*(abs(Electrons.Eta())<2))>35&&HT>300";
118 if(cuts==
"ra2_zmht200") cuts = pass+
"&&@ZCandidates.size()>=1&&MHT>200";
124 if(ijob<1 || ijob>
njobs){
125 cout<<endl<<
"You need to set the 5th argument between 1 and "<<njobs<<endl<<endl;
128 unsigned jobfiles = (
nfiles+njobs-1)/njobs;
129 unsigned nbigjobs = (
nfiles+njobs-1)%njobs+1;
130 if(ijob <= nbigjobs){
131 ini = jobfiles*(ijob-1);
132 end = ini + jobfiles;
134 ini = nbigjobs*jobfiles+(jobfiles-1)*(ijob-1-nbigjobs);
135 end = ini + jobfiles-1;
138 cout<<
"Doing files "<<ini+1<<
" to "<<end<<
" out of "<<
nfiles<<endl;
139 for(
unsigned file(ini); file < end; file++){
140 cout<<file+1<<
"/"<<
nfiles<<
": ";
146 int seconds = difftime(curTime,startTime);
147 cout<<endl<<
"Took "<< seconds <<
" seconds ("<<
hoursMinSec(seconds)<<
") to skim "<< end-ini<<
" files."<<endl<<endl;
155 outfile.Remove(0, outfile.Last(
'/')); outfile.ReplaceAll(
"*",
"");
156 if(outfile.Contains(
".root")) outfile.ReplaceAll(
".root",
"_"+tag+
".root");
157 else outfile += (
"_"+tag+
".root");
158 outfile.ReplaceAll(
">=",
"GE"); outfile.ReplaceAll(
"<=",
"SE"); outfile.ReplaceAll(
"&",
"_");
159 outfile.ReplaceAll(
">",
"G"); outfile.ReplaceAll(
"<",
"S"); outfile.ReplaceAll(
"=",
"");
160 outfile.ReplaceAll(
"(",
""); outfile.ReplaceAll(
")",
""); outfile.ReplaceAll(
"+",
"");
161 outfile.ReplaceAll(
"[",
""); outfile.ReplaceAll(
"]",
""); outfile.ReplaceAll(
"|",
"_");
162 outfile.ReplaceAll(
"$",
""); outfile.ReplaceAll(
",",
"_"); outfile.ReplaceAll(
"!",
"NOT");
163 outfile.ReplaceAll(
" ",
""); outfile.ReplaceAll(
"@",
"");
168 outname.ReplaceAll(outfolder,
""); outname.ReplaceAll(
"/",
"");
169 vector<TString> outfiles =
dirlist(outfolder, outname);
170 if(outfiles.size()>0) {
171 cout<<
"File "<<outfile<<
" exists. Exiting"<<endl;
175 gSystem->mkdir(outfolder, kTRUE);
176 TFile out_rootfile(outfile,
"CREATE");
177 if(out_rootfile.IsZombie() || !out_rootfile.IsOpen())
return;
180 int nfiles = tree.Add(infiles);
181 TChain treeglobal(
"treeglobal");
182 treeglobal.Add(infiles);
185 long nentries(tree.GetEntries());
186 TTree *ctree = tree.CopyTree(cuts);
187 long centries=ctree->GetEntries();
188 if(ctree) ctree->Write();
190 cout<<
"Could not find tree in "<<infiles<<endl;
195 TFile infile(infiles);
196 if(infile.Get(
"treeglobal") != 0){
198 TTree *ctreeglobal = treeglobal.CopyTree(
"1");
199 if(ctreeglobal) ctreeglobal->Write();
202 out_rootfile.Close();
203 cout<<
"Written "<<centries<<
" entries to "<<outfile<<
" from "<<nfiles<<
" files and "<<nentries<<
" entries."<<endl;
tuple infiles
Finding tags for each dataset.
TString hoursMinSec(long seconds)
void onefile_skim(TString infiles, TString outfolder, TString cuts, TString tag)
int main(int argc, char *argv[])
std::vector< TString > dirlist(const TString &folder, const TString &inname="dir", const TString &tag="")