3 |
|
#include <iomanip> |
4 |
|
// #include <pair.h> |
5 |
|
|
6 |
– |
#include "RooHistPdf.h" |
7 |
– |
#include "RooGlobalFunc.h" |
8 |
– |
#include "RooPlot.h" |
9 |
– |
#include "RooRealVar.h" |
10 |
– |
#include "RooDataHist.h" |
11 |
– |
#include "RooGenericPdf.h" |
12 |
– |
#include "RooDataSet.h" |
13 |
– |
#include "RooAddPdf.h" |
14 |
– |
#include "RooFormulaVar.h" |
15 |
– |
#include "RooFitResult.h" |
16 |
– |
#include "RooCurve.h" |
17 |
– |
#include "RooBinning.h" |
18 |
– |
#include "RooExponential.h" |
19 |
– |
#include "RooExtendPdf.h" |
20 |
– |
|
6 |
|
#include "TCanvas.h" |
7 |
|
#include "TChain.h" |
8 |
|
#include "TString.h" |
9 |
|
#include "TStyle.h" |
10 |
|
#include "TH1D.h" |
11 |
+ |
#include "TNtuple.h" |
12 |
+ |
#include "TROOT.h" |
13 |
|
|
14 |
|
#include "CPlot.h" |
15 |
|
#include "FOArgs.h" |
18 |
|
#include "Various.h" |
19 |
|
#include "CommonDefs.h" |
20 |
|
#include "PlotHeaders.h" |
21 |
+ |
#include "TriggerUtils.h" |
22 |
+ |
#include "JetDefs.h" |
23 |
+ |
#include "JetInfoStruct.h" |
24 |
+ |
#include "FR_struct.h" |
25 |
+ |
#include "SelectionFuncs.h" |
26 |
+ |
#include "SampleWeight.h" |
27 |
+ |
#include "MitStyleRemix.h" |
28 |
+ |
|
29 |
+ |
#include "TMVA/Reader.h" |
30 |
+ |
#include "TMVA/Tools.h" |
31 |
+ |
#include "TMVA/Config.h" |
32 |
+ |
#include "TMVA/MethodBDT.h" |
33 |
|
|
34 |
|
#ifndef CMSSW_BASE |
35 |
|
#define CMSSW_BASE "../../" |
39 |
|
using namespace RooFit; |
40 |
|
using namespace mithep; |
41 |
|
|
42 |
+ |
// TH1D* hpu_2011; |
43 |
+ |
// TH1D* hpu_2012; |
44 |
+ |
// TH1D* hpu_2011_me; |
45 |
+ |
// TH1D* hpu_2012_me; |
46 |
+ |
//---------------------------------------------------------------------------------------- |
47 |
|
TCanvas *can; |
48 |
|
|
49 |
+ |
TString dummy_integral_str(TH1D *hist, int nDecPlaces) { return TString(""); }; |
50 |
+ |
bool findGoodJets(vector<SimpleLepton> &goodJets, filestuff *fs, |
51 |
+ |
SimpleLepton lep1, SimpleLepton lep2, SimpleLepton lep3, SimpleLepton lep4); |
52 |
|
void fillHist(CSample *cs, TString channel, TString type, TString var, double val, double wgt, double wgt_lo=0, double wgt_hi=0); |
53 |
< |
void makeHTML(FOFlags &ctrl, TString type, TString plotLabel); |
53 |
> |
void fillAllHists(FOFlags ctrl, CSample *cs, TString channel, TString type, filestuff *fs, KinematicsStruct kine, Angles angles, |
54 |
> |
SimpleLepton lep1, SimpleLepton lep2, SimpleLepton lep3, SimpleLepton lep4, |
55 |
> |
double wgt, double wgt_lo=0, double wgt_hi=0); |
56 |
> |
void fillAllJetHists(FOFlags ctrl, CSample *cs, TString channel, TString type, filestuff *fs, KinematicsStruct kine, |
57 |
> |
SimpleLepton lep1, SimpleLepton lep2, SimpleLepton lep3, SimpleLepton lep4, |
58 |
> |
FusionMva &fusion, vector<SimpleLepton> &goodJets, JetInfoStruct ji, |
59 |
> |
double wgt, double wgt_lo=0, double wgt_hi=0); |
60 |
> |
void makeHTML(FOFlags &ctrl, TString type, TString plotLabel, TString fullOutDir); |
61 |
|
map<TString,map<TString,TH1D*>* > init_hists(FOFlags &ctrl, TString str=""); |
62 |
< |
|
62 |
> |
bool passHlt(FOFlags &ctrl, TrigInfo ti, InfoStruct *info, unsigned lep1matchBits, |
63 |
> |
unsigned lep2matchBits, unsigned lep3matchBits, |
64 |
> |
unsigned lep4matchBits); |
65 |
> |
void init_cuts(vector<TString> &cutstrs, map<TString,int> &cutvec); |
66 |
> |
void resetCutVect(map<TString,int> &cutvec) { |
67 |
> |
for(map<TString,int>::iterator it=cutvec.begin(); it!=cutvec.end(); it++) |
68 |
> |
cutvec[(*it).first] = 0; |
69 |
> |
} |
70 |
> |
map<TString,TH1D*> setHistSet(CSample *cs, TString type, TString var); |
71 |
> |
void fillFakeTuple(CSample *cs, filestuff *fs, EventData evtdata, unsigned ientry, double fillweight); |
72 |
> |
void incrementSsofCounters(FOFlags &ctrl, filestuff *fs, double minMz2, |
73 |
> |
pair<int,int> *best_z_indices, double wgt); |
74 |
> |
map<TString,double> init_counter(TString fname=""); |
75 |
> |
map<TString,double> initSsofRatios(vector<CSample*> &samplev); |
76 |
> |
double getSsofWgt(TString channel, map<TString,double> &ssofRatios); |
77 |
|
//---------------------------------------------------------------------------------------- |
78 |
|
int main(int argc, char** argv) |
79 |
|
{ |
80 |
< |
double lumi = 5000;//10093; |
80 |
> |
SetStyle(); |
81 |
> |
initPUWeights(); |
82 |
> |
ControlFlags dummyCtrl; |
83 |
> |
// TFile * puf_me; |
84 |
> |
// puf_me = new TFile("data/pileup/PUWeights_S12To2012_190456-199011.root"); |
85 |
> |
// hpu_2012_me = (TH1D*)(puf_me->Get("puWeights")); |
86 |
> |
// hpu_2012_me->SetDirectory(0); |
87 |
> |
// puf_me->Close(); |
88 |
> |
// puf_me = new TFile("data/pileup/PUWeights_F11To2011.root"); |
89 |
> |
// hpu_2011_me = (TH1D*)(puf_me->Get("puWeights")); |
90 |
> |
// hpu_2011_me->SetDirectory(0); |
91 |
> |
// puf_me->Close(); |
92 |
> |
|
93 |
> |
vector<TString> cutstrs; |
94 |
> |
map<TString,int> cutvec; |
95 |
> |
init_cuts(cutstrs, cutvec); |
96 |
|
|
97 |
+ |
// arguments... |
98 |
|
FOFlags ctrl; |
99 |
|
parse_foargs( argc, argv, ctrl ); |
100 |
|
ctrl.dump(); |
101 |
+ |
FusionMva fusion(ctrl.uncert);//"./weights/againstZZ-fusion_BDTG.weights.xml"); |
102 |
+ |
bool makeJetTuple=false; // jet tuple for vbf mva training |
103 |
+ |
assert(ctrl.faketype=="SR" || // plot events in signal region, if requested including ntuples of the extrapolation from 2P2F and 3P1F regions |
104 |
+ |
ctrl.faketype=="2P2F" || // plot 2P2F region, and if requested write out ntuple which gives extrapolation to SR (ntuple would then be read by "SR", above) |
105 |
+ |
ctrl.faketype=="3P1F"); // plot 3P1F region (including the extrapolation to there from the 2P2F region), and if requested write out ntuple with SR prediction |
106 |
+ |
if(ctrl.heavyFlavor) assert(ctrl.faketype=="2P2F"); |
107 |
+ |
if(ctrl.ssof) assert(ctrl.faketype=="2P2F"); |
108 |
|
|
109 |
< |
can = new TCanvas("can","can"); |
109 |
> |
can = new TCanvas("can","can",700,500); |
110 |
|
|
111 |
< |
FR_struct fr2011 = initFRs(ctrl.mufakefile2011,ctrl.elefakefile2011); |
112 |
< |
FR_struct fr2012 = initFRs(ctrl.mufakefile2012,ctrl.elefakefile2012); |
111 |
> |
FR_struct fr2011(ctrl.mufakefile2011,ctrl.elefakefile2011); |
112 |
> |
FR_struct fr2012(ctrl.mufakefile2012,ctrl.elefakefile2012); |
113 |
|
|
114 |
|
TString cmsswpath(CMSSW_BASE + TString("/src")); |
115 |
|
string xspath = (string(cmsswpath)+"/MitPhysics/data/xs.dat"); |
116 |
|
SimpleTable xstab(xspath.c_str()); |
117 |
|
|
118 |
+ |
TrigInfo ti; |
119 |
+ |
initAnalysisTriggers(ti); |
120 |
+ |
|
121 |
|
vector<CSample*> samplev; |
122 |
|
TString ntupledir(""),label(""),plotLabel(""),jsonFile(""); |
123 |
|
int puTarget; |
124 |
|
readConfigFile(ctrl.config, ntupledir, label, plotLabel, jsonFile, puTarget, samplev, &ctrl, init_hists); |
125 |
+ |
map<TString,double> ssofRatios; |
126 |
+ |
if(ctrl.ssof && !ctrl.writessofratio && !ctrl.plotWholeSample) ssofRatios = initSsofRatios(samplev); |
127 |
+ |
|
128 |
+ |
Angles angles; // NOTE: this is not the same as fs->angles -- the one in fs is filled with whichever choice of leptons was made in applyZPlusX |
129 |
+ |
KinematicsStruct kine; // NOTE: this is not the same as fs->kine -- the one in fs is filled with whichever choice of leptons was made in applyZPlusX |
130 |
+ |
JetInfoStruct ji; |
131 |
|
|
72 |
– |
vector<pair<unsigned,unsigned> > runEvtv; // vector to veto duplicate events |
132 |
|
UInt_t minRun=999999999,maxRun=0; |
133 |
|
for(unsigned ics=0; ics<samplev.size(); ics++) { |
134 |
|
CSample *cs = samplev[ics]; |
135 |
|
cout << cs->name << endl; |
136 |
+ |
|
137 |
+ |
// output for vbf mva training |
138 |
+ |
unsigned evtVar; |
139 |
+ |
AngleTuple *jettuple; |
140 |
+ |
if(makeJetTuple) { |
141 |
+ |
jettuple = new AngleTuple( (const char*)(TString(cs->name)+"_pass.root").Data(), (const char*)"zznt"); |
142 |
+ |
jettuple->makeAngleBranch(angles); |
143 |
+ |
jettuple->makeKinematicsBranch(kine); |
144 |
+ |
jettuple->makeJetInfoBranch(ji); |
145 |
+ |
const char *str1 = "evt"; |
146 |
+ |
const char *str2 = "evt/i"; |
147 |
+ |
jettuple->makeBranch(str1,(void *)(&evtVar),str2); |
148 |
+ |
} |
149 |
+ |
|
150 |
+ |
vector<pair<unsigned,unsigned> > runEvtv; // vector to veto duplicate events |
151 |
+ |
resetCutVect(cutvec); |
152 |
|
for(unsigned ifs=0; ifs<(cs->fsv).size(); ifs++) { |
153 |
|
filestuff *fs = (cs->fsv)[ifs]; |
154 |
< |
cout << "\t" << fs->fname_ << endl; |
155 |
< |
FR_struct *fr = (fs->era_==2011) ? &fr2011 : &fr2012; |
154 |
> |
if(ctrl.makeFakeTuples && fs->dataset_!="fakes") { // write a copy of the input trees for events that will be used for the SR fake prediction |
155 |
> |
TString fakefilename(fs->fname_); |
156 |
> |
fakefilename.ReplaceAll(".root","-fakes.root"); |
157 |
> |
if(ctrl.hiStatFakes) fakefilename.ReplaceAll("-fakes.root","-fakes-histat.root"); |
158 |
> |
fs->makeOutputFile(fakefilename); |
159 |
> |
} |
160 |
> |
cout << "\t" << fs->fname_; cout.flush(); |
161 |
|
unsigned nDuplSkipped=0; |
162 |
|
for(unsigned ientry=0; ientry<fs->getentries("FOtree"); ientry++) { |
163 |
< |
fs->getentry(ientry,"","FOtree"); |
163 |
> |
fs->getentry(ientry,"FOs","FOtree"); |
164 |
> |
fs->getentry(ientry,"Zleptons","FOtree"); |
165 |
|
fs->getentry(ientry,"info","zznt"); |
166 |
|
|
167 |
< |
if(fs->isdata_) { |
167 |
> |
cutvec["start"] = fs->total_entries_; |
168 |
> |
if(fs->isdata_) {// && !(fs->dataset_=="fakes")) { |
169 |
> |
// WARNING: when I write the fakeTuple from here, I fill an event *twice* if it has two fake z2 candidates, so event numbers are duplicated. |
170 |
> |
// in plotH4l I *don't* want to remove these, but here I *do*, because in this file I again loop over all z2 candidates |
171 |
|
setMinMaxRun(fs->info->run, minRun, maxRun); |
172 |
|
bool dupl = takeCareOfDuplicateEvents(fs->info->run, fs->info->evt, runEvtv, nDuplSkipped); |
173 |
|
if(dupl) continue; |
174 |
< |
pair<unsigned,unsigned> rl(fs->info->run, fs->info->lumi); |
91 |
< |
if(!fs->rlrm_.HasRunLumi(rl)) continue; |
174 |
> |
if(!fs->rlrm_.HasRunLumi(pair<unsigned,unsigned> (fs->info->run, fs->info->lumi))) continue; |
175 |
|
} |
176 |
+ |
cutvec["rlrmAndDupl"] += 1; |
177 |
|
|
178 |
|
double wgt=1; |
179 |
|
if(!fs->isdata_) { |
180 |
< |
double xsWgt = lumi*xstab.Get(fs->dataset_)/fs->total_entries_; |
181 |
< |
// double puWgt = weightTrue2012(fs->info->npu); |
182 |
< |
wgt = xsWgt;//*puWgt; |
180 |
> |
double xsWgt = fs->lumi_*xstab.Get(fs->dataset_)/fs->total_entries_; |
181 |
> |
cout << "WARNING: check the pu weihgs funciton here" << endl; |
182 |
> |
double puWgt = getPUWeight(fs->era_, "/029/", fs->info->npu); |
183 |
> |
// if(fs->era_==2012) |
184 |
> |
// puWgt = hpu_2012_me->GetBinContent(hpu_2012_me->FindBin(fs->info->npu)); |
185 |
> |
// else if(fs->era_==2011) |
186 |
> |
// puWgt = hpu_2011_me->GetBinContent(hpu_2011_me->FindBin(fs->info->npu)); |
187 |
> |
// else assert(0); |
188 |
> |
wgt = xsWgt*puWgt; |
189 |
> |
if(wgt!=wgt) cout << "xsWgt: " << xsWgt << " puWgt: " << puWgt << endl; |
190 |
> |
} |
191 |
> |
if(fs->dataset_=="fakes") { // if we're reading in the fake ntuple that we wrote out earlier, use the event weight that was stored (this should be the same as what we'd get if we calculated it below) |
192 |
> |
fs->getentry(ientry,"weights","zznt"); |
193 |
> |
wgt = fs->weights->w; |
194 |
|
} |
195 |
|
|
196 |
|
unsigned npass = fs->passingL->size(); |
197 |
|
unsigned nfail = fs->failingL->size(); |
198 |
|
|
199 |
+ |
// look for a z1 |
200 |
|
pair<int,int> best_z_indices; |
201 |
< |
findZ1(fs->passingL,best_z_indices,40); |
201 |
> |
double best_mz1 = findZ1(fs->passingL,best_z_indices,40); |
202 |
> |
if(best_mz1<=0) { |
203 |
> |
cout << "WARNING: best z1 mass: " << best_mz1 << endl; |
204 |
> |
} |
205 |
> |
if(ctrl.heavyFlavor && best_mz1<60) continue; |
206 |
|
EventData evtdata; |
207 |
|
evtdata.Z1leptons.push_back((*fs->passingL)[best_z_indices.first]); |
208 |
|
evtdata.Z1leptons.push_back((*fs->passingL)[best_z_indices.second]); |
210 |
|
// Look for a z2 |
211 |
|
vector<pair<SimpleLepton,SimpleLepton> > z2cands; |
212 |
|
vector<TString> types; |
213 |
< |
findZ2Candidates(fs->failingL, z2cands, types, true); |
214 |
< |
|
213 |
> |
TString signFlavor; |
214 |
> |
if(ctrl.heavyFlavor) signFlavor = ""; |
215 |
> |
else if(ctrl.ssof) signFlavor = "SS-SF"; |
216 |
> |
else if(ctrl.hiStatFakes) signFlavor = "signalExclude"; |
217 |
> |
else signFlavor = "OS-SF"; |
218 |
> |
double minMz2 = ctrl.heavyFlavor ? 0 : 12; |
219 |
> |
int hiPtPassingZ2 = findZ2CandidatesPassFail(fs->passingL, z2cands, types, signFlavor, minMz2, "pass",&best_z_indices); // signal region |
220 |
> |
int hiPtFailingZ2 = findZ2CandidatesPassFail(fs->failingL, z2cands, types, signFlavor, minMz2, "fail"); // 2P+2F |
221 |
> |
int hiPtPfZ2 = findZ2CandidatesPassFail(fs->passingL, z2cands, types, signFlavor, minMz2, "PF", &best_z_indices, fs->failingL); // 3P+1F |
222 |
> |
|
223 |
> |
if(ctrl.writessofratio) incrementSsofCounters(ctrl, fs, minMz2, &best_z_indices, wgt); |
224 |
> |
|
225 |
|
for(unsigned iz2=0; iz2<z2cands.size(); iz2++) { |
226 |
|
SimpleLepton lep1 = evtdata.Z1leptons[0]; |
227 |
|
SimpleLepton lep2 = evtdata.Z1leptons[1]; |
228 |
|
SimpleLepton lep3 = z2cands[iz2].first; |
229 |
|
SimpleLepton lep4 = z2cands[iz2].second; |
120 |
– |
|
121 |
– |
TString channel = getChannel(lep1,lep2,lep3,lep4); |
230 |
|
evtdata.Z2leptons.clear(); |
231 |
|
evtdata.Z2leptons.push_back(lep3); |
232 |
|
evtdata.Z2leptons.push_back(lep4); |
233 |
< |
KinematicsStruct kine; |
233 |
> |
fillAngles(evtdata,angles); |
234 |
|
fillKinematics(evtdata,kine); |
235 |
+ |
lepFrs fwgts; |
236 |
+ |
fillLeptonFakeWeights(fwgts, (fs->era_==2011) ? &fr2011 : &fr2012, lep3, lep4); |
237 |
+ |
TString channel = getChannel(lep1,lep2,lep3,lep4); |
238 |
+ |
// bool hltPass = fs->isdata_ ? passHlt(ctrl,ti,fs->info,lep1.scID,lep2.scID,lep3.scID,lep4.scID) : true; |
239 |
|
|
240 |
< |
if(fabs(lep3.ip3dSig) >= 4 || fabs(lep4.ip3dSig) >= 4) continue; // |sip| < 4 is applied in ZPlusX to lep1, lep2 |
240 |
> |
if(ctrl.heavyFlavor) { |
241 |
> |
if(fabs(lep1.dz) > 0.01 || fabs(lep2.dz) > 0.01) continue; |
242 |
> |
if( !(fabs(lep3.ip3dSig) > 2 && fabs(lep4.ip3dSig) > 8) && |
243 |
> |
!(fabs(lep4.ip3dSig) > 2 && fabs(lep3.ip3dSig) > 8) ) continue; |
244 |
> |
if( !(fabs(lep3.d0) > .002 && fabs(lep4.d0) > .01) && |
245 |
> |
!(fabs(lep4.d0) > .002 && fabs(lep3.d0) > .01) ) continue; |
246 |
> |
if(fabs(lep3.d0) > 0.1 || fabs(lep4.d0) > 0.1) continue; |
247 |
> |
if(fabs(lep3.dz) > 0.2 || fabs(lep4.dz) > 0.2) continue; |
248 |
> |
} else { |
249 |
> |
if(fabs(lep3.ip3dSig) >= 4 || fabs(lep4.ip3dSig) >= 4) continue; // |sip| < 4 is applied to lep1, lep2 in ZPlusX |
250 |
> |
if(!leptonDrReqs(lep1,lep2,lep3,lep4)) continue; |
251 |
> |
if(kine.m4l < 100) continue; |
252 |
> |
if(!resonanceKilling(lep1,lep2,lep3,lep4)) continue; |
253 |
> |
} |
254 |
|
if(!finalLeptonPtReqs(lep1,lep2,lep3,lep4)) continue; |
255 |
< |
if(!leptonDrReqs(lep1,lep2,lep3,lep4)) continue; |
256 |
< |
if(!resonanceKilling(lep1,lep2,lep3,lep4)) continue; |
257 |
< |
if(kine.m4l < 100) continue; |
258 |
< |
|
259 |
< |
if(types[iz2]=="pass") { |
260 |
< |
fillHist( cs, channel, "obs", "run" , fs->info->run , wgt); |
261 |
< |
fillHist( cs, channel, "obs", "mZ1" , kine.mZ1 , wgt); |
262 |
< |
fillHist( cs, channel, "obs", "mZ2" , kine.mZ2 , wgt); |
263 |
< |
fillHist( cs, channel, "obs", "mZ2_lo" , kine.mZ2 , wgt); |
264 |
< |
fillHist( cs, channel, "obs", "m4l" , kine.m4l , wgt); |
265 |
< |
fillHist( cs, channel, "obs", "Z1pt" , kine.Z1pt , wgt); |
266 |
< |
fillHist( cs, channel, "obs", "ZZpt" , kine.ZZpt , wgt); |
267 |
< |
fillHist( cs, channel, "obs", "ip3ds_l1" , lep1.ip3dSig , wgt); |
268 |
< |
fillHist( cs, channel, "obs", "ip3ds_l2" , lep2.ip3dSig , wgt); |
269 |
< |
fillHist( cs, channel, "obs", "ip3ds_l3" , lep3.ip3dSig , wgt); |
270 |
< |
fillHist( cs, channel, "obs", "ip3ds_l4" , lep4.ip3dSig , wgt); |
271 |
< |
fillHist( cs, channel, "obs", "pt_l1" , lep1.vec.Pt() , wgt); |
272 |
< |
fillHist( cs, channel, "obs", "pt_l2" , lep2.vec.Pt() , wgt); |
273 |
< |
fillHist( cs, channel, "obs", "pt_l3" , lep3.vec.Pt() , wgt); |
274 |
< |
fillHist( cs, channel, "obs", "pt_l4" , lep4.vec.Pt() , wgt); |
275 |
< |
fillHist( cs, channel, "obs", "eta_l1" , lep1.vec.Eta() , wgt); |
276 |
< |
fillHist( cs, channel, "obs", "eta_l2" , lep2.vec.Eta() , wgt); |
277 |
< |
fillHist( cs, channel, "obs", "eta_l3" , lep3.vec.Eta() , wgt); |
278 |
< |
fillHist( cs, channel, "obs", "eta_l4" , lep4.vec.Eta() , wgt); |
279 |
< |
fillHist( cs, channel, "obs", "dR_l3l4_lo",dr(lep3,lep4), wgt); |
280 |
< |
fillHist( cs, channel, "obs", "dR_l3l4", dr(lep3,lep4), wgt); |
281 |
< |
} else if(types[iz2]=="fail") { |
282 |
< |
double fwgt_1 = get_fake_weight("",lep3,*fr); |
283 |
< |
double fwgt_lo_1 = get_fake_weight("lo",lep3,*fr); |
284 |
< |
double fwgt_hi_1 = get_fake_weight("hi",lep3,*fr); |
285 |
< |
double fwgt_2 = get_fake_weight("",lep4,*fr); |
286 |
< |
double fwgt_lo_2 = get_fake_weight("lo",lep4,*fr); |
287 |
< |
double fwgt_hi_2 = get_fake_weight("hi",lep4,*fr); |
288 |
< |
|
289 |
< |
double centr = wgt*fwgt_1*fwgt_2; |
290 |
< |
double lo = wgt*fwgt_lo_1*fwgt_lo_2; |
291 |
< |
double hi = wgt*fwgt_hi_1*fwgt_hi_2; |
292 |
< |
fillHist( cs, channel, "pred", "run", fs->info->run, centr, lo, hi); |
293 |
< |
fillHist( cs, channel, "pred", "mZ1", kine.mZ1, centr, lo, hi); |
294 |
< |
fillHist( cs, channel, "pred", "mZ2", kine.mZ2, centr, lo, hi); |
295 |
< |
fillHist( cs, channel, "pred", "mZ2_lo", kine.mZ2, centr, lo, hi); |
296 |
< |
fillHist( cs, channel, "pred", "m4l", kine.m4l, centr, lo, hi); |
297 |
< |
fillHist( cs, channel, "pred", "Z1pt", kine.Z1pt, centr, lo, hi); |
298 |
< |
fillHist( cs, channel, "pred", "ZZpt", kine.ZZpt, centr, lo, hi); |
299 |
< |
fillHist( cs, channel, "pred", "ip3ds_l1", lep1.ip3dSig, centr, lo, hi); |
300 |
< |
fillHist( cs, channel, "pred", "ip3ds_l2", lep2.ip3dSig, centr, lo, hi); |
301 |
< |
fillHist( cs, channel, "pred", "ip3ds_l3", lep3.ip3dSig, centr, lo, hi); |
302 |
< |
fillHist( cs, channel, "pred", "ip3ds_l4", lep4.ip3dSig, centr, lo, hi); |
303 |
< |
fillHist( cs, channel, "pred", "pt_l1", lep1.vec.Pt(), centr, lo, hi); |
304 |
< |
fillHist( cs, channel, "pred", "pt_l2", lep2.vec.Pt(), centr, lo, hi); |
305 |
< |
fillHist( cs, channel, "pred", "pt_l3", lep3.vec.Pt(), centr, lo, hi); |
306 |
< |
fillHist( cs, channel, "pred", "pt_l4", lep4.vec.Pt(), centr, lo, hi); |
307 |
< |
fillHist( cs, channel, "pred", "eta_l1", lep1.vec.Eta(), centr, lo, hi); |
308 |
< |
fillHist( cs, channel, "pred", "eta_l2", lep2.vec.Eta(), centr, lo, hi); |
309 |
< |
fillHist( cs, channel, "pred", "eta_l3", lep3.vec.Eta(), centr, lo, hi); |
310 |
< |
fillHist( cs, channel, "pred", "eta_l4", lep4.vec.Eta(), centr, lo, hi); |
311 |
< |
fillHist( cs, channel, "pred", "dR_l3l4_lo",dr(lep3,lep4), centr, lo, hi); |
312 |
< |
fillHist( cs, channel, "pred", "dR_l3l4", dr(lep3,lep4), centr, lo, hi); |
255 |
> |
|
256 |
> |
cutvec["4lsele"] += 1; |
257 |
> |
|
258 |
> |
// |
259 |
> |
// jets! |
260 |
> |
// |
261 |
> |
bool doJets=false; |
262 |
> |
vector<SimpleLepton> goodJets; |
263 |
> |
if(doJets) { |
264 |
> |
fs->getentry(ientry,"jets","FOtree"); |
265 |
> |
if(fs->jets->size() > 1) cutvec["twoJets"] += 1; |
266 |
> |
bool hazJetz = findGoodJets(goodJets, fs, lep1, lep2, lep3, lep4); |
267 |
> |
if(goodJets.size() > 1) cutvec["twoJetsAfter"] += 1; |
268 |
> |
if(!hazJetz) continue; |
269 |
> |
ControlFlags ctrlTmp; |
270 |
> |
fillJetInfo(goodJets,ji,ctrlTmp); |
271 |
> |
if(makeJetTuple) { |
272 |
> |
evtVar = fs->info->evt; |
273 |
> |
jettuple->Fill(); |
274 |
> |
} |
275 |
> |
fusion.setValues(ji,kine); |
276 |
> |
} |
277 |
> |
|
278 |
> |
cutvec["filling"] += 1; |
279 |
> |
|
280 |
> |
if(types[iz2]=="pass" || ((fs->dataset_=="fakes") && (types[iz2]=="fail"))) { // for the fakes ntuple, we plot the "failing" z2s as passing ones, i.e. put them in hObs, but with the proper weight |
281 |
> |
// llll events |
282 |
> |
if((fs->dataset_!="fakes") && (iz2!=hiPtPassingZ2)) continue; // for non-fakes, we only want the highest-pt "passing" z2 (for the fakes these are by design failing z2s, and we want all of 'em) |
283 |
> |
cutvec["fillPass"] += 1; |
284 |
> |
fillAllHists( ctrl, cs, channel, "obs", fs, kine, angles, lep1, lep2, lep3, lep4, wgt); |
285 |
> |
if(doJets) fillAllJetHists( ctrl, cs, channel, "obs", fs, kine, lep1, lep2, lep3, lep4, fusion, goodJets, ji, wgt); |
286 |
> |
|
287 |
> |
} else if(types[iz2]=="fail") { // lljj events |
288 |
> |
if(iz2!=hiPtFailingZ2 && ctrl.plotWholeSample) continue; |
289 |
> |
double centr=0,lo=0,hi=0; |
290 |
> |
if(ctrl.faketype=="2P2F") { |
291 |
> |
if(ctrl.plotWholeSample) { // make plots without weighting with the FR |
292 |
> |
centr = wgt; |
293 |
> |
} else { |
294 |
> |
centr = wgt*fwgts.fwgt_3*fwgts.fwgt_4; |
295 |
> |
lo = wgt*fwgts.fwgt_lo_3*fwgts.fwgt_lo_4; |
296 |
> |
hi = wgt*fwgts.fwgt_hi_3*fwgts.fwgt_hi_4; |
297 |
> |
if(ctrl.ssof && !ctrl.writessofratio && !ctrl.plotWholeSample) { |
298 |
> |
double ssof_wgt = getSsofWgt(channel,ssofRatios); |
299 |
> |
centr *= ssof_wgt; |
300 |
> |
lo *= ssof_wgt; |
301 |
> |
hi *= ssof_wgt; |
302 |
> |
} |
303 |
> |
} |
304 |
> |
} else if(ctrl.faketype=="3P1F") { // apply the weights for extrapolation from 2P2F region to 3P1F region |
305 |
> |
centr = wgt*(fwgts.fwgt_3 + fwgts.fwgt_4); |
306 |
> |
lo = wgt*(fwgts.fwgt_lo_3 + fwgts.fwgt_lo_4); |
307 |
> |
hi = wgt*(fwgts.fwgt_hi_3 + fwgts.fwgt_hi_4); |
308 |
> |
} |
309 |
> |
|
310 |
> |
if(ctrl.makeFakeTuples && fs->dataset_!="fakes") { |
311 |
> |
double fillwgt; |
312 |
> |
bool dofill=true; |
313 |
> |
if(ctrl.faketype=="2P2F") { |
314 |
> |
assert(fs->isdata_); |
315 |
> |
fillwgt = centr; |
316 |
> |
} else if(ctrl.faketype=="3P1F") { |
317 |
> |
fillwgt = - wgt*(fwgts.fwgt_3*fwgts.fwgt_4 + fwgts.fwgt_4*fwgts.fwgt_3); |
318 |
> |
dofill = (cs->name=="data" || cs->name=="2012" || cs->name=="2011"); |
319 |
> |
} else assert(0); |
320 |
> |
fillFakeTuple(cs,fs,evtdata,ientry,fillwgt); |
321 |
> |
} |
322 |
> |
cutvec["fillFail"] += 1; |
323 |
> |
fillAllHists( ctrl, cs, channel, "pred", fs, kine, angles, lep1, lep2, lep3, lep4, centr, lo, hi); |
324 |
> |
if(doJets) fillAllJetHists( ctrl, cs, channel, "pred", fs, kine, lep1, lep2, lep3, lep4, fusion, goodJets, ji, centr, lo, hi); |
325 |
> |
|
326 |
> |
} else if(types[iz2]=="PF") { // lllj events |
327 |
> |
if(fs->dataset_!="fakes" && iz2!=hiPtPfZ2) continue; // shouldn't have this when I extrapolate to signal region |
328 |
> |
|
329 |
> |
if(ctrl.makeFakeTuples && fs->dataset_!="fakes" && ctrl.faketype=="3P1F") { |
330 |
> |
assert(lep3.isLoose || lep4.isLoose); |
331 |
> |
assert(!(lep3.isLoose && lep4.isLoose)); |
332 |
> |
double fwgt = lep3.isLoose ? fwgts.fwgt_4 : fwgts.fwgt_3; |
333 |
> |
double fillwgt;// only fill for data or ZZ |
334 |
> |
if(fs->isdata_) fillwgt = wgt*fwgt; // set the weight to be the fake weight (maybe check that this is the same weight as I read in from the fakes dataset?) |
335 |
> |
else if(cs->name=="zz") fillwgt = -wgt*fwgt; // subtract off the zz contribution in the 3P1F region |
336 |
> |
else assert(0); |
337 |
> |
fillFakeTuple(cs,fs,evtdata,ientry,fillwgt); |
338 |
> |
} |
339 |
> |
|
340 |
> |
cutvec["fillPF"] += 1; |
341 |
> |
fillAllHists( ctrl, cs, channel, "PF", fs, kine, angles, lep1, lep2, lep3, lep4, wgt); |
342 |
> |
if(doJets) fillAllJetHists( ctrl, cs, channel, "PF", fs, kine, lep1, lep2, lep3, lep4, fusion, goodJets, ji, wgt); |
343 |
|
} else assert(0); |
344 |
|
} |
345 |
|
} |
346 |
< |
cout << "\t\tWARNING: skipped " << nDuplSkipped << " duplicate events" << endl; |
346 |
> |
if(ctrl.writessofratio) fs->writeSsofRatios(); |
347 |
> |
cout << "\t\t" << setw(7) << nDuplSkipped << " duplicate events skipped" << endl; |
348 |
> |
if(ctrl.makeFakeTuples) { |
349 |
> |
fs->outFotuple->getFile()->cd(); |
350 |
> |
fs->outFotuple->getTree()->Write(); |
351 |
> |
fs->outtuple->WriteClose(); |
352 |
> |
} |
353 |
> |
fs->del(); |
354 |
|
} |
355 |
+ |
for(unsigned icut=0; icut<cutstrs.size(); icut++) { |
356 |
+ |
cout << setw(22) << cutstrs[icut] << setw(22) << cutvec[cutstrs[icut]] << endl; |
357 |
+ |
} |
358 |
+ |
if(makeJetTuple) |
359 |
+ |
jettuple->WriteClose(); |
360 |
|
} |
361 |
|
cout << "run range: " << setw(12) << minRun << setw(12) << maxRun << endl; |
362 |
+ |
|
363 |
+ |
// plot! |
364 |
|
assert(samplev.size()>0); |
365 |
|
vector<TString> typev; |
366 |
|
typev.push_back("all"); |
367 |
< |
typev.push_back("4e"); |
368 |
< |
typev.push_back("4m"); |
369 |
< |
typev.push_back("2e2m"); |
367 |
> |
|
368 |
> |
if(ctrl.plotAllCats) { |
369 |
> |
typev.push_back("4e"); |
370 |
> |
typev.push_back("4m"); |
371 |
> |
typev.push_back("2e2m"); |
372 |
> |
} |
373 |
> |
|
374 |
> |
ofstream txtOutFile("fakes.txt",ios_base::app); |
375 |
> |
txtOutFile << "---> " << ctrl.faketype << " " << plotLabel << endl; |
376 |
> |
// loop over channels |
377 |
|
for(unsigned itype=0; itype<typev.size(); itype++) { |
378 |
|
TString type(typev[itype]); |
379 |
< |
gSystem->mkdir(ctrl.outdir+"/"+plotLabel+"/"+type,true); |
380 |
< |
TFile runHistFile(ctrl.outdir+"/"+plotLabel+"/"+type+"/runs.root","recreate"); |
379 |
> |
TString fullOutDir(ctrl.outdir+"/"+plotLabel+"/"+type); |
380 |
> |
gSystem->mkdir(fullOutDir,true); |
381 |
> |
TFile runHistFile(fullOutDir+"/runs.root","recreate"); |
382 |
> |
// loop over variables |
383 |
|
map<TString,TH1D*>::iterator it_v; |
384 |
|
for(it_v=(*(samplev[0]->hists)[type+"_obs"]).begin(); it_v!=(*(samplev[0]->hists)[type+"_obs"]).end(); it_v++) { |
385 |
|
TString var((*it_v).first); |
386 |
< |
CPlot cplot(var,"",(*(samplev[0]->hists)[type+"_obs"])[var]->GetXaxis()->GetTitle(),"events",ctrl.outdir+"/"+plotLabel+"/"+type+"/plots"); |
386 |
> |
CPlot cplot(var,TString(""),(*(samplev[0]->hists)[type+"_obs"])[var]->GetXaxis()->GetTitle(),TString("events"),TString(fullOutDir+"/plots")); |
387 |
> |
double fakeCounter=0; |
388 |
|
double ymax=0; |
389 |
+ |
// loop over csamples |
390 |
|
for(unsigned isam=0; isam<samplev.size(); isam++) { |
391 |
|
CSample *cs = samplev[isam]; |
392 |
< |
TH1D *hObs = (*(cs->hists)[type+"_obs"])[var]; |
393 |
< |
TH1D *hPred = (*(cs->hists)[type+"_pred"])[var]; |
394 |
< |
TH1D *hPred_lo = (*(cs->hists)[type+"_pred_lo"])[var]; |
395 |
< |
TH1D *hPred_hi = (*(cs->hists)[type+"_pred_hi"])[var]; |
396 |
< |
|
397 |
< |
if(cs->isdata) { |
398 |
< |
double ratio = integrateHist(hObs) / integrateHist(hPred); |
399 |
< |
cplot.AddHist1D(hObs,cs->legend+": "+integral_str(hObs,0)+", ratio: "+f_to_a(ratio),"E"); |
400 |
< |
cplot.AddHist1D(hPred,"FR predic: "+integral_str(hPred,2),"hist",kRed); |
401 |
< |
cplot.AddHist1D(hPred_lo,"stat lo: "+integral_str(hPred_lo,2),"hist",kRed,kDashed); |
402 |
< |
cplot.AddHist1D(hPred_hi,"stat hi: "+integral_str(hPred_hi,2),"hist",kRed,kDashed); |
403 |
< |
ymax = max(ymax,histMax(hObs,hPred,hPred_lo,hPred_hi)); |
404 |
< |
} else { |
405 |
< |
cplot.AddToStack(hPred,cs->legend+" pred.: "+integral_str(hPred,2),cs->color); |
406 |
< |
ymax = max(ymax,hPred->GetMaximum()); |
407 |
< |
// cplot.AddHist1D(hObs,cs->legend+": "+integral_str(hObs),"Ehist",kBlue);//cs->color); |
392 |
> |
map<TString,TH1D*> hs = setHistSet(cs,type,var); |
393 |
> |
if(var=="met") //var=="mjj" || var=="etaProd" || var=="ncj") |
394 |
> |
shiftOverflows(hs); |
395 |
> |
bool plotShapeOnly = false; |
396 |
> |
if(plotShapeOnly) |
397 |
> |
scaleHists(hs); |
398 |
> |
|
399 |
> |
if(cs->isdata && !(cs->name=="fakes")) { |
400 |
> |
if(ctrl.faketype=="SR" || (ctrl.heavyFlavor && !ctrl.plotWholeSample) || (ctrl.ssof && !ctrl.plotWholeSample)) { |
401 |
> |
cplot.AddHist1D(hs["obs"],cs->legend+": "+integral_str(hs["obs"],0),"E"); |
402 |
> |
ymax = max(ymax,hs["obs"]->GetMaximum()); |
403 |
> |
} |
404 |
> |
if(ctrl.faketype=="2P2F") { |
405 |
> |
if(ctrl.plotWholeSample) { |
406 |
> |
cplot.AddHist1D(hs["pred"],cs->legend+": "+integral_str(hs["pred"],0),"E"); |
407 |
> |
ymax = max(ymax,hs["pred"]->GetMaximum()); |
408 |
> |
} else { |
409 |
> |
cplot.AddHist1D(hs["pred"], TString("FR predic: "+integral_str(hs["pred"],3)), "hist",kRed); |
410 |
> |
cplot.AddHist1D(hs["pred_lo"], TString( "stat lo: "+integral_str(hs["pred_lo"],2)),"hist",kRed,kDashed); |
411 |
> |
cplot.AddHist1D(hs["pred_hi"], TString( "stat hi: "+integral_str(hs["pred_hi"],2)),"hist",kRed,kDashed); |
412 |
> |
if(var=="m4l") { |
413 |
> |
txtOutFile << " " << type << ": " << integral_str(hs["pred"],3) << " (" << integral_str(hs["pred_lo"],2) << "," << integral_str(hs["pred_hi"],2) << ")" << endl; |
414 |
> |
} |
415 |
> |
ymax = max(ymax,histMax(hs["pred"],hs["pred_lo"],hs["pred_hi"])); |
416 |
> |
} |
417 |
> |
} |
418 |
> |
if(ctrl.faketype=="3P1F") { |
419 |
> |
double ratio = 0;//integrateHist(hs["PF"]) / integrateHist(hs["pred"]); |
420 |
> |
cplot.AddHist1D(hs["PF"],TString(cs->legend+": "+integral_str(hs["PF"],0)+", ratio: "+f_to_a(ratio)),"E",cs->color); |
421 |
> |
if(!ctrl.plotWholeSample) { |
422 |
> |
cplot.AddToStack(hs["pred"],TString(cs->legend+"(2P2F extrap.): "+integral_str(hs["pred"],1)), kRed, -1); |
423 |
> |
ymax = max(ymax,histMax(hs["PF"],cplot.GetStack(),hs["pred"])); |
424 |
> |
} else { |
425 |
> |
ymax = max(ymax,hs["PF"]->GetMaximum()); |
426 |
> |
} |
427 |
> |
fakeCounter = integrateHist(hs["PF"]) - integrateHist(hs["pred"]); |
428 |
> |
} |
429 |
> |
} else { // mc |
430 |
> |
TH1D *mchist = 0; |
431 |
> |
if(ctrl.faketype=="SR") mchist = hs["obs"]; |
432 |
> |
if(ctrl.faketype=="2P2F") { |
433 |
> |
if(ctrl.plotWholeSample) mchist = hs["pred"]; |
434 |
> |
else mchist = hs["obs"]; |
435 |
> |
} |
436 |
> |
if(ctrl.faketype=="3P1F") mchist = hs["PF"]; |
437 |
> |
assert(mchist); |
438 |
> |
bool stackMc = true; |
439 |
> |
if(stackMc) cplot.AddToStack(mchist,TString(cs->legend+": "+integral_str(mchist,2)),cs->color,-1); |
440 |
> |
else cplot.AddHist1D(mchist,TString(cs->legend +": "+integral_str(mchist,3)),"Ehist",cs->color);//cs->color); |
441 |
> |
if(cs->name=="zz") fakeCounter -= integrateHist(hs["PF"]); |
442 |
> |
ymax = max(ymax,histMax(mchist,cplot.GetStack())); |
443 |
|
} |
444 |
|
if(cs->isdata && var=="run") { |
445 |
< |
assert(hObs->GetBinContent(0)==0 && hObs->GetBinContent(hObs->GetXaxis()->GetNbins()+1)==0); |
446 |
< |
hObs->Write("runs"); |
445 |
> |
assert(hs["obs"]->GetBinContent(0)==0 && hs["obs"]->GetBinContent(hs["obs"]->GetXaxis()->GetNbins()+1)==0); |
446 |
> |
hs["obs"]->Write("runs"); |
447 |
|
} |
448 |
< |
if(var.Contains("ip3d")) { |
234 |
< |
double maxVal = max(hObs->GetMaximum(), hPred->GetMaximum()); |
235 |
< |
double isoMin = 0.0005*maxVal; |
236 |
< |
double isoMax = 1.8*maxVal; |
237 |
< |
cplot.SetYRange(isoMin,isoMax); |
238 |
< |
// cplot.SetLogy(); |
239 |
< |
} else { |
448 |
> |
if(!var.Contains("fusionMVA")) |
449 |
|
cplot.SetYRange(0,1.2*ymax); |
450 |
< |
} |
450 |
> |
if(ctrl.faketype=="3P1F") cplot.AddTextBox(TString("diff: "+f_to_a(fakeCounter)),.7,.5,.8,.6); |
451 |
|
} |
452 |
|
cplot.Draw(can,true,"png"); |
453 |
+ |
if(var.Contains("fusionMVA")) { |
454 |
+ |
cplot.SetLogy(); |
455 |
+ |
cplot.Draw(can,true,"png",0,var+"-log"); |
456 |
+ |
cplot.SetLogy(false); |
457 |
+ |
} |
458 |
|
} |
459 |
|
runHistFile.Close(); |
460 |
< |
makeHTML(ctrl,type,plotLabel); |
460 |
> |
makeHTML(ctrl,type,plotLabel,fullOutDir); |
461 |
|
} |
462 |
+ |
txtOutFile.close(); |
463 |
+ |
|
464 |
+ |
fr2011.FR_struct::~FR_struct(); |
465 |
+ |
fr2012.FR_struct::~FR_struct(); |
466 |
|
} |
467 |
|
//---------------------------------------------------------------------------------------- |
468 |
|
map<TString,map<TString,TH1D*>* > init_hists(FOFlags &ctrl, TString str) |
472 |
|
map<TString,TH1D*> *h_4e_pred = new map<TString,TH1D*>; hists["4e_pred"] = h_4e_pred; |
473 |
|
map<TString,TH1D*> *h_4e_pred_lo = new map<TString,TH1D*>; hists["4e_pred_lo"] = h_4e_pred_lo; |
474 |
|
map<TString,TH1D*> *h_4e_pred_hi = new map<TString,TH1D*>; hists["4e_pred_hi"] = h_4e_pred_hi; |
475 |
+ |
map<TString,TH1D*> *h_4e_PF = new map<TString,TH1D*>; hists["4e_PF"] = h_4e_PF; |
476 |
+ |
map<TString,TH1D*> *h_4e_PF_lo = new map<TString,TH1D*>; hists["4e_PF_lo"] = h_4e_PF_lo; |
477 |
+ |
map<TString,TH1D*> *h_4e_PF_hi = new map<TString,TH1D*>; hists["4e_PF_hi"] = h_4e_PF_hi; |
478 |
|
map<TString,TH1D*> *h_4m_obs = new map<TString,TH1D*>; hists["4m_obs"] = h_4m_obs; |
479 |
|
map<TString,TH1D*> *h_4m_pred = new map<TString,TH1D*>; hists["4m_pred"] = h_4m_pred; |
480 |
|
map<TString,TH1D*> *h_4m_pred_lo = new map<TString,TH1D*>; hists["4m_pred_lo"] = h_4m_pred_lo; |
481 |
|
map<TString,TH1D*> *h_4m_pred_hi = new map<TString,TH1D*>; hists["4m_pred_hi"] = h_4m_pred_hi; |
482 |
+ |
map<TString,TH1D*> *h_4m_PF = new map<TString,TH1D*>; hists["4m_PF"] = h_4m_PF; |
483 |
+ |
map<TString,TH1D*> *h_4m_PF_lo = new map<TString,TH1D*>; hists["4m_PF_lo"] = h_4m_PF_lo; |
484 |
+ |
map<TString,TH1D*> *h_4m_PF_hi = new map<TString,TH1D*>; hists["4m_PF_hi"] = h_4m_PF_hi; |
485 |
|
map<TString,TH1D*> *h_2e2m_obs = new map<TString,TH1D*>; hists["2e2m_obs"] = h_2e2m_obs; |
486 |
|
map<TString,TH1D*> *h_2e2m_pred = new map<TString,TH1D*>; hists["2e2m_pred"] = h_2e2m_pred; |
487 |
|
map<TString,TH1D*> *h_2e2m_pred_lo = new map<TString,TH1D*>; hists["2e2m_pred_lo"] = h_2e2m_pred_lo; |
488 |
|
map<TString,TH1D*> *h_2e2m_pred_hi = new map<TString,TH1D*>; hists["2e2m_pred_hi"] = h_2e2m_pred_hi; |
489 |
+ |
map<TString,TH1D*> *h_2e2m_PF = new map<TString,TH1D*>; hists["2e2m_PF"] = h_2e2m_PF; |
490 |
+ |
map<TString,TH1D*> *h_2e2m_PF_lo = new map<TString,TH1D*>; hists["2e2m_PF_lo"] = h_2e2m_PF_lo; |
491 |
+ |
map<TString,TH1D*> *h_2e2m_PF_hi = new map<TString,TH1D*>; hists["2e2m_PF_hi"] = h_2e2m_PF_hi; |
492 |
|
map<TString,TH1D*> *h_all_obs = new map<TString,TH1D*>; hists["all_obs"] = h_all_obs; |
493 |
|
map<TString,TH1D*> *h_all_pred = new map<TString,TH1D*>; hists["all_pred"] = h_all_pred; |
494 |
|
map<TString,TH1D*> *h_all_pred_lo = new map<TString,TH1D*>; hists["all_pred_lo"] = h_all_pred_lo; |
495 |
|
map<TString,TH1D*> *h_all_pred_hi = new map<TString,TH1D*>; hists["all_pred_hi"] = h_all_pred_hi; |
496 |
+ |
map<TString,TH1D*> *h_all_PF = new map<TString,TH1D*>; hists["all_PF"] = h_all_PF; |
497 |
+ |
map<TString,TH1D*> *h_all_PF_lo = new map<TString,TH1D*>; hists["all_PF_lo"] = h_all_PF_lo; |
498 |
+ |
map<TString,TH1D*> *h_all_PF_hi = new map<TString,TH1D*>; hists["all_PF_hi"] = h_all_PF_hi; |
499 |
|
map<TString,map<TString,TH1D*>* >::iterator it_h; |
500 |
|
|
501 |
|
for(it_h=hists.begin(); it_h!=hists.end(); it_h++) { |
502 |
< |
(*((*it_h).second))["run"] = new TH1D(TString("run") +"_"+(*it_h).first+str,";#bf{run};", 50,160800,196535); (*((*it_h).second))["run"]->Sumw2(); |
503 |
< |
(*((*it_h).second))["mZ1"] = new TH1D(TString("mZ1") +"_"+(*it_h).first+str,";#bf{mZ1 [GeV]};", 20,60,120); (*((*it_h).second))["mZ1"]->Sumw2(); |
502 |
> |
(*((*it_h).second))["npv"] = new TH1D(TString("npv") +"_"+(*it_h).first+str,";#bf{N PV};", 50,-0.5,49.5); (*((*it_h).second))["npv"]->Sumw2(); |
503 |
> |
(*((*it_h).second))["run"] = new TH1D(TString("run") +"_"+(*it_h).first+str,";#bf{run};", 50,160800,203744/*196535*/); (*((*it_h).second))["run"]->Sumw2(); |
504 |
> |
(*((*it_h).second))["mZ1"] = new TH1D(TString("mZ1") +"_"+(*it_h).first+str,";#bf{mZ1 [GeV]};", 20,40,120); (*((*it_h).second))["mZ1"]->Sumw2(); |
505 |
|
(*((*it_h).second))["mZ2"] = new TH1D(TString("mZ2") +"_"+(*it_h).first+str,";#bf{mZ2 [GeV]};", 30,0,115); (*((*it_h).second))["mZ2"]->Sumw2(); |
506 |
|
(*((*it_h).second))["mZ2_lo"] = new TH1D(TString("mZ2_lo") +"_"+(*it_h).first+str,";#bf{mZ2 [GeV]};", 30,0,10); (*((*it_h).second))["mZ2_lo"]->Sumw2(); |
507 |
< |
(*((*it_h).second))["m4l"] = new TH1D(TString("m4l") +"_"+(*it_h).first+str,";#bf{m4l [GeV]};", 20,50,500); (*((*it_h).second))["m4l"]->Sumw2(); |
508 |
< |
(*((*it_h).second))["Z1pt"] = new TH1D(TString("Z1pt") +"_"+(*it_h).first+str,";#bf{Z1pt [GeV]};", 20,0,200); (*((*it_h).second))["Z1pt"]->Sumw2(); |
509 |
< |
(*((*it_h).second))["ZZpt"] = new TH1D(TString("ZZpt") +"_"+(*it_h).first+str,";#bf{ZZpt [GeV]};", 30,0,200); (*((*it_h).second))["ZZpt"]->Sumw2(); |
507 |
> |
(*((*it_h).second))["m4l_lo"] = new TH1D(TString("m4l_lo") +"_"+(*it_h).first+str,";#bf{m4l [GeV]};", 35,70,120); (*((*it_h).second))["m4l_lo"]->Sumw2(); |
508 |
> |
(*((*it_h).second))["m4l_med"] = new TH1D(TString("m4l_med") +"_"+(*it_h).first+str,";#bf{m4l [GeV]};",35,100,180); (*((*it_h).second))["m4l_med"]->Sumw2(); |
509 |
> |
(*((*it_h).second))["m4l"] = new TH1D(TString("m4l") +"_"+(*it_h).first+str,";#bf{m4l [GeV]};", 35,100,600); (*((*it_h).second))["m4l"]->Sumw2(); |
510 |
> |
// (*((*it_h).second))["Z1pt"] = new TH1D(TString("Z1pt") +"_"+(*it_h).first+str,";#bf{Z1pt [GeV]};", 20,0,200); (*((*it_h).second))["Z1pt"]->Sumw2(); |
511 |
> |
// (*((*it_h).second))["ZZpt"] = new TH1D(TString("ZZpt") +"_"+(*it_h).first+str,";#bf{ZZpt [GeV]};", 30,0,200); (*((*it_h).second))["ZZpt"]->Sumw2(); |
512 |
> |
(*((*it_h).second))["met"] = new TH1D(TString("met") +"_"+(*it_h).first+str,";#bf{met [GeV]};", 30,0,100); (*((*it_h).second))["met"]->Sumw2(); |
513 |
|
|
514 |
|
(*((*it_h).second))["pt_l1"] = new TH1D(TString("pt_l1") +"_"+(*it_h).first+str,";#bf{l1 p_{T} [GeV]};", 37,0,120); (*((*it_h).second))["pt_l1"]->Sumw2(); |
515 |
|
(*((*it_h).second))["pt_l2"] = new TH1D(TString("pt_l2") +"_"+(*it_h).first+str,";#bf{l2 p_{T} [GeV]};", 37,0,65); (*((*it_h).second))["pt_l2"]->Sumw2(); |
521 |
|
(*((*it_h).second))["eta_l3"] = new TH1D(TString("eta_l3")+"_"+(*it_h).first+str,";#bf{l3 #eta};", 25,-2.5,2.5); (*((*it_h).second))["eta_l3"]->Sumw2(); |
522 |
|
(*((*it_h).second))["eta_l4"] = new TH1D(TString("eta_l4")+"_"+(*it_h).first+str,";#bf{l4 #eta};", 25,-2.5,2.5); (*((*it_h).second))["eta_l4"]->Sumw2(); |
523 |
|
|
524 |
< |
(*((*it_h).second))["ip3ds_l1"] = new TH1D(TString("ip3ds_l1") +"_"+(*it_h).first+str,";#bf{ip3ds l1};",30,-5,5); (*((*it_h).second))["ip3ds_l1"]->Sumw2(); |
525 |
< |
(*((*it_h).second))["ip3ds_l2"] = new TH1D(TString("ip3ds_l2") +"_"+(*it_h).first+str,";#bf{ip3ds l2};",30,-5,5); (*((*it_h).second))["ip3ds_l2"]->Sumw2(); |
526 |
< |
(*((*it_h).second))["ip3ds_l3"] = new TH1D(TString("ip3ds_l3") +"_"+(*it_h).first+str,";#bf{ip3ds l3};",30,-10,10); (*((*it_h).second))["ip3ds_l3"]->Sumw2(); |
527 |
< |
(*((*it_h).second))["ip3ds_l4"] = new TH1D(TString("ip3ds_l4") +"_"+(*it_h).first+str,";#bf{ip3ds l4};",30,-10,10); (*((*it_h).second))["ip3ds_l4"]->Sumw2(); |
524 |
> |
(*((*it_h).second))["ip3ds_l1"] = new TH1D(TString("ip3ds_l1") +"_"+(*it_h).first+str,";#bf{ip3ds l1};",37,-3,3); (*((*it_h).second))["ip3ds_l1"]->Sumw2(); |
525 |
> |
(*((*it_h).second))["ip3ds_l2"] = new TH1D(TString("ip3ds_l2") +"_"+(*it_h).first+str,";#bf{ip3ds l2};",37,-3,3); (*((*it_h).second))["ip3ds_l2"]->Sumw2(); |
526 |
> |
(*((*it_h).second))["ip3ds_l3_lo"] = new TH1D(TString("ip3ds_l3_lo") +"_"+(*it_h).first+str,";#bf{ip3ds l3_lo};",25,-6,6); (*((*it_h).second))["ip3ds_l3_lo"]->Sumw2(); |
527 |
> |
(*((*it_h).second))["ip3ds_l4_lo"] = new TH1D(TString("ip3ds_l4_lo") +"_"+(*it_h).first+str,";#bf{ip3ds l4_lo};",25,-6,6); (*((*it_h).second))["ip3ds_l4_lo"]->Sumw2(); |
528 |
> |
(*((*it_h).second))["ip3ds_l3"] = new TH1D(TString("ip3ds_l3") +"_"+(*it_h).first+str,";#bf{ip3ds l3};",55,-40,40); (*((*it_h).second))["ip3ds_l3"]->Sumw2(); |
529 |
> |
(*((*it_h).second))["ip3ds_l4"] = new TH1D(TString("ip3ds_l4") +"_"+(*it_h).first+str,";#bf{ip3ds l4};",55,-40,40); (*((*it_h).second))["ip3ds_l4"]->Sumw2(); |
530 |
> |
|
531 |
> |
(*((*it_h).second))["d0_l1"] = new TH1D(TString("d0_l1") +"_"+(*it_h).first+str,";#bf{d0 l1};",50,-.008,.008); (*((*it_h).second))["d0_l1"]->Sumw2(); |
532 |
> |
(*((*it_h).second))["d0_l2"] = new TH1D(TString("d0_l2") +"_"+(*it_h).first+str,";#bf{d0 l2};",50,-.008,.008); (*((*it_h).second))["d0_l2"]->Sumw2(); |
533 |
> |
(*((*it_h).second))["d0_l3_lo"] = new TH1D(TString("d0_l3_lo") +"_"+(*it_h).first+str,";#bf{d0 l3_lo};",25,-.03,.03); (*((*it_h).second))["d0_l3_lo"]->Sumw2(); |
534 |
> |
(*((*it_h).second))["d0_l4_lo"] = new TH1D(TString("d0_l4_lo") +"_"+(*it_h).first+str,";#bf{d0 l4_lo};",25,-.03,.03); (*((*it_h).second))["d0_l4_lo"]->Sumw2(); |
535 |
> |
(*((*it_h).second))["d0_l3"] = new TH1D(TString("d0_l3") +"_"+(*it_h).first+str,";#bf{d0 l3};",50,-.1,.1); (*((*it_h).second))["d0_l3"]->Sumw2(); |
536 |
> |
(*((*it_h).second))["d0_l4"] = new TH1D(TString("d0_l4") +"_"+(*it_h).first+str,";#bf{d0 l4};",50,-.1,.1); (*((*it_h).second))["d0_l4"]->Sumw2(); |
537 |
> |
|
538 |
> |
(*((*it_h).second))["dz_l1"] = new TH1D(TString("dz_l1") +"_"+(*it_h).first+str,";#bf{dz l1};",50,-.01,.01); (*((*it_h).second))["dz_l1"]->Sumw2(); |
539 |
> |
(*((*it_h).second))["dz_l2"] = new TH1D(TString("dz_l2") +"_"+(*it_h).first+str,";#bf{dz l2};",50,-.01,.01); (*((*it_h).second))["dz_l2"]->Sumw2(); |
540 |
> |
(*((*it_h).second))["dz_l3"] = new TH1D(TString("dz_l3") +"_"+(*it_h).first+str,";#bf{dz l3};",50,-.2,.2); (*((*it_h).second))["dz_l3"]->Sumw2(); |
541 |
> |
(*((*it_h).second))["dz_l4"] = new TH1D(TString("dz_l4") +"_"+(*it_h).first+str,";#bf{dz l4};",50,-.2,.2); (*((*it_h).second))["dz_l4"]->Sumw2(); |
542 |
|
|
543 |
|
(*((*it_h).second))["dR_l3l4_lo"] = new TH1D(TString("dR_l3l4_lo") +"_"+(*it_h).first+str,";#bf{#Delta R l3,l4};",75,0,.2); (*((*it_h).second))["dR_l3l4_lo"]->Sumw2(); |
544 |
|
(*((*it_h).second))["dR_l3l4"] = new TH1D(TString("dR_l3l4") +"_"+(*it_h).first+str,";#bf{#Delta R l3,l4};",75,0,6); (*((*it_h).second))["dR_l3l4"]->Sumw2(); |
545 |
+ |
|
546 |
+ |
// jets |
547 |
+ |
(*((*it_h).second))["pt_allJet"] = new TH1D(TString("pt_allJet") +"_"+(*it_h).first+str,";#bf{jet 1 p_{T} [GeV]};",37,0,400); (*((*it_h).second))["pt_allJet"]->Sumw2(); |
548 |
+ |
(*((*it_h).second))["eta_allJet"] = new TH1D(TString("eta_allJet") +"_"+(*it_h).first+str,";#bf{jet 1 p_{T} [GeV]};",37,-4.8,4.8); (*((*it_h).second))["eta_allJet"]->Sumw2(); |
549 |
+ |
(*((*it_h).second))["pt_j1"] = new TH1D(TString("pt_j1") +"_"+(*it_h).first+str,";#bf{jet 1 p_{T} [GeV]};", 37,0,400); (*((*it_h).second))["pt_j1"]->Sumw2(); |
550 |
+ |
(*((*it_h).second))["pt_j2"] = new TH1D(TString("pt_j2") +"_"+(*it_h).first+str,";#bf{jet 2 p_{T} [GeV]};", 37,0,125); (*((*it_h).second))["pt_j2"]->Sumw2(); |
551 |
+ |
(*((*it_h).second))["pt_j3"] = new TH1D(TString("pt_j3") +"_"+(*it_h).first+str,";#bf{jet 3 p_{T} [GeV]};", 37,0,125); (*((*it_h).second))["pt_j3"]->Sumw2(); |
552 |
+ |
(*((*it_h).second))["pt_j4"] = new TH1D(TString("pt_j4") +"_"+(*it_h).first+str,";#bf{jet 4 p_{T} [GeV]};", 37,0,125); (*((*it_h).second))["pt_j4"]->Sumw2(); |
553 |
+ |
(*((*it_h).second))["eta_j1"] = new TH1D(TString("eta_j1")+"_"+(*it_h).first+str,";#bf{jet 1 #eta};", 55,-4.8,4.8); (*((*it_h).second))["eta_j1"]->Sumw2(); |
554 |
+ |
(*((*it_h).second))["eta_j2"] = new TH1D(TString("eta_j2")+"_"+(*it_h).first+str,";#bf{jet 2 #eta};", 55,-4.8,4.8); (*((*it_h).second))["eta_j2"]->Sumw2(); |
555 |
+ |
(*((*it_h).second))["eta_j3"] = new TH1D(TString("eta_j3")+"_"+(*it_h).first+str,";#bf{jet 3 #eta};", 55,-4.8,4.8); (*((*it_h).second))["eta_j3"]->Sumw2(); |
556 |
+ |
(*((*it_h).second))["eta_j4"] = new TH1D(TString("eta_j4")+"_"+(*it_h).first+str,";#bf{jet 4 #eta};", 55,-4.8,4.8); (*((*it_h).second))["eta_j4"]->Sumw2(); |
557 |
+ |
(*((*it_h).second))["phi_j1"] = new TH1D(TString("phi_j1")+"_"+(*it_h).first+str,";#bf{jet 1 #phi};", 25,-3.2,3.2); (*((*it_h).second))["phi_j1"]->Sumw2(); |
558 |
+ |
(*((*it_h).second))["phi_j2"] = new TH1D(TString("phi_j2")+"_"+(*it_h).first+str,";#bf{jet 2 #phi};", 25,-3.2,3.2); (*((*it_h).second))["phi_j2"]->Sumw2(); |
559 |
+ |
(*((*it_h).second))["phi_j3"] = new TH1D(TString("phi_j3")+"_"+(*it_h).first+str,";#bf{jet 3 #phi};", 25,-3.2,3.2); (*((*it_h).second))["phi_j3"]->Sumw2(); |
560 |
+ |
(*((*it_h).second))["phi_j4"] = new TH1D(TString("phi_j4")+"_"+(*it_h).first+str,";#bf{jet 4 #phi};", 25,-3.2,3.2); (*((*it_h).second))["phi_j4"]->Sumw2(); |
561 |
+ |
(*((*it_h).second))["idmva_j1"] = new TH1D(TString("idmva_j1")+"_"+(*it_h).first+str,";#bf{jet 1 MVA};", 25,-1.1,1.1); (*((*it_h).second))["idmva_j1"]->Sumw2(); |
562 |
+ |
(*((*it_h).second))["idmva_j2"] = new TH1D(TString("idmva_j2")+"_"+(*it_h).first+str,";#bf{jet 2 MVA};", 25,-1.1,1.1); (*((*it_h).second))["idmva_j2"]->Sumw2(); |
563 |
+ |
(*((*it_h).second))["idmva_j3"] = new TH1D(TString("idmva_j3")+"_"+(*it_h).first+str,";#bf{jet 3 MVA};", 25,-1.1,1.1); (*((*it_h).second))["idmva_j3"]->Sumw2(); |
564 |
+ |
(*((*it_h).second))["idmva_j4"] = new TH1D(TString("idmva_j4")+"_"+(*it_h).first+str,";#bf{jet 4 MVA};", 25,-1.1,1.1); (*((*it_h).second))["idmva_j4"]->Sumw2(); |
565 |
+ |
(*((*it_h).second))["mjj"] = new TH1D(TString("mjj")+"_"+(*it_h).first+str,";#bf{m_{jj}};", 25,10,1550); (*((*it_h).second))["mjj"]->Sumw2(); |
566 |
+ |
(*((*it_h).second))["dEta"] = new TH1D(TString("dEta")+"_"+(*it_h).first+str,";#bf{#Delta #eta};", 25,-6,6); (*((*it_h).second))["dEta"]->Sumw2(); |
567 |
+ |
(*((*it_h).second))["etaProd"] = new TH1D(TString("etaProd")+"_"+(*it_h).first+str,";#bf{#eta_{1} * #eta_{2}};",25,-12,12); (*((*it_h).second))["etaProd"]->Sumw2(); |
568 |
+ |
(*((*it_h).second))["njets"] = new TH1D(TString("njets")+"_"+(*it_h).first+str,";#bf{N Jets};", 7,-0.5,6.5); (*((*it_h).second))["njets"]->Sumw2(); |
569 |
+ |
|
570 |
+ |
(*((*it_h).second))["dR_l1j1"] = new TH1D(TString("dR_l1j1") +"_"+(*it_h).first+str,";#bf{#Delta R l1,jet 1};",75,0,6); (*((*it_h).second))["dR_l1j1"]->Sumw2(); |
571 |
+ |
(*((*it_h).second))["dR_l2j1"] = new TH1D(TString("dR_l2j1") +"_"+(*it_h).first+str,";#bf{#Delta R l2,jet 1};",75,0,6); (*((*it_h).second))["dR_l2j1"]->Sumw2(); |
572 |
+ |
(*((*it_h).second))["dR_l3j1"] = new TH1D(TString("dR_l3j1") +"_"+(*it_h).first+str,";#bf{#Delta R l3,jet 1};",75,0,6); (*((*it_h).second))["dR_l3j1"]->Sumw2(); |
573 |
+ |
(*((*it_h).second))["dR_l4j1"] = new TH1D(TString("dR_l4j1") +"_"+(*it_h).first+str,";#bf{#Delta R l4,jet 1};",75,0,6); (*((*it_h).second))["dR_l4j1"]->Sumw2(); |
574 |
+ |
(*((*it_h).second))["dR_l1j2"] = new TH1D(TString("dR_l1j2") +"_"+(*it_h).first+str,";#bf{#Delta R l1,jet 2};",75,0,6); (*((*it_h).second))["dR_l1j2"]->Sumw2(); |
575 |
+ |
(*((*it_h).second))["dR_l2j2"] = new TH1D(TString("dR_l2j2") +"_"+(*it_h).first+str,";#bf{#Delta R l2,jet 2};",75,0,6); (*((*it_h).second))["dR_l2j2"]->Sumw2(); |
576 |
+ |
(*((*it_h).second))["dR_l3j2"] = new TH1D(TString("dR_l3j2") +"_"+(*it_h).first+str,";#bf{#Delta R l3,jet 2};",75,0,6); (*((*it_h).second))["dR_l3j2"]->Sumw2(); |
577 |
+ |
(*((*it_h).second))["dR_l4j2"] = new TH1D(TString("dR_l4j2") +"_"+(*it_h).first+str,";#bf{#Delta R l4,jet 2};",75,0,6); (*((*it_h).second))["dR_l4j2"]->Sumw2(); |
578 |
+ |
(*((*it_h).second))["dR_l1j3"] = new TH1D(TString("dR_l1j3") +"_"+(*it_h).first+str,";#bf{#Delta R l1,jet 3};",75,0,6); (*((*it_h).second))["dR_l1j3"]->Sumw2(); |
579 |
+ |
(*((*it_h).second))["dR_l2j3"] = new TH1D(TString("dR_l2j3") +"_"+(*it_h).first+str,";#bf{#Delta R l2,jet 3};",75,0,6); (*((*it_h).second))["dR_l2j3"]->Sumw2(); |
580 |
+ |
(*((*it_h).second))["dR_l3j3"] = new TH1D(TString("dR_l3j3") +"_"+(*it_h).first+str,";#bf{#Delta R l3,jet 3};",75,0,6); (*((*it_h).second))["dR_l3j3"]->Sumw2(); |
581 |
+ |
(*((*it_h).second))["dR_l4j3"] = new TH1D(TString("dR_l4j3") +"_"+(*it_h).first+str,";#bf{#Delta R l4,jet 3};",75,0,6); (*((*it_h).second))["dR_l4j3"]->Sumw2(); |
582 |
+ |
(*((*it_h).second))["dR_l1j4"] = new TH1D(TString("dR_l1j4") +"_"+(*it_h).first+str,";#bf{#Delta R l1,jet 4};",75,0,6); (*((*it_h).second))["dR_l1j4"]->Sumw2(); |
583 |
+ |
(*((*it_h).second))["dR_l2j4"] = new TH1D(TString("dR_l2j4") +"_"+(*it_h).first+str,";#bf{#Delta R l2,jet 4};",75,0,6); (*((*it_h).second))["dR_l2j4"]->Sumw2(); |
584 |
+ |
(*((*it_h).second))["dR_l3j4"] = new TH1D(TString("dR_l3j4") +"_"+(*it_h).first+str,";#bf{#Delta R l3,jet 4};",75,0,6); (*((*it_h).second))["dR_l3j4"]->Sumw2(); |
585 |
+ |
(*((*it_h).second))["dR_l4j4"] = new TH1D(TString("dR_l4j4") +"_"+(*it_h).first+str,";#bf{#Delta R l4,jet 4};",75,0,6); (*((*it_h).second))["dR_l4j4"]->Sumw2(); |
586 |
+ |
|
587 |
+ |
int nbins=35; |
588 |
+ |
(*((*it_h).second))["costheta1"] = new TH1D(TString("costheta1") +"_"+(*it_h).first+str,";#bf{costheta1};", nbins,-1,1); (*((*it_h).second))["costheta1"]->Sumw2(); |
589 |
+ |
(*((*it_h).second))["costheta2"] = new TH1D(TString("costheta2") +"_"+(*it_h).first+str,";#bf{costheta2};", nbins,-1,1); (*((*it_h).second))["costheta2"]->Sumw2(); |
590 |
+ |
(*((*it_h).second))["costhetastar"] = new TH1D(TString("costhetastar") +"_"+(*it_h).first+str,";#bf{costhetastar};", nbins,-1,1); (*((*it_h).second))["costhetastar"]->Sumw2(); |
591 |
+ |
(*((*it_h).second))["Phi"] = new TH1D(TString("Phi") +"_"+(*it_h).first+str,";#bf{Phi};", nbins,-3.15,3.15); (*((*it_h).second))["Phi"]->Sumw2(); |
592 |
+ |
(*((*it_h).second))["Phi1"] = new TH1D(TString("Phi1") +"_"+(*it_h).first+str,";#bf{Phi1};", nbins,-3.15,3.15); (*((*it_h).second))["Phi1"]->Sumw2(); |
593 |
+ |
|
594 |
+ |
(*((*it_h).second))["pt4l"] = new TH1D(TString("pt4l") +"_"+(*it_h).first+str,";#bf{pt4l/m4l};", nbins-7,0,0.5); (*((*it_h).second))["pt4l"]->Sumw2(); |
595 |
+ |
(*((*it_h).second))["pt4l_log"] = new TH1D(TString("pt4l_log") +"_"+(*it_h).first+str,";#bf{pt4l/m4l};", nbins,0,1.5); (*((*it_h).second))["pt4l_log"]->Sumw2(); |
596 |
+ |
(*((*it_h).second))["y4l"] = new TH1D(TString("y4l") +"_"+(*it_h).first+str,";#bf{y4l};", nbins,-2.4,2.4); (*((*it_h).second))["y4l"]->Sumw2(); |
597 |
+ |
(*((*it_h).second))["Z1pt"] = new TH1D(TString("Z1pt") +"_"+(*it_h).first+str,";#bf{Z1pt/m4l};", nbins,0,0.5); (*((*it_h).second))["Z1pt"]->Sumw2(); |
598 |
+ |
(*((*it_h).second))["Z1pt_log"] = new TH1D(TString("Z1pt_log") +"_"+(*it_h).first+str,";#bf{Z1pt/m4l};", nbins,0,1.5); (*((*it_h).second))["Z1pt_log"]->Sumw2(); |
599 |
+ |
(*((*it_h).second))["Z2pt"] = new TH1D(TString("Z2pt") +"_"+(*it_h).first+str,";#bf{Z2pt/m4l};", nbins,0,0.5); (*((*it_h).second))["Z2pt"]->Sumw2(); |
600 |
+ |
(*((*it_h).second))["Z2pt_log"] = new TH1D(TString("Z2pt_log") +"_"+(*it_h).first+str,";#bf{Z2pt/m4l};", nbins,0,1.5); (*((*it_h).second))["Z2pt_log"]->Sumw2(); |
601 |
+ |
|
602 |
+ |
(*((*it_h).second))["ZZdotZ1"] = new TH1D(TString("ZZdotZ1") +"_"+(*it_h).first+str,";#bf{ZZ #bullet Z1/(m4l*mZ1)};", nbins,-.2,2.5); (*((*it_h).second))["ZZdotZ1"]->Sumw2(); |
603 |
+ |
(*((*it_h).second))["ZZdotZ2"] = new TH1D(TString("ZZdotZ2") +"_"+(*it_h).first+str,";#bf{ZZ #bullet Z2/(m4l*mZ2)};", nbins,-1,3); (*((*it_h).second))["ZZdotZ2"]->Sumw2(); |
604 |
+ |
(*((*it_h).second))["ZZdotZ1_log"] = new TH1D(TString("ZZdotZ1_log") +"_"+(*it_h).first+str,";#bf{ZZ #bullet Z1/(m4l*mZ1)};",nbins,-1.5,15); (*((*it_h).second))["ZZdotZ1_log"]->Sumw2(); |
605 |
+ |
(*((*it_h).second))["ZZdotZ2_log"] = new TH1D(TString("ZZdotZ2_log") +"_"+(*it_h).first+str,";#bf{ZZ #bullet Z2/(m4l*mZ2)};",nbins,-1.5,15); (*((*it_h).second))["ZZdotZ2_log"]->Sumw2(); |
606 |
+ |
(*((*it_h).second))["dphi1"] = new TH1D(TString("dphi1") +"_"+(*it_h).first+str,";#bf{dphi1};", nbins,-1,1); (*((*it_h).second))["dphi1"]->Sumw2(); |
607 |
+ |
(*((*it_h).second))["dphi2"] = new TH1D(TString("dphi2") +"_"+(*it_h).first+str,";#bf{dphi2};", nbins,-1,1); (*((*it_h).second))["dphi2"]->Sumw2(); |
608 |
+ |
(*((*it_h).second))["dphi1_log"] = new TH1D(TString("dphi1_log") +"_"+(*it_h).first+str,";#bf{dphi1};", nbins,-1,1); (*((*it_h).second))["dphi1_log"]->Sumw2(); |
609 |
+ |
(*((*it_h).second))["dphi2_log"] = new TH1D(TString("dphi2_log") +"_"+(*it_h).first+str,";#bf{dphi2};", nbins,-1,1); (*((*it_h).second))["dphi2_log"]->Sumw2(); |
610 |
+ |
|
611 |
+ |
(*((*it_h).second))["fusionMVA"] = new TH1D(TString("fusionMVA")+"_"+(*it_h).first+str,";#bf{MVA output};", 100,-1,1); (*((*it_h).second))["fusionMVA"]->Sumw2(); |
612 |
+ |
(*((*it_h).second))["fusionMVA_lo"] = new TH1D(TString("fusionMVA_lo")+"_"+(*it_h).first+str,";#bf{MVA output};", 100,-1,-.83); (*((*it_h).second))["fusionMVA_lo"]->Sumw2(); |
613 |
+ |
(*((*it_h).second))["fusionMVA_med"] = new TH1D(TString("fusionMVA_med")+"_"+(*it_h).first+str,";#bf{MVA output};", 100,-.5,1); (*((*it_h).second))["fusionMVA_med"]->Sumw2(); |
614 |
+ |
(*((*it_h).second))["fusionMVA_hi"] = new TH1D(TString("fusionMVA_hi")+"_"+(*it_h).first+str,";#bf{MVA output};", 100,.75,1); (*((*it_h).second))["fusionMVA_hi"]->Sumw2(); |
615 |
+ |
(*((*it_h).second))["m4l_jet_lo"] = new TH1D(TString("m4l_jet_lo") +"_"+(*it_h).first+str,";#bf{m4l [GeV]};", 45,100,180); (*((*it_h).second))["m4l_jet_lo"]->Sumw2(); |
616 |
+ |
(*((*it_h).second))["m4l_jet"] = new TH1D(TString("m4l_jet") +"_"+(*it_h).first+str,";#bf{m4l [GeV]};", 45,100,600); (*((*it_h).second))["m4l_jet"]->Sumw2(); |
617 |
|
} |
298 |
– |
|
618 |
|
return hists; |
619 |
|
} |
620 |
|
//-------------------------------------------------------------------------------------------------- |
621 |
< |
void makeHTML(FOFlags &ctrl, TString type, TString plotLabel) |
621 |
> |
void makeHTML(FOFlags &ctrl, TString type, TString plotLabel, TString fullOutDir) |
622 |
|
{ |
623 |
< |
TString title("Signal region: "+type); |
624 |
< |
ofstream htmlfile; |
625 |
< |
char htmlfname[100]; |
626 |
< |
sprintf(htmlfname,"%s/plots.html",TString(ctrl.outdir+"/"+plotLabel+"/"+type).Data()); |
627 |
< |
htmlfile.open(htmlfname); |
623 |
> |
TString tmpString(plotLabel); |
624 |
> |
tmpString.ReplaceAll("/"," "); |
625 |
> |
TString title(ctrl.faketype+", "+tmpString+", "+type); |
626 |
> |
TString htmlfname(fullOutDir+"/plots.html"); |
627 |
> |
ofstream htmlfile(htmlfname); |
628 |
|
|
629 |
|
htmlfile << "<!DOCTYPE html" << endl; |
630 |
|
htmlfile << " PUBLIC \"-//W3C//DTD HTML 3.2//EN\">" << endl; |
631 |
|
htmlfile << "<html>" << endl; |
632 |
|
|
633 |
|
htmlfile << "<head><title>"+title+"</title></head>" << endl; |
634 |
< |
htmlfile << "<body bgcolor=\"EEEEEE\">" << endl; |
634 |
> |
htmlfile << "<body bgcolor=\"000000\">" << endl; |
635 |
|
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">"+title+"</h3>" << endl; |
636 |
|
|
637 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">boson kinematics</h3>" << endl; |
638 |
|
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
639 |
|
|
640 |
|
htmlfile << "<tr>" << endl; |
641 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/m4l_lo.png\"><img src=\"plots/m4l_lo.png\" alt=\"plots/m4l_lo.png\" width=\"100%\"></a></td>" << endl; |
642 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/m4l_med.png\"><img src=\"plots/m4l_med.png\" alt=\"plots/m4l_med.png\" width=\"100%\"></a></td>" << endl; |
643 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/m4l.png\"><img src=\"plots/m4l.png\" alt=\"plots/m4l.png\" width=\"100%\"></a></td>" << endl; |
644 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
645 |
+ |
htmlfile << "</tr>" << endl; |
646 |
+ |
|
647 |
+ |
htmlfile << "<tr>" << endl; |
648 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/mZ1.png\"><img src=\"plots/mZ1.png\" alt=\"plots/mZ1.png\" width=\"100%\"></a></td>" << endl; |
649 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/mZ2_lo.png\"><img src=\"plots/mZ2_lo.png\" alt=\"plots/mZ2_lo.png\" width=\"100%\"></a></td>" << endl; |
650 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/mZ2.png\"><img src=\"plots/mZ2.png\" alt=\"plots/mZ2.png\" width=\"100%\"></a></td>" << endl; |
324 |
– |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/m4l.png\"><img src=\"plots/m4l.png\" alt=\"plots/m4l.png\" width=\"100%\"></a></td>" << endl; |
651 |
|
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
652 |
|
htmlfile << "</tr>" << endl; |
653 |
|
|
654 |
|
htmlfile << "<tr>" << endl; |
655 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/Z1pt.png\"><img src=\"plots/Z1pt.png\" alt=\"plots/Z1pt.png\" width=\"100%\"></a></td>" << endl; |
656 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ZZpt.png\"><img src=\"plots/ZZpt.png\" alt=\"plots/ZZpt.png\" width=\"100%\"></a></td>" << endl; |
657 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/met.png\"><img src=\"plots/met.png\" alt=\"plots/met.png\" width=\"100%\"></a></td>" << endl; |
658 |
|
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
659 |
|
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
660 |
|
htmlfile << "</tr>" << endl; |
661 |
|
|
662 |
+ |
htmlfile << "</table>" << endl; |
663 |
+ |
htmlfile << "<hr />" << endl; |
664 |
+ |
htmlfile << "control: " << endl; |
665 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
666 |
+ |
|
667 |
|
htmlfile << "<tr>" << endl; |
668 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l1.png\"><img src=\"plots/ip3ds_l1.png\" alt=\"plots/ip3ds_l1.png\" width=\"100%\"></a></td>" << endl; |
669 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l2.png\"><img src=\"plots/ip3ds_l2.png\" alt=\"plots/ip3ds_l2.png\" width=\"100%\"></a></td>" << endl; |
670 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l3.png\"><img src=\"plots/ip3ds_l3.png\" alt=\"plots/ip3ds_l3.png\" width=\"100%\"></a></td>" << endl; |
671 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l4.png\"><img src=\"plots/ip3ds_l4.png\" alt=\"plots/ip3ds_l4.png\" width=\"100%\"></a></td>" << endl; |
668 |
> |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/run.png\"><img src=\"plots/run.png\" alt=\"plots/run.png\" width=\"100%\"></a></td>" << endl; |
669 |
> |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/npv.png\"><img src=\"plots/npv.png\" alt=\"plots/npv.png\" width=\"100%\"></a></td>" << endl; |
670 |
> |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
671 |
> |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
672 |
|
htmlfile << "</tr>" << endl; |
673 |
|
|
674 |
+ |
htmlfile << "</table>" << endl; |
675 |
+ |
|
676 |
+ |
htmlfile << "</body>" << endl; |
677 |
+ |
htmlfile << "</html>" << endl; |
678 |
+ |
htmlfile.close(); |
679 |
+ |
|
680 |
+ |
TString anglefname(htmlfname); |
681 |
+ |
anglefname.ReplaceAll("plots.html","angleplots.html"); |
682 |
+ |
htmlfile.open(anglefname); |
683 |
+ |
|
684 |
+ |
htmlfile << "<!DOCTYPE html" << endl; |
685 |
+ |
htmlfile << " PUBLIC \"-//W3C//DTD HTML 3.2//EN\">" << endl; |
686 |
+ |
htmlfile << "<html>" << endl; |
687 |
+ |
|
688 |
+ |
htmlfile << "<head><title>"+title+"</title></head>" << endl; |
689 |
+ |
htmlfile << "<body bgcolor=\"000000\">" << endl; |
690 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">"+title+"</h3>" << endl; |
691 |
+ |
|
692 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">Angles & Co.</h3>" << endl; |
693 |
+ |
htmlfile << "<hr />" << endl; |
694 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
695 |
+ |
htmlfile << "</table>" << endl; |
696 |
+ |
|
697 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">Angles:</h3>" << endl; |
698 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
699 |
+ |
|
700 |
|
htmlfile << "<tr>" << endl; |
701 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l1.png\"><img src=\"plots/pt_l1.png\" alt=\"plots/pt_l1.png\" width=\"100%\"></a></td>" << endl; |
702 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l2.png\"><img src=\"plots/pt_l2.png\" alt=\"plots/pt_l2.png\" width=\"100%\"></a></td>" << endl; |
703 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l3.png\"><img src=\"plots/pt_l3.png\" alt=\"plots/pt_l3.png\" width=\"100%\"></a></td>" << endl; |
704 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l4.png\"><img src=\"plots/pt_l4.png\" alt=\"plots/pt_l4.png\" width=\"100%\"></a></td>" << endl; |
701 |
> |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/costheta1.png\"><img src=\"plots/costheta1.png\" alt=\"plots/costheta1.png\" width=\"100%\"></a></td>" << endl; |
702 |
> |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/costheta2.png\"><img src=\"plots/costheta2.png\" alt=\"plots/costheta2.png\" width=\"100%\"></a></td>" << endl; |
703 |
> |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/costhetastar.png\"><img src=\"plots/costhetastar.png\" alt=\"plots/costhetastar.png\" width=\"100%\"></a></td>" << endl; |
704 |
> |
htmlfile << "<td width=\"25%\"></td>" << endl; |
705 |
|
htmlfile << "</tr>" << endl; |
706 |
|
|
707 |
|
htmlfile << "<tr>" << endl; |
708 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3l4_lo.png\"><img src=\"plots/dR_l3l4_lo.png\" alt=\"plots/dR_l3l4_lo.png\" width=\"100%\"></a></td>" << endl; |
709 |
< |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3l4.png\"><img src=\"plots/dR_l3l4.png\" alt=\"plots/dR_l3l4.png\" width=\"100%\"></a></td>" << endl; |
710 |
< |
htmlfile << "<td width=\"25%\"><a><</a></td>" << endl; |
711 |
< |
htmlfile << "<td width=\"25%\"><a><</a></td>" << endl; |
708 |
> |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/Phi.png\"><img src=\"plots/Phi.png\" alt=\"plots/Phi.png\" width=\"100%\"></a></td>" << endl; |
709 |
> |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/Phi1.png\"><img src=\"plots/Phi1.png\" alt=\"plots/Phi1.png\" width=\"100%\"></a></td>" << endl; |
710 |
> |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
711 |
> |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
712 |
|
htmlfile << "</tr>" << endl; |
713 |
|
|
714 |
+ |
htmlfile << "</table>" << endl; |
715 |
+ |
htmlfile << "<hr />" << endl; |
716 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">Boson pt variables: " << endl; |
717 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
718 |
+ |
|
719 |
|
htmlfile << "<tr>" << endl; |
720 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/y4l.png\"><img src=\"plots/y4l.png\" alt=\"plots/y4l.png\" width=\"100%\"></a></td>" << endl; |
721 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt4l.png\"><img src=\"plots/pt4l.png\" alt=\"plots/pt4l.png\" width=\"100%\"></a></td>" << endl; |
722 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt4l_log.png\"><img src=\"plots/pt4l_log.png\" alt=\"plots/pt4l_log.png\" width=\"100%\"></a></td>" << endl; |
723 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
724 |
+ |
htmlfile << "<tr>" << endl; |
725 |
+ |
|
726 |
+ |
htmlfile << "</tr>" << endl; |
727 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/Z1pt.png\"><img src=\"plots/Z1pt.png\" alt=\"plots/Z1pt.png\" width=\"100%\"></a></td>" << endl; |
728 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/Z2pt.png\"><img src=\"plots/Z2pt.png\" alt=\"plots/Z2pt.png\" width=\"100%\"></a></td>" << endl; |
729 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/Z1pt_log.png\"><img src=\"plots/Z1pt_log.png\" alt=\"plots/Z1pt_log.png\" width=\"100%\"></a></td>" << endl; |
730 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/Z2pt_log.png\"><img src=\"plots/Z2pt_log.png\" alt=\"plots/Z2pt_log.png\" width=\"100%\"></a></td>" << endl; |
731 |
+ |
htmlfile << "</tr>" << endl; |
732 |
+ |
|
733 |
+ |
htmlfile << "<tr>" << endl; |
734 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ZZdotZ1.png\"><img src=\"plots/ZZdotZ1.png\" alt=\"plots/ZZdotZ1.png\" width=\"100%\"></a></td>" << endl; |
735 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ZZdotZ2.png\"><img src=\"plots/ZZdotZ2.png\" alt=\"plots/ZZdotZ2.png\" width=\"100%\"></a></td>" << endl; |
736 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ZZdotZ1_log.png\"><img src=\"plots/ZZdotZ1_log.png\" alt=\"plots/ZZdotZ1_log.png\" width=\"100%\"></a></td>" << endl; |
737 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ZZdotZ2_log.png\"><img src=\"plots/ZZdotZ2_log.png\" alt=\"plots/ZZdotZ2_log.png\" width=\"100%\"></a></td>" << endl; |
738 |
+ |
htmlfile << "</tr>" << endl; |
739 |
+ |
|
740 |
+ |
htmlfile << "<tr>" << endl; |
741 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dphi1.png\"><img src=\"plots/dphi1.png\" alt=\"plots/dphi1.png\" width=\"100%\"></a></td>" << endl; |
742 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dphi2.png\"><img src=\"plots/dphi2.png\" alt=\"plots/dphi2.png\" width=\"100%\"></a></td>" << endl; |
743 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dphi1_log.png\"><img src=\"plots/dphi1_log.png\" alt=\"plots/dphi1_log.png\" width=\"100%\"></a></td>" << endl; |
744 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dphi2_log.png\"><img src=\"plots/dphi2_log.png\" alt=\"plots/dphi2_log.png\" width=\"100%\"></a></td>" << endl; |
745 |
+ |
htmlfile << "</tr>" << endl; |
746 |
+ |
|
747 |
+ |
|
748 |
+ |
htmlfile << "</table>" << endl; |
749 |
+ |
|
750 |
+ |
htmlfile << "</body>" << endl; |
751 |
+ |
htmlfile << "</html>" << endl; |
752 |
+ |
htmlfile.close(); |
753 |
+ |
|
754 |
+ |
TString leptonfname(htmlfname); |
755 |
+ |
leptonfname.ReplaceAll("plots.html","leptonplots.html"); |
756 |
+ |
htmlfile.open(leptonfname); |
757 |
+ |
|
758 |
+ |
htmlfile << "<!DOCTYPE html" << endl; |
759 |
+ |
htmlfile << " PUBLIC \"-//W3C//DTD HTML 3.2//EN\">" << endl; |
760 |
+ |
htmlfile << "<html>" << endl; |
761 |
+ |
|
762 |
+ |
htmlfile << "<head><title>"+title+"</title></head>" << endl; |
763 |
+ |
htmlfile << "<body bgcolor=\"000000\">" << endl; |
764 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">"+title+"</h3>" << endl; |
765 |
+ |
|
766 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">lepton plots</h3>" << endl; |
767 |
+ |
htmlfile << "<hr />" << endl; |
768 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
769 |
+ |
htmlfile << "</table>" << endl; |
770 |
+ |
|
771 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">Z1 leptons:</h3>" << endl; |
772 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
773 |
+ |
|
774 |
+ |
htmlfile << "<tr>" << endl; |
775 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l1.png\"><img src=\"plots/pt_l1.png\" alt=\"plots/pt_l1.png\" width=\"100%\"></a></td>" << endl; |
776 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l2.png\"><img src=\"plots/pt_l2.png\" alt=\"plots/pt_l2.png\" width=\"100%\"></a></td>" << endl; |
777 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_l1.png\"><img src=\"plots/eta_l1.png\" alt=\"plots/eta_l1.png\" width=\"100%\"></a></td>" << endl; |
778 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_l2.png\"><img src=\"plots/eta_l2.png\" alt=\"plots/eta_l2.png\" width=\"100%\"></a></td>" << endl; |
779 |
+ |
htmlfile << "</tr>" << endl; |
780 |
+ |
|
781 |
+ |
htmlfile << "<tr>" << endl; |
782 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l1.png\"><img src=\"plots/ip3ds_l1.png\" alt=\"plots/ip3ds_l1.png\" width=\"100%\"></a></td>" << endl; |
783 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l2.png\"><img src=\"plots/ip3ds_l2.png\" alt=\"plots/ip3ds_l2.png\" width=\"100%\"></a></td>" << endl; |
784 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
785 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
786 |
+ |
htmlfile << "</tr>" << endl; |
787 |
+ |
|
788 |
+ |
htmlfile << "<tr>" << endl; |
789 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/d0_l1.png\"><img src=\"plots/d0_l1.png\" alt=\"plots/d0_l1.png\" width=\"100%\"></a></td>" << endl; |
790 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/d0_l2.png\"><img src=\"plots/d0_l2.png\" alt=\"plots/d0_l2.png\" width=\"100%\"></a></td>" << endl; |
791 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
792 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
793 |
+ |
htmlfile << "</tr>" << endl; |
794 |
+ |
|
795 |
+ |
htmlfile << "<tr>" << endl; |
796 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dz_l1.png\"><img src=\"plots/dz_l1.png\" alt=\"plots/dz_l1.png\" width=\"100%\"></a></td>" << endl; |
797 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dz_l2.png\"><img src=\"plots/dz_l2.png\" alt=\"plots/dz_l2.png\" width=\"100%\"></a></td>" << endl; |
798 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
799 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
800 |
+ |
htmlfile << "</tr>" << endl; |
801 |
+ |
|
802 |
+ |
// htmlfile << "<tr>" << endl; |
803 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3l4_lo.png\"><img src=\"plots/dR_l3l4_lo.png\" alt=\"plots/dR_l3l4_lo.png\" width=\"100%\"></a></td>" << endl; |
804 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3l4.png\"><img src=\"plots/dR_l3l4.png\" alt=\"plots/dR_l3l4.png\" width=\"100%\"></a></td>" << endl; |
805 |
+ |
// htmlfile << "<td width=\"25%\"><a><</a></td>" << endl; |
806 |
+ |
// htmlfile << "<td width=\"25%\"><a><</a></td>" << endl; |
807 |
+ |
// htmlfile << "</tr>" << endl; |
808 |
+ |
|
809 |
+ |
htmlfile << "</table>" << endl; |
810 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">extra leptons (l3 and l4): </h3>" << endl; |
811 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
812 |
+ |
|
813 |
+ |
htmlfile << "<tr>" << endl; |
814 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l3.png\"><img src=\"plots/pt_l3.png\" alt=\"plots/pt_l3.png\" width=\"100%\"></a></td>" << endl; |
815 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_l4.png\"><img src=\"plots/pt_l4.png\" alt=\"plots/pt_l4.png\" width=\"100%\"></a></td>" << endl; |
816 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_l3.png\"><img src=\"plots/eta_l3.png\" alt=\"plots/eta_l3.png\" width=\"100%\"></a></td>" << endl; |
817 |
|
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_l4.png\"><img src=\"plots/eta_l4.png\" alt=\"plots/eta_l4.png\" width=\"100%\"></a></td>" << endl; |
818 |
|
htmlfile << "</tr>" << endl; |
819 |
+ |
|
820 |
+ |
htmlfile << "<tr>" << endl; |
821 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l3_lo.png\"><img src=\"plots/ip3ds_l3_lo.png\" alt=\"plots/ip3ds_l3_lo.png\" width=\"100%\"></a></td>" << endl; |
822 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l4_lo.png\"><img src=\"plots/ip3ds_l4_lo.png\" alt=\"plots/ip3ds_l4_lo.png\" width=\"100%\"></a></td>" << endl; |
823 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l3.png\"><img src=\"plots/ip3ds_l3.png\" alt=\"plots/ip3ds_l3.png\" width=\"100%\"></a></td>" << endl; |
824 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/ip3ds_l4.png\"><img src=\"plots/ip3ds_l4.png\" alt=\"plots/ip3ds_l4.png\" width=\"100%\"></a></td>" << endl; |
825 |
+ |
htmlfile << "</tr>" << endl; |
826 |
+ |
|
827 |
+ |
htmlfile << "<tr>" << endl; |
828 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/d0_l3_lo.png\"><img src=\"plots/d0_l3_lo.png\" alt=\"plots/d0_l3_lo.png\" width=\"100%\"></a></td>" << endl; |
829 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/d0_l4_lo.png\"><img src=\"plots/d0_l4_lo.png\" alt=\"plots/d0_l4_lo.png\" width=\"100%\"></a></td>" << endl; |
830 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/d0_l3.png\"><img src=\"plots/d0_l3.png\" alt=\"plots/d0_l3.png\" width=\"100%\"></a></td>" << endl; |
831 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/d0_l4.png\"><img src=\"plots/d0_l4.png\" alt=\"plots/d0_l4.png\" width=\"100%\"></a></td>" << endl; |
832 |
+ |
htmlfile << "</tr>" << endl; |
833 |
+ |
|
834 |
+ |
htmlfile << "<tr>" << endl; |
835 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dz_l3.png\"><img src=\"plots/dz_l3.png\" alt=\"plots/dz_l3.png\" width=\"100%\"></a></td>" << endl; |
836 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dz_l4.png\"><img src=\"plots/dz_l4.png\" alt=\"plots/dz_l4.png\" width=\"100%\"></a></td>" << endl; |
837 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
838 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
839 |
+ |
htmlfile << "</tr>" << endl; |
840 |
+ |
|
841 |
+ |
htmlfile << "</table>" << endl; |
842 |
+ |
|
843 |
+ |
htmlfile << "</body>" << endl; |
844 |
+ |
htmlfile << "</html>" << endl; |
845 |
+ |
htmlfile.close(); |
846 |
+ |
|
847 |
+ |
TString jetfname(htmlfname); |
848 |
+ |
jetfname.ReplaceAll("plots.html","jetplots.html"); |
849 |
+ |
htmlfile.open(jetfname); |
850 |
+ |
|
851 |
+ |
htmlfile << "<!DOCTYPE html" << endl; |
852 |
+ |
htmlfile << " PUBLIC \"-//W3C//DTD HTML 3.2//EN\">" << endl; |
853 |
+ |
htmlfile << "<html>" << endl; |
854 |
+ |
|
855 |
+ |
htmlfile << "<head><title>"+title+"</title></head>" << endl; |
856 |
+ |
htmlfile << "<body bgcolor=\"000000\">" << endl; |
857 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">"+title+"</h3>" << endl; |
858 |
+ |
|
859 |
+ |
htmlfile << "<h3 style=\"text-align:left; color:DD6600;\">jet plots</h3>" << endl; |
860 |
+ |
htmlfile << "<hr />" << endl; |
861 |
+ |
htmlfile << "<table border=\"0\" cellspacing=\"5\" width=\"100%\">" << endl; |
862 |
+ |
|
863 |
+ |
htmlfile << "<tr>" << endl; |
864 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_j1.png\"><img src=\"plots/pt_j1.png\" alt=\"plots/pt_j1.png\" width=\"100%\"></a></td>" << endl; |
865 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_j2.png\"><img src=\"plots/pt_j2.png\" alt=\"plots/pt_j2.png\" width=\"100%\"></a></td>" << endl; |
866 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_j2.png\"><img src=\"plots/pt_j2.png\" alt=\"plots/pt_j2.png\" width=\"100%\"></a></td>" << endl; |
867 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/pt_j4.png\"><img src=\"plots/pt_j4.png\" alt=\"plots/pt_j4.png\" width=\"100%\"></a></td>" << endl; |
868 |
+ |
htmlfile << "</tr>" << endl; |
869 |
+ |
|
870 |
+ |
htmlfile << "<tr>" << endl; |
871 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_j1.png\"><img src=\"plots/eta_j1.png\" alt=\"plots/eta_j1.png\" width=\"100%\"></a></td>" << endl; |
872 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_j2.png\"><img src=\"plots/eta_j2.png\" alt=\"plots/eta_j2.png\" width=\"100%\"></a></td>" << endl; |
873 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_j3.png\"><img src=\"plots/eta_j3.png\" alt=\"plots/eta_j3.png\" width=\"100%\"></a></td>" << endl; |
874 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/eta_j4.png\"><img src=\"plots/eta_j4.png\" alt=\"plots/eta_j4.png\" width=\"100%\"></a></td>" << endl; |
875 |
+ |
htmlfile << "</tr>" << endl; |
876 |
+ |
|
877 |
+ |
htmlfile << "<tr>" << endl; |
878 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/idmva_j1.png\"><img src=\"plots/idmva_j1.png\" alt=\"plots/idmva_j1.png\" width=\"100%\"></a></td>" << endl; |
879 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/idmva_j2.png\"><img src=\"plots/idmva_j2.png\" alt=\"plots/idmva_j2.png\" width=\"100%\"></a></td>" << endl; |
880 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/idmva_j3.png\"><img src=\"plots/idmva_j3.png\" alt=\"plots/idmva_j3.png\" width=\"100%\"></a></td>" << endl; |
881 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/idmva_j4.png\"><img src=\"plots/idmva_j4.png\" alt=\"plots/idmva_j4.png\" width=\"100%\"></a></td>" << endl; |
882 |
+ |
htmlfile << "</tr>" << endl; |
883 |
+ |
|
884 |
+ |
htmlfile << "<tr>" << endl; |
885 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/phi_j1.png\"><img src=\"plots/phi_j1.png\" alt=\"plots/phi_j1.png\" width=\"100%\"></a></td>" << endl; |
886 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/phi_j2.png\"><img src=\"plots/phi_j2.png\" alt=\"plots/phi_j2.png\" width=\"100%\"></a></td>" << endl; |
887 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/phi_j3.png\"><img src=\"plots/phi_j3.png\" alt=\"plots/phi_j3.png\" width=\"100%\"></a></td>" << endl; |
888 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/phi_j4.png\"><img src=\"plots/phi_j4.png\" alt=\"plots/phi_j4.png\" width=\"100%\"></a></td>" << endl; |
889 |
+ |
htmlfile << "</tr>" << endl; |
890 |
+ |
|
891 |
+ |
htmlfile << "<tr>" << endl; |
892 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/mjj.png\"><img src=\"plots/mjj.png\" alt=\"plots/mjj.png\" width=\"100%\"></a></td>" << endl; |
893 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dEta.png\"><img src=\"plots/dEta.png\" alt=\"plots/dEta.png\" width=\"100%\"></a></td>" << endl; |
894 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/etaProd.png\"><img src=\"plots/etaProd.png\" alt=\"plots/etaProd.png\" width=\"100%\"></a></td>" << endl; |
895 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/njets.png\"><img src=\"plots/njets.png\" alt=\"plots/njets.png\" width=\"100%\"></a></td>" << endl; |
896 |
+ |
htmlfile << "</tr>" << endl; |
897 |
+ |
|
898 |
+ |
// htmlfile << "<tr>" << endl; |
899 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l1j1.png\"><img src=\"plots/dR_l1j1.png\" alt=\"plots/dR_l1j1.png\" width=\"100%\"></a></td>" << endl; |
900 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l2j1.png\"><img src=\"plots/dR_l2j1.png\" alt=\"plots/dR_l2j1.png\" width=\"100%\"></a></td>" << endl; |
901 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3j1.png\"><img src=\"plots/dR_l3j1.png\" alt=\"plots/dR_l3j1.png\" width=\"100%\"></a></td>" << endl; |
902 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l4j1.png\"><img src=\"plots/dR_l4j1.png\" alt=\"plots/dR_l4j1.png\" width=\"100%\"></a></td>" << endl; |
903 |
+ |
// htmlfile << "</tr>" << endl; |
904 |
+ |
|
905 |
+ |
// htmlfile << "<tr>" << endl; |
906 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l1j2.png\"><img src=\"plots/dR_l1j2.png\" alt=\"plots/dR_l1j2.png\" width=\"100%\"></a></td>" << endl; |
907 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l2j2.png\"><img src=\"plots/dR_l2j2.png\" alt=\"plots/dR_l2j2.png\" width=\"100%\"></a></td>" << endl; |
908 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3j2.png\"><img src=\"plots/dR_l3j2.png\" alt=\"plots/dR_l3j2.png\" width=\"100%\"></a></td>" << endl; |
909 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l4j2.png\"><img src=\"plots/dR_l4j2.png\" alt=\"plots/dR_l4j2.png\" width=\"100%\"></a></td>" << endl; |
910 |
+ |
// htmlfile << "</tr>" << endl; |
911 |
+ |
|
912 |
+ |
// htmlfile << "<tr>" << endl; |
913 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l1j3.png\"><img src=\"plots/dR_l1j3.png\" alt=\"plots/dR_l1j3.png\" width=\"100%\"></a></td>" << endl; |
914 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l2j3.png\"><img src=\"plots/dR_l2j3.png\" alt=\"plots/dR_l2j3.png\" width=\"100%\"></a></td>" << endl; |
915 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3j3.png\"><img src=\"plots/dR_l3j3.png\" alt=\"plots/dR_l3j3.png\" width=\"100%\"></a></td>" << endl; |
916 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l4j3.png\"><img src=\"plots/dR_l4j3.png\" alt=\"plots/dR_l4j3.png\" width=\"100%\"></a></td>" << endl; |
917 |
+ |
// htmlfile << "</tr>" << endl; |
918 |
+ |
|
919 |
+ |
// htmlfile << "<tr>" << endl; |
920 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l1j4.png\"><img src=\"plots/dR_l1j4.png\" alt=\"plots/dR_l1j4.png\" width=\"100%\"></a></td>" << endl; |
921 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l2j4.png\"><img src=\"plots/dR_l2j4.png\" alt=\"plots/dR_l2j4.png\" width=\"100%\"></a></td>" << endl; |
922 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l3j4.png\"><img src=\"plots/dR_l3j4.png\" alt=\"plots/dR_l3j4.png\" width=\"100%\"></a></td>" << endl; |
923 |
+ |
// htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/dR_l4j4.png\"><img src=\"plots/dR_l4j4.png\" alt=\"plots/dR_l4j4.png\" width=\"100%\"></a></td>" << endl; |
924 |
+ |
// htmlfile << "</tr>" << endl; |
925 |
+ |
|
926 |
+ |
htmlfile << "<tr>" << endl; |
927 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/fusionMVA.png\"><img src=\"plots/fusionMVA.png\" alt=\"plots/fusionMVA.png\" width=\"100%\"></a></td>" << endl; |
928 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/fusionMVA_lo.png\"><img src=\"plots/fusionMVA_lo.png\" alt=\"plots/fusionMVA_lo.png\" width=\"100%\"></a></td>" << endl; |
929 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/fusionMVA_hi.png\"><img src=\"plots/fusionMVA_hi.png\" alt=\"plots/fusionMVA_hi.png\" width=\"100%\"></a></td>" << endl; |
930 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
931 |
+ |
htmlfile << "</tr>" << endl; |
932 |
+ |
|
933 |
+ |
htmlfile << "<tr>" << endl; |
934 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/fusionMVA-log.png\"><img src=\"plots/fusionMVA-log.png\" alt=\"plots/fusionMVA-log.png\" width=\"100%\"></a></td>" << endl; |
935 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/fusionMVA_lo-log.png\"><img src=\"plots/fusionMVA_lo-log.png\" alt=\"plots/fusionMVA_lo-log.png\" width=\"100%\"></a></td>" << endl; |
936 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/fusionMVA_hi-log.png\"><img src=\"plots/fusionMVA_hi-log.png\" alt=\"plots/fusionMVA_hi-log.png\" width=\"100%\"></a></td>" << endl; |
937 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
938 |
+ |
htmlfile << "</tr>" << endl; |
939 |
+ |
|
940 |
+ |
htmlfile << "<tr>" << endl; |
941 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/m4l_jet_lo.png\"><img src=\"plots/m4l_jet_lo.png\" alt=\"plots/m4l_jet_lo.png\" width=\"100%\"></a></td>" << endl; |
942 |
+ |
htmlfile << "<td width=\"25%\"><a target=\"_blank\" href=\"plots/m4l_jet.png\"><img src=\"plots/m4l_jet.png\" alt=\"plots/m4l_jet.png\" width=\"100%\"></a></td>" << endl; |
943 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
944 |
+ |
htmlfile << "<td width=\"25%\"><a></a></td>" << endl; |
945 |
+ |
htmlfile << "</tr>" << endl; |
946 |
+ |
|
947 |
+ |
|
948 |
|
htmlfile << "</table>" << endl; |
949 |
|
|
950 |
|
htmlfile << "<hr />" << endl; |
958 |
|
//---------------------------------------------------------------------------------------- |
959 |
|
void fillHist(CSample *cs, TString channel, TString type, TString var, double val, double wgt, double wgt_lo, double wgt_hi) |
960 |
|
{ |
961 |
< |
// // name = channel+"_"+type; |
962 |
< |
// // name = "all_"+type+"_lo"; |
963 |
< |
// // name = "all_"+type+"_hi"; |
378 |
< |
// // name = channel+"_"+type+"_lo"; |
379 |
< |
// // name = channel+"_"+type+"_hi"; |
380 |
< |
|
381 |
< |
// cout << endl << "all_"+type; |
382 |
< |
// (*(cs->hists)["all_"+type])[var]->Fill( val, wgt); |
383 |
< |
// if(channel!="") { |
384 |
< |
// cout << endl << channel+"_"+type; |
385 |
< |
// (*(cs->hists)[channel+"_"+type])[var]->Fill( val, wgt); |
386 |
< |
// } |
387 |
< |
// if(type=="pred") { |
388 |
< |
// cout << endl << "all_"+type+"_lo"; |
389 |
< |
// (*(cs->hists)["all_"+type+"_lo"])[var]->Fill( val, wgt_lo); |
390 |
< |
// cout << endl << "all_"+type+"_hi"; |
391 |
< |
// (*(cs->hists)["all_"+type+"_hi"])[var]->Fill( val, wgt_hi); |
392 |
< |
// if(channel!="") { |
393 |
< |
// cout << endl << channel+"_"+type+"_lo"; |
394 |
< |
// (*(cs->hists)[channel+"_"+type+"_lo"])[var]->Fill( val, wgt_lo); |
395 |
< |
// cout << endl << channel+"_"+type+"_hi" << endl; |
396 |
< |
// (*(cs->hists)[channel+"_"+type+"_hi"])[var]->Fill( val, wgt_hi); |
397 |
< |
// } |
398 |
< |
// } |
961 |
> |
assert(wgt==wgt); |
962 |
> |
assert(wgt_lo==wgt_lo); |
963 |
> |
assert(wgt_hi==wgt_hi); |
964 |
|
(*(cs->hists)["all_"+type])[var]->Fill( val, wgt); |
965 |
|
if(channel!="") |
966 |
|
(*(cs->hists)[channel+"_"+type])[var]->Fill( val, wgt); |
967 |
< |
if(type=="pred") { |
967 |
> |
if(type=="pred" || type=="PF") { |
968 |
|
(*(cs->hists)["all_"+type+"_lo"])[var]->Fill( val, wgt_lo); |
969 |
|
(*(cs->hists)["all_"+type+"_hi"])[var]->Fill( val, wgt_hi); |
970 |
|
if(channel!="") { |
973 |
|
} |
974 |
|
} |
975 |
|
} |
976 |
+ |
//---------------------------------------------------------------------------------------- |
977 |
+ |
void fillAllHists(FOFlags ctrl, CSample *cs, TString channel, TString type, filestuff *fs, KinematicsStruct kine, Angles angles, |
978 |
+ |
SimpleLepton lep1, SimpleLepton lep2, SimpleLepton lep3, SimpleLepton lep4, |
979 |
+ |
double wgt, double wgt_lo, double wgt_hi) |
980 |
+ |
{ |
981 |
+ |
fillHist( cs, channel, type, "npv" , fs->info->npv , wgt, wgt_lo, wgt_hi); |
982 |
+ |
fillHist( cs, channel, type, "run" , fs->info->run , wgt, wgt_lo, wgt_hi); |
983 |
+ |
fillHist( cs, channel, type, "mZ1" , kine.mZ1 , wgt, wgt_lo, wgt_hi); |
984 |
+ |
fillHist( cs, channel, type, "mZ2" , kine.mZ2 , wgt, wgt_lo, wgt_hi); |
985 |
+ |
fillHist( cs, channel, type, "mZ2_lo" , kine.mZ2 , wgt, wgt_lo, wgt_hi); |
986 |
+ |
fillHist( cs, channel, type, "m4l_lo" , kine.m4l , wgt, wgt_lo, wgt_hi); |
987 |
+ |
fillHist( cs, channel, type, "m4l_med" , kine.m4l , wgt, wgt_lo, wgt_hi); |
988 |
+ |
fillHist( cs, channel, type, "m4l" , kine.m4l , wgt, wgt_lo, wgt_hi); |
989 |
+ |
fillHist( cs, channel, type, "met" , fs->info->met , wgt, wgt_lo, wgt_hi); |
990 |
+ |
fillHist( cs, channel, type, "ip3ds_l1" , lep1.ip3dSig , wgt, wgt_lo, wgt_hi); |
991 |
+ |
fillHist( cs, channel, type, "ip3ds_l2" , lep2.ip3dSig , wgt, wgt_lo, wgt_hi); |
992 |
+ |
fillHist( cs, channel, type, "ip3ds_l3" , lep3.ip3dSig , wgt, wgt_lo, wgt_hi); |
993 |
+ |
fillHist( cs, channel, type, "ip3ds_l4" , lep4.ip3dSig , wgt, wgt_lo, wgt_hi); |
994 |
+ |
fillHist( cs, channel, type, "ip3ds_l3_lo" , lep3.ip3dSig , wgt, wgt_lo, wgt_hi); |
995 |
+ |
fillHist( cs, channel, type, "ip3ds_l4_lo" , lep4.ip3dSig , wgt, wgt_lo, wgt_hi); |
996 |
+ |
fillHist( cs, channel, type, "d0_l1" , lep1.d0 , wgt, wgt_lo, wgt_hi); |
997 |
+ |
fillHist( cs, channel, type, "d0_l2" , lep2.d0 , wgt, wgt_lo, wgt_hi); |
998 |
+ |
fillHist( cs, channel, type, "d0_l3" , lep3.d0 , wgt, wgt_lo, wgt_hi); |
999 |
+ |
fillHist( cs, channel, type, "d0_l4" , lep4.d0 , wgt, wgt_lo, wgt_hi); |
1000 |
+ |
fillHist( cs, channel, type, "d0_l3_lo" , lep3.d0 , wgt, wgt_lo, wgt_hi); |
1001 |
+ |
fillHist( cs, channel, type, "d0_l4_lo" , lep4.d0 , wgt, wgt_lo, wgt_hi); |
1002 |
+ |
fillHist( cs, channel, type, "dz_l1" , lep1.dz , wgt, wgt_lo, wgt_hi); |
1003 |
+ |
fillHist( cs, channel, type, "dz_l2" , lep2.dz , wgt, wgt_lo, wgt_hi); |
1004 |
+ |
fillHist( cs, channel, type, "dz_l3" , lep3.dz , wgt, wgt_lo, wgt_hi); |
1005 |
+ |
fillHist( cs, channel, type, "dz_l4" , lep4.dz , wgt, wgt_lo, wgt_hi); |
1006 |
+ |
fillHist( cs, channel, type, "pt_l1" , lep1.vec.Pt() , wgt, wgt_lo, wgt_hi); |
1007 |
+ |
fillHist( cs, channel, type, "pt_l2" , lep2.vec.Pt() , wgt, wgt_lo, wgt_hi); |
1008 |
+ |
fillHist( cs, channel, type, "pt_l3" , lep3.vec.Pt() , wgt, wgt_lo, wgt_hi); |
1009 |
+ |
fillHist( cs, channel, type, "pt_l4" , lep4.vec.Pt() , wgt, wgt_lo, wgt_hi); |
1010 |
+ |
fillHist( cs, channel, type, "eta_l1" , lep1.vec.Eta() , wgt, wgt_lo, wgt_hi); |
1011 |
+ |
fillHist( cs, channel, type, "eta_l2" , lep2.vec.Eta() , wgt, wgt_lo, wgt_hi); |
1012 |
+ |
fillHist( cs, channel, type, "eta_l3" , lep3.vec.Eta() , wgt, wgt_lo, wgt_hi); |
1013 |
+ |
fillHist( cs, channel, type, "eta_l4" , lep4.vec.Eta() , wgt, wgt_lo, wgt_hi); |
1014 |
+ |
fillHist( cs, channel, type, "dR_l3l4_lo" , dr(lep3,lep4) , wgt, wgt_lo, wgt_hi); |
1015 |
+ |
fillHist( cs, channel, type, "dR_l3l4" , dr(lep3,lep4) , wgt, wgt_lo, wgt_hi); |
1016 |
+ |
|
1017 |
+ |
fillHist( cs, channel, type, "costheta1" , angles.costheta1 , wgt, wgt_lo, wgt_hi); |
1018 |
+ |
fillHist( cs, channel, type, "costheta2" , angles.costheta2 , wgt, wgt_lo, wgt_hi); |
1019 |
+ |
fillHist( cs, channel, type, "costhetastar" , angles.costhetastar , wgt, wgt_lo, wgt_hi); |
1020 |
+ |
fillHist( cs, channel, type, "Phi" , angles.Phi , wgt, wgt_lo, wgt_hi); |
1021 |
+ |
fillHist( cs, channel, type, "Phi1" , angles.Phi1 , wgt, wgt_lo, wgt_hi); |
1022 |
+ |
fillHist( cs, channel, type, "pt4l" , kine.ZZpt/kine.m4l , wgt, wgt_lo, wgt_hi); |
1023 |
+ |
fillHist( cs, channel, type, "pt4l_log" , kine.ZZpt/kine.m4l , wgt, wgt_lo, wgt_hi); |
1024 |
+ |
fillHist( cs, channel, type, "y4l" , kine.ZZy , wgt, wgt_lo, wgt_hi); |
1025 |
+ |
fillHist( cs, channel, type, "Z1pt" , kine.Z1pt/kine.m4l , wgt, wgt_lo, wgt_hi); |
1026 |
+ |
fillHist( cs, channel, type, "Z1pt_log" , kine.Z1pt/kine.m4l , wgt, wgt_lo, wgt_hi); |
1027 |
+ |
fillHist( cs, channel, type, "Z2pt" , kine.Z2pt/kine.m4l , wgt, wgt_lo, wgt_hi); |
1028 |
+ |
fillHist( cs, channel, type, "Z2pt_log" , kine.Z2pt/kine.m4l , wgt, wgt_lo, wgt_hi); |
1029 |
+ |
fillHist( cs, channel, type, "ZZdotZ1" , kine.ZZdotZ1/(kine.m4l*kine.mZ1) , wgt, wgt_lo, wgt_hi); |
1030 |
+ |
fillHist( cs, channel, type, "ZZdotZ2" , kine.ZZdotZ2/(kine.m4l*kine.mZ2) , wgt, wgt_lo, wgt_hi); |
1031 |
+ |
fillHist( cs, channel, type, "ZZdotZ1_log" , kine.ZZdotZ1/(kine.m4l*kine.mZ1) , wgt, wgt_lo, wgt_hi); |
1032 |
+ |
fillHist( cs, channel, type, "ZZdotZ2_log" , kine.ZZdotZ2/(kine.m4l*kine.mZ2) , wgt, wgt_lo, wgt_hi); |
1033 |
+ |
fillHist( cs, channel, type, "dphi1" , kine.ZZptZ1ptCosDphi , wgt, wgt_lo, wgt_hi); |
1034 |
+ |
fillHist( cs, channel, type, "dphi2" , kine.ZZptZ2ptCosDphi , wgt, wgt_lo, wgt_hi); |
1035 |
+ |
fillHist( cs, channel, type, "dphi1_log" , kine.ZZptZ1ptCosDphi , wgt, wgt_lo, wgt_hi); |
1036 |
+ |
fillHist( cs, channel, type, "dphi2_log" , kine.ZZptZ2ptCosDphi , wgt, wgt_lo, wgt_hi); |
1037 |
+ |
|
1038 |
+ |
} |
1039 |
+ |
//---------------------------------------------------------------------------------------- |
1040 |
+ |
void fillAllJetHists( FOFlags ctrl, CSample *cs, TString channel, TString type, filestuff *fs, KinematicsStruct kine, |
1041 |
+ |
SimpleLepton lep1, SimpleLepton lep2, SimpleLepton lep3, SimpleLepton lep4, |
1042 |
+ |
FusionMva &fusion, vector<SimpleLepton> &goodJets, JetInfoStruct ji, |
1043 |
+ |
double wgt, double wgt_lo, double wgt_hi) |
1044 |
+ |
{ |
1045 |
+ |
double fMVAval = (ctrl.uncert=="") ? 0 : fusion.reader->EvaluateMVA("BDTG"); |
1046 |
+ |
dr_struct drs = fill_dr_struct(goodJets,lep1,lep2,lep3,lep4); |
1047 |
+ |
fillHist( cs, channel, type, "pt_j1" , ji.ptJet1, wgt, wgt_lo, wgt_hi); |
1048 |
+ |
fillHist( cs, channel, type, "pt_j2" , ji.ptJet2, wgt, wgt_lo, wgt_hi); |
1049 |
+ |
fillHist( cs, channel, type, "pt_j3" , ji.ptJet3, wgt, wgt_lo, wgt_hi); |
1050 |
+ |
fillHist( cs, channel, type, "pt_j4" , ji.ptJet4, wgt, wgt_lo, wgt_hi); |
1051 |
+ |
fillHist( cs, channel, type, "eta_j1" , ji.etaJet1, wgt, wgt_lo, wgt_hi); |
1052 |
+ |
fillHist( cs, channel, type, "eta_j2" , ji.etaJet2, wgt, wgt_lo, wgt_hi); |
1053 |
+ |
fillHist( cs, channel, type, "eta_j3" , ji.etaJet3, wgt, wgt_lo, wgt_hi); |
1054 |
+ |
fillHist( cs, channel, type, "eta_j4" , ji.etaJet4, wgt, wgt_lo, wgt_hi); |
1055 |
+ |
fillHist( cs, channel, type, "phi_j1" , ji.phiJet1, wgt, wgt_lo, wgt_hi); |
1056 |
+ |
fillHist( cs, channel, type, "phi_j2" , ji.phiJet2, wgt, wgt_lo, wgt_hi); |
1057 |
+ |
fillHist( cs, channel, type, "phi_j3" , ji.phiJet3, wgt, wgt_lo, wgt_hi); |
1058 |
+ |
fillHist( cs, channel, type, "phi_j4" , ji.phiJet4, wgt, wgt_lo, wgt_hi); |
1059 |
+ |
fillHist( cs, channel, type, "idmva_j1", ji.mvaJet1, wgt, wgt_lo, wgt_hi); |
1060 |
+ |
fillHist( cs, channel, type, "idmva_j2", ji.mvaJet2, wgt, wgt_lo, wgt_hi); |
1061 |
+ |
fillHist( cs, channel, type, "idmva_j3", ji.mvaJet3, wgt, wgt_lo, wgt_hi); |
1062 |
+ |
fillHist( cs, channel, type, "idmva_j4", ji.mvaJet4, wgt, wgt_lo, wgt_hi); |
1063 |
+ |
fillHist( cs, channel, type, "mjj" , ji.mjj, wgt, wgt_lo, wgt_hi); |
1064 |
+ |
fillHist( cs, channel, type, "dEta" , ji.dEta, wgt, wgt_lo, wgt_hi); |
1065 |
+ |
fillHist( cs, channel, type, "etaProd", ji.etaProd, wgt, wgt_lo, wgt_hi); |
1066 |
+ |
fillHist( cs, channel, type, "njets" , goodJets.size(), wgt, wgt_lo, wgt_hi); |
1067 |
+ |
fillHist( cs, channel, type, "dR_l1j1", drs.l1j1, wgt, wgt_lo, wgt_hi); |
1068 |
+ |
fillHist( cs, channel, type, "dR_l2j1", drs.l2j1, wgt, wgt_lo, wgt_hi); |
1069 |
+ |
fillHist( cs, channel, type, "dR_l3j1", drs.l3j1, wgt, wgt_lo, wgt_hi); |
1070 |
+ |
fillHist( cs, channel, type, "dR_l4j1", drs.l4j1, wgt, wgt_lo, wgt_hi); |
1071 |
+ |
fillHist( cs, channel, type, "dR_l1j2", drs.l1j2, wgt, wgt_lo, wgt_hi); |
1072 |
+ |
fillHist( cs, channel, type, "dR_l2j2", drs.l2j2, wgt, wgt_lo, wgt_hi); |
1073 |
+ |
fillHist( cs, channel, type, "dR_l3j2", drs.l3j2, wgt, wgt_lo, wgt_hi); |
1074 |
+ |
fillHist( cs, channel, type, "dR_l4j2", drs.l4j2, wgt, wgt_lo, wgt_hi); |
1075 |
+ |
fillHist( cs, channel, type, "dR_l1j3", drs.l1j3, wgt, wgt_lo, wgt_hi); |
1076 |
+ |
fillHist( cs, channel, type, "dR_l2j3", drs.l2j3, wgt, wgt_lo, wgt_hi); |
1077 |
+ |
fillHist( cs, channel, type, "dR_l3j3", drs.l3j3, wgt, wgt_lo, wgt_hi); |
1078 |
+ |
fillHist( cs, channel, type, "dR_l4j3", drs.l4j3, wgt, wgt_lo, wgt_hi); |
1079 |
+ |
fillHist( cs, channel, type, "dR_l1j4", drs.l1j4, wgt, wgt_lo, wgt_hi); |
1080 |
+ |
fillHist( cs, channel, type, "dR_l2j4", drs.l2j4, wgt, wgt_lo, wgt_hi); |
1081 |
+ |
fillHist( cs, channel, type, "dR_l3j4", drs.l3j4, wgt, wgt_lo, wgt_hi); |
1082 |
+ |
fillHist( cs, channel, type, "dR_l4j4", drs.l4j4, wgt, wgt_lo, wgt_hi); |
1083 |
+ |
|
1084 |
+ |
fillHist( cs, channel, type, "fusionMVA_lo", fMVAval, wgt, wgt_lo, wgt_hi); |
1085 |
+ |
fillHist( cs, channel, type, "fusionMVA_med",fMVAval, wgt, wgt_lo, wgt_hi); |
1086 |
+ |
fillHist( cs, channel, type, "fusionMVA_hi", fMVAval, wgt, wgt_lo, wgt_hi); |
1087 |
+ |
fillHist( cs, channel, type, "fusionMVA", fMVAval, wgt, wgt_lo, wgt_hi); |
1088 |
+ |
if(fMVAval > -.3) { |
1089 |
+ |
fillHist( cs, channel, type, "m4l_jet_lo", kine.m4l , wgt, wgt_lo, wgt_hi); |
1090 |
+ |
fillHist( cs, channel, type, "m4l_jet", kine.m4l , wgt, wgt_lo, wgt_hi); |
1091 |
+ |
} |
1092 |
+ |
} |
1093 |
+ |
//---------------------------------------------------------------------------------------- |
1094 |
+ |
bool passHlt(FOFlags &ctrl, TrigInfo ti, InfoStruct *info, unsigned lep1matchBits, |
1095 |
+ |
unsigned lep2matchBits, unsigned lep3matchBits, |
1096 |
+ |
unsigned lep4matchBits) |
1097 |
+ |
{ |
1098 |
+ |
bool pass=false; |
1099 |
+ |
bool onePassedButWasOutside=false; |
1100 |
+ |
bitset<30> firedBits(info->status); |
1101 |
+ |
if(ctrl.debug) cout << setw(12) << info->run << setw(12) << info->evt << setw(65) << firedBits <<endl; |
1102 |
+ |
for(unsigned ibit=0; ibit<ti.trigBits.size(); ibit++) { |
1103 |
+ |
bool outsideRunRange=false; |
1104 |
+ |
if(info->run < ti.minRuns[ibit] || info->run > ti.maxRuns[ibit]) { |
1105 |
+ |
outsideRunRange = true; |
1106 |
+ |
} |
1107 |
+ |
int baconBit = ti.trigBits[ibit]; |
1108 |
+ |
bool passBit = firedBits.test(ibit); |
1109 |
+ |
if(ctrl.debug) cout << " ibit: " << setw(4) << ibit << " (bacon bit: " << baconBit << ") fired: " << passBit << endl; |
1110 |
+ |
if(ctrl.debug && passBit && outsideRunRange) cout << " would have passed but it's outside run range (" << ti.minRuns[ibit] << "," << ti.maxRuns[ibit] << ")" << endl; |
1111 |
+ |
if(passBit && outsideRunRange) { |
1112 |
+ |
onePassedButWasOutside = true; |
1113 |
+ |
} |
1114 |
+ |
if(passBit && !outsideRunRange) pass = true; |
1115 |
+ |
} |
1116 |
+ |
if(!pass && onePassedButWasOutside) cout << "WARNING: would have passed, but one was outside its run range" << endl; |
1117 |
+ |
return pass; |
1118 |
+ |
} |
1119 |
+ |
//---------------------------------------------------------------------------------------- |
1120 |
+ |
void init_cuts( vector<TString> &cutstrs, map<TString,int> &cutvec) |
1121 |
+ |
{ |
1122 |
+ |
cutstrs.push_back("start" ); cutvec["start"] = 0; |
1123 |
+ |
cutstrs.push_back("rlrmAndDupl" ); cutvec["rlrmAndDupl"] = 0; |
1124 |
+ |
// cutstrs.push_back("skim" ); cutvec["skim"] = 0; |
1125 |
+ |
cutstrs.push_back("4lsele" ); cutvec["4lsele"] = 0; |
1126 |
+ |
cutstrs.push_back("twoJets" ); cutvec["twoJets"] = 0; |
1127 |
+ |
cutstrs.push_back("twoJetsAfter" ); cutvec["twoJetsAfter"] = 0; |
1128 |
+ |
cutstrs.push_back("filling" ); cutvec["filling"] = 0; |
1129 |
+ |
cutstrs.push_back("fillPass" ); cutvec["fillPass"] = 0; |
1130 |
+ |
cutstrs.push_back("fillFail" ); cutvec["fillFail"] = 0; |
1131 |
+ |
cutstrs.push_back("fillPF" ); cutvec["fillPF"] = 0; |
1132 |
+ |
} |
1133 |
+ |
//---------------------------------------------------------------------------------------- |
1134 |
+ |
bool findGoodJets(vector<SimpleLepton> &goodJets, filestuff *fs, |
1135 |
+ |
SimpleLepton lep1, SimpleLepton lep2, SimpleLepton lep3, SimpleLepton lep4) |
1136 |
+ |
{ |
1137 |
+ |
int nHighPtJets=0,nLowPtJets=0; |
1138 |
+ |
for(unsigned ijet=0; ijet<fs->jets->size(); ijet++) { |
1139 |
+ |
SimpleLepton *jet = &((*fs->jets)[ijet]); |
1140 |
+ |
if(dr(*jet,lep1) < 0.2) continue; |
1141 |
+ |
if(dr(*jet,lep2) < 0.2) continue; |
1142 |
+ |
if(dr(*jet,lep3) < 0.2) continue; |
1143 |
+ |
if(dr(*jet,lep4) < 0.2) continue; |
1144 |
+ |
if(!(jet->status.passPre())) continue; |
1145 |
+ |
if(!jet->isLoose) continue; |
1146 |
+ |
if(fabs(jet->vec.Eta()) > 4.5) continue; |
1147 |
+ |
goodJets.push_back(*jet); |
1148 |
+ |
if(jet->vec.Pt() > 40) nHighPtJets++; |
1149 |
+ |
if(jet->vec.Pt() > 20) nLowPtJets++; |
1150 |
+ |
} |
1151 |
+ |
sort( goodJets.begin(), goodJets.end(), SimpleLepton::lep_pt_sort ); // note: they're not sorted, 'cause jet corrections were applied in applyZPlusX |
1152 |
+ |
if((goodJets.size()>0 && nHighPtJets<1) || // require pt > 40,20 if the jets are there |
1153 |
+ |
(goodJets.size()>1 && nLowPtJets<2)) |
1154 |
+ |
return false; |
1155 |
+ |
else |
1156 |
+ |
return true; |
1157 |
+ |
} |
1158 |
+ |
//---------------------------------------------------------------------------------------- |
1159 |
+ |
map<TString,TH1D*> setHistSet(CSample *cs, TString type, TString var) |
1160 |
+ |
{ |
1161 |
+ |
map<TString,TH1D*> hset; |
1162 |
+ |
hset["obs"] = (*(cs->hists)[type+"_obs"])[var]; |
1163 |
+ |
hset["pred"] = (*(cs->hists)[type+"_pred"])[var]; |
1164 |
+ |
hset["pred_lo"] = (*(cs->hists)[type+"_pred_lo"])[var]; |
1165 |
+ |
hset["pred_hi"] = (*(cs->hists)[type+"_pred_hi"])[var]; |
1166 |
+ |
hset["PF"] = (*(cs->hists)[type+"_PF"])[var]; |
1167 |
+ |
hset["PF_lo"] = (*(cs->hists)[type+"_PF_lo"])[var]; |
1168 |
+ |
hset["PF_hi"] = (*(cs->hists)[type+"_PF_hi"])[var]; |
1169 |
+ |
return hset; |
1170 |
+ |
} |
1171 |
+ |
//---------------------------------------------------------------------------------------- |
1172 |
+ |
void fillFakeTuple(CSample *cs, filestuff *fs, EventData evtdata, unsigned ientry, double fillweight) |
1173 |
+ |
{ |
1174 |
+ |
fs->getentry(ientry,"","zznt"); // make sure we've got this entry for all the branches |
1175 |
+ |
fillAngles(evtdata,*fs->angles); |
1176 |
+ |
fillKinematics(evtdata,*fs->kine); // reminder: kine has the fake information, while fs->kine *had*, until this line, whatever ZPlusX put in it |
1177 |
+ |
fs->weights->w = fillweight; |
1178 |
+ |
fs->outtuple->Fill(); |
1179 |
+ |
fs->outFotuple->Fill(); |
1180 |
+ |
} |
1181 |
+ |
//---------------------------------------------------------------------------------------- |
1182 |
+ |
void incrementSsofCounters(FOFlags &ctrl, filestuff *fs, double minMz2, |
1183 |
+ |
pair<int,int> *best_z_indices, |
1184 |
+ |
double wgt) |
1185 |
+ |
{ |
1186 |
+ |
assert(ctrl.ssof); // only makes sense to write this out when we're thinking about ssof method |
1187 |
+ |
vector<pair<SimpleLepton,SimpleLepton> > z2cands; |
1188 |
+ |
vector<TString> types; |
1189 |
+ |
|
1190 |
+ |
int hiPtFailZ2 = findZ2CandidatesPassFail(fs->failingL, z2cands, types, "XX-SF", minMz2, "fail"); |
1191 |
+ |
if(hiPtFailZ2 == -1) return; // no z2 found |
1192 |
+ |
SimpleLepton lep1 = (*fs->passingL)[best_z_indices->first]; |
1193 |
+ |
SimpleLepton lep2 = (*fs->passingL)[best_z_indices->second]; |
1194 |
+ |
SimpleLepton lep3 = z2cands[hiPtFailZ2].first; |
1195 |
+ |
SimpleLepton lep4 = z2cands[hiPtFailZ2].second; |
1196 |
+ |
TString channel = getChannel(lep1,lep2,lep3,lep4); |
1197 |
+ |
TString sign = (lep3.charge == lep4.charge) ? "SS" : "OS"; |
1198 |
+ |
|
1199 |
+ |
fs->counters_[sign+"_"+channel] += wgt; |
1200 |
+ |
fs->counters_[sign] += wgt; |
1201 |
+ |
} |
1202 |
+ |
//---------------------------------------------------------------------------------------- |
1203 |
+ |
double getSsofWgt(TString channel, map<TString,double> &ssofRatios) |
1204 |
+ |
{ |
1205 |
+ |
double returnval = ssofRatios[channel]; |
1206 |
+ |
if(returnval < 0.1 || returnval > 3) { |
1207 |
+ |
cout << "\nERROR! ssof ratio out of bounds for " << channel << ": " << returnval << endl; |
1208 |
+ |
assert(0); |
1209 |
+ |
} |
1210 |
+ |
return returnval; |
1211 |
+ |
} |
1212 |
+ |
//---------------------------------------------------------------------------------------- |
1213 |
+ |
map<TString,double> initSsofRatios(vector<CSample*> &samplev) |
1214 |
+ |
{ |
1215 |
+ |
double OS,SS; |
1216 |
+ |
double OS_4e,SS_4e; |
1217 |
+ |
double OS_4m,SS_4m; |
1218 |
+ |
double OS_2e2m,SS_2e2m; |
1219 |
+ |
cout << "Initializing ssof ratios: " << endl; |
1220 |
+ |
for(unsigned isam=0; isam<samplev.size(); isam++) { |
1221 |
+ |
CSample *cs = samplev[isam]; |
1222 |
+ |
for(unsigned ifs=0; ifs<(cs->fsv).size(); ifs++) { |
1223 |
+ |
filestuff *fs = (cs->fsv)[ifs]; |
1224 |
+ |
if(fs->useSsofRatio_) { |
1225 |
+ |
cout << " adding from: " << fs->fname_ << endl; |
1226 |
+ |
cout << " " << fs->counters_["ratio"] << setw(8) << fixed << setprecision(2) << fs->counters_["ratio_4e"] << setw(8) << fixed << setprecision(2) << fs->counters_["ratio_4m"] << setw(8) << fixed << setprecision(2) << fs->counters_["ratio_2e2m"] << endl; |
1227 |
+ |
OS += fs->counters_["OS"]; |
1228 |
+ |
SS += fs->counters_["SS"]; |
1229 |
+ |
OS_4e += fs->counters_["OS_4e"]; |
1230 |
+ |
SS_4e += fs->counters_["SS_4e"]; |
1231 |
+ |
OS_4m += fs->counters_["OS_4m"]; |
1232 |
+ |
SS_4m += fs->counters_["SS_4m"]; |
1233 |
+ |
OS_2e2m += fs->counters_["OS_2e2m"]; |
1234 |
+ |
SS_2e2m += fs->counters_["SS_2e2m"]; |
1235 |
+ |
} |
1236 |
+ |
} |
1237 |
+ |
} |
1238 |
+ |
assert(OS!=0 && SS!=0 && OS_4e!=0 && SS_4e!=0 && OS_4m!=0 && SS_4m!=0 && OS_2e2m && SS_2e2m!=0); |
1239 |
+ |
map<TString,double> ssofRatios; |
1240 |
+ |
ssofRatios[""] = OS/SS; |
1241 |
+ |
ssofRatios["4e"] = OS_4e/SS_4e; |
1242 |
+ |
ssofRatios["4m"] = OS_4m/SS_4m; |
1243 |
+ |
ssofRatios["2e2m"] = OS_2e2m/SS_2e2m; |
1244 |
+ |
cout << "returning: " << ssofRatios[""] << setw(8) << fixed << setprecision(2) << ssofRatios["4e"] << setw(8) << fixed << setprecision(2) << ssofRatios["4m"] << setw(8) << fixed << setprecision(2) << ssofRatios["2e2m"] << endl; |
1245 |
+ |
return ssofRatios; |
1246 |
+ |
} |
1247 |
+ |
|