Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

testEvent.cc

Go to the documentation of this file.
00001 
00002 // $Id: testEvent.cc,v 1.1 2007/02/09 04:43:48 fmwk Exp $
00003 //
00004 // Test making and event and writing it out, then reading it back into
00005 // memory
00006 //
00007 // messier@indiana.edu
00009 extern "C" {
00010 #include <unistd.h>
00011 #include <sys/time.h>
00012 }
00013 #include <string>
00014 #include <iostream>
00015 #include <cassert>
00016 #include "TRint.h"
00017 #include "TROOT.h"
00018 #include "TFile.h"
00019 #include "TTree.h"
00020 #include "TBranch.h"
00021 #include "TBrowser.h"
00022 #include "EventDataModel/Event.h"
00023 #include "EventDataModel/DataBucket.h"
00024 #include "EventDataModel/test/EDMTestDataObject.h"
00025 
00026 static void testMakeOne() {
00027   std::cerr << "\ntestMakeOne::Start\n";
00028   // Test that I can make one event
00029   struct timeval  tv;
00030   struct timezone tz;
00031   gettimeofday(&tv, &tz);
00032   edm::Event e1;
00033 
00034   edm::TestDataObject testDigit;
00035   edm::DataBucket detsim(e1.fDetSim);
00036   detsim.MakeFolder("./hits");
00037   for (int i=0; i<10; ++i) detsim.Put(testDigit,"./hits");
00038   std::cerr << "\nFull MC event contains\n";
00039   detsim.List();
00040   
00041   e1.Clear();
00042   std::cerr << "\nAfter clear:\n";
00043   detsim.List();
00044   std::cerr << "\ntestMakeOne::Done\n";
00045 }
00046 
00047 //......................................................................
00048 
00049 void testWrite()
00050 {
00051   int bSz  = 16000;
00052   int sLvl = 99; // 99 gives core dump on root >=3.03.09
00053   
00054   std::cerr << "\ntestWrite::Start\n";
00055   
00056   TFile* f       = new TFile("events.root","RECREATE");
00057   TTree* evtTree = new TTree("event_tree","EDMEvent tree");
00058   struct timeval  tv;
00059   struct timezone tz;
00060   gettimeofday(&tv, &tz);
00061   edm::Event* evt  = new edm::Event;
00062 
00063   assert(f);
00064   assert(evtTree);
00065   assert(evt);
00066 
00067   evtTree->Branch("fHeader", "edm::EventHeader",&evt->fHeader, bSz,sLvl);
00068   evtTree->Branch("fTop",    "TFolder",         &evt->fTop,    bSz,sLvl);
00069   evtTree->Branch("fMC",     "TFolder",         &evt->fMC,     bSz,sLvl);
00070   evtTree->Branch("fDetSim", "TFolder",         &evt->fDetSim, bSz,sLvl);
00071   evtTree->Branch("fDAQ",    "TFolder",         &evt->fDAQ,    bSz,sLvl);
00072   evtTree->Branch("fRaw",    "TFolder",         &evt->fRaw,    bSz,sLvl);
00073   evtTree->Branch("fCal",    "TFolder",         &evt->fCal,    bSz,sLvl);
00074   evtTree->Branch("fReco",   "TFolder",         &evt->fReco,   bSz,sLvl);
00075   evtTree->Branch("fUser",   "TFolder",         &evt->fUser,   bSz,sLvl);
00076   evtTree->Branch("fSummary","TFolder",         &evt->fSummary,bSz,sLvl);
00077   
00078   // evt->fHeader->SetRun(100);
00079   // evt->fHeader->SetSubRun(0);
00080   for (int i=1; i<1001; ++i) {
00081     evt->Clear();
00082     struct timeval  tv;
00083     struct timezone tz;
00084     gettimeofday(&tv, &tz);
00085     // evt->fHeader->SetEvent(i);
00086     // evt->fHeader->SetTimeStamp(tv.tv_sec,tv.tv_usec);
00087 
00088     edm::TestDataObject tobj;
00089     edm::DataBucket detsim(evt->fDetSim);
00090     edm::DataBucket raw   (evt->fRaw);
00091     detsim.MakeFolder("hits");
00092     raw.   MakeFolder("tobj");
00093     for (int j=0; j<1000; ++j) {
00094       tobj.fChannel = j;
00095       tobj.fADC     = 10-j;
00096       tobj.fTDC     = 10-j;
00097       detsim.Put(tobj,"./hits");
00098       raw.   Put(tobj,"./tobj");
00099     }
00100     evtTree->Fill();
00101     if (i%10 == 0) {
00102       std::cerr << i << " events..." << std::endl;
00103       detsim.List();
00104       raw.List();
00105     }
00106   }
00107   f->Write();
00108   f->Close();
00109   // delete evt;
00110   // Delete of tree causes crash. Presumably ownership is in the file
00111   // delete evtTree
00112   delete f;
00113   std::cerr << "\ntestWrite::Done\n";
00114 }
00115 
00116 //......................................................................
00117 
00118 static void testRead() 
00119 {
00120   TFile*    f = new TFile("events.root");
00121   TTree*    evtTree;
00122   TBranch*  bDetSim;
00123   TBranch*  bRaw;
00124   edm::Event* evt = new edm::Event;
00125   
00126   evtTree   = (TTree*)f->Get("event_tree");
00127   assert(evtTree);
00128   evtTree->Print();
00129 
00130   bDetSim = evtTree->GetBranch("fDetSim");
00131   bDetSim->SetAddress(&evt->fDetSim);
00132 
00133   bRaw = evtTree->GetBranch("fRaw");
00134   bRaw->SetAutoDelete(kTRUE);
00135 
00136   unsigned int nevt = (int)evtTree->GetEntries();
00137   std::vector<const edm::TestDataObject*> testDigits;
00138   std::cerr << "Nevents = " << nevt << std::endl;
00139   for (unsigned int i=0; i<nevt; ++i) {
00140     evt->Clear();
00141     bDetSim->GetEntry(i);
00142     bRaw->GetEntry(i);
00143     edm::DataBucket detsim(evt->fDetSim);
00144     detsim.Get("./hits/edm::TestDataObjects",testDigits);
00145     for (unsigned int i=0; i<testDigits.size(); ++i) {
00146       if (i%10==0)
00147         std::cerr << "TestObjects: "
00148                   << testDigits[i]->fChannel << ":" <<testDigits[i]->fADC 
00149                   <<"\n";
00150     }
00151     testDigits.clear();
00152   }
00153   delete f;
00154 }
00155 
00156 //......................................................................
00157 
00158 static void testBrowse() 
00159 {
00160 #ifdef TESTBROWSE
00161 //
00162 // Open file, read first event, start browser, then return
00163 //
00164   TFile*    f = new TFile("events.root");
00165   TTree*    evtTree;
00166   TBranch*  evtBranch;
00167   EDMEvent* evt;
00168   
00169   evtTree   = (TTree*)f->Get("event_tree");
00170   assert(evtTree);
00171   evtBranch = evtTree->GetBranch("event_branch");
00172   assert(evtBranch);
00173   evt       = new EDMEvent();
00174   evtBranch->SetAddress(&evt);
00175 
00176   evt->Clear();
00177   evtBranch->GetEntry(0);
00178 
00179   TBrowser* b = new TBrowser();
00180 #endif
00181 }
00182 
00183 //......................................................................
00184 
00185 int main(int argc, char** argv) 
00186 {
00187   TRint* app = new TRint("testEvent", &argc, argv);
00188   testMakeOne();
00189   std::string wopt = "-w";
00190   std::string ropt = "-r";
00191   std::string bopt = "-i";
00192   std::string oopt = "-1";
00193   if (argc<2) {
00194     std::cerr << "Need option: Please use -w, -r, or -i.\n";
00195   }
00196   else {
00197     for (int i=0; i<argc; ++i) {
00198       if      (wopt == argv[i]) testWrite();
00199       else if (ropt == argv[i]) testRead();
00200       else if (bopt == argv[i]) testBrowse();
00201       else if (oopt == argv[i]) testMakeOne();
00202       else std::cerr << "Unknown option: Please use -w, -r or -i.\n";
00203     }
00204   }
00205   app->Run();
00206   return 0;
00207 }

Generated on Sat Oct 11 02:35:28 2008 for NOvA Offline by  doxygen 1.3.9.1