// Idea behind this macro is to implement cuts which are functions of // several ntuple variables. // // Tracy Usher (July 18, 2001) #ifndef PlotGraphs_c #define PlotGraphs_c #include "iostream.h" #endif class PlotGraphs { private: TCanvas* pCan; TPad** pads; int nPads; public: PlotGraphs(); ~PlotGraphs(); void setPlot(); void drawProfile(int padIdx, TProfile* pHist); void drawPlots(int padIdx, TH1F* pHist, TH1F* pOver); void drawGraphs(int padIdx, TGraph* pGr1, TGraph* pGr2, Double_t min, Double_t max, char* xTitle, char* yTitle); }; PlotGraphs::PlotGraphs(char* plotTitle, char* pictTitle, char* canTitle, int numPads) { pCan = new TCanvas(pictTitle,plotTitle,0,0,700,950); pCan->SetTitle(plotTitle); pCan->GetFrame()->SetFillColor(46); pCan->SetFillColor(19); pCan->SetBorderMode(28); TText *c1title = new TText(0.1,0.96,canTitle); c1title->SetTextSize(0.04); c1title->Draw(); pads = new TPad*[numPads]; nPads = numPads; //Define the drawing areas //TPad dimensions are xlow,ylow,xhigh,yhigh and are fractions of //the drawing area defined above. pads[0] = new TPad("pad0" ,"This is pad0" ,0.00,0.600,0.50,0.950,19); pads[1] = new TPad("pad1" ,"This is pad1" ,0.50,0.600,1.00,0.950,19); pads[2] = new TPad("pad2" ,"This is pad2" ,0.00,0.300,0.50,0.600,19); pads[3] = new TPad("pad3" ,"This is pad3" ,0.50,0.300,1.00,0.600,19); pads[4] = new TPad("pad4" ,"This is pad4" ,0.00,0.050,0.50,0.300,19); pads[5] = new TPad("pad5" ,"This is pad5" ,0.50,0.050,1.00,0.300,19); return; } void PlotGraphs::setPlot() { pCan->cd(); //pads[0]->Draw(); //pads[0]->cd(); //pads[0]->SetLogy(1); //pads[0]->GetFrame()->SetFillColor(0); return; } void PlotGraphs::drawProfile(int padIdx, TProfile* pHist) { //Make the first plot pads[padIdx]->Draw(); pads[padIdx]->cd(); pads[padIdx]->SetLogy(0); pads[padIdx]->GetFrame()->SetFillColor(10); pads[padIdx]->SetGrid(); pHist->SetFillColor(9); pHist->SetLabelSize(0.05,"X"); pHist->SetLabelSize(0.05,"Y"); pHist->SetTitleOffset(1.3,"X"); pHist->SetTitleOffset(1.3,"Y"); pHist->SetTitleSize(0.08,"X"); pHist->SetTitleSize(0.08,"Y"); pHist->Draw(); pCan->Update(); pCan->cd(); } void PlotGraphs::drawPlots(int padIdx, TH1F* pHist, TH1F* pOver) { //Make the first plot pads[padIdx]->Draw(); pads[padIdx]->cd(); pads[padIdx]->SetLogy(0); pads[padIdx]->GetFrame()->SetFillColor(10); pads[padIdx]->SetGrid(); pHist->SetFillColor(9); pHist->SetLabelSize(0.05,"X"); pHist->SetLabelSize(0.05,"Y"); pHist->SetTitleOffset(1.3,"X"); pHist->SetTitleOffset(1.3,"Y"); pHist->SetTitleSize(0.08,"X"); pHist->SetTitleSize(0.08,"Y"); pHist->Draw(); pCan->Update(); //If a second plot to overlay, then do here if (pOver) { Double_t yAxisMax = pads[padIdx]->GetUymax(); axis = new TGaxis(pads[padIdx]->GetUxmax(), pads[padIdx]->GetUymin(), pads[padIdx]->GetUxmax(), pads[padIdx]->GetUymax(), 0, 1.1, 510, "+L"); axis->SetLineColor(2); //Red axis->SetLabelSize(0.05); axis->Draw(); pOver->Scale(yAxisMax/1.1); pOver->SetFillColor(0); pOver->SetLineColor(2); //Red pOver->Draw("same"); } pCan->cd(); return; } void PlotGraphs::drawPlots(int padIdx, TH2F* pHist) { //Make the first plot pads[padIdx]->Draw(); pads[padIdx]->cd(); pads[padIdx]->SetLogy(0); pads[padIdx]->GetFrame()->SetFillColor(10); pads[padIdx]->SetGrid(); pHist->SetFillColor(9); pHist->SetLabelSize(0.05,"X"); pHist->SetLabelSize(0.05,"Y"); pHist->SetTitleOffset(1.3,"X"); pHist->SetTitleOffset(1.3,"Y"); pHist->SetTitleSize(0.08,"X"); pHist->SetTitleSize(0.08,"Y"); pHist->Draw(); pCan->Update(); pCan->cd(); return; } void PlotGraphs::drawGraphs(int padIdx, TGraph* pGr1, TGraph* pGr2, Double_t min, Double_t max, char* xTitle, char* yTitle) { pads[padIdx]->Draw(); pads[padIdx]->cd(); pads[padIdx]->SetLogy(0); pads[padIdx]->GetFrame()->SetFillColor(10); pads[padIdx]->SetGrid(); pGr1->SetMarkerStyle(21); pGr1->SetMarkerColor(4); pGr1->SetLineColor(4); pGr1->SetMinimum(min); pGr1->SetMaximum(max); // pGr1->SetTitleH(0.10); // pGr1->SetTitleW(0.60); pGr1->Draw("ACP"); pGr1->GetXaxis()->SetTitle(xTitle); pGr1->GetYaxis()->SetTitle(yTitle); pGr1->Draw("ACP"); if (pGr2) { pGr2->SetMarkerStyle(20); pGr2->SetMarkerColor(2); pGr2->SetLineColor(2); pGr2->Draw("CP"); } return; }