1 / 23

Visualizing Data with ROOT

Visualizing Data with ROOT. Joe Foster University of Manchester. 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)

bin
Télécharger la présentation

Visualizing Data with ROOT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visualizing Data with ROOT Joe Foster University of Manchester Joe Foster

  2. 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 Joe Foster

  3. 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!). Joe Foster

  4. 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. Joe Foster

  5. 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: TH1FMyHist; Class Object • Data is held in ‘member variables’. • Everything is done by ‘member functions’ or ‘methods’. • See ROOT Class Index. Joe Foster

  6. 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. Joe Foster

  7. 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 aTH1F constructor function TH1F objectcalled with histogram parameters New object is stored on the heap & persists when the calling function exits. (warning: memory leaks!) • Rememberdelete h1; Joe Foster

  8. 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)4 root [2] acos(-1) (const double)3.14159265358979312e+00 Root [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. Joe Foster

  9. 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() Joe Foster

  10. 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") Joe Foster

  11. 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. Joe Foster

  12. 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. Joe Foster

  13. 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. Joe Foster

  14. 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 * * * ******************************************* Joe Foster

  15. 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: • Declare a TBrowser object in an xterm window: TBrowser tb • Wait patiently while it starts. Joe Foster

  16. 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() Joe Foster

  17. 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]) )") Joe Foster

  18. 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. Joe Foster

  19. 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 . Joe Foster

  20. 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. Joe Foster

  21. 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++. Joe Foster

  22. 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(); • } Joe Foster

  23. 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 { }. Joe Foster

More Related