ROOT logo

From $ROOTSYS/tutorials/tree/clonesA_Event.C

// Example to write & read a Tree built with a complex class inheritance tree.
// It demonstrates usage of inheritance and TClonesArrays
// This is simplied / stripped extract of an event structure used within the
// Marabou project (http://www.bl.physik.uni-muenchen.de/marabou/html/)
//
//to run this example, do:
// root > .x clonesA_Event.C

void clonesA_Event_w()
{
// protect against old ROOT versions
   if ( gROOT->GetVersionInt() < 30503 ) {
      cout << "Works only with ROOT version >= 3.05/03" << endl;
      return;
   }
   if ( gROOT->GetVersionDate() < 20030406 ) {
      cout << "Works only with ROOT CVS version after 5. 4. 2003" << endl;
      return;
   }

   //write a Tree
   TFile *hfile = new TFile("clonesA_Event.root","RECREATE","Test TClonesArray");
   TTree *tree  = new TTree("clonesA_Event","An example of a ROOT tree");
   TUsrSevtData1 *event1 = new TUsrSevtData1();
   TUsrSevtData2 *event2 = new TUsrSevtData2();
   tree->Branch("top1","TUsrSevtData1",&event1,8000,99);
   tree->Branch("top2","TUsrSevtData2",&event2,8000,99);
   for (Int_t ev = 0; ev < 10; ev++) {
      cout << "event " << ev << endl;
      event1->SetEvent(ev);
      event2->SetEvent(ev);
      tree->Fill();
      if (ev <3) tree->Show(ev);
   }
   tree->Write();
   tree->Print();
   delete hfile;
}
 
void clonesA_Event_r()
{
   //read the Tree
   TFile * hfile = new TFile("clonesA_Event.root");
   TTree *tree = (TTree*)hfile->Get("clonesA_Event");

   TUsrSevtData1 * event1 = 0;
   TUsrSevtData2 * event2 = 0;
   tree->SetBranchAddress("top1",&event1);
   tree->SetBranchAddress("top2",&event2);
   for (Int_t ev = 0; ev < 8; ev++) {
      tree->Show(ev);
      cout << "Pileup event1: " <<  event1->GetPileup() << endl;
      cout << "Pileup event2: " <<  event2->GetPileup() << endl;
      event1->Clear();
      event2->Clear();
 //     gObjectTable->Print();          // detect possible memory leaks
   }
   delete hfile;
}
 
void clonesA_Event() {
   TString dir = gSystem->DirName(gInterpreter->GetCurrentMacroName());
   gROOT->ProcessLine(TString(".L ")+dir+"/clonesA_Event.cxx+");  // compile shared lib
   clonesA_Event_w();                            // write the tree
   clonesA_Event_r();                            // read back the tree
}
 clonesA_Event.C:1
 clonesA_Event.C:2
 clonesA_Event.C:3
 clonesA_Event.C:4
 clonesA_Event.C:5
 clonesA_Event.C:6
 clonesA_Event.C:7
 clonesA_Event.C:8
 clonesA_Event.C:9
 clonesA_Event.C:10
 clonesA_Event.C:11
 clonesA_Event.C:12
 clonesA_Event.C:13
 clonesA_Event.C:14
 clonesA_Event.C:15
 clonesA_Event.C:16
 clonesA_Event.C:17
 clonesA_Event.C:18
 clonesA_Event.C:19
 clonesA_Event.C:20
 clonesA_Event.C:21
 clonesA_Event.C:22
 clonesA_Event.C:23
 clonesA_Event.C:24
 clonesA_Event.C:25
 clonesA_Event.C:26
 clonesA_Event.C:27
 clonesA_Event.C:28
 clonesA_Event.C:29
 clonesA_Event.C:30
 clonesA_Event.C:31
 clonesA_Event.C:32
 clonesA_Event.C:33
 clonesA_Event.C:34
 clonesA_Event.C:35
 clonesA_Event.C:36
 clonesA_Event.C:37
 clonesA_Event.C:38
 clonesA_Event.C:39
 clonesA_Event.C:40
 clonesA_Event.C:41
 clonesA_Event.C:42
 clonesA_Event.C:43
 clonesA_Event.C:44
 clonesA_Event.C:45
 clonesA_Event.C:46
 clonesA_Event.C:47
 clonesA_Event.C:48
 clonesA_Event.C:49
 clonesA_Event.C:50
 clonesA_Event.C:51
 clonesA_Event.C:52
 clonesA_Event.C:53
 clonesA_Event.C:54
 clonesA_Event.C:55
 clonesA_Event.C:56
 clonesA_Event.C:57
 clonesA_Event.C:58
 clonesA_Event.C:59
 clonesA_Event.C:60
 clonesA_Event.C:61
 clonesA_Event.C:62
 clonesA_Event.C:63
 clonesA_Event.C:64
 clonesA_Event.C:65
 clonesA_Event.C:66
 clonesA_Event.C:67