void plotLimit(string outputDir="./", TString inputs="", TString inputs_blinded="", TString inputXSec="", bool strengthLimit=true, bool blind=false, double energy=7, double luminosity=5.035, TString legendName="ee and #mu#mu channels") { setTDRStyle(); gStyle->SetPadTopMargin (0.05); gStyle->SetPadBottomMargin(0.12); gStyle->SetPadRightMargin (0.16); gStyle->SetPadLeftMargin (0.14); gStyle->SetTitleSize(0.04, "XYZ"); gStyle->SetTitleXOffset(1.1); gStyle->SetTitleYOffset(1.45); gStyle->SetPalette(1); gStyle->SetNdivisions(505); //get the limits from the tree TFile* file = TFile::Open(inputs); printf("Looping on %s\n",inputs.Data()); if(!file) return; if(file->IsZombie()) return; TFile* file_blinded = TFile::Open(inputs_blinded); printf("Looping on %s\n",inputs_blinded.Data()); if(!file_blinded) return; if(file_blinded->IsZombie()) return; TTree* tree_blinded = (TTree*)file_blinded->Get("limit"); tree_blinded->GetBranch("mh" )->SetAddress(&Tmh ); tree_blinded->GetBranch("limit" )->SetAddress(&Tlimit ); tree_blinded->GetBranch("limitErr" )->SetAddress(&TlimitErr); tree_blinded->GetBranch("quantileExpected")->SetAddress(&TquantExp); TGraph* ExpLimitm2 = getLimitGraph(tree_blinded,0.025); TGraph* ExpLimitm1 = getLimitGraph(tree_blinded,0.160); TGraph* ExpLimit = getLimitGraph(tree_blinded,0.500); TGraph* ExpLimitp1 = getLimitGraph(tree_blinded,0.840); TGraph* ExpLimitp2 = getLimitGraph(tree_blinded,0.975); file_blinded->Close(); TTree* tree = (TTree*)file->Get("limit"); tree->GetBranch("mh" )->SetAddress(&Tmh ); tree->GetBranch("limit" )->SetAddress(&Tlimit ); tree->GetBranch("limitErr" )->SetAddress(&TlimitErr); tree->GetBranch("quantileExpected")->SetAddress(&TquantExp); TGraph* ObsLimit = getLimitGraph(tree,-1 ); file->Close(); FILE* pFileSStrenght = fopen((outputDir+"SignalStrenght").c_str(),"w"); std::cout << "Printing Signal Strenght" << std::endl; for(int i=0;i<ExpLimit->GetN();i++){ double M = ExpLimit->GetX()[i]; std::cout << "Mass: " << M << "; ExpLimit: " << ExpLimit->Eval(M) << std::endl; printf("$%8.6E$ & $%8.6E$ & $[%8.6E,%8.6E]$ & $[%8.6E,%8.6E]$ \\\\\\hline\n",M, ExpLimit->Eval(M), ExpLimitm1->Eval(M), ExpLimitp1->Eval(M), ExpLimitm2->Eval(M), ExpLimitp2->Eval(M)); fprintf(pFileSStrenght, "$%8.6E$ & $%8.6E$ & $[%8.6E,%8.6E]$ & $[%8.6E,%8.6E]$ & $%8.6E$ \\\\\\hline\n",M, ExpLimit->Eval(M), ExpLimitm1->Eval(M), ExpLimitp1->Eval(M), ExpLimitm2->Eval(M), ExpLimitp2->Eval(M), ObsLimit->Eval(M)); if(int(ExpLimit->GetX()[i])%50!=0)continue; //printf("%f ",ObsLimit->Eval(M)); }printf("\n"); fclose(pFileSStrenght); //get the pValue inputs = inputs.ReplaceAll("/LimitTree", "/PValueTree"); file = TFile::Open(inputs); printf("Looping on %s\n",inputs.Data()); if(!file) return; if(file->IsZombie()) return; tree = (TTree*)file->Get("limit"); tree->GetBranch("limit" )->SetAddress(&Tlimit ); TGraph* pValue = getLimitGraph(tree,-1); file->Close(); //make TH Cross-sections string suffix = outputDir; TGraph* THXSec = Hxswg::utils::getXSec(outputDir); scaleGraph(THXSec, 1000); //convert cross-section to fb double cprime=1.0; double brnew=0.0; double XSecScaleFactor = 1.0; if(suffix.find("_cp")!=string::npos){ sscanf(suffix.c_str()+suffix.find("_cp"), "_cp%lf_brn%lf", &cprime, &brnew); XSecScaleFactor = pow(cprime,2) * (1-brnew); } //XSecScaleFactor = 0.001; //pb to fb scaleGraph(THXSec, XSecScaleFactor); string prod = "pp_SM"; if(outputDir.find("ggH")!=std::string::npos)prod="gg"; if(outputDir.find("qqH")!=std::string::npos)prod="qq"; if(outputDir.find("ppH")!=std::string::npos)prod="pp"; strengthLimit = false; if(prod=="pp_SM")strengthLimit=true; //TGraph *XSecMELA = Hxswg::utils::getXSecMELA(cprime); //Hxswg::utils::multiplyGraph( ObsLimit, XSecMELA); //Hxswg::utils::multiplyGraph( ExpLimitm2, XSecMELA); //Hxswg::utils::multiplyGraph( ExpLimitm1, XSecMELA); //Hxswg::utils::multiplyGraph( ExpLimit, XSecMELA); //Hxswg::utils::multiplyGraph( ExpLimitp1, XSecMELA); //Hxswg::utils::multiplyGraph( ExpLimitp2, XSecMELA); //Scale exclusion XSec in fb scaleGraph(ObsLimit , 0.001); //pb to fb scaleGraph(ExpLimitm2, 0.001); //pb to fb scaleGraph(ExpLimitm1, 0.001); //pb to fb scaleGraph(ExpLimit , 0.001); //pb to fb scaleGraph(ExpLimitp1, 0.001); //pb to fb scaleGraph(ExpLimitp2, 0.001); //pb to fb //scal eTH cross-section and limits according to scale factor //this only apply to NarrowResonnance case if(strengthLimit){ Hxswg::utils::divideGraph(ObsLimit , THXSec); Hxswg::utils::divideGraph(ExpLimitm2 , THXSec); Hxswg::utils::divideGraph(ExpLimitm1 , THXSec); Hxswg::utils::divideGraph(ExpLimit , THXSec); Hxswg::utils::divideGraph(ExpLimitp1 , THXSec); Hxswg::utils::divideGraph(ExpLimitp2 , THXSec); Hxswg::utils::divideGraph(THXSec , THXSec); } //limits in terms of signal strength TCanvas* c = new TCanvas("c", "c",800,800); c->SetGridx(); c->SetGridy(); TH1F* framework = new TH1F("Graph","Graph",1,strengthLimit?199:199,2500); //3000); framework->SetStats(false); framework->SetTitle(""); framework->GetXaxis()->SetTitle("M_{H} [GeV]"); framework->GetYaxis()->SetTitleOffset(1.70); if(strengthLimit){ framework->GetYaxis()->SetTitle("#mu = #sigma_{95%} / #sigma_{th}"); framework->GetYaxis()->SetRangeUser(1E-4,1E3); c->SetLogy(true); }else{ framework->GetYaxis()->SetTitle((string("#sigma_{95%} (") + prod +" #rightarrow H #rightarrow ZZ) (pb)").c_str()); framework->GetYaxis()->SetRangeUser(1E-3,1E3); c->SetLogy(true); } framework->GetXaxis()->SetLabelOffset(0.007); framework->GetXaxis()->SetLabelSize(0.03); framework->GetXaxis()->SetTitleOffset(1.0); framework->GetXaxis()->SetTitleFont(42); framework->GetXaxis()->SetTitleSize(0.035); framework->GetYaxis()->SetLabelFont(42); framework->GetYaxis()->SetLabelOffset(0.007); framework->GetYaxis()->SetLabelSize(0.03); framework->GetYaxis()->SetTitleOffset(1.3); framework->GetYaxis()->SetTitleFont(42); framework->GetYaxis()->SetTitleSize(0.035); framework->Draw(); TGraph* TGObsLimit = ObsLimit; TGObsLimit->SetLineWidth(2); TGraph* TGExpLimit = ExpLimit; TGExpLimit->SetLineWidth(2); TGExpLimit->SetLineStyle(2); TCutG* TGExpLimit1S = GetErrorBand("1S", ExpLimitm1, ExpLimitp1); TCutG* TGExpLimit2S = GetErrorBand("2S", ExpLimitm2, ExpLimitp2); TGExpLimit2S->SetFillColor(5); THXSec->SetLineWidth(2); THXSec->SetLineStyle(1); THXSec->SetLineColor(4); TGExpLimit->SetLineColor(1); TGExpLimit->SetLineStyle(2); TGObsLimit->SetLineWidth(2); TGObsLimit->SetMarkerStyle(20); TGExpLimit2S->Draw("fc same"); TGExpLimit1S->Draw("fc same"); if(!blind) TGObsLimit->Draw("same P"); TGExpLimit->Draw("same c"); /*if(strengthLimit){ TLine* SMLine = new TLine(framework->GetXaxis()->GetXmin(),1.0,framework->GetXaxis()->GetXmax(),1.0); SMLine->SetLineWidth(2); SMLine->SetLineStyle(1); SMLine->SetLineColor(4); SMLine->Draw("same C"); }else{ THXSec->Draw("same C"); }*/ utils::root::DrawPreliminary(luminosity, energy, c); TLegend* LEG = new TLegend(0.55,0.75,0.85,0.95); LEG->SetHeader(""); LEG->SetFillColor(0); LEG->SetFillStyle(0); LEG->SetTextFont(42); LEG->SetBorderSize(0); //LEG->AddEntry(THXSec , "Th prediction" ,"L"); LEG->AddEntry(TGExpLimit , "median expected" ,"L"); LEG->AddEntry(TGExpLimit1S , "expected #pm 1#sigma" ,"F"); LEG->AddEntry(TGExpLimit2S , "expected #pm 2#sigma" ,"F"); if(!blind) LEG->AddEntry(TGObsLimit , "observed" ,"LP"); LEG->Draw(); c->RedrawAxis(); c->SaveAs((outputDir+"Limit.png").c_str()); c->SaveAs((outputDir+"Limit.C").c_str()); c->SaveAs((outputDir+"Limit.pdf").c_str()); //save a summary of the limits FILE* pFileSum = fopen((outputDir+"LimitSummary").c_str(),"w"); for(int i=0;i<TGExpLimit->GetN();i++){ double M = ExpLimit->GetX()[i]; fprintf(pFileSum, "$%8.6E$ & $%8.6E$ & $[%8.6E,%8.6E]$ & $[%8.6E,%8.6E]$ & $%8.6E$ & Th=$%8.6E$ & pValue=$%8.6E$\\\\\\hline\n",M, ExpLimit->Eval(M), ExpLimitm1->Eval(M), ExpLimitp1->Eval(M), ExpLimitm2->Eval(M), ExpLimitp2->Eval(M), ObsLimit->Eval(M), (THXSec!=NULL)?THXSec->Eval(M):-1, pValue->Eval(M)); if(int(ExpLimit->GetX()[i])%50!=0)continue; printf("%f ",ObsLimit->Eval(M)); }printf("\n"); fclose(pFileSum); pFileSum = fopen((outputDir+"LimitRange").c_str(),"w"); fprintf(pFileSum, "EXPECTED LIMIT --> "); printLimits(pFileSum,TGExpLimit, TGExpLimit->GetX()[0], TGExpLimit->GetX()[TGExpLimit->GetN()-1]); if(!blind) fprintf(pFileSum, "OBSERVED LIMIT --> "); printLimits(pFileSum,TGObsLimit, TGObsLimit->GetX()[0], TGObsLimit->GetX()[TGObsLimit->GetN()-1]); fprintf(pFileSum, "Exp Limits for Model are: "); for(int i=0;i<TGExpLimit->GetN();i++){if(int(TGExpLimit->GetX()[i])%50==0) fprintf(pFileSum, "%f+-%f ",TGExpLimit->GetY()[i], (ExpLimitp1->GetY()[i]-ExpLimitm1->GetY()[i])/2.0);}fprintf(pFileSum,"\n"); if(!blind) { fprintf(pFileSum, "Obs Limits for Model are: "); for(int i=0;i<TGObsLimit->GetN();i++){if(int(TGObsLimit->GetX()[i])%50==0) fprintf(pFileSum, "%f ",TGObsLimit->GetY()[i]);}fprintf(pFileSum,"\n"); } fclose(pFileSum); }
void plotRatio(int cbin, TString infname, TString DataPF, TString mix, bool useWeight, bool drawXLabel, bool drawLeg) { TString cut="et1>120&& et1<2000 && et2>50 && dphi>3.14159/3*2&&(et1-et2)/(et1+et2)<0.55 "; TString cut2="et1>120&& et1<2000 && et2>50 && dphi>3.14159/3*2&&(et1-et2)/(et1+et2)<0.55 "; TString cstring = ""; if(cbin==0) { cstring = "0-10%"; cut+=" && (bin>=0 && bin<4 || bin==-1)"; cut2+=" &&(bin>=0 && bin<4 || bin==-1)"; } else if (cbin==1) { cstring = "10-20%"; cut+=" && (bin>=4 && bin<8 || bin==-1)"; cut2+=" && (bin>=4 && bin<8 || bin==-1)"; } else if (cbin==2) { cstring = "20-30%"; cut+=" && (bin>=8 && bin<12 || bin==-1)"; cut2+=" && (bin>=8 && bin<12 || bin==-1)"; } else if (cbin==3) { cstring = "30-50%"; cut+=" && (bin>=12 && bin<20 || bin==-1)"; cut2+=" && (bin>=12 && bin<20 || bin==-1)"; } else { cstring = "50-100%"; cut+=" && (bin>=20 && bin<40 || bin==-1)"; cut2+=" && (bin>=20 && bin<40 || bin==-1)"; } // open the data file TFile *inf = new TFile(infname.Data()); TTree *nt =(TTree*)inf->FindObjectAny("nt"); // open the DataPF (MC) file TFile *infDataPF = new TFile(DataPF.Data()); TTree *ntDataPF = (TTree*) infDataPF->FindObjectAny("nt"); // open the datamix file TFile *infMix = new TFile(mix.Data()); TTree *ntMix =(TTree*)infMix->FindObjectAny("nt"); // Variable Aj char *aj = "(et1-et2)/(et1+et2)"; const int nBin = 13; double bins[nBin+1]={0,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,1}; // projection histogram TH1D *h = new TH1D("h","",nBin,bins); TH1D *hTmp = new TH1D("hTmp","",nBin,bins); TH1D *hEmbedded = new TH1D("hEmbedded","",nBin,bins); TH1D *hDataMix = new TH1D("hDataMix","",nBin,bins); nt->Draw(Form("%s>>h",aj),Form("(%s)*weight",cut2.Data())); if (useWeight) { // use the weight value caluculated by Matt's analysis macro ntDataPF->Draw(Form("%s>>hEmbedded",aj),Form("(%s)",cut.Data())); ntMix->Draw(Form("%s>>hDataMix",aj),Form("(%s)*weight",cut.Data())); } else { // ignore centrality reweighting ntDataPF->Draw(Form("%s>>hEmbedded",aj),Form("(%s)",cut.Data())); ntMix->Draw(Form("%s>>hDataMix",aj),Form("(%s)",cut.Data())); } // calculate the statistical error and normalize h->Sumw2(); h->Scale(1./h->Integral(0,20)); h->SetMarkerStyle(20); hEmbedded->Sumw2(); hEmbedded->Scale(1./hEmbedded->Integral(0,20)); hEmbedded->SetLineColor(kBlue); hEmbedded->SetFillColor(kAzure-8); hEmbedded->SetFillStyle(3005); hEmbedded->SetStats(0); if(drawXLabel) { hEmbedded->SetXTitle("A_{J} = (p_{T}^{j1}-p_{T}^{j2})/(p_{T}^{j1}+p_{T}^{j2})"); h->SetXTitle("A_{J} = (p_{T}^{j1}-p_{T}^{j2})/(p_{T}^{j1}+p_{T}^{j2})"); } h->GetXaxis()->SetLabelSize(20); h->GetXaxis()->SetLabelFont(43); h->GetXaxis()->SetTitleSize(22); h->GetXaxis()->SetTitleFont(43); h->GetXaxis()->SetTitleOffset(1.5); h->GetXaxis()->CenterTitle(); h->GetXaxis()->SetNdivisions(905,true); h->GetYaxis()->SetLabelSize(20); h->GetYaxis()->SetLabelFont(43); h->GetYaxis()->SetTitleSize(20); h->GetYaxis()->SetTitleFont(43); h->GetYaxis()->SetTitleOffset(2.5); h->GetYaxis()->CenterTitle(); h->SetAxisRange(0,0.3,"Y"); h->SetMarkerColor(2); h->SetYTitle("Ratio"); hEmbedded->SetYTitle("Ratio"); hDataMix->Sumw2(); hDataMix->Scale(1./hDataMix->Integral(0,20)); hDataMix->SetLineColor(kRed); hDataMix->SetFillColor(kRed-9); hDataMix->SetFillStyle(3004); h->SetAxisRange(0,5,"Y"); hEmbedded->SetAxisRange(0,10,"Y"); h->Divide(hDataMix); hEmbedded->Divide(hDataMix); h->Draw(""); TH1D *hErr = getErrorBand(h); double systematicErrorResolution[nBin] = {0.06,0.05,0.04,0.04,0.04,0.06,0.1,0.18,0.3,0.5,0.5}; double systematicErrorScale[nBin] = {0.06,0.05,0.04,0.03,0.02,0.02,0.03,0.04,0.05,0.08,0.1}; double systematicErrorEfficiency[nBin] = {0.00,0.00,0.00,0.00,0.00,0.00,0.07,0.07,0.07,0.07,0.07}; double systematicErrorBackground[nBin+1] = {0.07,0.04,0.04,0.04,0.05,0.06,0.07,0.08,0.09,0.10,0.12,0.15}; double systematicError[nBin]; for (int b=0;b<nBin;b++) { double sum=0; //sum+= systematicErrorResolution[b]*systematicErrorResolution[b]; //sum+= systematicErrorScale[b]*systematicErrorScale[b]; //sum+= systematicErrorEfficiency[b]*systematicErrorEfficiency[b]; sum+= systematicErrorBackground[b]*systematicErrorBackground[b]; systematicError[b]=sqrt(sum); hTmp->SetBinContent(b,1); } TGraph *gErrorBand; if (cbin!=0) { gErrorBand = GetErrorBand(hTmp,systematicError,systematicError,0.025,12); } else { gErrorBand = GetErrorBand(hTmp,systematicError,systematicError,0.025,12); } gErrorBand->Draw("f"); hEmbedded->SetMarkerStyle(4); hEmbedded->SetMarkerColor(4); hEmbedded->SetLineColor(4); hEmbedded->SetLineStyle(2); //hEmbedded->Draw("same"); //h->Fit("pol1","","",0,1); h->Draw("same"); TLine *l = new TLine(0,1,1,1); l->SetLineStyle(2); l->Draw(); if(drawLeg){ TLegend *t3=new TLegend(0.44,0.7,0.86,0.88); t3->AddEntry(h,"PYTHIA + Data / PYTHIA","pl"); //t3->AddEntry(hEmbedded,"Data PF / PYQUEN + Data","l"); //t3->AddEntry(hDataMix,"unquenched PYQUEN + Data","lf"); t3->SetFillColor(0); t3->SetBorderSize(0); t3->SetFillStyle(0); t3->SetTextFont(63); t3->SetTextSize(15); t3->Draw(); } }
//void Draw(){ void dNdEta_ThreeMethodsCombined_BU_Compile() { //=========Macro generated from canvas: MyCanvas/MyCanvas //========= (Thu Dec 10 11:52:00 2009) by ROOT version5.22/00d gROOT->Reset(); gROOT->ProcessLine(".x rootlogon.C"); TCanvas *MyCanvas = new TCanvas("MyCanvas", "Final result",1,360,550,600); /// ==================================================== Weighted mean of all three method! Double_t xAxis7[13] = {-3, -2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3}; TH1 *hMeasuredFinal3 = new TH1D("hMeasuredFinal3","",12, xAxis7); hMeasuredFinal3->GetXaxis()->SetRange(1,13); hMeasuredFinal3->SetMinimum(0); hMeasuredFinal3->SetMaximum(6.0); hMeasuredFinal3->SetBinContent(2,3.60278); // -2.4 to -2.0 hMeasuredFinal3->SetBinContent(3,3.731399616); //-2 to -1.5 hMeasuredFinal3->SetBinContent(4,3.618227783); // -1.5 to -1.0 hMeasuredFinal3->SetBinContent(5,3.538766473); // -1.0 to -0.5 hMeasuredFinal3->SetBinContent(6,3.477522368); // -0.5 to 0 /* hMeasuredFinal3->SetBinContent(2,3.65413); // -2.4 to -2.0 hMeasuredFinal3->SetBinContent(3,3.744095779); //-2 to -1.5 hMeasuredFinal3->SetBinContent(4,3.726157315); // -1.5 to -1.0 hMeasuredFinal3->SetBinContent(5,3.6087225); // -1.0 to -0.5 hMeasuredFinal3->SetBinContent(6,3.489931761); // -0.5 to 0 */ /* hMeasuredFinal3->SetBinContent(2,3.6541); // -2.4 to -2.0 hMeasuredFinal3->SetBinContent(3,3.7376); //-2 to -1.5 hMeasuredFinal3->SetBinContent(4,3.7255); // -1.5 to -1.0 hMeasuredFinal3->SetBinContent(5,3.6123); // -1.0 to -0.5 hMeasuredFinal3->SetBinContent(6,3.4977); // -0.5 to 0 */ hMeasuredFinal3->SetBinContent(7,hMeasuredFinal3->GetBinContent(6)); // 0 to 0.5 hMeasuredFinal3->SetBinContent(8,hMeasuredFinal3->GetBinContent(5)); // 0.5 to 1.0 hMeasuredFinal3->SetBinContent(9,hMeasuredFinal3->GetBinContent(4)); // 1.0 to 1.5 hMeasuredFinal3->SetBinContent(10,hMeasuredFinal3->GetBinContent(3)); // 1.5 to 2.0 hMeasuredFinal3->SetBinContent(11,hMeasuredFinal3->GetBinContent(2)); // 2.0 to 2.4 // --- Stat error --- double statError= 0.01767767; for (int i=2; i<12; ++i) { hMeasuredFinal3->SetBinError(i,hMeasuredFinal3->GetBinContent(i)*statError); cout << "stat error (" << i << "): " << hMeasuredFinal3->GetBinError(i) << endl; } hMeasuredFinal3->GetYaxis()->SetTitle("dN_{ch}/d#eta"); hMeasuredFinal3->GetXaxis()->SetTitle("#eta"); hMeasuredFinal3->GetXaxis()->CenterTitle(); hMeasuredFinal3->GetYaxis()->CenterTitle(); hMeasuredFinal3->GetXaxis()->SetNdivisions(405); //hMeasuredFinal3->GetYaxis()->SetNdivisions(1005); hMeasuredFinal3->GetYaxis()->SetNdivisions(506); hMeasuredFinal3->SetMarkerColor(kRed); hMeasuredFinal3->SetMarkerStyle(20); hMeasuredFinal3->SetLineColor(kRed); hMeasuredFinal3->SetMarkerSize(1.8); hMeasuredFinal3->Draw("pz"); // Clone above for systematic band! /// ==================================================== Weighted mean of all three method! //Double_t xAxis8[13] = {-3, -2.4, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.4, 3}; TH1D * hMeasuredFinal4 = (TH1D*)hMeasuredFinal3->Clone("hMeasuredFinal4"); // double sysError = 0.0603; //double sysError = 0.035; double sysError = 0.037; TGraph *gErrorBand = GetErrorBand((TH1F*)hMeasuredFinal4,sysError,sysError,0.25,0.06); gErrorBand->Draw("f"); hMeasuredFinal3->Draw("pzsame"); /// ==================================================== CMS 2.36 GeV TH1F *hMeasuredFinal236 = (TH1F*)hMeasuredFinal3->Clone("hMeasuredFinal236"); //hMeasuredFinal236->GetXaxis()->SetRange(3,10); hMeasuredFinal236->GetXaxis()->SetRange(1,13); hMeasuredFinal236->SetMarkerColor(kRed); hMeasuredFinal236->SetLineColor(kRed); hMeasuredFinal236->SetMarkerStyle(4); hMeasuredFinal236->SetMarkerSize(1.8); hMeasuredFinal236->SetBinContent(2,4.78296); // -2.4 to -2.0 hMeasuredFinal236->SetBinContent(3,4.806189822); //-2 to -1.5 hMeasuredFinal236->SetBinContent(4,4.662502625); // -1.5 to -1.0 hMeasuredFinal236->SetBinContent(5,4.614742045); // -1.0 to -0.5 hMeasuredFinal236->SetBinContent(6,4.469256947); // -0.5 to 0 /* hMeasuredFinal236->SetBinContent(2,4.968905); // -2.4 to -2.0 hMeasuredFinal236->SetBinContent(3,4.906105606); //-2 to -1.5 hMeasuredFinal236->SetBinContent(4,4.695318198); // -1.5 to -1.0 hMeasuredFinal236->SetBinContent(5,4.635741157); // -1.0 to -0.5 hMeasuredFinal236->SetBinContent(6,4.495389263); // -0.5 to 0 */ /* hMeasuredFinal236->SetBinContent(2,4.9689); // -2.4 to -2.0 hMeasuredFinal236->SetBinContent(3,4.9122); //-2 to -1.5 hMeasuredFinal236->SetBinContent(4,4.7081); // -1.5 to -1.0 hMeasuredFinal236->SetBinContent(5,4.6404); // -1.0 to -0.5 hMeasuredFinal236->SetBinContent(6,4.4921); // -0.5 to 0 */ hMeasuredFinal236->SetBinContent(7,hMeasuredFinal236->GetBinContent(6)); // 0 to 0.5 hMeasuredFinal236->SetBinContent(8,hMeasuredFinal236->GetBinContent(5)); // 0.5 to 1.0 hMeasuredFinal236->SetBinContent(9,hMeasuredFinal236->GetBinContent(4)); // 1.0 to 1.5 hMeasuredFinal236->SetBinContent(10,hMeasuredFinal236->GetBinContent(3)); // 1.5 to 2.0 hMeasuredFinal236->SetBinContent(11,hMeasuredFinal236->GetBinContent(2)); // 2.0 to 2.4 /// --- draw the error bands --- TH1F *hMeasuredFinal236EB = (TH1F*)hMeasuredFinal236->Clone("hMeasuredFinal236EB"); //hMeasuredFinal236EB->SetBinContent(2,4.32647); //hMeasuredFinal236EB->SetBinContent(11,4.32647); TGraph *gErrorBand236 = GetErrorBand((TH1F*)hMeasuredFinal236EB,sysError,sysError,0.25); gErrorBand236->Draw("f"); hMeasuredFinal236->Draw("pzsame"); /// ==================================================== ALICE //Double_t xAxis9[9] = {-1.4, -1.0, -0.6, -0.2, 0.2, 0.6, 1.0, 1.4}; //Double_t xAxis9[9] = {-1.4, -1.0, -0.6, -0.2, 0.2, 0.6, 1.0, 1.4}; Double_t xAxis9[9] = {-1.6, -1.2, -0.8, -0.4, 0, 0.4, 0.8, 1.2, 1.6}; TH1 *hEta_ALICE_NSD = new TH1D("hEta_ALICE_NSD","",8, xAxis9); // ALICE data points! /* ALICE, NSD: -1.400000: 3.880678 +- 0.448263 -1.000000: 3.863622 +- 0.279495 -0.600000: 3.466114 +- 0.235660 -0.200000: 3.408768 +- 0.233457 0.200000: 3.619309 +- 0.241938 0.600000: 3.905048 +- 0.251426 1.000000: 3.590869 +- 0.249225 1.400000: 3.592486 +- 0.320071 */ hEta_ALICE_NSD->SetBinContent(1,3.880678); hEta_ALICE_NSD->SetBinContent(2,3.863622); hEta_ALICE_NSD->SetBinContent(3,3.466114); hEta_ALICE_NSD->SetBinContent(4,3.408768); hEta_ALICE_NSD->SetBinContent(5,3.619309); hEta_ALICE_NSD->SetBinContent(6,3.905048); hEta_ALICE_NSD->SetBinContent(7,3.590869); hEta_ALICE_NSD->SetBinContent(8,3.592486); hEta_ALICE_NSD->SetBinError(1,0.448263); hEta_ALICE_NSD->SetBinError(2,0.279495); hEta_ALICE_NSD->SetBinError(3,0.235660); hEta_ALICE_NSD->SetBinError(4,0.233457); hEta_ALICE_NSD->SetBinError(5,0.241938); hEta_ALICE_NSD->SetBinError(6,0.251426); hEta_ALICE_NSD->SetBinError(7,0.249225); hEta_ALICE_NSD->SetBinError(8,0.320071); hEta_ALICE_NSD->SetMarkerColor(1); hEta_ALICE_NSD->SetMarkerStyle(26); hEta_ALICE_NSD->SetLineColor(kBlack); hEta_ALICE_NSD->SetMarkerSize(1.5); //hEta_ALICE_NSD->SetMarkerSize(1.25); hEta_ALICE_NSD->Draw("pzsame"); /// ==================================================== UA5 Data //TH1F* hEta_UA5_NSD = new TH1F("hEta_UA5_NSD",";#eta;dN/d#eta",50,-3,3); //TH1F* hEta_UA5_NSD = new TH1F("hEta_UA5_NSD",";#eta;dN/d#eta",100,-3,3); TH1F* hEta_UA5_NSD = new TH1F("hEta_UA5_NSD",";#eta;dN/d#eta",26,-3.25,3.25); // positive eta hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(0.125),3.48); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(0.375),3.38); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(0.625),3.52); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(0.875),3.68); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(1.125),3.71); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(1.375),3.86); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(1.625),3.76); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(1.875),3.66); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(2.125),3.72); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(2.375),3.69); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(2.625),3.56); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(2.875),3.41); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(3.125),3.15); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(0.125),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(0.375),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(0.625),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(0.875),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(1.125),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(1.375),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(1.625),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(1.875),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(2.125),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(2.375),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(2.625),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(2.875),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(3.125),0.07); //negative eta hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-0.125),3.48); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-0.375),3.38); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-0.625),3.52); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-0.875),3.68); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-1.125),3.71); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-1.375),3.86); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-1.625),3.76); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-1.875),3.66); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-2.125),3.72); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-2.375),3.69); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-2.625),3.56); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-2.875),3.41); hEta_UA5_NSD->SetBinContent(hEta_UA5_NSD->FindBin(-3.125),3.15); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-0.125),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-0.375),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-0.625),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-0.875),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-1.125),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-1.375),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-1.625),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-1.875),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-2.125),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-2.375),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-2.625),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-2.875),0.07); hEta_UA5_NSD->SetBinError(hEta_UA5_NSD->FindBin(-3.125),0.07); hEta_UA5_NSD->SetMarkerStyle(25); hEta_UA5_NSD->SetMarkerSize(1.25); hEta_UA5_NSD->Draw("psame"); // Draw one more time to put CMS point on top of every other experiemnt's data points! hMeasuredFinal3->Draw("pzsame"); Float_t ywidth = 0.045*5; //TLegend *leg = new TLegend(0.20,0.27,0.53,0.27+ywidth,"","brNDC"); //TLegend *leg = new TLegend(0.48,0.27,0.81,0.27+ywidth,"","brNDC"); TLegend *leg = new TLegend(0.27,0.21,0.699,0.21+ywidth,NULL,"brNDC"); leg->SetMargin(0.37); leg->SetBorderSize(0); leg->SetTextFont(62); leg->SetLineColor(1); leg->SetLineStyle(1); leg->SetLineWidth(1); leg->SetFillColor(0); leg->SetFillStyle(0); leg->SetTextSize(0.033); leg->SetHeader(" 0.9 TeV"); //leg->AddEntry(hMeasuredFinal236,"CMS NSD (2.36 TeV)","P"); leg->AddEntry(hMeasuredFinal3,"","P"); leg->AddEntry(hEta_ALICE_NSD,"","P"); leg->AddEntry(hEta_UA5_NSD,"","P"); Float_t ywidth2 = 0.045*2; //TLegend *leg2 = new TLegend(0.38,0.27,0.81,0.27+ywidth2,"","brNDC"); TLegend *leg2 = new TLegend(0.39,0.21,0.82,0.21+ywidth,NULL,"brNDC"); leg2->SetMargin(0.5); leg2->SetBorderSize(0); leg2->SetTextFont(62); leg2->SetLineColor(1); leg2->SetLineStyle(1); leg2->SetLineWidth(1); leg2->SetFillColor(0); //leg->SetFillStyle(1001); leg2->SetFillStyle(0); leg2->SetTextSize(0.033); leg2->SetHeader(" 2.36 TeV"); leg2->AddEntry(hMeasuredFinal236,"CMS NSD","P"); leg2->AddEntry(hEta_ALICE_NSD,"ALICE NSD",""); leg2->AddEntry(hEta_UA5_NSD,"UA5 NSD",""); leg2->Draw(); leg->Draw(); printFinalCanvases(MyCanvas,"dNdeta_ThreeMethodsCombined",0,2); }
void plotLimit(TString outputDir="./", TString inputs="", TString inputXSec="", bool strengthLimit=true, bool blind=false, double energy=7, double luminosity=5.035, TString legendName="ee and #mu#mu channels") { //style options gStyle->SetCanvasBorderMode(0); gStyle->SetCanvasColor(kWhite); gStyle->SetFrameBorderMode(0); gStyle->SetFrameBorderSize(1); gStyle->SetFrameFillColor(0); gStyle->SetFrameFillStyle(0); gStyle->SetFrameLineColor(1); gStyle->SetFrameLineStyle(1); gStyle->SetFrameLineWidth(1); gStyle->SetOptFit(1); gStyle->SetFitFormat("5.4g"); gStyle->SetFuncColor(2); gStyle->SetOptFile(0); //gStyle->SetOptStat(0); gStyle->SetOptStat("mr"); gStyle->SetStatColor(kWhite); gStyle->SetStatFont(42); gStyle->SetStatFontSize(0.04); gStyle->SetStatTextColor(1); gStyle->SetStatFormat("6.4g"); gStyle->SetStatBorderSize(1); gStyle->SetStatH(0.1); gStyle->SetStatW(0.2); gStyle->SetPadTopMargin(0.05); gStyle->SetPadBottomMargin(0.13); gStyle->SetPadLeftMargin(0.16); gStyle->SetPadRightMargin(0.02); gStyle->SetOptTitle(0); gStyle->SetTitleFont(42); gStyle->SetTitleColor(1); gStyle->SetTitleTextColor(1); gStyle->SetTitleFillColor(10); gStyle->SetTitleFontSize(0.05); gStyle->SetAxisColor(1, "XYZ"); gStyle->SetStripDecimals(kTRUE); gStyle->SetTickLength(0.03, "XYZ"); gStyle->SetNdivisions(510, "XYZ"); gStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame gStyle->SetPadTickY(1); gStyle->SetEndErrorSize(2); gStyle->SetErrorX(0.); gStyle->SetMarkerStyle(20); gROOT->ForceStyle(); gStyle->SetPadTopMargin (0.06); gStyle->SetPadBottomMargin(0.12); gStyle->SetPadRightMargin (0.06); gStyle->SetPadLeftMargin (0.14); gStyle->SetTitleSize(0.04, "XYZ"); gStyle->SetTitleXOffset(1.1); gStyle->SetTitleYOffset(1.45); gStyle->SetPalette(1); gStyle->SetNdivisions(505); string suffix = string(outputDir.Data()); double cprime=1.0; double brnew=0.0; double XSecScaleFactor = 1.0; if(suffix.find("_cp")!=string::npos){ sscanf(suffix.c_str()+suffix.find("_cp"), "_cp%lf_brn%lf", &cprime, &brnew); XSecScaleFactor = pow(cprime,2) * (1-brnew); } //get xsec * br from summary file getXSecXBR(inputXSec); //get the limits from the tree TFile* file = TFile::Open(inputs); printf("Looping on %s\n",inputs.Data()); if(!file) return; if(file->IsZombie()) return; TTree* tree = (TTree*)file->Get("limit"); tree->GetBranch("mh" )->SetAddress(&Tmh ); tree->GetBranch("limit" )->SetAddress(&Tlimit ); tree->GetBranch("limitErr" )->SetAddress(&TlimitErr); tree->GetBranch("quantileExpected")->SetAddress(&TquantExp); int N = tree->GetEntriesFast() / 6 ;// 6Limits per mass point (observed, meand , +-1sigma, +-2sigma) double* MassAxis = new double[N]; double* ObsLimit = new double[N]; fillLimitArray(tree,-1 ,ObsLimit,MassAxis); if(!strengthLimit)scaleLimitsByXSecXBR(N, MassAxis, ObsLimit); double* ExpLimitm2 = new double[N]; fillLimitArray(tree,0.025,ExpLimitm2); if(!strengthLimit)scaleLimitsByXSecXBR(N, MassAxis, ExpLimitm2); double* ExpLimitm1 = new double[N]; fillLimitArray(tree,0.160,ExpLimitm1); if(!strengthLimit)scaleLimitsByXSecXBR(N, MassAxis, ExpLimitm1); double* ExpLimit = new double[N]; fillLimitArray(tree,0.500,ExpLimit ); if(!strengthLimit)scaleLimitsByXSecXBR(N, MassAxis, ExpLimit); double* ExpLimitp1 = new double[N]; fillLimitArray(tree,0.840,ExpLimitp1); if(!strengthLimit)scaleLimitsByXSecXBR(N, MassAxis, ExpLimitp1); double* ExpLimitp2 = new double[N]; fillLimitArray(tree,0.975,ExpLimitp2); if(!strengthLimit)scaleLimitsByXSecXBR(N, MassAxis, ExpLimitp2); file->Close(); //make TH Cross-sections double* ThXSec = new double[N]; for(unsigned int i=0;i<N;i++){ThXSec[i] = xsecXbr[MassAxis[i]];} //scale TH cross-section and limits according to scale factor //this only apply to NarrowResonnance case for(unsigned int i=0;i<N;i++){ if(strengthLimit){ ObsLimit[i] /= XSecScaleFactor; ExpLimitm2[i]/= XSecScaleFactor; ExpLimitm1[i]/= XSecScaleFactor; ExpLimit [i]/= XSecScaleFactor; ExpLimitp1[i]/= XSecScaleFactor; ExpLimitp2[i]/= XSecScaleFactor; } ThXSec[i] *= XSecScaleFactor; } //limits in terms of signal strength TCanvas* c = new TCanvas("c", "c",600,600); TH1F* framework = new TH1F("Graph","Graph",1,15,70); framework->SetStats(false); framework->SetTitle(""); framework->GetXaxis()->SetTitle("A boson mass [GeV]"); framework->GetYaxis()->SetTitleOffset(1.70); if(strengthLimit){ framework->GetYaxis()->SetTitle("#mu = #sigma_{95%} / #sigma_{th}"); framework->GetYaxis()->SetRangeUser(5E-2,5E1); c->SetLogy(true); }else{ framework->GetYaxis()->SetTitle("#sigma_{95%} (fb)"); framework->GetYaxis()->SetRangeUser(1E-1,1E3); c->SetLogy(true); } framework->Draw(); TGraph* TGObsLimit = new TGraph(N,MassAxis,ObsLimit); TGObsLimit->SetLineWidth(2); TGraph* TGExpLimit = new TGraph(N,MassAxis,ExpLimit); TGExpLimit->SetLineWidth(2); TGExpLimit->SetLineStyle(2); TCutG* TGExpLimit1S = GetErrorBand("1S", N, MassAxis, ExpLimitm1, ExpLimitp1); TCutG* TGExpLimit2S = GetErrorBand("2S", N, MassAxis, ExpLimitm2, ExpLimitp2); TGExpLimit2S->SetFillColor(5); TGraph* THXSec = new TGraph(N,MassAxis,ThXSec); THXSec->SetLineWidth(2); THXSec->SetLineStyle(1); THXSec->SetLineColor(4); TGExpLimit->SetLineColor(2); TGExpLimit->SetLineStyle(1); TGObsLimit->SetLineWidth(2); TGObsLimit->SetMarkerStyle(20); TGExpLimit2S->Draw("fc same"); TGExpLimit1S->Draw("fc same"); if(!blind) TGObsLimit->Draw("same CP"); TGExpLimit->Draw("same C"); if(strengthLimit){ TLine* SMLine = new TLine(framework->GetXaxis()->GetXmin(),1.0,framework->GetXaxis()->GetXmax(),1.0); SMLine->SetLineWidth(2); SMLine->SetLineStyle(1); SMLine->SetLineColor(4); SMLine->Draw("same C"); }else{ THXSec->Draw("same C"); } TPaveText *pave = new TPaveText(0.1,0.96,0.99,0.99,"NDC"); char LumiLabel[1024]; if(energy<9){ sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=%.0f TeV, #scale[0.5]{#int} L=%6.1ffb^{-1} - %20s",energy, luminosity,legendName.Data()); }else{ sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=%.0f TeV #scale[0.5]{#int} L=%6.1ffb^{-1}, #sqrt{s}=%.0f TeV #scale[0.5]{#int} L=%6.1ffb^{-1}",7.0,5.0,8.0,19.7); } pave->SetBorderSize(0); pave->SetFillStyle(0); pave->SetTextFont(42); TObjArray* tokens = (TString(LumiLabel)).Tokenize("\\\\"); int nt = tokens->GetEntries(); for(int it=0; it<nt; ++it){ TObjString * t = (TObjString *)tokens->At(it); pave->AddText(t->GetString()); } pave->Draw("same"); TLegend* LEG = new TLegend(0.55,0.75,0.85,0.95); LEG->SetHeader("Signal XSec x 1000"); LEG->SetFillColor(0); LEG->SetFillStyle(0); LEG->SetTextFont(42); LEG->SetBorderSize(0); LEG->AddEntry(THXSec , "TH prediction" ,"L"); LEG->AddEntry(TGExpLimit , "median expected" ,"L"); LEG->AddEntry(TGExpLimit1S , "expected #pm 1#sigma" ,"F"); LEG->AddEntry(TGExpLimit2S , "expected #pm 2#sigma" ,"F"); if(!blind) LEG->AddEntry(TGObsLimit , "observed" ,"LP"); LEG->Draw(); c->RedrawAxis(); c->SaveAs(outputDir+"Limit.png"); c->SaveAs(outputDir+"Limit.C"); c->SaveAs(outputDir+"Limit.pdf"); //save a summary of the limits FILE* pFileSum = fopen((outputDir+"LimitSummary").Data(),"w"); for(int i=0;i<N;i++){ fprintf(pFileSum, "$%8.6E$ & $%8.6E$ & $[%8.6E,%8.6E]$ & $[%8.6E,%8.6E]$ & $%8.6E$ & Th=$%8.6E$\\\\\\hline\n",MassAxis[i], ExpLimit[i], ExpLimitm1[i], ExpLimitp1[i], ExpLimitm2[i], ExpLimitp2[i], ObsLimit[i], ThXSec[i]); if(int(MassAxis[i])%50!=0)continue; printf("%f ",ObsLimit[i]); }printf("\n"); fclose(pFileSum); pFileSum = fopen((outputDir+"LimitRange").Data(),"w"); fprintf(pFileSum, "EXPECTED LIMIT --> "); printLimits(pFileSum,TGExpLimit, MassAxis[0], MassAxis[N-1]); if(!blind) fprintf(pFileSum, "OBSERVED LIMIT --> "); printLimits(pFileSum,TGObsLimit, MassAxis[0], MassAxis[N-1]); fprintf(pFileSum, "Exp Limits for Model are: "); for(int i=0;i<N;i++){if(int(MassAxis[i])%50!=0)continue; fprintf(pFileSum, "%f+-%f ",ExpLimit[i], (ExpLimitp1[i]-ExpLimitm1[i]))/2.0;}fprintf(pFileSum,"\n"); if(!blind) { fprintf(pFileSum, "Obs Limits for Model are: "); for(int i=0;i<N;i++){if(int(MassAxis[i])%50!=0)continue; fprintf(pFileSum, "%f ",ObsLimit[i]);}fprintf(pFileSum,"\n"); } fclose(pFileSum); }
void finalLimitPlot(){ gStyle->SetOptStat(0); gStyle->SetOptTitle(0); // setTDRStyle(); gStyle->SetPadTopMargin (0.04); gStyle->SetPadBottomMargin(0.12); gStyle->SetPadRightMargin (0.05); gStyle->SetPadLeftMargin (0.12); gStyle->SetTitleSize(0.04, "XYZ"); gStyle->SetTitleXOffset(1.1); gStyle->SetTitleYOffset(1.45); gStyle->SetPalette(1); gStyle->SetNdivisions(505); TCanvas* c1; TH1F* framework; TH2F* framework2d; TLegend* LEG, *LEGTH; TGraph* Ref; string Directories[]={"cards_CC8TeV_GG", "cards_SB8TeV_GG", "cards_CC8TeV_QQ", "cards_SB8TeV_QQ", "cards_CC7TeV_GG", "cards_SB7TeV_GG", "cards_CC7TeV_QQ", "cards_SB7TeV_QQ"}; for(unsigned int D=0;D<sizeof(Directories)/sizeof(string);D++){ string Dir = Directories[D]; for(int observed=0;observed<=1;observed++){ c1 = new TCanvas("c", "c",600,600); c1->SetLogy(true); framework = new TH1F("Graph","Graph",1,150,1050); framework->SetStats(false); framework->SetTitle(""); framework->GetXaxis()->SetTitle("M_{H} [GeV/c^{2}]"); framework->GetYaxis()->SetTitle("#sigma_{95%} (fb)"); framework->GetYaxis()->SetTitleOffset(1.40); framework->GetYaxis()->SetRangeUser(1.0,100); framework->Draw(); LEG = new TLegend(0.70,0.70,0.95,0.94); LEG->SetFillStyle(0); LEG->SetBorderSize(0); LEG->SetHeader(observed==0?"Expected @95% CL":"Observed @95% CL"); LEGTH = new TLegend(0.45,0.70,0.70,0.94); LEGTH->SetFillStyle(0); LEGTH->SetBorderSize(0); LEGTH->SetHeader("Theoretical"); getGraph("SM" , 1, 1, 2, LEGTH, NULL, 0, Dir+ "/XSec_LimitSummary")->Draw("C same"); getGraph("C'=1.0" , 2, 1, 2, LEGTH, NULL, 0, Dir+"_cp1.00_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.8" , 3, 1, 2, LEGTH, NULL, 0, Dir+"_cp0.80_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.6" , 4, 1, 2, LEGTH, NULL, 0, Dir+"_cp0.60_brn0.00/XSec_LimitSummary")->Draw("C same"); // getGraph("C'=0.5" , 6, 1, 2, LEGTH, NULL, 0, Dir+"_cp0.50_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.4" , 6, 1, 2, LEGTH, NULL, 0, Dir+"_cp0.40_brn0.00/XSec_LimitSummary")->Draw("C same"); // getGraph("C'=0.3" , 6, 1, 2, LEGTH, NULL, 0, Dir+"_cp0.30_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.2" , 8, 1, 2, LEGTH, NULL, 0, Dir+"_cp0.20_brn0.00/XSec_LimitSummary")->Draw("C same"); // getGraph("C'=0.1" , 8, 1, 2, LEGTH, NULL, 0, Dir+"_cp0.10_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("SM" , 1, 2, 1, LEG , NULL, 1+observed, Dir+ "/XSec_LimitSummary")->Draw("C same"); getGraph("C'=1.0" , 2, 2, 1, LEG , NULL, 1+observed, Dir+"_cp1.00_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.8" , 3, 2, 1, LEG , NULL, 1+observed, Dir+"_cp0.80_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.6" , 4, 2, 1, LEG , NULL, 1+observed, Dir+"_cp0.60_brn0.00/XSec_LimitSummary")->Draw("C same"); // getGraph("C'=0.5" , 4, 2, 1, LEG , NULL, 1+observed, Dir+"_cp0.50_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.4" , 6, 2, 1, LEG , NULL, 1+observed, Dir+"_cp0.40_brn0.00/XSec_LimitSummary")->Draw("C same"); // getGraph("C'=0.3" , 4, 2, 1, LEG , NULL, 1+observed, Dir+"_cp0.30_brn0.00/XSec_LimitSummary")->Draw("C same"); getGraph("C'=0.2" , 8, 2, 1, LEG , NULL, 1+observed, Dir+"_cp0.20_brn0.00/XSec_LimitSummary")->Draw("C same"); // getGraph("C'=0.1" , 8, 2, 1, LEG , NULL, 1+observed, Dir+"_cp0.10_brn0.00/XSec_LimitSummary")->Draw("C same"); LEGTH->Draw("same"); LEG ->Draw("same"); char LumiLabel[1024]; if(Dir.find("7TeV")!=string::npos)sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=7 TeV, #int L=%6.1ffb^{-1}",5.035); if(Dir.find("8TeV")!=string::npos)sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=8 TeV, #int L=%6.1ffb^{-1}",19.6); if(Dir.find("Comb")!=string::npos)sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=%.0f TeV #scale[0.5]{#int} L=%6.1ffb^{-1}, #sqrt{s}=%.0f TeV #scale[0.5]{#int} L=%6.1ffb^{-1}",7.0,5.0,8.0,19.7); TPaveText *pave = new TPaveText(0.1,0.96,0.94,0.99,"NDC"); pave->SetBorderSize(0); pave->SetFillStyle(0); pave->SetTextAlign(32); pave->SetTextFont(42); pave->AddText(LumiLabel); pave->Draw("same"); //system("mkdir -p LimitPlots"); if(observed==0){ c1->SaveAs((Dir+"/XSec_FinalPlot.png").c_str()); c1->SaveAs((Dir+"/XSec_FinalPlot.pdf").c_str()); c1->SaveAs((Dir+"/XSec_FinalPlot.C" ).c_str()); }else{ c1->SaveAs((Dir+"/XSec_FinalPlot_Obs.png").c_str()); c1->SaveAs((Dir+"/XSec_FinalPlot_Obs.pdf").c_str()); c1->SaveAs((Dir+"/XSec_FinalPlot_Obs.C" ).c_str()); } } } // string Directories2[]={"cards_CC7TeV", "cards_SB7TeV", "cards_CC7TeV_GG", "cards_SB7TeV_GG", "cards_CC7TeV_QQ", "cards_SB7TeV_QQ", "cards_CC8TeV", "cards_SB8TeV", "cards_CC8TeV_GG", "cards_SB8TeV_GG", "cards_CC8TeV_QQ", "cards_SB8TeV_QQ", "cards_CCComb", "cards_SBComb", "cards_CCComb_GG", "cards_SBComb_GG", "cards_CCComb_QQ", "cards_SBComb_QQ"}; string Directories2[]={"cards_CC7TeV", "cards_SB7TeV", "cards_CC7TeV_GG", "cards_SB7TeV_GG", "cards_CC7TeV_QQ", "cards_SB7TeV_QQ", "cards_CC8TeV", "cards_SB8TeV", "cards_CC8TeV_GG", "cards_SB8TeV_GG", "cards_CC8TeV_QQ", "cards_SB8TeV_QQ", "cards_CCComb", "cards_SBComb"}; for(unsigned int D=0;D<sizeof(Directories2)/sizeof(string);D++){ string Dir = Directories2[D]; TGraph* gMvsCp[7]; LEG = new TLegend(0.70,0.70,0.95,0.94); LEG->SetFillStyle(0); LEG->SetBorderSize(0); TGraph** gSM=getGraphs("SM" , 1, 2, LEG , NULL, Dir+ "/Stength_LimitSummary"); TGraph** g10=getGraphs("C'=1.0" , 2, 2, LEG , NULL, Dir+"_cp1.00_brn0.00/Stength_LimitSummary"); TGraph** g08=getGraphs("C'=0.8" , 3, 2, LEG , NULL, Dir+"_cp0.80_brn0.00/Stength_LimitSummary"); TGraph** g06=getGraphs("C'=0.6" , 4, 2, LEG , NULL, Dir+"_cp0.60_brn0.00/Stength_LimitSummary"); TGraph** g05=getGraphs("C'=0.5" , 6, 2, NULL , NULL, Dir+"_cp0.50_brn0.00/Stength_LimitSummary"); TGraph** g04=getGraphs("C'=0.4" , 6, 2, LEG , NULL, Dir+"_cp0.40_brn0.00/Stength_LimitSummary"); TGraph** g03=getGraphs("C'=0.3" , 6, 2, NULL , NULL, Dir+"_cp0.30_brn0.00/Stength_LimitSummary"); TGraph** g02=getGraphs("C'=0.2" , 8, 2, LEG , NULL, Dir+"_cp0.20_brn0.00/Stength_LimitSummary"); TGraph** g01=getGraphs("C'=0.1" , 8, 2, NULL , NULL, Dir+"_cp0.10_brn0.00/Stength_LimitSummary"); char LumiLabel[1024]; if(Dir.find("7TeV")!=string::npos)sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=7 TeV, #int L=%6.1ffb^{-1}",5.035); if(Dir.find("8TeV")!=string::npos)sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=8 TeV, #int L=%6.1ffb^{-1}",19.6); if(Dir.find("Comb")!=string::npos)sprintf(LumiLabel,"CMS preliminary, #sqrt{s}=%.0f TeV #scale[0.5]{#int} L=%6.1ffb^{-1}, #sqrt{s}=%.0f TeV #scale[0.5]{#int} L=%6.1ffb^{-1}",7.0,5.0,8.0,19.7); TPaveText *pave = new TPaveText(0.1,0.96,0.94,0.99,"NDC"); pave->SetBorderSize(0); pave->SetFillStyle(0); pave->SetTextAlign(32); pave->SetTextFont(42); pave->AddText(LumiLabel); pave->Draw("same"); for(int observed=0;observed<=1;observed++){ c1 = new TCanvas("c", "c",600,600); c1->SetLogy(true); framework = new TH1F("Graph","Graph",1,150,1050); framework->SetStats(false); framework->SetTitle(""); framework->GetXaxis()->SetTitle("M_{H} [GeV/c^{2}]"); framework->GetYaxis()->SetTitle("#sigma_{95%} / #sigma_{TH}"); framework->GetYaxis()->SetTitleOffset(1.40); framework->GetYaxis()->SetRangeUser(0.1,500); // framework->GetYaxis()->SetRangeUser(0.1,10); framework->Draw(); gSM[1+observed]->SetLineStyle(1); g10[1+observed]->SetLineStyle(1); g08[1+observed]->SetLineStyle(1); g06[1+observed]->SetLineStyle(1); g04[1+observed]->SetLineStyle(1); g02[1+observed]->SetLineStyle(1); gSM[1+observed]->Draw("C same"); g10[1+observed]->Draw("C same"); g08[1+observed]->Draw("C same"); g06[1+observed]->Draw("C same"); g04[1+observed]->Draw("C same"); g02[1+observed]->Draw("C same"); //g01[1+observed]->Draw("C same"); LEG ->Draw("same"); LEG->SetHeader(observed==0?"Expected @95% CL":"Observed @95% CL"); TLine* SMLine = new TLine(framework->GetXaxis()->GetXmin(),1.0,framework->GetXaxis()->GetXmax(),1.0); SMLine->SetLineWidth(2); SMLine->SetLineStyle(2); SMLine->SetLineColor(1); SMLine->Draw("same C"); //system("mkdir -p LimitPlots"); if(observed==0){ c1->SaveAs((Dir+"/Stength_FinalPlot.png").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot.pdf").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot.C" ).c_str()); }else{ c1->SaveAs((Dir+"/Stength_FinalPlot_Obs.png").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot_Obs.pdf").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot_Obs.C" ).c_str()); } } /////////////////////////////////////////////// //Mass Versus Cprime limits /////////////////////////////////////////////// for(int type=1;type<7;type++){ if(type==0)continue; TGraph* g1dV[] = {g10[type], g08[type], g06[type], g05[type], g04[type], g03[type], g02[type], g01[type]}; double* Masses = g1dV[0]->GetX(); int NMasses = g1dV[0]->GetN(); double cp[] = {1.0, 0.8, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1}; gMvsCp[type] = (TGraph*)g1dV[0]->Clone(); for(int Mi=0;Mi<NMasses;Mi++){ TGraph* g1d = new TGraph( (sizeof(cp)/sizeof(double)) ); for(unsigned int C=0;C<(sizeof(g1dV)/sizeof(TGraph*));C++){ g1d->SetPoint(C, cp[C], g1dV[C]->Eval(Masses[Mi])); // if(Masses[Mi]==400.0)printf("xxx %f --> %f\n",cp[C], g1dV[C]->Eval(Masses[Mi])); } //find C' value that is excluded double cpExcluded = 2.0; double cpPrev=-1; double limitPrev=-1; for(double cp=1.0; cp>0.0;cp-=0.01){ // if(Masses[Mi]==400.0) printf("c=%f --> %f (compared to %f)\n", cp, g1d->Eval(cp), limitPrev); if(limitPrev!=-1 && limitPrev<=1.0 && g1d->Eval(cp)>=1.0){cpExcluded=cpPrev;break;} limitPrev=g1d->Eval(cp); cpPrev=cp; } gMvsCp[type]->SetPoint(Mi, Masses[Mi], pow(cpExcluded,2)); // gMvsCp[type]->SetPoint(Mi, Masses[Mi], cpExcluded); // printf("%i Mass = %f -> cpexcluded = %f\n", type, Masses[Mi], cpExcluded); } } if(true){ c1 = new TCanvas("c", "c",600,600); framework = new TH1F("Graph","Graph",1,150,1050); framework->SetStats(false); framework->SetTitle(""); framework->GetXaxis()->SetTitle("M_{H} [GeV/c^{2}]"); framework->GetYaxis()->SetTitle("C'^{2}_{95%}"); framework->GetYaxis()->SetTitleOffset(1.40); framework->GetYaxis()->SetRangeUser(0.0,1.0); framework->Draw(); pave->Draw("same"); //expected bands TCutG* TGExpLimit1S = GetErrorBand("1S", gMvsCp[3]->GetN(), gMvsCp[3]->GetX(), gMvsCp[3]->GetY(), gMvsCp[4]->GetY()); TCutG* TGExpLimit2S = GetErrorBand("2S", gMvsCp[3]->GetN(), gMvsCp[3]->GetX(), gMvsCp[5]->GetY(), gMvsCp[6]->GetY()); TGExpLimit2S->SetFillColor(5); TGExpLimit2S->Draw("f same"); TGExpLimit1S->Draw("f same"); //expected gMvsCp[1]->SetLineColor(1); gMvsCp[1]->SetLineWidth(1); gMvsCp[1]->SetLineStyle(2); gMvsCp[1]->Draw("same"); //observed gMvsCp[2]->SetLineColor(1); gMvsCp[2]->SetLineWidth(2); gMvsCp[2]->SetLineStyle(1); gMvsCp[2]->Draw("same"); //for(int i=3;i<7;i++){ // gMvsCp[i]->SetLineColor(4); // gMvsCp[i]->SetLineWidth(1); // gMvsCp[i]->SetLineStyle(2); // gMvsCp[i]->Draw("C same"); //} LEG = new TLegend(0.50,0.20,0.95,0.44); LEG->SetFillStyle(0); LEG->SetBorderSize(0); LEG->SetHeader(NULL); LEG->AddEntry(gMvsCp[1],"Expected @95% CL", "L"); LEG->AddEntry(gMvsCp[2],"Observed @95% CL", "L"); LEG->Draw(); c1->SaveAs((Dir+"/Stength_FinalPlot_Cprime.png").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot_Cprime.pdf").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot_Cprime.C" ).c_str()); } /////////////////////////////////////////////// //Mass Versus Cprime limits /////////////////////////////////////////////// for(int observed=0;observed<=1;observed++){ for(int mode=0; mode<=1; mode++){ //mode=0 --> CPrime versus BRNew //mode=1 --> width versus BRNew //// double Masses[] = {200,400,600,800}; for(int Mi=0;Mi<sizeof(Masses)/sizeof(double);Mi++){ double Mass = Masses[Mi]; TGraph* g1dV[] = {g10[1+observed], g08[1+observed], g06[1+observed], g05[1+observed], g04[1+observed], g03[1+observed], g02[1+observed], g01[1+observed]}; double cp[] = {1.0, 0.8, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1}; TGraph* g1d = new TGraph ( (sizeof(g1dV)/sizeof(TGraph*)) ); for(unsigned int C=0;C<(sizeof(g1dV)/sizeof(TGraph*));C++){ g1d->SetPoint(C, cp[C], g1dV[C]->Eval(Mass)); } int I=0; // double cp2[] = {1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.3, 0.2, 0.1, 0.0}; // double brn[] = {0.995, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0}; double cp2[] = {1.0, 0.975, 0.95, 0.925, 0.9, 0.875, 0.85, 0.825, 0.8, 0.775, 0.75, 0.725, 0.7, 0.675, 0.65, 0.625, 0.6, 0.575, 0.55, 0.525, 0.5, 0.475, 0.45, 0.425, 0.4, 0.375, 0.35, 0.325, 0.3, 0.275, 0.25, 0.225, 0.2, 0.175, 0.15, 0.125, 0.1, 0.075, 0.05, 0.025, 0.0}; double brn[] = {0.995, 0.975, 0.95, 0.925, 0.9, 0.875, 0.85, 0.825, 0.8, 0.775, 0.75, 0.725, 0.7, 0.675, 0.65, 0.625, 0.6, 0.575, 0.55, 0.525, 0.5, 0.475, 0.45, 0.425, 0.4, 0.375, 0.35, 0.325, 0.3, 0.275, 0.25, 0.225, 0.2, 0.175, 0.15, 0.125, 0.1, 0.075, 0.05, 0.025, 0.0}; TGraph2D* g2d = new TGraph2D( (sizeof(cp2)/sizeof(double)) * (sizeof(brn)/sizeof(double)) ); for(unsigned int C=0;C<(sizeof( cp2)/sizeof(double));C++){ for(unsigned int B=0;B<(sizeof(brn)/sizeof(double));B++){ double BR = brn[B]; double sl = g1d->Eval(sqrt(cp2[C])); //move from br=0 --> br=BR double cp2_true = cp2[C]*(1-BR); double sl_true = sl/(1-BR); if(mode==0){ g2d->SetPoint(I, cp2_true, BR, sl_true); }else if(mode==1){ g2d->SetPoint(I, sqrt(cp2[C]), BR, sl_true); // }else if(mode==1){ g2d->SetPoint(I, cp2[C]*(1-BR), BR, sl_true); } I++; }}g2d->Set(I); c1 = new TCanvas("c", "c",600,600); c1->SetLogz(true); c1->SetRightMargin(0.17); framework2d = new TH2F("Graph","Graph",1,mode==0?0.0:0.3,1, 1,0,1); framework2d->SetStats(false); framework2d->SetTitle(""); framework2d->GetXaxis()->SetTitle(mode==0?"c'^{2}":"#Gamma/#Gamma_{SM}"); framework2d->GetYaxis()->SetTitle("BR_{new}"); framework2d->GetYaxis()->SetTitleOffset(1.40); framework2d->GetYaxis()->SetRangeUser(0, 1); framework2d->Draw(""); pave->Draw("same"); TH2D* h2d = g2d->GetHistogram(); h2d->SetMaximum(10); h2d->SetMinimum(1E-1); h2d->GetZaxis()->SetTitle(observed==0?"Expected #sigma_{95%} / #sigma_{TH}":"Observed #sigma_{95%} / #sigma_{TH}"); h2d->GetZaxis()->SetTitleOffset(1.33); h2d->Draw("COLZ same"); TH1D* h2dLimit = new TH1D("ExcludedArea", "ExcludedArea", h2d->GetNbinsX(), 0.0, 1.0); for(int x=0;x<=h2d->GetNbinsX();x++){ double limit = -1; for(int y=0;y<=h2d->GetNbinsY()+1;y++){ double bin = h2d->GetBinContent(x,y); if(x==15)printf("Dir=%s Mass=%f: Mode=%i cprime2 = %f brnew=%f limit=%f\n", Dir.c_str(), Mass, mode, h2d->GetXaxis()->GetBinCenter(x), h2d->GetYaxis()->GetBinCenter(y), bin ); if(mode==0 && (bin>=1 || h2d->GetYaxis()->GetBinCenter(y)>=1-h2d->GetXaxis()->GetBinCenter(x))){limit = std::max(0.0, h2d->GetYaxis()->GetBinLowEdge(y) ); break;} if(mode==1 && bin<=1 && y<h2d->GetNbinsY()){limit = std::max(0.0, h2d->GetYaxis()->GetBinUpEdge(y) );} } h2dLimit->SetBinContent(x,limit); } h2dLimit->SetLineColor(1); h2dLimit->SetLineWidth(1); h2dLimit->SetFillStyle(3654); h2dLimit->SetFillColor(1); h2dLimit->Draw("HIST same"); if(mode==0){ TLine* W50 = new TLine(0.0, 1.0, 1.0, 0.8); W50->SetLineWidth(1); W50->SetLineStyle(3); W50->SetLineColor(1); W50->Draw("same C"); TLine* W10 = new TLine(0.0, 1.00, 1.0, 0.0); W10->SetLineWidth(1); W10->SetLineStyle(3); W10->SetLineColor(1); W10->Draw("same C"); TLine* W05 = new TLine(0.0, 1.0, 0.5, 0.0); W05->SetLineWidth(1); W05->SetLineStyle(3); W05->SetLineColor(1); W05->Draw("same C"); TLine* W01 = new TLine(0.0, 1.0, 0.1, 0.0); W01->SetLineWidth(1); W01->SetLineStyle(3); W01->SetLineColor(1); W01->Draw("same C"); } //add marker on the plots for(unsigned int C=0;C<(sizeof( cp2)/sizeof(double));C++){ for(unsigned int B=0;B<(sizeof(brn)/sizeof(double));B++){ double BR = brn[B]; double sl = g1d->Eval(sqrt(cp2[C])); //move from br=0 --> br=BR double cp2_true = cp2[C]*(1-BR); double sl_true = sl/(1-BR); //TMarker* m = new TMarker(mode==0?cp2_true:sqrt(cp2[C]), BR, 20); m->SetMarkerSize(1.0); m->SetMarkerColor(1); m->Draw("same"); }} char massStr[512]; sprintf(massStr, "%04.0f", Mass); if(mode>0)sprintf(massStr, "%s_Width", massStr); if(observed!=0)sprintf(massStr, "%s_Obs", massStr); c1->SaveAs((Dir+"/Stength_FinalPlot2D_"+massStr+".png").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot2D_"+massStr+".pdf").c_str()); c1->SaveAs((Dir+"/Stength_FinalPlot2D_"+massStr+".C").c_str()); } //// } } } }