source: ELYSE/HEAD/scripts/ROOT/analysis.C@ 689

Last change on this file since 689 was 286, checked in by campagne, 19 years ago

ELYSE sauvegarde provisoire (JEC)

File size: 9.4 KB
RevLine 
[286]1//
2// This script shows how to read, with ROOT, a ELYSE.root
3// file having the "TTree within TTree" of the ELYSE_batch
4// progrem (see Analysis.cxx).
5//
6// Usage :
7// OS> <setup ROOT>
8// ( OS> root batch_dummy.C )
9// OS> root analyis.C
10//
11// G.Barrand
12//
13
14//////////////////////////////////////////////////////////////////////////////
15bool plot(
16 TH1D& aHisto1D
17,TH2D& aHisto2D
18)
19//////////////////////////////////////////////////////////////////////////////
20//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
21{
22 TCanvas* plotter = new TCanvas("canvas","",10,10,800,600);
23 plotter->Divide(1,2);
24
25 plotter->cd(1);
26 aHisto1D.Draw();
27
28 plotter->cd(2);
29 aHisto2D.Draw();
30
31 plotter->Update();
32
33 return true;
34}
35//////////////////////////////////////////////////////////////////////////////
36void analysis()
37//////////////////////////////////////////////////////////////////////////////
38//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
39{
40
41 ////////////////////////////////////////////////////////
42 // Create histograms ///////////////////////////////////
43 ////////////////////////////////////////////////////////
44 TH1D* hits_times = new TH1D("hits_times","Hits times",100,0,3000);
45
46 TH2D* digits_time_pe =
47 new TH2D("digits_pe_time","Digits PE time",100,0,3000,100,0,10);
48
49 int hit_count = 0;
50 bool dump = true;
51 //bool dump = false;
52
53 ////////////////////////////////////////////////////////
54 /// Read data an file histos ///////////////////////////
55 ////////////////////////////////////////////////////////
56 TFile* f = new TFile("ELYSE.root");
57 TTree* tEvent = (TTree*)f->Get("Event");
58
59 {TObjArray* brs = tEvent->GetListOfBranches();
60 for(int i=0;i<brs->GetEntries();i++) {
61 TBranch* b = (TBranch*)brs->At(i);
62 std::cout << " Event branch : " << b->GetName()
63 << std::endl;
64 }}
65
66 //declare Non subTuple part
67 Int_t eventId,inputEvtId, interMode, vtxVol;
68 tEvent->SetBranchAddress("eventId",&eventId);
69 tEvent->SetBranchAddress("inputEvtId",&inputEvtId);
70 tEvent->SetBranchAddress("interMode",&interMode);
71 tEvent->SetBranchAddress("vtxVol",&vtxVol);
72
73 Int_t nPart,leptonIndex, protonIndex;
74 tEvent->SetBranchAddress("nPart",&nPart);
75 tEvent->SetBranchAddress("leptonIndex",&leptonIndex);
76 tEvent->SetBranchAddress("protonIndex",&protonIndex);
77
78 Int_t nHits;
79 tEvent->SetBranchAddress("nHits",&nHits);
80
81 Int_t nDigits;
82 Double_t sumPE;
83 tEvent->SetBranchAddress("nDigits",&nDigits);
84 tEvent->SetBranchAddress("sumPE",&sumPE);
85
86 Int_t nEvent = (Int_t)tEvent->GetEntries();
87 //nEvent = 1;
88 //nEvent = 10000;
89 std::cout << " nEvents = " << nEvent << std::endl;
90
91 for (Int_t i=0; i<nEvent; ++i) {
92
93 TTree* Event_vtxPos = new TTree();
94 tEvent->SetBranchAddress("vtxPos",&Event_vtxPos);
95
96 TTree* Event_track = new TTree();
97 tEvent->SetBranchAddress("track",&Event_track);
98
99 TTree* Event_hit = new TTree();
100 tEvent->SetBranchAddress("hit",&Event_hit);
101
102 TTree* Event_digit = new TTree();
103 tEvent->SetBranchAddress("digit",&Event_digit);
104
105 tEvent->GetEntry(i);
106
107 //{TObjArray* brs = Event_track->GetListOfBranches();
108 //for(int i=0;i<brs->GetEntries();i++) {
109 // TBranch* b = (TBranch*)brs->At(i);
110 // std::cout << " Event_track branch : " << b->GetName() << std::endl;
111 // }}
112
113 // Bind sub tuple variables
114 Double_t vx,vy,vz;
115 Event_vtxPos->SetBranchAddress("x",&vx);
116 Event_vtxPos->SetBranchAddress("y",&vy);
117 Event_vtxPos->SetBranchAddress("z",&vz);
118
119 Int_t pId,parent;
120 Float_t timeStart;
121 Double_t mass, pTot, ETot;
122 Int_t startVol, stopVol;
123 Event_track->SetBranchAddress("pId",&pId);
124 Event_track->SetBranchAddress("parent",&parent);
125 Event_track->SetBranchAddress("timeStart",&timeStart);
126 Event_track->SetBranchAddress("mass",&mass);
127 Event_track->SetBranchAddress("pTot",&pTot);
128 Event_track->SetBranchAddress("ETot",&ETot);
129 Event_track->SetBranchAddress("startVol",&startVol);
130 Event_track->SetBranchAddress("stopVol",&stopVol);
131
132 Int_t tubeId_hit; //JEC 16/1/06
133 Int_t totalPE;
134 Event_hit->SetBranchAddress("tubeId",&tubeId_hit); //JEC 16/1/06
135 Event_hit->SetBranchAddress("totalPE",&totalPE);
136
137 Int_t tubeId;
138 Double_t digit_pe, digit_time;
139 Event_digit->SetBranchAddress("tubeId",&tubeId);
140 Event_digit->SetBranchAddress("pe",&digit_pe);
141 Event_digit->SetBranchAddress("time",&digit_time);
142
143 if(dump)
144 std::cout << ">>>>>>>>>>>>> Event{" << i << "}: "
145 << " evt Id " << eventId
146 // << " evt Input Id " << inputEvtId
147 // << "\n interaction mode " << interMode
148 // << " start in volume " << vtxVol << "\n"
149 <<" #tracks: " << nPart
150 <<" #hits: " << nHits
151 <<" #digits: " << nDigits
152 << std::endl;
153
154 Int_t nVtx = (Int_t)Event_vtxPos->GetEntries();
155 Int_t nTracks = (Int_t)Event_track->GetEntries();
156 Int_t nTubeHits = (Int_t)Event_hit->GetEntries();
157 Int_t nTubeDigits = (Int_t)Event_digit->GetEntries();
158
159 if(dump)
160 std::cout << "Verif :"
161 << " nVtx = " << nVtx
162 << " nTracks = " << nTracks
163 << " nTube Hits = " << nTubeHits
164 << " nTube Digits = " << nTubeDigits
165 << std::endl;
166
167 for (Int_t j=0; j<nTracks; ++j) {
168
169 //Sub tuples of Event_tracks :
170 TTree* Track_direction = new TTree();
171 Event_track->SetBranchAddress("direction",&Track_direction);
172 TTree* Track_momentum = new TTree();
173 Event_track->SetBranchAddress("momentum",&Track_momentum);
174 TTree* Track_startPos = new TTree();
175 Event_track->SetBranchAddress("startPos",&Track_startPos);
176 TTree* Track_stopPos = new TTree();
177 Event_track->SetBranchAddress("stopPos",&Track_stopPos);
178
179 Event_track->GetEntry(j);
180
181 Double_t dx,dy,dz;
182 Track_direction->SetBranchAddress("dx",&dx);
183 Track_direction->SetBranchAddress("dy",&dy);
184 Track_direction->SetBranchAddress("dz",&dz);
185
186 Double_t px,py,pz;
187 Track_momentum->SetBranchAddress("px",&px);
188 Track_momentum->SetBranchAddress("py",&py);
189 Track_momentum->SetBranchAddress("pz",&pz);
190
191 Double_t start_x,start_y,start_z;
192 Track_startPos->SetBranchAddress("x",&start_x);
193 Track_startPos->SetBranchAddress("y",&start_y);
194 Track_startPos->SetBranchAddress("z",&start_z);
195
196 Double_t stop_x,stop_y,stop_z;
197 Track_stopPos->SetBranchAddress("x",&stop_x);
198 Track_stopPos->SetBranchAddress("y",&stop_y);
199 Track_stopPos->SetBranchAddress("z",&stop_z);
200
201 // One entry only :
202 //std::cout << "debug : "
203 // << " " << Track_direction->GetEntries()
204 // << " " << Track_momentum->GetEntries()
205 // << " " << Track_startPos->GetEntries()
206 // << " " << Track_stopPos->GetEntries()
207 // << std::endl;
208 if(Track_direction->GetEntries()==1) Track_direction->GetEntry(0);
209 if(Track_momentum->GetEntries()==1) Track_momentum->GetEntry(0);
210 if(Track_startPos->GetEntries()==1) Track_startPos->GetEntry(0);
211 if(Track_stopPos->GetEntries()==1) Track_stopPos->GetEntry(0);
212
213 if(dump)
214 std::cout << "----> Tk{"<<j<<"}: "
215 << " pId " << pId
216 << " parent " << parent
217 << " creation time " << timeStart
218 << " Volumes " << startVol << " " << stopVol << "\n"
219 << " Start Pos (" << start_x << "," << start_y << "," << start_z << ")\n"
220 << " Stop Pos (" << stop_x << "," << stop_y << "," << stop_z << ")\n"
221 << " dx,dy,dz " << dx << " " << dy << " " << dz << "\n"
222 << " m " << mass
223 << " ETot " << ETot
224 << " pTot " << pTot
225 << " px,py,pz " << px << " " << py << " " << pz << "\n"
226 << std::endl;
227
228 delete Track_direction;
229 delete Track_momentum;
230 delete Track_startPos;
231 delete Track_stopPos;
232
233 }//loop on Tracks
234
235 //--------
236 // The Hits
237 //--------
238
239
240 for (Int_t k=0; k<nTubeHits; ++k) {
241
242 TTree* Hit_pe = new TTree();
243 Event_hit->SetBranchAddress("pe",&Hit_pe);
244
245 Event_hit->GetEntry(k);
246
247 Float_t hit_time;
248 //Float_t trk_length; //NV 13/6/06
249 Hit_pe->SetBranchAddress("time",&hit_time);
250 //Hit_pe->SetBranchAddress("length",&trk_length);
251
252 //JEC 16/1/06 add the tubeId_hit info
253 if(dump)
254 std::cout << "----> Hit{"<<k<<"}: tube[" << tubeId_hit << "] total #PE " << totalPE << std::endl;
255
256 for (Int_t ki=0; ki<Hit_pe->GetEntries(); ++ki) {
257 Hit_pe->GetEntry(ki);
258
259 if(dump)
260 std::cout << "<" << hit_time << ">"
261 /* << "<" << trk_length << ">" */ ;
262
263 hits_times->Fill(hit_time);
264
265 hit_count++;
266 }
267 if(dump)
268 std::cout << std::endl;
269
270 delete Hit_pe;
271 }//Loop on Hits
272
273 //--------
274 // The Digits
275 //--------
276 for (Int_t l=0; l<nTubeDigits; ++l) {
277 Event_digit->GetEntry(l);
278
279 if(dump)
280 std::cout << "----> Digit{"<<l<<"}: "
281 << "tube[" << tubeId << "] = "
282 << " pe: " << digit_pe
283 << " time: " << digit_time
284 << std::endl;
285
286 digits_time_pe->Fill(digit_time,digit_pe);
287
288 }//Loop on Digits
289
290 delete Event_vtxPos;
291 delete Event_track;
292 delete Event_hit;
293 delete Event_digit;
294
295 }//loop on event
296
297 if(dump)
298 std::cout << " nEvents = " << nEvent << " hits = " << hit_count << std::endl;
299
300 ////////////////////////////////////////////////////////
301 // Plot histograms /////////////////////////////////////
302 ////////////////////////////////////////////////////////
303 plot(*hits_times,*digits_time_pe);
304
305}//read_event
Note: See TracBrowser for help on using the repository browser.