source: MEMPHYS/HEAD/applications/MEMPHYS_analysis.cxx @ 162

Last change on this file since 162 was 162, checked in by barrand, 18 years ago
File size: 5.6 KB
Line 
1// AIDA analysis program over MEMPHYS.root file.
2
3// AIDA :
4#include <AIDA/AIDA.h>
5
6// std :
7#include <iostream>
8
9//////////////////////////////////////////////////////////////////////////////
10bool getXYZ(
11 AIDA::ITuple& aParent
12,int aColumn
13,double& aX
14,double& aY
15,double& aZ
16) 
17//////////////////////////////////////////////////////////////////////////////
18//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
19{
20  AIDA::ITupleEntry* entry = (AIDA::ITupleEntry*)aParent.getObject(aColumn);
21  if(!entry) return false;
22
23  AIDA::ITuple* tuple = dynamic_cast<AIDA::ITuple*>(entry);
24  if(!tuple) return false;
25
26  tuple->start();
27  if(!tuple->next()) return false;
28
29  aX = tuple->getDouble(0);
30  aY = tuple->getDouble(1);
31  aZ = tuple->getDouble(2);
32
33  return true;
34}
35//////////////////////////////////////////////////////////////////////////////
36//////////////////////////////////////////////////////////////////////////////
37//////////////////////////////////////////////////////////////////////////////
38bool dump_tracks(
39 AIDA::ITuple& aParent
40) 
41//////////////////////////////////////////////////////////////////////////////
42//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
43{
44  AIDA::ITupleEntry* entry = (AIDA::ITupleEntry*)aParent.getObject(8);
45  if(!entry) return false;
46
47  AIDA::ITuple* tuple = dynamic_cast<AIDA::ITuple*>(entry);
48  if(!tuple) return false;
49
50  //if(nPart!=tracks->rows()) {
51  //  std::cout << "read: nPart / tracks mismatch "
52  //              << nPart << " " << tracks->rows() << std::endl;
53  //  return false;
54  //}
55
56  tuple->start();
57  int irow = 0;
58  while(tuple->next()) {
59
60    int pId = tuple->getInt(0);
61    int parent = tuple->getInt(1);
62    int timeStart = tuple->getInt(2);
63
64    double dx,dy,dz;
65    if(!getXYZ(*tuple,3,dx,dy,dz)) return false;
66
67    double mass = tuple->getDouble(4);
68    double pTot = tuple->getDouble(5);
69    double ETot = tuple->getDouble(6);
70
71    double px,py,pz;
72    if(!getXYZ(*tuple,7,dx,dy,dz)) return false;
73    double start_x,start_y,start_z;
74    if(!getXYZ(*tuple,8,dx,dy,dz)) return false;
75    double stop_x,stop_y,stop_z;
76    if(!getXYZ(*tuple,9,dx,dy,dz)) return false;
77
78    int startVol = tuple->getDouble(10);
79    int stopVol = tuple->getDouble(11);
80
81    std::cout << "----> Tk{"<<irow<<"}: " 
82              << " pId " << pId
83              << " parent " << parent
84                << " creation time " << timeStart
85                << " Volumes " << startVol << " " << stopVol << "\n"
86                << " Start Pos (" << start_x << "," << start_y << "," << start_z << ")\n"
87                << " Stop Pos (" << stop_x << "," << stop_y << "," << stop_z << ")\n"
88                << " dx,dy,dz " << dx << " " << dy << " " << dz << "\n"
89                << " m " << mass
90                << " ETot " << ETot
91                << " pTot " << pTot
92                << " px,py,pz " << px << " " << py << " " << pz << "\n"
93                << std::endl;
94
95    irow++;
96  }
97  return true;
98}
99//////////////////////////////////////////////////////////////////////////////
100int main(
101 int //aArgc
102,char** //aArgv
103) 
104//////////////////////////////////////////////////////////////////////////////
105//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
106{
107  //std::string arg1 = aArgc>=2?aArgv[1]:"";
108
109  std::string program = "MEMPHYS_analysis";
110  std::string header = program + " : ";
111
112  AIDA::IAnalysisFactory* aida = AIDA_createAnalysisFactory();
113  if(!aida) {
114    std::cout << header << "AIDA not found." << std::endl;
115    return 1;
116  }
117
118  AIDA::ITreeFactory* treeFactory = aida->createTreeFactory();
119  if(!treeFactory) {
120    std::cout << header << "can't get a TreeFactory." << std::endl;
121    return 1;
122  }
123
124  AIDA::ITree* tree = treeFactory->create("MEMPHYS.root","root",true,false);
125  if(!tree) {
126    std::cout << header << "can't open data file." << std::endl;
127    return 1;
128  }
129
130  AIDA::IManagedObject* object = tree->find("Event");
131  if(!object) {
132    std::cout << header
133              << "object Event not found in tree." 
134              << std::endl;
135    return 1;
136  }
137  AIDA::ITuple* tuple = dynamic_cast<AIDA::ITuple*>(object);
138  if(!tuple) {
139    std::cout << header << "object not an AIDA::ITuple." << std::endl;
140    return 1;
141  }
142
143  int coln = tuple->columns();
144  for(int index=0;index<coln;index++) {
145    std::cout << header
146              << " icol = " << index
147              << ", label = " << tuple->columnName(index) 
148              << ", type = " << tuple->columnType(index) 
149              << std::endl;
150  }
151
152  std::cout << header << "rows = " << tuple->rows() << std::endl;
153
154  //int nentries = tuple->rows();
155  //int nentries = 100000;
156  int nentries = 40;
157  std::cout << header
158            << "traitements de " << nentries << " entrees" 
159            << std::endl;
160
161  int irow = 0;
162  tuple->start();
163  while(tuple->next() && (irow<nentries)) {
164
165    int eventId = tuple->getInt(0);
166    //int inputEvtId = tuple->getInt(1);
167    //int interMode = tuple->getInt(2);
168    //int vtxVol = tuple->getInt(3);
169
170    int nPart = tuple->getInt(5);
171    //int leptonIndex = tuple->getInt(6);
172    //int protonIndex = tuple->getInt(7);
173
174    int nHits = tuple->getInt(9);
175    int nDigits = tuple->getInt(11);
176    double sumPE = tuple->getDouble(12);
177
178    std::cout << ">>>>>>>>>>>>> Event{" << irow << "}: "
179              << " evt Id " << eventId
180    //        << " evt Input Id " << inputEvtId
181    //        << "\n interaction mode " << interMode
182    //        << " start in volume " << vtxVol << "\n"
183              <<" #tracks: " << nPart
184              <<" #hits: " << nHits
185              <<" #digits: " << nDigits
186              <<" sumPE " << sumPE
187              << std::endl;
188
189    if(!dump_tracks(*tuple)) return false;
190
191    irow++;
192  }
193
194  delete treeFactory;
195  delete tree;
196  delete aida;
197
198  return 0;
199}
Note: See TracBrowser for help on using the repository browser.