Learning Center
Plans & pricing Sign in
Sign Out

Visualizing Data with ROOT


									             Visualizing Data with ROOT

                        Joe Foster
                 University of Manchester

2006-10-26               Joe Foster
•   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
    – 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;

• Data is held in „member variables‟.
• Everything is done by „member functions‟ or
    – 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)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.

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:

• You can have > 1 file open. Change focus to another
  open file:

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:


    – 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:
    – This opens c1 automatically.
• You can subdivide the canvas and put different plots in each
       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
    – 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                     Linux
    % ssh -X -Y               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 *
      *          *
      *                             *
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:
• Get a Tree and find information:
    TTree* truth0 = (TTree*) myf->Get("Truth0")

2006-10-26                      Joe Foster
             Making plots: TTree->Draw().
• Draw b-quark eta distribution:
• 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");

• Display and print it:
    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
• They can be built up from commands tried out in
    – Remember to add ';' at the ends of lines.
    – Include the necessary '#include' directives to make it stand
• 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)",
     – 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");

• Note: no function name, just { }.

2006-10-26                      Joe Foster

To top