Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Loading...
Searching...
No Matches
tree4.C File Reference

Detailed Description

View in nbviewer Open in SWAN
This example writes a tree with objects of the class Event.

It is a simplified version of $ROOTSYS/test/MainEvent.cxx to write the tree, and $ROOTSYS/test/eventb.C It shows:

This example can be run in many different ways:

  • way1 using the Cling interpreter:
    .x tree4.C
  • way2 using the Cling interpreter:
    .L tree4.C
    tree4()
  • way3 using ACLIC:
    .L ../test/libEvent.so
    .x tree4.C++
    Definition test.py:1
    One can also run the write and read parts in two separate sessions. For example following one of the sessions above, one can start the session:
    .L tree4.C
    tree4r();
    R__LOAD_LIBRARY($ROOTSYS/test/libEvent.so)
    #include "TFile.h"
    #include "TTree.h"
    #include "TBrowser.h"
    #include "TH2.h"
    #include "TRandom.h"
    #include "TClassTable.h"
    #include "TSystem.h"
    #include "TROOT.h"
    #include "../test/Event.h"
    void tree4w()
    {
    //create a Tree file tree4.root
    TFile f("tree4.root","RECREATE");
    // Create a ROOT Tree
    TTree t4("t4","A Tree with Events");
    // Create a pointer to an Event object
    Event *event = new Event();
    // Create two branches, split one.
    t4.Branch("event_split", &event,16000,99);
    t4.Branch("event_not_split", &event,16000,0);
    // a local variable for the event type
    char etype[20];
    // Fill the tree
    for (Int_t ev = 0; ev <100; ev++) {
    Float_t sigmat, sigmas;
    gRandom->Rannor(sigmat,sigmas);
    Int_t ntrack = Int_t(600 + 600 *sigmat/120.);
    Float_t random = gRandom->Rndm(1);
    sprintf(etype,"type%d",ev%5);
    event->SetType(etype);
    event->SetHeader(ev, 200, 960312, random);
    event->SetNseg(Int_t(10*ntrack+20*sigmas));
    event->SetNvertex(Int_t(1+20*gRandom->Rndm()));
    event->SetFlag(UInt_t(random+0.5));
    event->SetTemperature(random+20.);
    for(UChar_t m = 0; m < 10; m++) {
    event->SetMeasure(m, Int_t(gRandom->Gaus(m,m+1)));
    }
    // fill the matrix
    for(UChar_t i0 = 0; i0 < 4; i0++) {
    for(UChar_t i1 = 0; i1 < 4; i1++) {
    event->SetMatrix(i0,i1,gRandom->Gaus(i0*i1,1));
    }
    }
    // Create and fill the Track objects
    for (Int_t t = 0; t < ntrack; t++) event->AddTrack(random);
    // Fill the tree
    t4.Fill();
    // Clear the event before reloading it
    event->Clear();
    }
    // Write the file header
    f.Write();
    // Print the tree contents
    t4.Print();
    }
    void tree4r()
    {
    // read the tree generated with tree4w
    //note that we use "new" to create the TFile and TTree objects !
    //because we want to keep these objects alive when we leave this function.
    TFile *f = new TFile("tree4.root");
    TTree *t4 = (TTree*)f->Get("t4");
    // create a pointer to an event object. This will be used
    // to read the branch values.
    Event *event = new Event();
    // get two branches and set the branch address
    TBranch *bntrack = t4->GetBranch("fNtrack");
    TBranch *branch = t4->GetBranch("event_split");
    branch->SetAddress(&event);
    Long64_t nevent = t4->GetEntries();
    Int_t nselected = 0;
    Int_t nb = 0;
    for (Long64_t i=0;i<nevent;i++) {
    //read branch "fNtrack"only
    bntrack->GetEntry(i);
    //reject events with more than 587 tracks
    if (event->GetNtrack() > 587)continue;
    //read complete accepted event in memory
    nb += t4->GetEntry(i);
    nselected++;
    //print the first accepted event
    if (nselected == 1) t4->Show();
    //clear tracks array
    event->Clear();
    }
    if (gROOT->IsBatch()) return;
    new TBrowser();
    t4->StartViewer();
    }
    void tree4() {
    Event::Reset(); // Allow for re-run this script by cleaning static variables.
    tree4w();
    Event::Reset(); // Allow for re-run this script by cleaning static variables.
    tree4r();
    }
    #define f(i)
    Definition RSha256.hxx:104
    unsigned char UChar_t
    Definition RtypesCore.h:38
    long long Long64_t
    Definition RtypesCore.h:80
    #define R__LOAD_LIBRARY(LIBRARY)
    Definition Rtypes.h:491
    #define gROOT
    Definition TROOT.h:405
    R__EXTERN TRandom * gRandom
    Definition TRandom.h:62
    A TTree is a list of TBranches.
    Definition TBranch.h:89
    virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
    Read all leaves of entry and return total number of bytes read.
    Definition TBranch.cxx:1652
    virtual void SetAddress(void *add)
    Set address of this branch.
    Definition TBranch.cxx:2628
    Using a TBrowser one can browse all ROOT objects.
    Definition TBrowser.h:37
    A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
    Definition TFile.h:51
    virtual Double_t Gaus(Double_t mean=0, Double_t sigma=1)
    Samples a random number from the standard Normal (Gaussian) Distribution with the given mean and sigm...
    Definition TRandom.cxx:274
    Double_t Rndm() override
    Machine independent random number generator.
    Definition TRandom.cxx:552
    virtual void Rannor(Float_t &a, Float_t &b)
    Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
    Definition TRandom.cxx:500
    A TTree represents a columnar dataset.
    Definition TTree.h:79
    virtual TBranch * GetBranch(const char *name)
    Return pointer to the branch with the given name in this tree or its friends.
    Definition TTree.cxx:5285
    virtual void Show(Long64_t entry=-1, Int_t lenmax=20)
    Print values of all active leaves for entry.
    Definition TTree.cxx:9340
    virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
    Read all branches of entry and return total number of bytes read.
    Definition TTree.cxx:5629
    virtual Long64_t GetEntries() const
    Definition TTree.h:460
    virtual void StartViewer()
    Start the TTreeViewer on this tree.
    Definition TTree.cxx:9414
    TMarker m
    Definition textangle.C:8
Author
Rene Brun

Definition in file tree4.C.