15 #include "TGraphAsymmErrors.h" 37 double calcKappaRelUnc(vector<vector<vector<int> > > &entries, vector<vector<vector<float> > > &weights, vector<float> &powers,
38 float &mSigma,
float &pSigma, TString label);
48 TString folder=
"/cms5r0/aovcharova/archive/2015_06_05/skim/";
52 s_tt.push_back(folder+
"*_TTJet*");
53 vector<TString> s_singlet;
54 s_singlet.push_back(folder+
"*_T*channel*");
55 vector<TString> s_other;
56 s_other.push_back(folder+
"*QCD_HT*");
57 s_other.push_back(folder+
"*_ZJet*");
58 s_other.push_back(folder+
"*DY*");
59 s_other.push_back(folder+
"*WH_HToBB*");
60 s_other.push_back(folder+
"*TTW*");
61 s_other.push_back(folder+
"*TTZ*");
62 s_other.push_back(folder+
"*WJets*");
65 vector<sfeats> Samples;
78 vector<int> ra4_sam, ra4_sam_ns;
79 unsigned nsam(Samples.size());
80 for(
unsigned sam(0); sam < nsam; sam++){
81 ra4_sam.push_back(sam);
91 vector<TChain *> chain;
92 for(
unsigned sam(0); sam < Samples.size(); sam++){
93 chain.push_back(
new TChain(
"tree"));
94 for(
unsigned insam(0); insam < Samples[sam].file.size(); insam++)
95 chain[sam]->Add(Samples[sam].
file[insam]);
99 time_t begtime, endtime;
103 if(
method==1) mjthresh =
"600";
104 float mSigma, pSigma;
105 vector<float> powers;
106 vector<TString> cuts;
107 powers.push_back(1); cuts.push_back(
"mt<=140&&mj<="+mjthresh);
108 powers.push_back(-1); cuts.push_back(
"mt<=140&&mj>"+mjthresh);
109 powers.push_back(-1); cuts.push_back(
"mt>140&&mj<="+mjthresh);
110 powers.push_back(1); cuts.push_back(
"mt>140&&mj>"+mjthresh);
112 TString baseline(
"(nmus+nels)==1&&ht>500&&met>100&&njets>=7&&nbm>=1");
113 vector<TString> metcuts, njcuts, nbcuts, metnames;
114 metcuts.push_back(
"met>200&&met<=400");
115 metcuts.push_back(
"met>400");
116 njcuts.push_back(
"njets<=8");
117 njcuts.push_back(
"njets>=9");
121 nbcuts.push_back(
"nbm==2");
122 nbcuts.push_back(
"nbm>=3");
124 for(
unsigned imet(0); imet<metcuts.size(); imet++){
125 metnames.push_back(metcuts[imet]);
126 metnames[imet].ReplaceAll(
"met>",
"");
127 metnames[imet].ReplaceAll(
"met<=",
"");
128 metnames[imet].ReplaceAll(
"&&",
"-");
129 if(!metnames[imet].
Contains(
"-")) metnames[imet] +=
"+";
130 metnames[imet] =
"#splitline{MET}{"+metnames[imet]+
"}";
133 vector<sysfeats> syst;
134 syst.push_back(
sysfeats(
"nisr",
"ME ISR multiplicity"));
135 syst.back().push_back(
"n_isr_me==0", 0.75);
136 syst.back().push_back(
"n_isr_me==1", 1.);
137 syst.back().push_back(
"n_isr_me==2", 1.25);
138 syst.back().push_back(
"n_isr_me==3", 1.5);
140 syst.push_back(
sysfeats(
"pt_isr",
"ISR pT"));
141 syst.back().push_back(
"tru_tt_pt<=120", 1.);
142 syst.back().push_back(
"120<tru_tt_pt&&tru_tt_pt<=200", 0.95);
143 syst.back().push_back(
"200<tru_tt_pt&&tru_tt_pt<=300", 0.9);
144 syst.back().push_back(
"300<tru_tt_pt&&tru_tt_pt<=500", 0.8);
145 syst.back().push_back(
"500<tru_tt_pt&&tru_tt_pt<=650", 0.6);
146 syst.back().push_back(
"650<tru_tt_pt&&tru_tt_pt<=800", 0.4);
147 syst.back().push_back(
"800<tru_tt_pt&&tru_tt_pt", 0.2);
160 syst.push_back(
sysfeats(
"dilep",
"2 $\\times$ dilep."));
161 syst.back().push_back(
"((ntruleps==1&&mt<=140.)||ntruleps==2)", 1.);
162 syst.back().push_back(
"ntruleps==1&&mt>140", 2.);
164 float minh(0), maxh(10), wtot(maxh-minh), max_axis(2.), max_krelunc(0.);
165 float wnj(wtot/static_cast<float>(njcuts.size()));
166 float wmet(wnj/static_cast<float>(metcuts.size()));
167 float wnb(wmet/static_cast<float>(nbcuts.size()+4));
168 vector<vector<double> > vx, vy, vexl, vexh, veyl, veyh;
169 for(
unsigned inb(0); inb<nbcuts.size(); inb++){
170 vx.push_back (vector<double>());
171 vy.push_back (vector<double>());
172 vexl.push_back(vector<double>());
173 vexh.push_back(vector<double>());
174 veyl.push_back(vector<double>());
175 veyh.push_back(vector<double>());
179 for(
unsigned isys(0); isys<syst.size(); isys++){
180 for(
unsigned inj(0); inj<njcuts.size(); inj++){
181 for(
unsigned imet(0); imet<metcuts.size(); imet++){
182 for(
unsigned inb(0); inb<nbcuts.size(); inb++){
183 vector<vector<vector<int> > > entries;
184 vector<vector<vector<float> > > weights;
185 for(
unsigned obs(0); obs < powers.size(); obs++) {
186 entries.push_back(vector<vector<int> >());
187 weights.push_back(vector<vector<float> >());
192 for(
unsigned sam(0); sam < ra4_sam.size(); sam++) {
193 for(
unsigned isbin(0); isbin < syst[isys].size(); isbin++) {
194 entries[obs].push_back(vector<int>());
195 weights[obs].push_back(vector<float>());
196 totcut = (
lumi+
"*weight*("+baseline+
"&&"+nbcuts[inb]+
"&&"+metcuts[imet]+
"&&"+cuts[obs]+
197 "&&"+Samples[ra4_sam[sam]].cut+
"&&"+syst[isys].bincut(isbin));
198 if(
method==1 || obs%2==1) totcut +=
"&&"+njcuts[inj];
202 double yield(0.), sigma(0.), avWeight(1.);
204 Nentries =
getYieldErr(*chain[ra4_sam[sam]], totcut, yield, sigma);
205 entries[obs][sam].push_back(Nentries);
207 totcut = (
lumi+
"*weight*("+baseline+
"&&"+cuts[obs]+
")");
208 Nentries =
getYieldErr(*chain[ra4_sam[sam]], totcut, yield, sigma);
211 totcut = (
lumi+
"*weight*("+baseline+
")");
212 Nentries =
getYieldErr(*chain[ra4_sam[sam]], totcut, yield, sigma);
215 avWeight = fabs(yield/static_cast<double>(Nentries));
216 if (isbin == 0) weights[obs][sam].push_back(avWeight);
217 weights[obs][sam].push_back(syst[isys].weight(isbin));
223 cout<<
"----- Calc kappa for: "<<njcuts[inj]<<
", "<<metcuts[imet]<<
", "<<nbcuts[inb]<<endl;
224 double krelunc =
calcKappaRelUnc(entries, weights, powers, mSigma, pSigma, Form(
"nj%i_imet%i_isys%i",inj,imet,isys));
225 if(krelunc > max_krelunc) max_krelunc = krelunc;
226 float xpoint = inj*wnj+imet*wmet+(inb+2)*wnb;
227 if(krelunc > max_axis && krelunc-mSigma < max_axis) {
228 mSigma = max_axis-(krelunc-mSigma);
231 vx[inb].push_back(xpoint);
232 vy[inb].push_back(krelunc);
233 vexl[inb].push_back(0);
234 vexh[inb].push_back(0);
235 veyl[inb].push_back(mSigma);
236 veyh[inb].push_back(pSigma);
244 vector<unsigned> ind(nbcuts.size(),0);
245 TString pname =
"txt/kappa_method", cutname; pname +=
method;
257 ofstream
file(pname);
260 file <<
"\\renewcommand{\\arraystretch}{1.4}"<<endl;
261 file <<
"\\begin{tabular}[tbp!]{ l | cccc}\\hline\\hline\n";
262 file <<
"& $n_{jets} \\leq 8$ & $n_{jets} \\leq 8$ & $n_{jets} > 8$ & $n_{jets} > 8$ \\\\"<<endl;
263 file <<
"& MET $\\leq 400$ & MET $> 400$ & MET $\\leq 400$ & MET $> 400$ \\\\"<<endl;
269 for(
unsigned isys(0); isys<syst.size(); isys++){
270 file << syst[isys].title;
271 for(
unsigned inj(0); inj<njcuts.size(); inj++){
272 for(
unsigned imet(0); imet<metcuts.size(); imet++){
273 for(
unsigned inb(0); inb<nbcuts.size(); inb++){
274 float Kappa(vy[inb][ind[inb]]);
275 float epKappa(veyh[inb][ind[inb]]), emKappa(veyl[inb][ind[inb]]);
282 file <<
"\\\\"<<endl;
285 file<<
"\\hline\\hline\n\\end{tabular}"<<endl<<endl;
288 cout<<endl<<
"Written "<<pname<<endl;
339 cout<<endl<<
"Calculation took "<<difftime(endtime, begtime)<<
" seconds"<<endl<<endl;
342 double calcKappaRelUnc(vector<vector<vector<int> > > &entries, vector<vector<vector<float> > > &weights, vector<float> &powers,
343 float &mSigma,
float &pSigma, TString label){
347 vector<float> fKappaRelShift;
348 double mean(0.), bignum(1e10);
350 for(
int rep(0), irep(0); rep <
nrep; rep++) {
351 fKappaRelShift.push_back(1.);
352 bool Denom_is0(
false);
353 for(
unsigned obs(0); obs < powers.size(); obs++) {
354 float observed(0.), observed_sys(0.);
355 for(
unsigned sam(0); sam < entries[obs].size(); sam++) {
356 for(
unsigned sysbin(0); sysbin < entries[obs][sam].size(); sysbin++) {
359 double grnd =
gsl_ran_gamma(entries[obs][sam][sysbin]+1,1,rand);
360 observed += grnd*weights[obs][sam][0];
361 observed_sys += grnd*weights[obs][sam][0]*weights[obs][sam][sysbin+1];
370 if( (observed <= 0 && powers[obs]*(-1) < 0) || (observed_sys <= 0 && powers[obs] < 0) ) Denom_is0 =
true;
375 fKappaRelShift[irep] *= (pow(observed, powers[obs]*(-1))*pow(observed_sys, powers[obs]));
380 fKappaRelShift[irep] -=1.;
381 if(Denom_is0 && fKappaRelShift[irep]==0) {
382 fKappaRelShift.pop_back();
385 if(Denom_is0) fKappaRelShift[irep] = bignum;
386 else mean += fKappaRelShift[irep];
391 int ntot(nrep-nbadk);
392 mean /=
static_cast<double>(ntot);
394 sort(fKappaRelShift.begin(), fKappaRelShift.end());
395 double gSigma =
intGaus(0,1,0,1);
396 int iMedian((nrep-nbadk+1)/2-1);
397 int imSigma(iMedian-static_cast<int>(gSigma*ntot)), ipSigma(iMedian+static_cast<int>(gSigma*ntot));
398 float median(fKappaRelShift[iMedian]);
399 mSigma = median-fKappaRelShift[imSigma]; pSigma = fKappaRelShift[ipSigma]-median;
402 float stdRelShift(1.);
404 for(
unsigned obs(0); obs < powers.size(); obs++) {
405 float observed(0.), observed_sys(0.);
406 for(
unsigned sam(0); sam < entries[obs].size(); sam++) {
407 for(
unsigned sysbin(0); sysbin < entries[obs][sam].size(); sysbin++) {
408 observed += entries[obs][sam][sysbin]*weights[obs][sam][0];
409 observed_sys += entries[obs][sam][sysbin]*weights[obs][sam][0]*weights[obs][sam][sysbin+1];
412 if( (observed <= 0 && powers[obs]*(-1) < 0) || (observed_sys <= 0 && powers[obs] < 0) ) infStd =
true;
413 else stdRelShift *= pow(observed, powers[obs]*(-1))*pow(observed_sys, powers[obs]);
417 stdRelShift = median;
418 cout<<
"Standard rel. shift = "<<stdRelShift<<
" median = "<<median<<endl;
419 if(infStd) stdRelShift = median;
422 for(
int rep(0); rep < ntot; rep++) {
423 if(fKappaRelShift[rep]>stdRelShift) {istd = rep;
break;}
425 imSigma = istd-
static_cast<int>(gSigma*ntot);
426 ipSigma = istd+
static_cast<int>(gSigma*ntot);
428 ipSigma += (-imSigma);
432 imSigma -= (ipSigma-ntot+1);
435 mSigma = stdRelShift-fKappaRelShift[imSigma];
436 pSigma = fKappaRelShift[ipSigma]-stdRelShift;
440 double minH(stdRelShift-3*mSigma), maxH(stdRelShift+3*pSigma);
441 if(minH < fKappaRelShift[0]) minH = fKappaRelShift[0];
442 if(maxH > fKappaRelShift[ntot-1]) maxH = fKappaRelShift[ntot-1];
443 TH1D histo(
"h",
"",nbins, minH, maxH);
444 for(
int rep(0); rep < ntot; rep++)
445 histo.Fill(fKappaRelShift[rep]);
446 histo.SetBinContent(1, histo.GetBinContent(1)+nbadk);
447 histo.SetBinContent(nbins, histo.GetBinContent(nbins)+histo.GetBinContent(nbins+1));
448 histo.SetMaximum(histo.GetMaximum()*1.2);
450 can.SaveAs(
"plots/test_"+label+
".pdf");
452 double mode(histo.GetBinLowEdge(histo.GetMaximumBin()));
453 cout<<
"Std kappa = "<<stdRelShift<<
"+"<<pSigma<<
"-"<<mSigma<<
". Mean = "<<mean
454 <<
". Mode = "<<mode<<
". Median = "<<median<<endl;
long getYieldErr(TChain &tree, TString cut, double &yield, double &uncertainty)
bool Contains(const std::string &text, const std::string &pattern)
double intGaus(double mean, double sigma, double minX, double maxX)
double calcKappaRelUnc(vector< vector< vector< int > > > &entries, vector< vector< vector< float > > > &weights, vector< float > &powers, float &mSigma, float &pSigma, TString label)
TString RoundNumber(double num, int decimals, double denom=1.)
TString ntuple_date("2015_05_25")
double gsl_ran_gamma(const double a, const double b, TRandom3 &rand)