Hi ROOT users, I am plotting histograms using a macro and have found the ways of setting attributes varied and inconsistent (naturally this could lie in the way I think about ROOT). Since this is such a fundamental part of using ROOT (displaying the results of ones physics analysis) maybe there need to be an easy way to simply plot things. Judging from the kinds of questions on this dicussion list I think other people might find something like that useful too. I am thinking here of an analagous tool to the TBrowser or TTreeViewer, a "one stop" GUI to set the layout of the canvas, axis titles etc. I don't have the C++/GUI programing skills to implement this myself but maybe someone is interested. I guess this issue relates to the philosophy of "Get ROOT working first, idiot proof later". As an "idiot" I find ROOT very good for analysing my data but spent all day today chasing inheritances and member functions just to display three plots with legible axis and titles. Titles are set one way, labels another, Rebin() resets all the X-axis properties and not the Y so the order in which you SetXXX() things is important etc. This leads me, after a long preamble to my real questions: In the following macro I set the Y-axis title to "Counts" and also set the size and the offset of the title. The values I use move the "Counts" title off the left edge of the pad and so I have to manually grab the TFrame with the mouse pointer and move it to the right for all three plot for the title to appear. 1. Is there a way to automate this resizing of the TFrame based on NDC or pad size or whatever? 2. How can you set the size of the text in the TH1F title in the TPaveText object that appears above the histogram using a macro? (sorry for the length of this example) //macro to plot 30,60 and 90deg missing energy spectra { gROOT->Reset(); TCanvas *canvas = new TCanvas("canvas","Missing Energy 30,60,90",1); canvas->Divide(3,1); TH1F *hemissfg30 = new TH1F("hemissfg30","random 30",100,-10,10); TH1F *hemissfg60 = new TH1F("hemissfg60","random 60",100,-10,10); TH1F *hemissfg90 = new TH1F("hemissfg90","random 90",100,-10,10); hemissfg30->FillRandom("gaus",1000); hemissfg60->FillRandom("gaus",1000); hemissfg90->FillRandom("gaus",1000); //must rebin first otherwise axis is reset and all SetXXXX are undone!!! hemissfg30->Rebin(2); hemissfg60->Rebin(2); hemissfg90->Rebin(2); //Set axes properties TAxis *Xaxis30 = hemissfg30->GetXaxis(); TAxis *Xaxis60 = hemissfg60->GetXaxis(); TAxis *Xaxis90 = hemissfg90->GetXaxis(); Xaxis30->SetLabelSize(0.08); Xaxis60->SetLabelSize(0.08); Xaxis90->SetLabelSize(0.08); Xaxis30->SetLabelOffset(-0.04); Xaxis60->SetLabelOffset(-0.04); Xaxis90->SetLabelOffset(-0.04); Xaxis30->SetTitleSize(0.08); Xaxis60->SetTitleSize(0.08); Xaxis90->SetTitleSize(0.08); Xaxis30->SetTitleOffset(0.5); Xaxis60->SetTitleOffset(0.5); Xaxis90->SetTitleOffset(0.5); TAxis *Yaxis30 = hemissfg30->GetYaxis(); TAxis *Yaxis60 = hemissfg60->GetYaxis(); TAxis *Yaxis90 = hemissfg90->GetYaxis(); Yaxis30->SetLabelSize(0.08); Yaxis60->SetLabelSize(0.08); Yaxis90->SetLabelSize(0.08); Yaxis30->SetLabelOffset(0.02); Yaxis60->SetLabelOffset(0.02); Yaxis90->SetLabelOffset(0.02); Yaxis30->SetTitleSize(0.08); Yaxis60->SetTitleSize(0.08); Yaxis90->SetTitleSize(0.08); Yaxis30->SetTitleOffset(1.2); Yaxis60->SetTitleOffset(1.2); Yaxis90->SetTitleOffset(1.2); //now set all the properties of the histograms hemissfg30->SetStats(0); hemissfg60->SetStats(0); hemissfg90->SetStats(0); hemissfg30->SetAxisRange(0,5); hemissfg60->SetAxisRange(0,5); hemissfg90->SetAxisRange(0,5); hemissfg30->SetXTitle("Missing Energy (MeV)"); hemissfg60->SetXTitle("Missing Energy (MeV)"); hemissfg90->SetXTitle("Missing Energy (MeV)"); hemissfg30->SetYTitle("Counts"); hemissfg60->SetYTitle("Counts"); hemissfg90->SetYTitle("Counts"); //----------------end of properties-------- //create a zero line for each histo TLine *line30 = new TLine(0,20,5,20); TLine *line60 = new TLine(0,20,5,20); TLine *line90 = new TLine(0,20,5,20); line30->SetLineStyle(2); line60->SetLineStyle(2); line90->SetLineStyle(2); line30->SetLineWidth(1); line60->SetLineWidth(1); line90->SetLineWidth(1); //-----------end line stuff //now draw on the divided canvas canvas->cd(1); hemissfg30->Draw(); line30->Draw(); canvas->cd(2); hemissfg60->Draw(); line60->Draw(); canvas->cd(3); hemissfg90->Draw(); line90->Draw(); //------------end drawing on canvas } //EOF Thanks in advance and keep up the good ROOT development work. Regards, Mark ___________________________________________________________________ Mark Boland markjb@physics.unimelb.edu.au School of Physics PhD Student The University of Melbourne Photonuclear Group Fax: +61 3 9347 4783 Ph: +61 3 8344 5426
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET