File indexing completed on 2024-04-06 12:24:14
0001 #define LUMINOSITY 0.874
0002 #define NBINSPASS 24
0003 #define NBINSFAIL 6
0004 #include <iostream>
0005 #include <iomanip>
0006 #include <fstream>
0007
0008 ofstream effTextFile("efficiency.txt");
0009
0010
0011
0012 void SimplifiedElectronTagAndProbe(){
0013
0014
0015
0016 TCut preCut("");
0017 TCut cleanSC("probe_hadronicOverEm<0.15");
0018
0019 TCut cleanGsf("(probe_gsfEle_HoverE<0.15) && (probe_gsfEle_HoverE<0.15)");
0020 TCut ID95("probe_passingId");
0021 TCut NotID95(cleanGsf && "!probe_passingId");
0022 TCut NotPPass("!probe_passing");
0023 TCut PassAll("probe_passingALL");
0024 TCut NotPassAll("!probe_passingALL");
0025 TCut ID80("probe_passingId80");
0026 TCut NotID80(cleanGsf && "!probe_passingId80");
0027 TCut EMINUS("probe_gsfEle_charge<0");
0028 TCut EMINUSSC("tag_gsfEle_charge>0");
0029 TCut EPLUS("probe_gsfEle_charge>0");
0030 TCut EPLUSSC("tag_gsfEle_charge<0");
0031 TCut BARREL("abs(probe_sc_eta)<1.4442");
0032 TCut BARRELSC("abs(probe_eta)<1.4442");
0033 TCut ENDCAPS("abs(probe_sc_eta)>1.566");
0034 TCut ENDCAPSSC("abs(probe_eta)>1.566");
0035
0036
0037
0038 effTextFile << "probe type" << " efficiency " << " Npass" <<
0039 " Nfail" << endl;
0040
0041
0042
0043
0044
0045
0046
0047
0048 TCut GsfPass = preCut && cleanGsf;
0049 TCut GsfFail = cleanSC && preCut && NotPPass;
0050 ComputeEfficiency("Gsf", GsfPass, GsfFail);
0051 ComputeEfficiency("Gsf", GsfPass, GsfFail, "Barrel", BARREL, BARRELSC);
0052 ComputeEfficiency("Gsf", GsfPass, GsfFail, "Endcap", ENDCAPS, ENDCAPSSC);
0053 ComputeEfficiency("Gsf", GsfPass, GsfFail, "", "", "", "_eminus", EMINUS, EMINUSSC);
0054 ComputeEfficiency("Gsf", GsfPass, GsfFail, "", "", "", "_eplus", EPLUS, EPLUSSC);
0055 ComputeEfficiency("Gsf", GsfPass, GsfFail, "Barrel", BARREL, BARRELSC, "_eminus", EMINUS, EMINUSSC);
0056 ComputeEfficiency("Gsf", GsfPass, GsfFail, "Barrel", BARREL, BARRELSC, "_eplus", EPLUS, EPLUSSC);
0057 ComputeEfficiency("Gsf", GsfPass, GsfFail, "Endcap", ENDCAPS, ENDCAPSSC, "_eminus", EMINUS, EMINUSSC);
0058 ComputeEfficiency("Gsf", GsfPass, GsfFail, "Endcap", ENDCAPS, ENDCAPSSC, "_eplus", EPLUS, EPLUSSC);
0059 ComputeEfficiency("Gsf", GsfPass, GsfFail, "EndcapPlus", "probe_sc_eta>1.566", "probe_eta>1.566");
0060 ComputeEfficiency("Gsf", GsfPass, GsfFail, "EndcapMinus", "probe_sc_eta<-1.566", "probe_eta<-1.566");
0061
0062 cout << "########################################" << endl;
0063
0064
0065
0066
0067
0068
0069
0070
0071 TCut Id95Pass = preCut && ID95;
0072 TCut Id95Fail = preCut && NotID95;
0073 ComputeEfficiency("Id95", Id95Pass, Id95Fail);
0074 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "Barrel", BARREL, BARREL);
0075 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "Endcap", ENDCAPS, ENDCAPS);
0076 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "", "", "", "_eminus", EMINUS, EMINUS);
0077 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "", "", "", "_eplus", EPLUS, EPLUS);
0078 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "Barrel", BARREL, BARREL, "_eminus", EMINUS, EMINUS);
0079 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "Barrel", BARREL, BARREL, "_eplus", EPLUS, EPLUS);
0080 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "Endcap", ENDCAPS, ENDCAPS, "_eminus", EMINUS, EMINUS);
0081 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "Endcap", ENDCAPS, ENDCAPS, "_eplus", EPLUS, EPLUS);
0082 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "EndcapPlus", "probe_sc_eta>1.566", "probe_eta>1.566");
0083 ComputeEfficiency("Id95", Id95Pass, Id95Fail, "EndcapMinus", "probe_sc_eta<-1.566", "probe_eta<-1.566");
0084
0085 cout << "########################################" << endl;
0086
0087
0088
0089
0090
0091
0092
0093
0094 TCut Id80Pass = preCut && ID80;
0095 TCut Id80Fail = preCut && NotID80;
0096 ComputeEfficiency("Id80", Id80Pass, Id80Fail);
0097 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "Barrel", BARREL, BARREL);
0098 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "Endcap", ENDCAPS, ENDCAPS);
0099 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "", "", "", "_eminus", EMINUS, EMINUS);
0100 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "", "", "", "_eplus", EPLUS, EPLUS);
0101 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "Barrel", BARREL, BARREL, "_eminus", EMINUS, EMINUS);
0102 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "Barrel", BARREL, BARREL, "_eplus", EPLUS, EPLUS);
0103 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "Endcap", ENDCAPS, ENDCAPS, "_eminus", EMINUS, EMINUS);
0104 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "Endcap", ENDCAPS, ENDCAPS, "_eplus", EPLUS, EPLUS);
0105 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "EndcapPlus", "probe_sc_eta>1.566", "probe_eta>1.566");
0106 ComputeEfficiency("Id80", Id80Pass, Id80Fail, "EndcapMinus", "probe_sc_eta<-1.566", "probe_eta<-1.566");
0107
0108 cout << "########################################" << endl;
0109
0110
0111
0112
0113
0114
0115
0116
0117 TCut HLT95Pass = preCut && ID95 && PassAll;
0118 TCut HLT95Fail = preCut && ID80 && NotPassAll;
0119 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail);
0120 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "Barrel", BARREL, BARREL);
0121 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "Endcap", ENDCAPS, ENDCAPS);
0122 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "", "", "", "_eminus", EMINUS, EMINUS);
0123 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "", "", "", "_eplus", EPLUS, EPLUS);
0124 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "Barrel", BARREL, BARREL, "_eminus", EMINUS, EMINUS);
0125 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "Barrel", BARREL, BARREL, "_eplus", EPLUS, EPLUS);
0126 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "Endcap", ENDCAPS, ENDCAPS, "_eminus", EMINUS, EMINUS);
0127 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "Endcap", ENDCAPS, ENDCAPS, "_eplus", EPLUS, EPLUS);
0128 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "EndcapPlus", "probe_sc_eta>1.566", "probe_eta>1.566");
0129 ComputeEfficiency("HLT95", HLT95Pass, HLT95Fail, "EndcapMinus", "probe_sc_eta<-1.566", "probe_eta<-1.566");
0130
0131 cout << "########################################" << endl;
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141 TCut HLT80Pass = preCut && ID80 && PassAll;
0142 TCut HLT80Fail = preCut && ID80 && NotPassAll;
0143 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail);
0144 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "Barrel", BARREL, BARREL);
0145 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "Endcap", ENDCAPS, ENDCAPS);
0146 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "", "", "", "_eminus", EMINUS, EMINUS);
0147 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "", "", "", "_eplus", EPLUS, EPLUS);
0148 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "Barrel", BARREL, BARREL, "_eminus", EMINUS, EMINUS);
0149 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "Barrel", BARREL, BARREL, "_eplus", EPLUS, EPLUS);
0150 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "Endcap", ENDCAPS, ENDCAPS, "_eminus", EMINUS, EMINUS);
0151 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "Endcap", ENDCAPS, ENDCAPS, "_eplus", EPLUS, EPLUS);
0152 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "EndcapPlus", "probe_sc_eta>1.566", "probe_eta>1.566");
0153 ComputeEfficiency("HLT80", HLT80Pass, HLT80Fail, "EndcapMinus", "probe_sc_eta<-1.566", "probe_eta<-1.566");
0154
0155 cout << "########################################" << endl;
0156
0157 effTextFile.close();
0158 }
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170 void ComputeEfficiency(char* primaryLabel, TCut primaryCutPass,
0171 TCut primaryCutFail, char* secondaryLabel="",
0172 TCut secondaryCutPass="", TCut secondaryCutFail="",
0173 char* tertiaryLabel="",
0174 TCut tertiaryCutPass = "", TCut tertiaryCutFail = "")
0175 {
0176 TFile* f = new TFile("allTPtrees_836nb.root");
0177
0178 TTree* scTree = (TTree*) f->Get("PhotonToGsf/fitter_tree");
0179 TTree* gsfTree = (TTree*) f->Get("GsfToIso/fitter_tree");
0180 char namePass[50];
0181 char nameFail[50];
0182
0183 sprintf(namePass,"Zmass%sPass%s%s",primaryLabel,secondaryLabel,tertiaryLabel);
0184 sprintf(nameFail,"Zmass%sFail%s%s",primaryLabel,secondaryLabel,tertiaryLabel);
0185 TH1F* histPass = createHistogram(namePass, 30);
0186 TH1F* histFail = createHistogram(nameFail, 12);
0187 gsfTree->Draw("1.02*mass>>"+TString(namePass), primaryCutPass && secondaryCutPass &&
0188 tertiaryCutPass,"goff");
0189 TString checkForSCTree(primaryLabel);
0190 TString plotVar = "1.03*mass>>"+TString(nameFail);
0191 if(checkForSCTree.Contains("Gsf"))
0192 scTree->Draw(plotVar,primaryCutFail && secondaryCutFail && tertiaryCutFail,"goff");
0193 else
0194 gsfTree->Draw(plotVar,primaryCutFail && secondaryCutFail && tertiaryCutFail,"goff");
0195 ComputeEfficiency(*histPass, *histFail);
0196
0197 delete histPass;
0198 delete histFail;
0199 }
0200
0201
0202
0203
0204
0205
0206 TH1F* createHistogram(char* name, int nbins=12) {
0207 TH1F* hist = new TH1F(name,name, nbins, 60, 120);
0208 hist->SetTitle("");
0209 char temp[100];
0210 sprintf(temp, "Events / %.1f GeV/c^{2}", 60./nbins);
0211 hist->GetXaxis()->SetTitle("m_{ee} (GeV/c^{2})");
0212 hist->GetYaxis()->SetTitle(temp);
0213 return hist;
0214 }
0215
0216
0217
0218
0219
0220
0221 double ErrorInProduct(double x, double errx, double y,
0222 double erry, double corr) {
0223 double xFrErr = errx/x;
0224 double yFrErr = erry/y;
0225 return sqrt(xFrErr**2 +yFrErr**2 + 2.0*corr*xFrErr*yFrErr)*x*y;
0226 }
0227
0228
0229 void ComputeEfficiency( TH1& hist_pass, TH1& hist_fail)
0230 {
0231
0232
0233 TString effType = hist_pass.GetName();
0234 effType.ReplaceAll("Zmass","");
0235 effType.ReplaceAll("Pass","");
0236
0237
0238 RooRealVar* rooMass_ = new RooRealVar("Mass","m_{ee}",60.0, 120.0, "GeV/c^{2}");
0239 RooRealVar Mass = *rooMass_;
0240
0241
0242
0243 RooCategory sample("sample","") ;
0244 sample.defineType("Pass", 1) ;
0245 sample.defineType("Fail", 2) ;
0246
0247
0248 gROOT->cd();
0249
0250
0251
0252 RooDataHist* data_pass = new RooDataHist("data_pass","data_pass",
0253 RooArgList(Mass), &hist_pass);
0254 RooDataHist* data_fail = new RooDataHist("data_fail","data_fail",
0255 RooArgList(Mass), &hist_fail);
0256
0257 RooDataHist* data = new RooDataHist( "fitData","fitData",
0258 RooArgList(Mass),RooFit::Index(sample),
0259 RooFit::Import("Pass",*data_pass), RooFit::Import("Fail",*data_fail) );
0260
0261
0262
0263
0264
0265
0266 Zeelineshape_file = new TFile("Zlineshapes.root", "READ");
0267 TH1* histbbpass = (TH1D*) Zeelineshape_file->Get("pass_BB");
0268 TH1* histebpass = (TH1D*) Zeelineshape_file->Get("pass_BE");
0269 TH1* histeepass = (TH1D*) Zeelineshape_file->Get("pass_EE");
0270 TH1D* th1 = (TH1D*) histbbpass->Clone("th1");
0271 th1->Add(histebpass);
0272 th1->Add(histeepass);
0273 RooDataHist* rdh = new RooDataHist("rdh","", Mass, th1);
0274 RooHistPdf* signalShapePdf = new RooHistPdf("signalShapePdf", "",
0275 RooArgSet(Mass), *rdh);
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309 RooRealVar* bkgShape = new RooRealVar("bkgShape","bkgShape",-0.2,-10.,0.);
0310 RooExponential* bkgShapePdf = new RooExponential("bkgShapePdf","bkgShapePdf",Mass, *bkgShape);
0311
0312
0313
0314 RooRealVar* numSignal = new RooRealVar("numSignal","numSignal", 4000.0, 0.0, 100000.0);
0315 RooRealVar* eff = new RooRealVar("eff","eff", 0.9, 0.5, 1.0);
0316 RooFormulaVar* nSigPass = new RooFormulaVar("nSigPass", "eff*numSignal", RooArgList(*eff,*numSignal));
0317 RooFormulaVar* nSigFail = new RooFormulaVar("nSigFail", "(1.0-eff)*numSignal", RooArgList(*eff,*numSignal));
0318 RooRealVar* nBkgPass = new RooRealVar("nBkgPass","nBkgPass", 1000.0, 0.0, 10000000.0);
0319 RooRealVar* nBkgFail = new RooRealVar("nBkgFail","nBkgFail", 1000.0, 0.0, 10000000.0);
0320
0321
0322 RooArgList componentsPass(*signalShapePdf,*bkgShapePdf);
0323 RooArgList yieldsPass(*nSigPass, *nBkgPass);
0324
0325 RooArgList componentsFail(*signalShapePdf,*bkgShapePdf);
0326 RooArgList yieldsFail(*nSigFail, *nBkgFail);
0327
0328
0329 RooAddPdf pdfPass("pdfPass","extended sum pdf", componentsPass, yieldsPass);
0330 RooAddPdf pdfFail("pdfFail","extended sum pdf", componentsFail, yieldsFail);
0331
0332
0333
0334
0335 RooSimultaneous totalPdf("totalPdf","totalPdf", sample);
0336 totalPdf.addPdf(pdfPass,"Pass");
0337 totalPdf.Print();
0338 totalPdf.addPdf(pdfFail,"Fail");
0339 totalPdf.Print();
0340
0341
0342
0343 RooFitResult *fitResult = totalPdf.fitTo(*data, RooFit::Save(true),
0344 RooFit::Extended(true), RooFit::PrintLevel(-1));
0345 fitResult->Print("v");
0346
0347 double numerator = nSigPass->getVal();
0348 double nfails = nSigFail->getVal();
0349 double denominator = numerator + nfails;
0350
0351
0352
0353
0354
0355 gROOT->ProcessLine(".L ~/tdrstyle.C");
0356 setTDRStyle();
0357 tdrStyle->SetErrorX(0.5);
0358 tdrStyle->SetPadLeftMargin(0.19);
0359 tdrStyle->SetPadRightMargin(0.10);
0360 tdrStyle->SetPadBottomMargin(0.15);
0361 tdrStyle->SetLegendBorderSize(0);
0362 tdrStyle->SetTitleYOffset(1.5);
0363 RooAbsData::ErrorType errorType = RooAbsData::Poisson;
0364
0365 TString cname = TString("fit_") + hist_pass.GetName();
0366 TCanvas* c = new TCanvas(cname,cname,500,500);
0367 RooPlot* frame1 = Mass.frame();
0368 frame1->SetMinimum(0);
0369 data_pass->plotOn(frame1,RooFit::DataError(errorType));
0370 pdfPass.plotOn(frame1,RooFit::ProjWData(*data_pass),
0371 RooFit::Components(*bkgShapePdf),RooFit::LineColor(kRed));
0372 pdfPass.plotOn(frame1,RooFit::ProjWData(*data_pass));
0373 frame1->Draw("e0");
0374
0375 TPaveText *plotlabel = new TPaveText(0.23,0.87,0.43,0.92,"NDC");
0376 plotlabel->SetTextColor(kBlack);
0377 plotlabel->SetFillColor(kWhite);
0378 plotlabel->SetBorderSize(0);
0379 plotlabel->SetTextAlign(12);
0380 plotlabel->SetTextSize(0.03);
0381 plotlabel->AddText("CMS Preliminary 2010");
0382 TPaveText *plotlabel2 = new TPaveText(0.23,0.82,0.43,0.87,"NDC");
0383 plotlabel2->SetTextColor(kBlack);
0384 plotlabel2->SetFillColor(kWhite);
0385 plotlabel2->SetBorderSize(0);
0386 plotlabel2->SetTextAlign(12);
0387 plotlabel2->SetTextSize(0.03);
0388 plotlabel2->AddText("#sqrt{s} = 7 TeV");
0389 TPaveText *plotlabel3 = new TPaveText(0.23,0.75,0.43,0.80,"NDC");
0390 plotlabel3->SetTextColor(kBlack);
0391 plotlabel3->SetFillColor(kWhite);
0392 plotlabel3->SetBorderSize(0);
0393 plotlabel3->SetTextAlign(12);
0394 plotlabel3->SetTextSize(0.03);
0395 char temp[100];
0396 sprintf(temp, "%.4f", LUMINOSITY);
0397 plotlabel3->AddText((string("#int#font[12]{L}dt = ") +
0398 temp + string(" pb^{ -1}")).c_str());
0399 TPaveText *plotlabel4 = new TPaveText(0.6,0.82,0.8,0.87,"NDC");
0400 plotlabel4->SetTextColor(kBlack);
0401 plotlabel4->SetFillColor(kWhite);
0402 plotlabel4->SetBorderSize(0);
0403 plotlabel4->SetTextAlign(12);
0404 plotlabel4->SetTextSize(0.03);
0405 double nsig = numSignal->getVal();
0406 double nErr = numSignal->getError();
0407 double e = eff->getVal();
0408 double eErr = eff->getError();
0409 double corr = fitResult->correlation(*eff, *numSignal);
0410 double err = ErrorInProduct(nsig, nErr, e, eErr, corr);
0411 sprintf(temp, "Signal = %.2f #pm %.2f", nSigPass->getVal(), err);
0412 plotlabel4->AddText(temp);
0413 TPaveText *plotlabel5 = new TPaveText(0.6,0.77,0.8,0.82,"NDC");
0414 plotlabel5->SetTextColor(kBlack);
0415 plotlabel5->SetFillColor(kWhite);
0416 plotlabel5->SetBorderSize(0);
0417 plotlabel5->SetTextAlign(12);
0418 plotlabel5->SetTextSize(0.03);
0419 sprintf(temp, "Bkg = %.2f #pm %.2f", nBkgPass->getVal(), nBkgPass->getError());
0420 plotlabel5->AddText(temp);
0421 TPaveText *plotlabel6 = new TPaveText(0.6,0.87,0.8,0.92,"NDC");
0422 plotlabel6->SetTextColor(kBlack);
0423 plotlabel6->SetFillColor(kWhite);
0424 plotlabel6->SetBorderSize(0);
0425 plotlabel6->SetTextAlign(12);
0426 plotlabel6->SetTextSize(0.03);
0427 plotlabel6->AddText("Passing probes");
0428 TPaveText *plotlabel7 = new TPaveText(0.6,0.72,0.8,0.77,"NDC");
0429 plotlabel7->SetTextColor(kBlack);
0430 plotlabel7->SetFillColor(kWhite);
0431 plotlabel7->SetBorderSize(0);
0432 plotlabel7->SetTextAlign(12);
0433 plotlabel7->SetTextSize(0.03);
0434 sprintf(temp, "Eff = %.3f #pm %.3f", eff->getVal(), eff->getErrorHi());
0435 plotlabel7->AddText(temp);
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447 plotlabel4->Draw();
0448 plotlabel5->Draw();
0449 plotlabel6->Draw();
0450 plotlabel7->Draw();
0451
0452
0453 c->SaveAs( cname + TString(".eps"));
0454 c->SaveAs( cname + TString(".gif"));
0455 c->SaveAs( cname + TString(".root"));
0456 delete c;
0457
0458
0459 cname = TString("fit_") + hist_fail.GetName();
0460 TCanvas* c2 = new TCanvas(cname,cname,500,500);
0461 RooPlot* frame2 = Mass.frame();
0462 frame2->SetMinimum(0);
0463 data_fail->plotOn(frame2,RooFit::DataError(errorType));
0464 pdfFail.plotOn(frame2,RooFit::ProjWData(*data_fail),
0465 RooFit::Components(*bkgShapePdf),RooFit::LineColor(kRed));
0466 pdfFail.plotOn(frame2,RooFit::ProjWData(*data_fail));
0467 frame2->Draw("e0");
0468
0469 TPaveText *plotlabel = new TPaveText(0.23,0.87,0.43,0.92,"NDC");
0470 plotlabel->SetTextColor(kBlack);
0471 plotlabel->SetFillColor(kWhite);
0472 plotlabel->SetBorderSize(0);
0473 plotlabel->SetTextAlign(12);
0474 plotlabel->SetTextSize(0.03);
0475 plotlabel->AddText("CMS Preliminary 2010");
0476 TPaveText *plotlabel2 = new TPaveText(0.23,0.82,0.43,0.87,"NDC");
0477 plotlabel2->SetTextColor(kBlack);
0478 plotlabel2->SetFillColor(kWhite);
0479 plotlabel2->SetBorderSize(0);
0480 plotlabel2->SetTextAlign(12);
0481 plotlabel2->SetTextSize(0.03);
0482 plotlabel2->AddText("#sqrt{s} = 7 TeV");
0483 TPaveText *plotlabel3 = new TPaveText(0.23,0.75,0.43,0.80,"NDC");
0484 plotlabel3->SetTextColor(kBlack);
0485 plotlabel3->SetFillColor(kWhite);
0486 plotlabel3->SetBorderSize(0);
0487 plotlabel3->SetTextAlign(12);
0488 plotlabel3->SetTextSize(0.03);
0489 char temp[100];
0490 sprintf(temp, "%.4f", LUMINOSITY);
0491 plotlabel3->AddText((string("#int#font[12]{L}dt = ") +
0492 temp + string(" pb^{ -1}")).c_str());
0493 TPaveText *plotlabel4 = new TPaveText(0.6,0.82,0.8,0.87,"NDC");
0494 plotlabel4->SetTextColor(kBlack);
0495 plotlabel4->SetFillColor(kWhite);
0496 plotlabel4->SetBorderSize(0);
0497 plotlabel4->SetTextAlign(12);
0498 plotlabel4->SetTextSize(0.03);
0499 double err = ErrorInProduct(nsig, nErr, 1.0-e, eErr, corr);
0500 sprintf(temp, "Signal = %.2f #pm %.2f", nSigFail->getVal(), err);
0501 plotlabel4->AddText(temp);
0502 TPaveText *plotlabel5 = new TPaveText(0.6,0.77,0.8,0.82,"NDC");
0503 plotlabel5->SetTextColor(kBlack);
0504 plotlabel5->SetFillColor(kWhite);
0505 plotlabel5->SetBorderSize(0);
0506 plotlabel5->SetTextAlign(12);
0507 plotlabel5->SetTextSize(0.03);
0508 sprintf(temp, "Bkg = %.2f #pm %.2f", nBkgFail->getVal(), nBkgFail->getError());
0509 plotlabel5->AddText(temp);
0510 TPaveText *plotlabel6 = new TPaveText(0.6,0.87,0.8,0.92,"NDC");
0511 plotlabel6->SetTextColor(kBlack);
0512 plotlabel6->SetFillColor(kWhite);
0513 plotlabel6->SetBorderSize(0);
0514 plotlabel6->SetTextAlign(12);
0515 plotlabel6->SetTextSize(0.03);
0516 plotlabel6->AddText("Failing probes");
0517 TPaveText *plotlabel7 = new TPaveText(0.6,0.72,0.8,0.77,"NDC");
0518 plotlabel7->SetTextColor(kBlack);
0519 plotlabel7->SetFillColor(kWhite);
0520 plotlabel7->SetBorderSize(0);
0521 plotlabel7->SetTextAlign(12);
0522 plotlabel7->SetTextSize(0.03);
0523 sprintf(temp, "Eff = %.3f #pm %.3f", eff->getVal(), eff->getErrorHi(), eff->getErrorLo());
0524 plotlabel7->AddText(temp);
0525
0526
0527
0528
0529 plotlabel4->Draw();
0530 plotlabel5->Draw();
0531 plotlabel6->Draw();
0532 plotlabel7->Draw();
0533
0534 c2->SaveAs( cname + TString(".eps"));
0535 c2->SaveAs( cname + TString(".gif"));
0536 c2->SaveAs( cname + TString(".root"));
0537 delete c2;
0538
0539
0540 effType.ReplaceAll("Gsf","");
0541 effType.ReplaceAll("Id95_","");
0542 effType.ReplaceAll("Id95","");
0543 effType.ReplaceAll("Id80_","");
0544 effType.ReplaceAll("Id80","");
0545 effType.ReplaceAll("HLT95_","");
0546 effType.ReplaceAll("HLT95","");
0547 effType.ReplaceAll("HLT80_","");
0548 effType.ReplaceAll("HLT80","");
0549
0550 char* effTypeToPrint = (char*) effType;
0551
0552 effTextFile << effTypeToPrint << " "
0553 << setiosflags(ios::fixed) << setprecision(4) << eff.getVal()
0554 << " + " << eff->getErrorHi() << " - " << eff->getErrorLo()
0555 << setiosflags(ios::fixed) << setprecision(2)
0556 << " " << numerator << " " << nfails << endl;
0557
0558 }
0559
0560
0561 double ErrorInProduct(double x, double errx, double y,
0562 double erry, double corr) {
0563 double xFrErr = errx/x;
0564 double yFrErr = erry/y;
0565 return sqrt(xFrErr**2 +yFrErr**2 + 2.0*corr*xFrErr*yFrErr)*x*y;
0566 }
0567
0568
0569
0570
0571
0572
0573 void ClopperPearsonLimits(double numerator, double denominator,
0574 double &lowerLimit, double &upperLimit, const double CL_low=1.0,
0575 const double CL_high=1.0)
0576 {
0577
0578
0579 double ratio = numerator/denominator;
0580
0581
0582 if(numerator==0) lowerLimit = 0.0;
0583 else {
0584 double v=ratio/2;
0585 double vsL=0;
0586 double vsH=ratio;
0587 double p=CL_low/100;
0588 while((vsH-vsL)>1e-5) {
0589 if(BinP(denominator,v,numerator,denominator)>p)
0590 { vsH=v; v=(vsL+v)/2; }
0591 else { vsL=v; v=(v+vsH)/2; }
0592 }
0593 lowerLimit = v;
0594 }
0595
0596
0597 if(numerator==denominator) upperLimit = 1.0;
0598 else {
0599 double v=(1+ratio)/2;
0600 double vsL=ratio;
0601 double vsH=1;
0602 double p=CL_high/100;
0603 while((vsH-vsL)>1e-5) {
0604 if(BinP(denominator,v,0,numerator)<p) { vsH=v; v=(vsL+v)/2; }
0605 else { vsL=v; v=(v+vsH)/2; }
0606 }
0607 upperLimit = v;
0608 }
0609 }
0610
0611
0612
0613
0614 double BinP(int N, double p, int x1, int x2) {
0615 double q=p/(1-p);
0616 int k=0;
0617 double v = 1;
0618 double s=0;
0619 double tot=0.0;
0620 while(k<=N) {
0621 tot=tot+v;
0622 if(k>=x1 & k<=x2) { s=s+v; }
0623 if(tot>1e30){s=s/1e30; tot=tot/1e30; v=v/1e30;}
0624 k=k+1;
0625 v=v*q*(N+1-k)/k;
0626 }
0627 return s/tot;
0628 }
0629
0630
0631