#include "TMultiGraph.h" #include "TCanvas.h" #include "TLegend.h" #include "TLatex.h" #include "TFile.h" #include "TROOT.h" #include "TStyle.h" #include "Riostream.h" #include "TAxis.h" // // This function will plot 16 TMultiGraph objects // into a multipane plot // // Will be used for 40Ca and 48Ca plots // TMultiGraph *mg_list[16]; TLegend *leg_list[16]; TLatex *label_list[16]; void ReadFromFile(TString rootfile="test.root") { Int_t Zlow=5; Int_t Zhigh=20; TMultiGraph *mg = 0; TLegend *leg = 0; char name1[20], name2[20]; Int_t count = 0; if (rootfile != "") { TFile *f = new TFile(rootfile, "rdnl"); gROOT->cd(); for (Int_t z=Zlow; z<=Zhigh; z++) { sprintf(name1, "graph_Zis%d", z); sprintf(name2, "legend_Zis%d", z); mg = (TMultiGraph*)f->Get(name1); leg = (TLegend*)f->Get(name2); mg_list[count] = (TMultiGraph*)mg->Clone(); leg_list[count] = (TLegend*)leg->Clone(); count++; } } else return; return; } void Plot16() { Int_t i; // ------ changeable parameters: Double_t small = 1e-6; // small number used for setting margins of the inner pads Double_t dx = 0.07; // number used for setting margins for the outer pads (where titles, labels go) Double_t lsize = 16; // label size Double_t tsize = 0.03; // title size Double_t loffsetX = 0.02; // label offset in % of the pad height Double_t loffsetY = 0.02; // label offset in % of the pad height ReadFromFile("test.root"); TCanvas *canvas = new TCanvas("canvas", "MultiPane", 800, 800); TString xtitle = "Neutron excess N-Z"; TString ytitle = "Cross section (mb)"; Int_t font = 13; TLatex *label; for (i=0; i<16; i++) { mg_list[i]->GetYaxis()->SetNdivisions(503); mg_list[i]->GetXaxis()->SetNdivisions(505); mg_list[i]->GetHistogram()->GetXaxis()->SetLimits(-5,15); mg_list[i]->GetHistogram()->GetXaxis()->SetRange(0,0); mg_list[i]->GetYaxis()->SetLabelFont(font); mg_list[i]->GetXaxis()->SetLabelFont(font); mg_list[i]->GetYaxis()->SetTitleFont(font); mg_list[i]->GetXaxis()->SetTitleFont(font); mg_list[i]->GetYaxis()->SetLabelSize(lsize); mg_list[i]->GetXaxis()->SetLabelSize(lsize); mg_list[i]->GetXaxis()->SetLabelOffset(loffsetX); mg_list[i]->GetYaxis()->SetLabelOffset(loffsetY); mg_list[i]->GetXaxis()->SetTitle(""); mg_list[i]->GetYaxis()->SetTitle(""); label = new TLatex(0.3, 0.15, Form("Label %d",i)); label->SetNDC(); label->SetTextFont(22); label->SetTextSize(0.12); label_list[i] = label; } // Setting styles for everything in this function: canvas->SetFillColor(10); gStyle->SetPadColor(10); gStyle->SetPadTickX(1); gStyle->SetPadTickY(1); gStyle->SetFrameBorderMode(0); gStyle->SetPadBorderSize((Short_t)small); gStyle->SetPadLeftMargin(small); gStyle->SetPadTopMargin(small); gStyle->SetPadBottomMargin(small); gStyle->SetPadRightMargin(small); gStyle->SetOptLogy(1); // ------------------------------------ Double_t x = (1-dx)/4; // one side of the inner pad Double_t x1 = x+dx; // thicker side Double_t outer_margin = 3*dx/x; TPad *pad0 = new TPad("pad0", "", 0, 1-x, x1, 1); outer_margin = 1-(Double_t)pad0->VtoPixel(0)/(Double_t)pad0->UtoPixel(1); pad0->SetLeftMargin(outer_margin); TPad *pad1 = new TPad("pad1", "", x1, 1-x, x1+x, 1); TPad *pad2 = new TPad("pad2", "", x1+x,1-x, x1+2*x,1); TPad *pad3 = new TPad("pad3", "", x1+2*x,1-x, 1, 1); TPad *pad4 = new TPad("pad4", "", 0, 1-2*x, x1, 1-x); pad4->SetLeftMargin(outer_margin); TPad *pad5 = new TPad("pad5", "", x1, 1-2*x, x1+x, 1-x); TPad *pad6 = new TPad("pad6", "", x1+x, 1-2*x, x1+2*x, 1-x); TPad *pad7 = new TPad("pad7", "", x1+2*x, 1-2*x, 1, 1-x); TPad *pad8 = new TPad("pad8", "", 0, 1-3*x, x1, 1-2*x); pad8->SetLeftMargin(outer_margin); TPad *pad9 = new TPad("pad9", "", x1, 1-3*x, x1+x, 1-2*x); TPad *pad10 = new TPad("pad10", "", x1+x, 1-3*x, x1+2*x, 1-2*x); TPad *pad11 = new TPad("pad11", "", x1+2*x, 1-3*x, 1, 1-2*x); TPad *pad12 = new TPad("pad12", "", 0, 0, x1, 1-3*x); pad12->SetLeftMargin(outer_margin); pad12->SetBottomMargin(outer_margin); TPad *pad13 = new TPad("pad13", "", x1, 0, x1+x, 1-3*x); pad13->SetBottomMargin(outer_margin); TPad *pad14 = new TPad("pad14", "", x1+x, 0, x1+2*x, 1-3*x); pad14->SetBottomMargin(outer_margin); TPad *pad15 = new TPad("pad15", "", x1+2*x, 0, 1, 1-3*x); pad15->SetBottomMargin(outer_margin); //pad0->SetGridx(); //pad1->SetGridx(); //pad2->SetGridx(); //pad3->SetGridx(); //pad4->SetGridx(); //pad5->SetGridx(); //pad6->SetGridx(); //pad7->SetGridx(); //pad8->SetGridx(); //pad9->SetGridx(); Double_t factorY = (Double_t)pad9->VtoPixel(0)/(Double_t)pad12->VtoPixel(0); Double_t factorX = (Double_t)pad9->UtoPixel(1)/(Double_t)pad12->UtoPixel(1); cout << "FactorX: "<SetFillStyle(4000); pad->SetFillColor(10); TLatex *titleX = new TLatex(0.5, 0.025, xtitle.Data()); titleX->SetNDC(); titleX->SetTextFont(font); titleX->SetTextSize(tsize); titleX->SetTextAlign(22); TLatex *titleY = new TLatex(0.016, 0.5, ytitle.Data()); titleY->SetNDC(); titleY->SetTextAngle(90); titleY->SetTextFont(font); titleY->SetTextSize(tsize); titleY->SetTextAlign(22); canvas->Clear(); pad0->Draw(); pad1->Draw(); pad2->Draw(); pad3->Draw(); pad4->Draw(); pad5->Draw(); pad6->Draw(); pad7->Draw(); pad8->Draw(); pad9->Draw(); pad10->Draw(); pad11->Draw(); pad12->Draw(); pad13->Draw(); pad14->Draw(); pad15->Draw(); // now drawing: pad0->cd(); mg_list[0]->Draw("ap"); label_list[0]->SetX(label_list[0]->GetX()*factorX+1-factorX); label_list[0]->Draw(); pad1->cd(); mg_list[1]->Draw("ap"); label_list[1]->Draw(); pad2->cd(); mg_list[2]->Draw("ap"); label_list[2]->Draw(); pad3->cd(); mg_list[3]->Draw("ap"); label_list[3]->Draw(); pad4->cd(); mg_list[4]->Draw("ap"); label_list[4]->SetX(label_list[4]->GetX()*factorX+1-factorX); label_list[4]->Draw(); pad5->cd(); mg_list[5]->Draw("ap"); label_list[5]->Draw(); pad6->cd(); mg_list[6]->Draw("ap"); label_list[6]->Draw(); pad7->cd(); mg_list[7]->Draw("ap"); label_list[7]->Draw(); pad8->cd(); mg_list[8]->Draw("ap"); label_list[8]->SetX(label_list[8]->GetX()*factorX+1-factorX); label_list[8]->Draw(); pad9->cd(); mg_list[9]->Draw("ap"); label_list[9]->Draw(); pad10->cd(); mg_list[10]->Draw("ap"); label_list[10]->Draw(); pad11->cd(); mg_list[11]->Draw("ap"); label_list[11]->Draw(); pad12->cd(); label_list[12]->SetX(label_list[12]->GetX()*factorX+1-factorX); label_list[12]->SetY(label_list[12]->GetY()*factorY+1-factorY); label_list[12]->SetTextSize(label_list[12]->GetTextSize()*factorX); mg_list[12]->GetXaxis()->SetLabelSize(lsize*factorX); mg_list[12]->GetYaxis()->SetLabelSize(lsize*factorY); mg_list[12]->GetXaxis()->SetLabelOffset(loffsetX/factorX); mg_list[12]->GetYaxis()->SetLabelOffset(loffsetY/factorY); mg_list[12]->Draw("ap"); label_list[12]->Draw(); pad13->cd(); mg_list[13]->Draw("ap"); label_list[13]->SetY(label_list[13]->GetY()*factorY+1-factorY); label_list[13]->Draw(); pad14->cd(); mg_list[14]->Draw("ap"); label_list[14]->SetY(label_list[14]->GetY()*factorY+1-factorY); label_list[14]->Draw(); pad15->cd(); mg_list[15]->Draw("ap"); label_list[15]->SetY(label_list[15]->GetY()*factorY+1-factorY); label_list[15]->Draw(); canvas->cd(); pad->Draw(); pad->cd(); titleX->Draw(); titleY->Draw(); canvas->Update(); }