void drawCanvasfor2histwithRatioPlot(TH1F *h1, TH1F *h2, char *xtitle, char *dirName,char *gifName){ using namespace std; THStack *myStack; myStack = new THStack("myStack","myStack"); TCanvas *c = new TCanvas("c", "c",200, 10, 700, 700); c->SetLogy(); c->SetTopMargin(0.06991526); c->Divide(2); // ------------>Primitives in pad: pad1 TPad *pad1 = new TPad("p1", "",0,0,1,1); pad1->Draw(); pad1->cd(); pad1->Range(-12.5,-1271.556,112.5,3814.668); pad1->SetFillColor(0); pad1->SetBorderMode(0); pad1->SetBorderSize(2); pad1->SetBottomMargin(0.25); pad1->SetFrameFillStyle(0); pad1->SetFrameBorderMode(0); pad1->SetFrameFillStyle(0); pad1->SetFrameBorderMode(0); gPad->SetLogy(1); char *binw = new char[100]; string fname(gifName); int fstr = (int)fname.find("Pt",0); if(fstr!=string::npos) { sprintf(binw,"Events / %2.1f GeV/c", float(h1->GetBinWidth(1))); }// if(fstr!=string::npos) //else //sprintf(binw,"Events / %2.1f GeV/c^{2}", float(h1->GetBinWidth(1))); if( !(fstr!=string::npos) ) { fstr = (int)fname.find("Eta",0); if(fstr!=string::npos) { sprintf(binw,"Events / %2.1f", float(h1->GetBinWidth(1))); }// if(fstr!=string::npos) else sprintf(binw,"Events / %2.1f GeV/c^{2}", float(h1->GetBinWidth(1))); } h1->SetLineColor(kRed); h2->SetLineColor(kBlue); float max = TMath::Max(h1->GetMaximum(),h2->GetMaximum()); h1->SetMaximum(max*1.2); h1->SetMinimum(0.01); h2->SetMaximum(max*1.2); h2->SetMinimum(0.01); /////////////////////////////////////////////////////////////////////////////////////// int nbins = h1->GetNbinsX(); double xlow = h1->GetXaxis()->GetXmin(); double xhigh = h1->GetXaxis()->GetXmax(); //TH1F *Total = new TH1F("Total","Total", nbins,xlow,xhigh); h1->Draw(""); //c->Update(); pad1->Update(); TPaveStats *st = (TPaveStats*)h1->FindObject("stats"); st->SetTextColor(2); double x1 = st->GetX1NDC(); double x2 = st->GetX2NDC(); double diff = x2-x1; double y1 = st->GetY1NDC(); double y2 = st->GetY2NDC(); double diffy = y2-y1; //c->Update(); pad1->Update(); h2->Draw("sames"); //c->Update(); pad1->Update(); TPaveStats *st1 = (TPaveStats*)h2->FindObject("stats"); st1->SetX1NDC(x1-diff); st1->SetX2NDC(x1); st1->SetTextColor(4); //c->Update(); pad1->Update(); //h1->GetXaxis()->SetTitle(xtitle); h1->GetXaxis()->SetLabelSize(0.0); h1->GetYaxis()->SetLabelSize(0.03); h1->GetYaxis()->SetTitle(binw); //h2->GetXaxis()->SetTitle(xtitle); h2->GetYaxis()->SetLabelSize(0.03); h2->GetXaxis()->SetLabelSize(0.0); h2->GetYaxis()->SetTitle(binw); TLegend *leg = new TLegend(0.2729885,0.6562784,0.591954,0.9969743,NULL,"brNDC"); leg->SetTextFont(62); leg->SetLineColor(1); leg->SetLineStyle(1); leg->SetLineWidth(1); leg->SetFillColor(0); leg->SetFillStyle(1001); TLegendEntry *entry=leg->AddEntry("h1","Private Zgamma sample","f"); entry->SetFillColor(kRed); entry->SetFillStyle(1001); entry->SetLineColor(kRed); entry->SetLineWidth(1); entry->SetMarkerColor(1); entry->SetMarkerStyle(21); entry->SetMarkerSize(1); entry=leg->AddEntry("h2"," Official Zgamma sample","f"); entry->SetFillColor(kBlue); entry->SetFillStyle(1001); entry->SetLineColor(kBlue); entry->SetLineWidth(1); entry->SetMarkerColor(1); entry->SetMarkerStyle(21); entry->SetMarkerSize(1); TLatex *tex = new TLatex(0.25,0.95,"CMS Preliminary 7 TeV 4.7 fb^{-1}"); tex->SetNDC(); tex->SetTextSize(0.05); tex->SetLineWidth(2); pad1->Modified(); pad1->Update(); c->cd(); // ------------>Primitives in pad: pad2 TPad *pad2 = new TPad("p2", "",0,0,1,1); pad2->Draw(); pad2->cd(); pad2->Range(-12.5,-0.1666668,112.5,6.500001); pad2->SetFillColor(0); pad2->SetFillStyle(4000); pad2->SetBorderMode(0); pad2->SetBorderSize(2); pad2->SetTicky(); pad2->SetTopMargin(0.75); pad2->SetFrameFillStyle(0); pad2->SetFrameBorderMode(0); pad2->SetFrameFillStyle(0); pad2->SetFrameBorderMode(0); const int nmx = 1000; double bincenter[nmx]; double ratio[nmx]; double errorinx[nmx]; double errorinratio[nmx]; cout<<"integral data = "<Integral()<SetMinimum(-5.); gr5->SetMaximum(5.); gr5->SetMarkerColor(2); gr5->SetMarkerStyle(20); gr5->SetMarkerSize(0.7); gr5->GetXaxis()->SetRangeUser(xmin,xmax); //gr5->GetXaxis()->SetLabelOffset(0.03); gr5->GetYaxis()->SetNdivisions(5); gr5->GetYaxis()->SetLabelOffset(0.02); gr5->GetYaxis()->SetLabelSize(0.03); //gStyle->SetOptTitle(kFALSE); //gPad->Update(); gr5->SetTitle(); gr5->GetXaxis()->SetTitle(xtitle); xmin = h1->GetXaxis()->GetXmin(); xmax = h1->GetXaxis()->GetXmax(); TLine *line = new TLine(xmin,1,xmax,1); line->SetLineColor(2); line->Draw(); pad2->Modified(); //pad1->Draw("same"); c->cd(1); pad1->cd(); pad1->SetEditable(kTRUE); leg->Draw(); pad1->Modified(); pad1->Update(); c->Update(); c->Modified(); c->cd(); c->SetSelected(c); char *filename = new char[100]; sprintf(filename,"%s/%s.gif",dirName,gifName); c->Print(filename); sprintf(filename,"%s/%s.pdf",dirName,gifName); c->Print(filename); sprintf(filename,"%s/%s.C",dirName,gifName); c->Print(filename); }