{ gROOT->Reset(); Int_t MAXRESULTS = 30; Float_t analysisIndex[MAXRESULTS]; Float_t ZeroArray[MAXRESULTS]; TString analysisDescription[MAXRESULTS]; Float_t analysisLuminosityPb[MAXRESULTS]; Float_t centralValue[MAXRESULTS]; Float_t statErrorPos[MAXRESULTS]; Float_t statErrorNeg[MAXRESULTS]; Float_t systErrorPos[MAXRESULTS]; Float_t systErrorNeg[MAXRESULTS]; Float_t statSystErrorPos[MAXRESULTS]; Float_t statSystErrorNeg[MAXRESULTS]; for (Int_t j = 0; j < MAXRESULTS; j++) { analysisIndex[j] = j + 1; ZeroArray[j] = 0.; } Int_t i = -1; // You can put in all of the different analyses here. i++; analysisDescription[i] = "^{*}Tevatron July'06"; analysisLuminosityPb[i] = 1030.; centralValue[i] = 171.4; statErrorPos[i] = 1.2; statErrorNeg[i] = 1.2; systErrorPos[i] = 1.8; systErrorNeg[i] = 1.8; i++; analysisDescription[i] = "^{*}CDF All hadronic"; analysisLuminosityPb[i] = 1020.; centralValue[i] = 174.0; statErrorPos[i] = 2.2; statErrorNeg[i] = 2.2; systErrorPos[i] = 4.8; systErrorNeg[i] = 4.8; i++; analysisDescription[i] = "^{*}CDF Lepton+Jets"; analysisLuminosityPb[i] = 940.; centralValue[i] = 170.9; statErrorPos[i] = 1.6; statErrorNeg[i] = 1.6; systErrorPos[i] = 2.0; systErrorNeg[i] = 2.0; i++; analysisDescription[i] = "^{*}CDF Dilepton"; analysisLuminosityPb[i] = 1030.; centralValue[i] = 164.5; statErrorPos[i] = 3.9; statErrorNeg[i] = 3.9; systErrorPos[i] = 3.9; systErrorNeg[i] = 3.9; i++; analysisDescription[i] = "^{*}D0 Lepton+Jets"; analysisLuminosityPb[i] = 370.; centralValue[i] = 170.3; statErrorPos[i] = 2.5; statErrorNeg[i] = 2.5; systErrorPos[i] = 3.8; systErrorNeg[i] = 3.8; i++; analysisDescription[i] = "^{*}D0 Dilepton"; analysisLuminosityPb[i] = 370.; centralValue[i] = 178.1; statErrorPos[i] = 6.7; statErrorNeg[i] = 6.7; systErrorPos[i] = 4.8; systErrorNeg[i] = 4.8; //Set up a graph with statistical uncertainties only... grStat = new TGraphAsymmErrors(i+1, centralValue, analysisIndex, statErrorNeg, statErrorPos, ZeroArray, ZeroArray); grStat->SetTitle("Results (stat. errors)"); //..and with stat+syst uncertainties for (Int_t j = 0; j < MAXRESULTS; j++) { statSystErrorNeg[j] = sqrt(statErrorNeg[j]**2 + systErrorNeg[j]**2); statSystErrorPos[j] = sqrt(statErrorPos[j]**2 + systErrorPos[j]**2); } grStatSyst = new TGraphAsymmErrors(i+1, centralValue, analysisIndex, statSystErrorNeg, statSystErrorPos, ZeroArray, ZeroArray); grStatSyst->SetTitle(""); //Now draw everything gROOT->SetStyle("Plain"); gStyle->SetOptStat(0); TCanvas *myCanvas = new TCanvas("myCanvas","Summary of Tevatron Top Mass Measurements", 500, 600); myCanvas->SetBottomMargin(0.1); myCanvas->SetLeftMargin(0.05); myCanvas->SetRightMargin(0.05); myCanvas->SetTopMargin(0.025); //Little trick to control size of x and y axes float ncurrent = i; ncurrent+=1.5; TH2F *nullTH2F = new TH2F("nullTH2F", "", 20, 155., 190., 20, 0., ncurrent); nullTH2F->GetXaxis()->SetTitle("Top Quark Mass (GeV/c^{2})"); nullTH2F->GetYaxis()->SetLabelColor(0); nullTH2F->GetYaxis()->SetNdivisions(1); nullTH2F->GetXaxis()->CenterTitle(); nullTH2F->Draw(); //Well this is world average but never mind... Float_t theoryCentralValue = centralValue[0]; Float_t theoryErrorNeg = statSystErrorNeg[0]; Float_t theoryErrorPos = statSystErrorPos[0]; TPave *theoryPave = new TPave(theoryCentralValue-theoryErrorNeg, analysisIndex[0]-0.8, theoryCentralValue+theoryErrorPos, analysisIndex[i]+0.2, 0, "br"); //theoryPave->SetFillColor(11); //theoryPave->SetFillStyle(3013); theoryPave->SetFillColor(5); theoryPave->Draw(); //Draw results grStatSyst->SetLineColor(4); grStatSyst->SetLineWidth(3); grStatSyst->SetMarkerColor(2); grStatSyst->SetMarkerStyle(20); grStatSyst->SetMarkerSize(2.0); grStatSyst->Draw("P"); grStat->SetLineColor(2); grStat->SetLineWidth(3); grStat->SetMarkerColor(2); grStat->SetMarkerStyle(20); grStat->SetMarkerSize(2.0); grStat->Draw("P"); //Print numerical values to a string first TLatex *analysisLabel = new TLatex(); for (Int_t j = 0; j <= i; j++) { char cv[20]; TString analysisResult = ""; TString analysisLumi = "("; /* sprintf(cv,"%4.1f",centralValue[j]); analysisResult += cv; analysisResult += " #pm "; sprintf(cv,"%4.1f",statErrorPos[j]); analysisResult += cv; analysisLumi += "CDF+D0 Run I+II Average)"; analysisLabel->SetTextColor(4); */ sprintf(cv,"%4.1f",centralValue[j]); analysisResult += cv; if(statErrorPos[j] == statErrorNeg[j]){ analysisResult += " #pm"; sprintf(cv,"%4.1f",statErrorPos[j]); analysisResult += cv; analysisResult += " #pm "; }else{ analysisResult += " #pm^{"; sprintf(cv,"%4.1f",statErrorPos[j]); analysisResult += cv; analysisResult += "}_{"; sprintf(cv,"%4.1f",statErrorNeg[j]); analysisResult += cv; analysisResult += "} #pm "; } //symmetric systematic errors sprintf(cv,"%3.1f",systErrorPos[j]); analysisResult += cv; /* asymmetric systematic errors analysisResult += "} #pm^{"; sprintf(cv,"%3.1f",systErrorPos[j]); analysisResult += cv; analysisResult += "}_{"; sprintf(cv,"%3.1f",systErrorNeg[j]); analysisResult += cv; analysisResult += "}"; */ if(j==0){ analysisLumi += "CDF+D0 Run I+II Average)"; analysisLabel->SetTextColor(4); }else { analysisLumi = "(L="; sprintf(cv,"%4.0f",analysisLuminosityPb[j]); analysisLumi += cv; analysisLumi += " pb^{-1})"; analysisLabel->SetTextColor(1); } std::cout << analysisResult << std::endl; //Add description, results and lumi to plot analysisLabel->SetTextSize(0.05); analysisLabel->SetTextFont(62); analysisLabel->DrawLatex(156., analysisIndex[j]-0.45, analysisDescription[j]); analysisLabel->SetTextSize(0.052); analysisLabel->DrawLatex(175.5., analysisIndex[j]-0.45, analysisResult); analysisLabel->SetTextSize(0.035); analysisLabel->SetTextFont(52); analysisLabel->DrawLatex(156., analysisIndex[j]-0.75, analysisLumi); if(j==i){ TString cdfText = "Best Tevatron Run II (*Preliminary)"; analysisLabel->SetTextSize(0.045); analysisLabel->SetTextFont(62); analysisLabel->SetTextColor(1); analysisLabel->DrawLatex(160., analysisIndex[j]+0.22, cdfText); } if(j==0){ TString analysisErrors = "(stat) #pm (syst)"; analysisLabel->DrawLatex(182., analysisIndex[j]-0.75, analysisErrors); } } }