00001
00002
00003
00004
00005
00006
00007
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
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;
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
00079
00080 for (int i=1; i<1001; ++i) {
00081 evt->Clear();
00082 struct timeval tv;
00083 struct timezone tz;
00084 gettimeofday(&tv, &tz);
00085
00086
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
00110
00111
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
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 }