#include #include #include #include #include void CanvasPartition(TCanvas *C,const Int_t Nx = 2,const Int_t Ny = 2) { if(!C) return; // Margins Float_t lMargin = 0.15; Float_t rMargin = 0.05; Float_t bMargin = 0.15; Float_t tMargin = 0.05; // Setup Pad layout: Float_t vSpacing = 0.0; Float_t vStep = (1.- bMargin - tMargin - (Ny-1) * vSpacing) / Ny; Float_t hSpacing = 0.0; Float_t hStep = (1.- lMargin - rMargin - (Nx-1) * hSpacing) / Nx; Float_t vposd = 0.0; Float_t vposu = 0.0; Float_t vmard = 0.0; Float_t vmaru = 0.0; Float_t vfactor = 0.0; Float_t hposl = 0.0; Float_t hposr = 0.0; Float_t hmarl = 0.0; Float_t hmarr = 0.0; Float_t hfactor = 0.0; for(Int_t i=0;icd(0); // cout << Form(" %i %i : (%.2f,%.2f,%.2f,%.2f)",i,j,hposl,vposd,hposr,vposu) << endl; char name[16]; sprintf(name,"pad_%i_%i",i,j); TPad *pad = (TPad*) gROOT->FindObject(name); if(pad) delete pad; pad = new TPad(name,"",hposl,vposd,hposr,vposu); pad->SetLeftMargin(hmarl); pad->SetRightMargin(hmarr); pad->SetBottomMargin(vmard); pad->SetTopMargin(vmaru); pad->SetFrameBorderMode(0); pad->SetBorderMode(0); pad->SetBorderSize(0); pad->Draw(); } } } void testCanvasPartition() { gStyle->SetOptStat(0); TCanvas *C = (TCanvas*) gROOT->FindObject("C"); if(C) delete C; C = new TCanvas("C","canvas",1024,640); C->SetFillStyle(4000); const Int_t Nx =2; const Int_t Ny =2; TH1F *h = (TH1F*) gROOT->FindObject("histo"); if(h) delete h; h = new TH1F("histo","",100,-5.0,5.0); h->FillRandom("gaus",10000); h->GetXaxis()->SetTitle("x axis"); h->GetYaxis()->SetTitle("y axis"); TPad *pad[Nx][Ny]; CanvasPartition(C,Nx,Ny); for(Int_t i=0;icd(0); char pname[16]; sprintf(pname,"pad_%i_%i",i,j); pad[i][j] = (TPad*) gROOT->FindObject(pname); pad[i][j]->Draw(); pad[i][j]->SetFillStyle(4000); pad[i][j]->SetFrameFillStyle(4000); pad[i][j]->cd(); Float_t xFactor = pad[0][0]->GetAbsWNDC()/pad[i][j]->GetAbsWNDC(); Float_t yFactor = pad[0][0]->GetAbsHNDC()/pad[i][j]->GetAbsHNDC(); // cout << Form(" %i %i : (%.2f,%.2f)",i,j,xFactor,yFactor) << endl; char hname[16]; sprintf(hname,"h_%i_%i",i,j); TH1F *hFrame = (TH1F*) h->Clone(hname); hFrame->Reset(); hFrame->Draw(); hFrame->GetYaxis()->SetRangeUser(0.0001,1.2*h->GetMaximum()); // Format for y axis hFrame->GetYaxis()->CenterTitle(); hFrame->GetYaxis()->SetNdivisions(505); hFrame->GetYaxis()->SetLabelSize(0.095*yFactor); hFrame->GetYaxis()->SetLabelOffset(0.02/yFactor); hFrame->GetYaxis()->SetTitleSize(0.1*yFactor); hFrame->GetYaxis()->SetTitleOffset(1.2/yFactor); hFrame->GetYaxis()->SetTickLength(0.02/yFactor); // Format for x axis hFrame->GetXaxis()->CenterTitle(); hFrame->GetXaxis()->SetNdivisions(505); hFrame->GetXaxis()->SetLabelSize(0.095*xFactor); hFrame->GetXaxis()->SetLabelOffset(0.02/xFactor); hFrame->GetXaxis()->SetTitleSize(0.1*xFactor); hFrame->GetXaxis()->SetTitleOffset(1.2/xFactor); hFrame->GetXaxis()->SetTickLength(0.02/xFactor); hFrame->SetLabelFont(42,"xyz"); hFrame->SetTitleFont(42,"xyz"); h->Draw("same"); } } C->cd(); C->Print("testCanvasPartition.pdf"); }