Post on 31-Jan-2016
description
transcript
2006-10-26 Joe Foster
Visualizing Data with ROOT
Joe Foster
University of Manchester
2006-10-26 Joe Foster
Contents
• What is ROOT? Why use it?• Where to get information.• A little C++. CINT: the C++ interpreter.• Basic Classes:
– ROOT files (TFile) + directories (TDirectory)– Histograms (TH1*, TH2*, TH3*)– Canvases (TCanvas)– ‘Trees’ or ntuples (TTree)
• Running ROOT.– Exploring ROOT files. Using TBrowser.– Making plots: TTree->Draw().
• Selections.• 2D Plots, • Drawing options
– Saving + Printing plots
• ROOT macros
2006-10-26 Joe Foster
What is ROOT and why use it?
• What: “An Object Oriented Data Analysis Framework”– OO brings scalable, maintainable code.– Data analysis:
• Visualization: 1D, 2D, 3D plots.• Function evaluation & Fitting.• Either CINT interpreter or compiled C++.• Efficient data input/output + storage format.• Link to SQL databases.• Network access to data (xrootd).• Parallel processing (PROOF).
• Why: (See above)– More flexible than spreadsheets.– Widely used in HEP (ATLAS, D0, BaBar + …)– Fairly easy to learn (Physicists are smart!).
2006-10-26 Joe Foster
Where to Get Information
• http://root.cern.ch/– User’s Guide (pdf)– Tutorials, including BaBar & FNAL– Reference Guide. List of all the classes + member
functions.
• In ROOT, do ‘?’ for list of CINT commands.• Colleagues
– Sometimes save hours of searching + reading.– Know about ROOT ‘culture’ of your experiment.
2006-10-26 Joe Foster
A Little C++: Classes & Objects.
• Everything is made from classes.– A class is an ‘abstract data type’.– Instances of classes are objects.
• Example - Declaring a histogram object:
TH1F MyHist;
ClassObject
• Data is held in ‘member variables’.• Everything is done by ‘member functions’ or
‘methods’.– See ROOT Class Index.
2006-10-26 Joe Foster
A Little C++: Inheritance
• Specialized classes can inherit properties from more general parent classes:
class TH1F : public TH1, public TArrayF
– All TH1F objects are also TH1s and TArrayFs.– TH1F inherits Draw() method from TH1.
• Explore the ROOT class hierarchy in the Class Index web pages.
• Some parent classes are never instantiated.
2006-10-26 Joe Foster
A Little C++: Constructor Methods
• When an object is created, its constructor is run.• Usual way of initializing objects.• Example: create a 1D histogram:
TH1F *h1 = new TH1F("MyHist","My Title",100,0,4.4);
Pointer to a TH1F constructor function
TH1F object called with histogram parameters
New object is stored on the heap & persists when
the calling function exits. (warning: memory leaks!)– Remember delete h1;
2006-10-26 Joe Foster
CINT: the C++ interpreter
• Command line interpreter.• Syntax is mostly(!) the same as C++.• Develop code interactively, then save as macros.• Any C++ expression is evaluated immediately:
root [1] 2+2(const int)4root [2] acos(-1)(const double)3.14159265358979312e+00Root [3] .x MyProg.cxx load + execute MyProg root [4] .q quit ROOT
• CINT commands are prefixed with a ‘.’ No ‘;’ at end of line.• A simple debugger lets you step through a program, set
breakpoints, etc. Do ‘?’ in ROOT to see the commands.
2006-10-26 Joe Foster
Basic Classes: TFile, TDirectory
Class TFile: public Tdirectory
• Open a ROOT file:TFile* ntF = new TFile("ModTests050418.root");
• Close it:ntF->Close()
• You can have > 1 file open. Change focus to another open file:File2->cd()
2006-10-26 Joe Foster
Basic Classes: TFile, TDirectory
Class TFile: public Tdirectory
• List file contents:root [6] ntF->ls() ‘->’ calls methods for
pointers to objects.TFile** ModTests050418.root TreeFile TFile* ModTests050418.root TreeFile KEY: TTree tms;1 Module Production Status KEY: TH1I hintstart;1 Total Modules Started KEY: TH1I hintbond;1 Total Modules Bonded
…
• Get the ntuple from the file so you can use it:root [7] TTree* tms0 = (TTree*) ntF->Get("tms")
2006-10-26 Joe Foster
Basic Classes: Histograms
• 1D, 2D, 3D histograms (TH1, TH2, TH3).• In each case, options for 1 byte, integer, float,
double per channel.• ‘Book’ a histogram by declaring it, supplying nchans,
xlow, xup, etc as parameters to constructor method:
TH1F *h1 = new TH1F("MyHist","MyTitle",100,0.0,4.4)
• Draw it:
h1->Draw("E”)
– The "E” option draws error bars.
2006-10-26 Joe Foster
Basic Classes: TCanvas
• Graphical output goes into a TCanvas object, usually called ‘c1’ by default:
h1->Draw("E")– This opens c1 automatically.
• You can subdivide the canvas and put different plots in each area:
c1->Divide(1,2)c1->cd(1)h1->Draw() …
• Set log or linear axes from the canvas:c1->SetLogy(1) // Turns log y axis on.c1->SetLogy(0) // Turns it off.
• There is also a graphical editor. Switch it on from ‘Options’ + ‘View’ menus.
• Once the plot is to your liking, save it from the ‘File’ menu on c1.
2006-10-26 Joe Foster
Basic Classes: TTree
• A Tree is like an ntuple which stores any kind of object, not just floating point numbers. – Efficient storage format - save disk space with large amounts of
data.
– Fast access methods - quickly scan the whole Tree.
• Produce 1D, 2D, 3D plots directly from the Tree. – Plot results of calculations on stored data.
– Complex selections of which data to plot.
– Save plots as histograms.
– Loop over arrays stored in the rows.
• Add variables from other Trees with AddFriend().• Extend effective length of a Tree with a Chain of Trees.
2006-10-26 Joe Foster
Running ROOT
• To run ROOT on the linux cluster :– Have X11 forwarding enabled for ssh– Open xterm window.% ssh you@linux.hep.man.ac.uk Linux% ssh -X -Y you@linux.hep.man.ac.uk Mac% cd YourDataDirectory% root ******************************************* * * * W E L C O M E to R O O T * * * * Version 5.12/00 10 July 2006 * * * * You are welcome to visit our Web site * * http://root.cern.ch * * * *******************************************
2006-10-26 Joe Foster
Exploring ROOT files. Using TBrowser.
• TBrowser is a graphical interface for exploring ROOT files and Directories. You can display stored histograms, and make simple plots from Trees.
• To start a TBrowser:1. Declare a TBrowser object in an xterm window:
TBrowser tb
2. Wait patiently while it starts.
2006-10-26 Joe Foster
Exploring ROOT files. CINT Commands
• Open a file:TFile* myf = new TFile("MyFile.root")
• Some useful TDirectory commands:myf->pwd()myf->ls()myf->Close()
• Get a Tree and find information:TTree* truth0 = (TTree*) myf->Get("Truth0")truth0->GetEntries()truth0->Print()
2006-10-26 Joe Foster
Making plots: TTree->Draw().
• Draw b-quark eta distribution:truth0->Draw("Bot_eta")
• You can draw calculated formulae:truth0->Draw("Bot_phi[1] - Bot_phi[0]")– Trees can store arrays as well as simple variables.
• Formulae can include almost any valid C++ code.truth0->Draw("sqrt((Top_phi[1]-
Top_phi[0])*(Top_phi[1]-Top_phi[0]) + (Top_eta[1]-Top_eta[0])*(Top_eta[1]-Top_eta[0]) )")
2006-10-26 Joe Foster
TTree->Draw(): Selections, Weights
• You can add cuts to Draw() commands. Any expression that evaluates to 0 or 1 works:truth0->Draw("W_phi[1] - W_phi[0]", "W_N==2")
truth0->Draw("Top_phi-W_phi", "Top_charge*W_charge>0")
• Entries can be weighted:truth0->Draw("W_phi[1] - W_phi[0]",
"eventWeightMCatNLO*(W_N==2)")
• Entries with total weight = 0 are cut.
2006-10-26 Joe Foster
TTree->Draw(). 2D Plots. Draw Options
• 2D plots can reveal information missing from 1D:truth0->Draw("Top_phi:W_phi",
"Top_charge*W_charge>0")
• Display options can be added from Draw():truth0->Draw("Top_phi:W_phi",
"Top_charge*W_charge>0","box")
• Draw options are described in the Class Index web page entry for THistPainter::Paint .
2006-10-26 Joe Foster
Saving + Printing plots
• You can save the result of Ttree Draw() in a histogram and adjust its appearance:
Truth0->Draw("W_p_T/1000.0>>TruthPt(50,0.0,500.0)", "W_N>0");
TH1F* TruthPt = (TH1F*) gDirectory->Get("TruthPt");TruthPt->SetTitle("Truth W Pt");TruthPt->SetXTitle("Pt");
• Display and print it:TruthPt->Draw();C1->Print("Truth_W_Pt.gif", "gif");
• See the Tpad Print() command for printing options.
2006-10-26 Joe Foster
ROOT macros
• ROOT macros are C++ files that execute within ROOT.
• They can be built up from commands tried out in CINT.– Remember to add ';' at the ends of lines.– Include the necessary '#include' directives to make it
stand alone.
• Execute a macro in CINT:.x MyMacro.cxx
• File extension should be '.cxx', '.cpp', or just '.C' in case it is just C and not C++.
2006-10-26 Joe Foster
ROOT Macros: Example1
• File midyfAll.cpp:– #include <TROOT.h>– #include <TH1F.h>– #include <TTree.h>– #include <TFile.h>
– void midyfAll(char* infile) {– TFile* ff = new TFile(infile);– TTree* mod = (TTree*) ff->Get("mod");– gStyle->SetOptStat(1);– mod->Draw("midyf-midyfNom>>Midyf(16,-0.008,0.008)",
"mxy.Test>0");– TH1F* Midyf = (TH1F*) gDirectory->Get("Midyf");– Midyf->SetFillColor(8);– Midyf->SetTitle("Midyf - Nominal (mm)");– Midyf->Draw();– }
2006-10-26 Joe Foster
ROOT Macros: Example2
• This macro executes as if you had typed in the commands in CINT:{
TChain* truth0 = new TChain("Truth0");truth0->Add("AcerMCttbar.011.AANT0._*.root");
}
• Note: no function name, just { }.