/[PAMELA software]/DarthVader/ToFLevel2/doc/ToFLevel2Ex.cxx
ViewVC logotype

Contents of /DarthVader/ToFLevel2/doc/ToFLevel2Ex.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Wed Apr 4 11:54:38 2007 UTC (17 years, 8 months ago) by pam-de
Branch: MAIN
CVS Tags: v10REDr01, v3r04, v3r05, v5r00, v3r03, v4r00, v10RED, v6r01, v6r00, v3r06, v9r00, v9r01, HEAD
An example how to use ToF data, methods, etc...

1 void ToFLevel2Ex(){
2
3 /*
4 *
5 * This script shows how use ToFLevel2 output without using PamLevel2 software
6 * Notice that here no selection on image tracks is applied
7 * All methods and all variables usage are shown
8 *
9 */
10
11
12 /* Some plot just as example */
13
14 // Beta versus Rigidity
15 TH2F* BetaRig= new TH2F("BetaRig","Beta versus Rigidity",1000,0.1,10.,520,-1.3,1.3);
16
17 // dEdx == adc_c measurement
18 TH1F* ADChisto= new TH1F("ADChisto","ADChisto",10,0.,20.);
19
20 TH1F* TestHisto = new TH1F("TestHisto","TestHisto",500,0.,5000.);
21
22 gStyle->SetOptStat(111111);
23
24 TrkLevel2* trk_event = new TrkLevel2();
25 ToFLevel2* tof_event = new ToFLevel2();
26
27 TChain *T = new TChain("Tracker");
28 TChain *C = new TChain("ToF");
29
30 T->Add("./8212.Level2.root");
31 C->Add("./8212.Level2.root");
32
33 T->SetBranchAddress("TrkLevel2", &trk_event); // set tracker event adrss
34 C->SetBranchAddress("ToFLevel2", &tof_event); // set ToF event adrss
35 T->AddFriend(C); // make the trees friends
36
37 Int_t nevent = T->GetEntries();
38 cout << " Events in Tracker Tree " << nevent << endl;
39 Int_t ntofevent = C->GetEntries();
40 cout << " Events in ToF Tree " << ntofevent << endl;
41
42 int j = 0;
43 int k = 0;
44
45 // for (Int_t ii=0; ii<nevent;ii++){
46 for (Int_t ii=0; ii<1000;ii++){
47
48 T->GetEntry(ii);
49
50 /*
51 * infos in ToFLevel2 class
52 *
53 */
54
55 // j flag: it's a decoded value (array wioth 6 elements);
56 // for each layer, it summed up if there
57 // are more than one hit per layer
58 // tof11_j = tof11_j + 2**(i-1)
59
60 for(Int_t i=0; i<6; i++)
61 Int_t tof11_j = tof_event->tof_j_flag[i];
62
63 /*
64 * if you need informations from ToF and Tracker,
65 * you have to read both the detector classes
66 */
67
68 /* ToFTrkVar is the track related class */
69
70 for (Int_t it=0; it<tof_event->ntrk() ; it++){
71
72 ToFTrkVar *tof = tof_event->GetToFTrkVar(it);
73
74 /* trkseqno = index to get ToF alone or ToF+Tracker informations */
75
76 /*
77 * trkseqno ==-1 -> ToF alone informations
78 * trkseqno !=-1 correspond to the Tracker track index
79 */
80
81 // cout << " Index " << tof->trkseqno << endl;
82
83 /* Get Tracker information if it exist */
84
85 Int_t trkgood = 0;
86
87 if(tof->trkseqno != -1){
88 TrkTrack *trk = trk_event->GetStoredTrack(tof->trkseqno);
89
90 /* Select "good" Tracker tracks" */
91
92 if(trk->chi2 > 0 &&
93 trk->chi2 < 100 &&
94 trk->GetNX() >= 4 &&
95 trk->GetNY() >= 3 &&
96 trk->xgood[0] &&
97 (trk->xgood[5] || trk->xgood[4]) &&
98 trk->al[4] != 0.)
99 {
100
101 trkgood = 1;
102
103 }
104
105 }
106
107
108 // Beta measurement based on ToF alone
109
110 /*
111 * beta is an array with 13 elements;
112 * 12 correspond to the several planes combinations as described below;
113 * the last one is a mean value
114 */
115
116 /*
117 *
118 * S11 - S31 = tof->beta[0]
119 * S11 - S32 = tof->beta[1]
120 * S12 - S31 = tof->beta[2]
121 * S12 - S32 = tof->beta[3]
122 * S21 - S31 = tof->beta[4]
123 * S21 - S32 = tof->beta[5]
124 * S22 - S31 = tof->beta[6]
125 * S22 - S32 = tof->beta[7]
126 * S11 - S21 = tof->beta[8]
127 * S11 - S22 = tof->beta[9]
128 * S12 - S21 = tof->beta[10]
129 * S12 - S22 = tof->beta[11]
130 *
131 */
132
133
134 Int_t ll = 0;
135 Int_t mm = 0;
136
137 /*
138 * to get the same information for tracks from Tracker set:
139 * if(tof->trkseqno==0) for the first tracker track;
140 * if(tof->trkseqno==1) for the second tracker track;
141 */
142
143 if(tof->trkseqno == -1){
144 for (Int_t k=0; k<13 ; k++){
145 Float_t Beta = tof->beta[k];
146 // cout << "Beta " << Beta << endl;
147 }
148 }
149
150
151 /*
152 * read the pmtid for the tdc used in evaluate beta
153 * for the first tracker track
154 */
155
156 Float_t tdcflagm[4][12];
157
158 for (Int_t j=0; j<4; j++){
159 for (Int_t k=0; k<12; k++){
160 tdcflagm[j][k]=0;
161 }
162 }
163
164
165
166 if(tof->trkseqno == 0){
167 // npmttdc = number of pmt used for beta evaluation
168 for (Int_t ipmtt=0; ipmtt<tof->npmttdc; ipmtt++){
169 // you can read the pmtid for the tdc used in evaluate beta
170 Int_t pmttdc = tof->pmttdc[ipmtt];
171 // printf("pmttdc %d\n",pmttdc);
172 Int_t tdcflag = tof->tdcflag[ipmtt];
173 if(tdcflag!=0) {
174 // cout << " TDC " << tof->tdcflag[ipmtt] << " " << tdcflag << " " << pmttdc << endl;
175 ll=0;
176 mm=0;
177 tof_event->GetPMTIndex(pmttdc,ll,mm);
178 cout<<"pmttdc tdcflag "<<pmttdc<<" "<<tdcflag<<endl;
179 tdcflagm[mm][ll]= tdcflag;
180 }
181
182 /*
183 * Method to get Plane Index from a pmtid;
184 * here is shown for a pmtid corresponding to
185 * the tdc used in beta evaluation
186 */
187 Int_t pmt_plane=tof_event->GetPlaneIndex(pmttdc);
188
189 }
190 }
191
192
193 ll = 0;
194 mm = 0;
195
196 /*
197 * dEdx for each PMT with signal;
198 * this value coprresponds to the signal from a single pmt
199 */
200
201 Float_t adc2[4][12];
202
203 if(tof->trkseqno == 0){
204 // npmtadc = number of pmt used for dEdx evaluation
205 for (Int_t ipmta=0; ipmta<tof->npmtadc; ipmta++){
206 // dedx = adc_c
207 Float_t dEdx = tof->dedx[ipmta];
208 // printf("dEdx %f %f\n",tof->dedx[ipmta],dEdx);
209
210 // you can read the pmtid for the adc used in evaluate dedx=adc_c
211 Int_t pmtadc = tof->pmtadc[ipmta];
212 // printf("pmtadc %d\n",tof->pmtadc[ipmta]);
213
214 Int_t adcflag = tof->adcflag[ipmta];
215 // cout << " ADC " << adcflag << " " << pmtadc << " " << dEdx << endl;
216
217
218 if(ipmta == 1) {
219 ADChisto->Fill(tof->dedx[ipmta]);
220 }
221
222
223 /*
224 to get pmt index in terms of matrix index
225 from pmtid
226 */
227 tof_event->GetPMTIndex(pmtadc,ll,mm);
228 adc2[mm][ll] = tof->dedx[ipmta];
229
230
231 /*
232 to get pmt index from matrix index
233 */
234 tof_event->GetPMTid(ll,mm);
235 Int_t ind = tof_event->GetPMTid(ll,mm);
236
237
238 /*
239 to get pmt name from pmtid
240 */
241 tof_event->GetPMTName(pmtadc);
242 // cout << tof_event->GetPMTName(pmtadc) << endl;
243
244 }
245 }
246
247 // Position measurement based on ToF hits
248
249 /*
250 * to get the same information for tracks from Tracker set:
251 * if(tof->trkseqno==0) for the first tracker track;
252 * if(tof->trkseqno==1) for the second tracker track;
253 */
254
255 if(tof->trkseqno==-1){
256 for (Int_t j=0; j<3; j++){
257 Float_t xtofpos = tof->xtofpos[j];
258 Float_t ytofpos = tof->ytofpos[j];
259 // printf("xtofpos %f %f %d\n",xtofpos,tof->xtofpos[j],ii);
260 // printf("ytofpos %f %f %d\n",ytofpos,tof->ytofpos[j],ii);
261 }
262 }
263
264 // Beta versus Rigidity
265
266 /*
267 * for the first tracker track tof->trkseqno == 0
268 * for the second tracker track tof->trkseqno == 1
269 * and so on...
270 */
271
272 if(tof->trkseqno == 0 && trkgood==1){
273 BetaRig->Fill( trk->GetRigidity(), tof->beta[4]);
274 }
275
276
277 /*
278 * Method to get the dEdx on a ToF plane.
279 * It is evaluated as sum of all adc signals on the plane
280 * after corrections; its usage is not advised;
281 * This method will be modified in the next ToFLevel2 release
282 */
283
284 if(tof->trkseqno == 0 && trkgood==1){
285 for (Int_t plane=0; plane<13; plane++){
286 Float_t MethoddEdx=tof_event->GetdEdx(it,plane); // it is the index for
287 // tof_event->ntrk()
288 }
289 }
290
291
292 // fill adc and tdc using getmatrix
293 Float_t adc[4][12];
294 Float_t tdc[4][12];
295 tof_event->GetMatrix(it,adc,tdc); // it is the index for tof_event->ntrk$
296
297 for (Int_t j=0; j<4; j++){
298 for (Int_t k=0; k<12; k++){
299 Int_t ind = tof_event->GetPMTid(j,k);
300
301 if (tdc[j][k] < 4095) cout<<ind<<" "<<tdc[j][k]<<" "<<tdcflagm[j][k]<<endl;
302 }
303 }
304
305 cout<<"==================="<<endl;
306
307
308
309 } // end loop over tracks
310
311 Int_t nnpmt = tof_event->npmt();
312
313 Float_t adct[48];
314 Float_t tdct[48];
315
316 /*
317 * ToFPMT is the PMT related class
318 */
319
320
321 for (Int_t ipmt=0; ipmt<tof_event->npmt() ; ipmt++){
322 /*
323 tof_event->npmt() is the number of PMT with at least a TDC signal
324 */
325
326 ToFPMT *tofpmt = tof_event->GetToFPMT(ipmt);
327 // for each PMT with a signal, tofpmt->adc gives the raw adc
328 adct[ipmt]=tofpmt->adc;
329 // for each PMT with a signal, tofpmt->tdc_tw gives the tdc after Time-walk correction
330 tdct[ipmt]=tofpmt->tdc_tw;
331 TestHisto->Fill(adct[2]);
332 }
333
334
335 /*
336 * Some useful Methods (Examples):
337 */
338
339 Int_t nplane = 6;
340 Int_t npaddle = 8;
341
342 for (Int_t idpl=0; idpl< nplane; idpl++){
343
344 /*
345 * Method to get the number of hit paddles on a ToF plane.
346 * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
347 * it is evaluated for each event in the run
348 */
349 Int_t NHit = tof_event->GetNHitPaddles(idpl);
350 // printf("Number of Hit, idPlane %d %d %d %d\n",NHit,idpl,ii,it);
351
352 /**
353 * Method to get the plane ID (11 12 21 22 31 32) from the plane index (0 1 2 3 4 5)
354 */
355 Int_t ToFPlaneID=tof_event->GetToFPlaneID(idpl);
356 // printf("ToFPlaneID, idPlane %d %d\n",ToFPlaneID,idpl);
357 }
358
359
360 /*
361 * Method to know if a given ToF paddle was hit, that is there is a TDC signal
362 * from both PMTs
363 * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
364 * @param paddle_id Paddle ID.
365 * @return 1 if the paddle was hit.
366 */
367
368 for (Int_t idpad=0; idpad< npaddle; idpad++){
369 Int_t HitPad = tof_event->HitPaddle(idpl,idpad);
370 // printf("Hit Pad %d %d %d\n",HitPad,idpl,idpad);
371 }
372
373 /**
374 * Method to get the plane index (0 1 2 3 4 5) from the plane ID (11 12 21 22 31 32)
375 */
376
377 Int_t plane_id=11;
378 Int_t ToFPlaneIndex = tof_event->GetToFPlaneIndex(plane_id);
379 // printf("Plane Index %d %d\n",ToFPlaneIndex,plane_id);
380
381
382
383 } // end loop over events
384
385 TCanvas *BetaRigCanvas = new TCanvas("BetaRigCanvas","BetaRigCanvas", 700, 800);
386 BetaRigCanvas->cd();
387 BetaRig->Draw();
388
389 TCanvas *SCanvas = new TCanvas("SCanvas","SCanvas", 700, 800);
390 SCanvas->cd();
391 ADChisto->Draw();
392
393 TCanvas *TestCanvas = new TCanvas("TestCanvas","TestCanvas", 700, 800);
394 TestCanvas->cd();
395 TestHisto->Draw();
396 }

  ViewVC Help
Powered by ViewVC 1.1.23