tree3.C: Example of a Tree where branches are variable length arrays | Trees I/O, Queries, Graphics | treefriend.C: Illustrates how to use Tree friends: |
#include "TFile.h" #include "TTree.h" #include "TBrowser.h" #include "TH2.h" #include "TRandom.h" #include "TClassTable.h" #include "TSystem.h" #include "TROOT.h" #if defined(__CINT__) && !defined(__MAKECINT__) #include "../test/libEvent.so" #else #include "../test/Event.h" #endif // 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: // -how to fill a Tree with an event class containing these // data members: // char fType[20]; // Int_t fNtrack; // Int_t fNseg; // Int_t fNvertex; // UInt_t fFlag; // Float_t fTemperature; // EventHeader fEvtHdr; // TClonesArray *fTracks; //-> // TH1F *fH; //-> // Int_t fMeasures[10]; // Float_t fMatrix[4][4]; // Float_t *fClosestDistance; //[fNvertex] // // -the difference in splitting or not splitting a branch // -how to read selected branches of the tree, // and print the first entry with less than 587 tracks. // -how to browse and analyze the Tree via the TBrowser and TTreeViewer // This example can be run in many different ways: // way1: .x tree4.C using the CINT interpreter // way2: .L tree4.C // tree4() // way3: .L ../test/libEvent.so // .x tree4.C++ using ACLIC // 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(); 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() { // check to see if the event class is in the dictionary // if it is not load the definition in libEvent.so if (!TClassTable::GetDict("Event")) { gSystem->Load("$ROOTSYS/test/libEvent"); } // 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); Int_t nevent = (Int_t)t4->GetEntries(); Int_t nselected = 0; Int_t nb = 0; for (Int_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(); } tree4.C:1 tree4.C:2 tree4.C:3 tree4.C:4 tree4.C:5 tree4.C:6 tree4.C:7 tree4.C:8 tree4.C:9 tree4.C:10 tree4.C:11 tree4.C:12 tree4.C:13 tree4.C:14 tree4.C:15 tree4.C:16 tree4.C:17 tree4.C:18 tree4.C:19 tree4.C:20 tree4.C:21 tree4.C:22 tree4.C:23 tree4.C:24 tree4.C:25 tree4.C:26 tree4.C:27 tree4.C:28 tree4.C:29 tree4.C:30 tree4.C:31 tree4.C:32 tree4.C:33 tree4.C:34 tree4.C:35 tree4.C:36 tree4.C:37 tree4.C:38 tree4.C:39 tree4.C:40 tree4.C:41 tree4.C:42 tree4.C:43 tree4.C:44 tree4.C:45 tree4.C:46 tree4.C:47 tree4.C:48 tree4.C:49 tree4.C:50 tree4.C:51 tree4.C:52 tree4.C:53 tree4.C:54 tree4.C:55 tree4.C:56 tree4.C:57 tree4.C:58 tree4.C:59 tree4.C:60 tree4.C:61 tree4.C:62 tree4.C:63 tree4.C:64 tree4.C:65 tree4.C:66 tree4.C:67 tree4.C:68 tree4.C:69 tree4.C:70 tree4.C:71 tree4.C:72 tree4.C:73 tree4.C:74 tree4.C:75 tree4.C:76 tree4.C:77 tree4.C:78 tree4.C:79 tree4.C:80 tree4.C:81 tree4.C:82 tree4.C:83 tree4.C:84 tree4.C:85 tree4.C:86 tree4.C:87 tree4.C:88 tree4.C:89 tree4.C:90 tree4.C:91 tree4.C:92 tree4.C:93 tree4.C:94 tree4.C:95 tree4.C:96 tree4.C:97 tree4.C:98 tree4.C:99 tree4.C:100 tree4.C:101 tree4.C:102 tree4.C:103 tree4.C:104 tree4.C:105 tree4.C:106 tree4.C:107 tree4.C:108 tree4.C:109 tree4.C:110 tree4.C:111 tree4.C:112 tree4.C:113 tree4.C:114 tree4.C:115 tree4.C:116 tree4.C:117 tree4.C:118 tree4.C:119 tree4.C:120 tree4.C:121 tree4.C:122 tree4.C:123 tree4.C:124 tree4.C:125 tree4.C:126 tree4.C:127 tree4.C:128 tree4.C:129 tree4.C:130 tree4.C:131 tree4.C:132 tree4.C:133 tree4.C:134 tree4.C:135 tree4.C:136 tree4.C:137 tree4.C:138 tree4.C:139 tree4.C:140 tree4.C:141 tree4.C:142 tree4.C:143 tree4.C:144 tree4.C:145 tree4.C:146 tree4.C:147 tree4.C:148 tree4.C:149 tree4.C:150 tree4.C:151 tree4.C:152 tree4.C:153 tree4.C:154 tree4.C:155 tree4.C:156 tree4.C:157 tree4.C:158 tree4.C:159 tree4.C:160 tree4.C:161 tree4.C:162 tree4.C:163 tree4.C:164 tree4.C:165 tree4.C:166 tree4.C:167 tree4.C:168 |
|