/[PAMELA software]/DarthVader/ToFLevel2/src/ToFLevel2.cpp
ViewVC logotype

Contents of /DarthVader/ToFLevel2/src/ToFLevel2.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (show annotations) (download)
Mon Jan 22 14:09:32 2007 UTC (17 years, 10 months ago) by mocchiut
Branch: MAIN
CVS Tags: v3r00
Changes since 1.12: +65 -34 lines
AGH, re-introduced the memory leak... fixed

1 #include <TObject.h>
2 #include <ToFLevel2.h>
3 #include <iostream>
4 using namespace std;
5 ClassImp(ToFPMT);
6 ClassImp(ToFTrkVar);
7 ClassImp(ToFLevel2);
8
9 ToFPMT::ToFPMT(){
10 pmt_id = 0;
11 adc = 0.;
12 tdc_tw = 0.;
13 }
14
15 ToFPMT::ToFPMT(const ToFPMT &t){
16 pmt_id = t.pmt_id;
17 adc = t.adc;
18 tdc_tw = t.tdc_tw;
19 }
20
21 void ToFPMT::Clear(){
22 pmt_id = 0;
23 adc = 0.;
24 tdc_tw = 0.;
25 }
26
27
28
29 ToFTrkVar::ToFTrkVar() {
30 trkseqno = 0;
31 npmttdc = 0;
32 npmtadc = 0;
33 pmttdc = TArrayI(48);
34 pmtadc = TArrayI(48);
35 tdcflag = TArrayI(48); // gf: 30 Nov 2006
36 adcflag = TArrayI(48); // gf: 30 Nov 2006
37 dedx = TArrayF(48);
38 //
39 //
40 memset(beta, 0, 13*sizeof(Float_t));
41 memset(xtofpos, 0, 3*sizeof(Float_t));
42 memset(ytofpos, 0, 3*sizeof(Float_t));
43 //
44 };
45
46 void ToFTrkVar::Clear() {
47 trkseqno = 0;
48 npmttdc = 0;
49 npmtadc = 0;
50 pmttdc.Reset();
51 pmtadc.Reset();
52 tdcflag.Reset(); // gf: 30 Nov 2006
53 adcflag.Reset(); // gf: 30 Nov 2006
54 dedx.Reset();
55 //
56 memset(beta, 0, 13*sizeof(Float_t));
57 memset(xtofpos, 0, 3*sizeof(Float_t));
58 memset(ytofpos, 0, 3*sizeof(Float_t));
59 //
60 };
61
62 ToFTrkVar::ToFTrkVar(const ToFTrkVar &t){
63
64 trkseqno = t.trkseqno;
65 //
66 npmttdc = t.npmttdc;
67 npmtadc = t.npmtadc;
68 (t.pmttdc).Copy(pmttdc);
69 (t.pmtadc).Copy(pmtadc);
70 (t.tdcflag).Copy(tdcflag); // gf: 30 Nov 2006
71 (t.adcflag).Copy(adcflag); // gf: 30 Nov 2006
72 (t.dedx).Copy(dedx);
73 //
74 memcpy(beta,t.beta,sizeof(beta));
75 memcpy(xtofpos,t.xtofpos,sizeof(xtofpos));
76 memcpy(ytofpos,t.ytofpos,sizeof(ytofpos));
77 //
78 };
79
80 ToFLevel2::ToFLevel2() {
81 //
82 // PMT = new TClonesArray("ToFPMT",12); //ELENA
83 // ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA
84 PMT = 0; //ELENA
85 ToFTrk = 0; //ELENA
86 //
87 this->Clear();
88 //
89 };
90
91 void ToFLevel2::Set(){//ELENA
92 if(!PMT)PMT = new TClonesArray("ToFPMT",12); //ELENA
93 if(!ToFTrk)ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA
94 }//ELENA
95
96 void ToFLevel2::Clear(){
97 //
98 if(ToFTrk)ToFTrk->Delete(); //ELENA
99 if(PMT)PMT->Delete(); //ELENA
100 memset(tof_j_flag, 0, 6*sizeof(Int_t));
101 unpackError = 0;
102 //
103 };
104
105 void ToFLevel2::Delete(){ //ELENA
106 //
107 if(ToFTrk){
108 ToFTrk->Delete(); //ELENA
109 delete ToFTrk; //ELENA
110 }
111 if(PMT){
112 PMT->Delete(); //ELENA
113 delete PMT; //ELENA
114 } //ELENA
115 //
116 }; //ELENA
117
118 ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t itrk){
119 //
120 if(itrk >= ntrk()){
121 printf(" ToFLevel2 ERROR: track related variables set %i does not exists! \n",itrk);
122 printf(" stored track related variables = %i \n",ntrk());
123 return(NULL);
124 }
125 //
126 if(!ToFTrk)return 0; //ELENA
127 TClonesArray &t = *(ToFTrk);
128 ToFTrkVar *toftrack = (ToFTrkVar*)t[itrk];
129 return toftrack;
130 }
131
132 ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit){
133 //
134 if(ihit >= npmt()){
135 printf(" ToFLevel2 ERROR: pmt variables set %i does not exists! \n",ihit);
136 printf(" stored pmt variables = %i \n",npmt());
137 return(NULL);
138 }
139 //
140 if(!PMT)return 0; //ELENA
141 TClonesArray &t = *(PMT);
142 ToFPMT *tofpmt = (ToFPMT*)t[ihit];
143 return tofpmt;
144 }
145 //--------------------------------------
146 //
147 //
148 //--------------------------------------
149 /**
150 * Method to get the plane ID (11 12 21 22 31 32) from the plane index (0 1 2 3 4 5)
151 */
152 Int_t ToFLevel2::GetToFPlaneID(Int_t ip){
153 if(ip>=0 && ip<6)return 10*((int)(ip/2+1.1))+(ip%2)+1;
154 else return -1;
155 };
156 /**
157 * Method to get the plane index (0 1 2 3 4 5) from the plane ID (11 12 21 22 31 32)
158 */
159 Int_t ToFLevel2::GetToFPlaneIndex(Int_t plane_id){
160 if(
161 plane_id == 11 ||
162 plane_id == 12 ||
163 plane_id == 21 ||
164 plane_id == 22 ||
165 plane_id == 31 ||
166 plane_id == 32 ||
167 false)return (Int_t)(plane_id/10)*2-1- plane_id%2;
168 else return -1;
169 };
170 /**
171 * Method to know if a given ToF paddle was hit, that is there is a TDC signal
172 * from both PMTs
173 * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
174 * @param paddle_id Paddle ID.
175 * @return 1 if the paddle was hit.
176 */
177 Bool_t ToFLevel2::HitPaddle(Int_t plane, Int_t paddle_id){ //<<< NEW
178 Int_t ip = -1;
179 if (plane>=6 ) ip = GetToFPlaneIndex(plane);
180 else if(plane>=0 && plane < 6) ip = plane;
181 Int_t flag=0;
182 if(ip != -1)flag = tof_j_flag[ip] & (int)pow(2.,(double)paddle_id);
183 if(
184 (ip == 0 && paddle_id < 8 && flag) ||
185 (ip == 1 && paddle_id < 6 && flag) ||
186 (ip == 2 && paddle_id < 2 && flag) ||
187 (ip == 3 && paddle_id < 2 && flag) ||
188 (ip == 4 && paddle_id < 3 && flag) ||
189 (ip == 5 && paddle_id < 3 && flag) ||
190 false) return true;
191 else return false;
192 };
193 /**
194 * Method to get the number of hit paddles on a ToF plane.
195 * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
196 */
197 Int_t ToFLevel2::GetNHitPaddles(Int_t plane){
198 Int_t npad=0;
199 for(Int_t i=0; i<8; i++)npad = npad + (int)HitPaddle(plane,i);
200 return npad;
201 };
202
203
204 Float_t ToFLevel2::GetdEdx(Int_t notrack, Int_t plane){
205
206 Float_t dedx = 0.;
207 Int_t ip = 0;
208 Int_t pmt_id = 0;
209 Int_t pl = 0;
210 if ( plane >= 6 ){
211 ip = GetToFPlaneIndex(plane);
212 } else {
213 ip = plane;
214 };
215 //
216 ToFTrkVar *trk = GetToFTrkVar(notrack);
217 if(!trk) return 0; //ELENA
218 //
219 for (Int_t i=0; i<trk->npmtadc; i++){
220 //
221 pmt_id = (trk->pmtadc).At(i);
222 //
223 pl = GetPlaneIndex(pmt_id);
224 //
225 if ( pl == ip ) dedx += (trk->dedx).At(i);
226 //
227 };
228 //
229 return(dedx);
230 };
231
232
233 void ToFLevel2::GetMatrix(Int_t notrack, Float_t adc[4][12], Float_t tdc[4][12]){
234 //
235 for (Int_t aa=0; aa<4;aa++){
236 for (Int_t bb=0; bb<12;bb++){
237 adc[aa][bb] = 1000.;
238 tdc[aa][bb] = 4095.;
239 };
240 };
241 //
242 Int_t pmt_id = 0;
243 Int_t hh = 0;
244 Int_t kk = 0;
245 //
246 ToFTrkVar *trk = GetToFTrkVar(notrack);
247 if(!trk)return; //ELENA
248 //
249 for (Int_t i=0; i<trk->npmtadc; i++){
250 //
251 pmt_id = (trk->pmtadc).At(i);
252 //
253 GetPMTIndex(pmt_id,hh,kk);
254 adc[kk][hh] = (trk->dedx).At(i);
255 //
256 };
257 //
258 for (Int_t i=0; i<npmt(); i++){
259 //
260 ToFPMT *pmt = GetToFPMT(i);
261 if(!pmt)break; //ELENA
262 //
263 GetPMTIndex(pmt->pmt_id,hh,kk);
264 //
265 tdc[kk][hh] = pmt->tdc_tw;
266 //
267 };
268 //
269 return;
270 };
271
272
273
274 Int_t ToFLevel2::GetPlaneIndex(Int_t pmt_id){
275 TString pmtname = GetPMTName(pmt_id);
276 pmtname.Resize(3);
277 if ( !strcmp(pmtname,"S11") ) return(0);
278 if ( !strcmp(pmtname,"S12") ) return(1);
279 if ( !strcmp(pmtname,"S21") ) return(2);
280 if ( !strcmp(pmtname,"S22") ) return(3);
281 if ( !strcmp(pmtname,"S31") ) return(4);
282 if ( !strcmp(pmtname,"S32") ) return(5);
283 return(-1);
284 };
285
286
287 Int_t ToFLevel2::GetPMTid(Int_t hh, Int_t kk){
288 //
289 short tof[4][24] = {
290 {4, 4, 4, 4, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 2, 3, 3, 3, 3, 4},
291 {1, 3, 5, 7, 10, 12, 2, 4, 2, 4, 6, 8, 10, 12, 1, 5, 3, 9, 7, 9, 11, 1, 5, 9},
292 {2, 2, 2, 2, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 2, 1, 2, 1, 2, 2, 2, 3, 3, 4},
293 {6, 8, 12, 10, 8, 6, 4, 2, 12, 10, 8, 6, 4, 2, 9, 7, 11, 11, 5, 3, 1, 3, 7, 11}
294 };
295 //
296 Int_t ind = 0;
297 Int_t k = 0;
298 while (k < 24){
299 Int_t j = 0;
300 while (j < 2){
301 Int_t ch = tof[2*j][k] - 1;
302 Int_t hb = tof[2*j + 1][k] - 1;
303 /* tofEvent->tdc[ch][hb] */
304 if( ch == hh && hb == kk ){
305 ind = 2*k + j;
306 break;
307 };
308 j++;
309 };
310 k++;
311 };
312 return ind;
313 };
314
315 TString ToFLevel2::GetPMTName(Int_t ind){
316
317 TString pmtname = " ";
318
319 TString photoS[48] = {
320 "S11_1A", "S11_1B", "S11_2A", "S11_2B", "S11_3A", "S11_3B", "S11_4A", "S11_4B",
321 "S11_5A", "S11_5B", "S11_6A", "S11_6B", "S11_7A", "S11_7B", "S11_8A", "S11_8B",
322 "S12_1A", "S12_1B", "S12_2A", "S12_2B", "S12_3A", "S12_3B", "S12_4A", "S12_4B", "S12_5A", "S12_5B", "S12_6A", "S12_6B",
323 "S21_1A", "S21_1B", "S21_2A", "S21_2B",
324 "S22_1A", "S22_1B", "S22_2A", "S22_2B",
325 "S31_1A", "S31_1B", "S31_2A", "S31_2B", "S31_3A", "S31_3B",
326 "S32_1A", "S32_1B", "S32_2A", "S32_2B", "S32_3A", "S32_3B"
327 };
328
329
330 pmtname = photoS[ind].Data();
331
332 return pmtname;
333 };
334
335
336 void ToFLevel2::GetPMTIndex(Int_t ind, Int_t &hb, Int_t &ch){
337 //
338 short tof[4][24] = {
339 {4, 4, 4, 4, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 2, 3, 3, 3, 3, 4},
340 {1, 3, 5, 7, 10, 12, 2, 4, 2, 4, 6, 8, 10, 12, 1, 5, 3, 9, 7, 9, 11, 1, 5, 9},
341 {2, 2, 2, 2, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 2, 1, 2, 1, 2, 2, 2, 3, 3, 4},
342 {6, 8, 12, 10, 8, 6, 4, 2, 12, 10, 8, 6, 4, 2, 9, 7, 11, 11, 5, 3, 1, 3, 7, 11}
343 };
344 //
345 Int_t k = 0;
346 while (k < 24){
347 Int_t j = 0;
348 while (j < 2){
349 /* tofEvent->tdc[ch][hb] */
350 if( ind == 2*k + j ){
351 ch = tof[2*j][k] - 1;
352 hb = tof[2*j + 1][k] - 1;
353 return;
354 };
355 j++;
356 };
357 k++;
358 };
359 return;
360 };
361
362 /**
363 * Fills a struct cToFLevel2 with values from a ToFLevel2 object (to put data into a F77 common).
364 */
365 void ToFLevel2::GetLevel2Struct(cToFLevel2 *l2) const{
366
367 for(Int_t i=0;i<6;i++)
368 l2->tof_j_flag[i]=tof_j_flag[i];
369
370 if(ToFTrk){ //ELENA
371 l2->ntoftrk = ToFTrk->GetEntries();
372 for(Int_t j=0;j<l2->ntoftrk;j++){
373 l2->toftrkseqno[j]= ((ToFTrkVar*)ToFTrk->At(j))->trkseqno;
374 l2->npmttdc[j]= ((ToFTrkVar*)ToFTrk->At(j))->npmttdc;
375 for(Int_t i=0;i<l2->npmttdc[j];i++){
376 l2->pmttdc[i][j] = ((ToFTrkVar*)ToFTrk->At(j))->pmttdc.At(i);
377 l2->tdcflag[i][j] = ((ToFTrkVar*)ToFTrk->At(j))->tdcflag.At(i); // gf: 30 Nov 2006
378 }
379 for(Int_t i=0;i<13;i++)
380 l2->beta[i][j] = ((ToFTrkVar*)ToFTrk->At(j))->beta[i];
381
382 l2->npmtadc[j]= ((ToFTrkVar*)ToFTrk->At(j))->npmtadc;
383 for(Int_t i=0;i<l2->npmtadc[j];i++){
384 l2->pmtadc[i][j] = ((ToFTrkVar*)ToFTrk->At(j))->pmtadc.At(i);
385 l2->adcflag[i][j] = ((ToFTrkVar*)ToFTrk->At(j))->adcflag.At(i); // gf: 30 Nov 2006
386 l2->dedx[i][j] = ((ToFTrkVar*)ToFTrk->At(j))->dedx.At(i);
387 }
388 for(Int_t i=0;i<3;i++){
389 l2->xtofpos[i][j]=((ToFTrkVar*)ToFTrk->At(j))->xtofpos[i];
390 l2->ytofpos[i][j]=((ToFTrkVar*)ToFTrk->At(j))->ytofpos[i];
391 }
392 }
393 } //ELENA
394
395 if(PMT){ //ELENA
396 l2->npmt = PMT->GetEntries();
397 for(Int_t j=0;j<l2->npmt;j++){
398 l2->pmt_id[j] = ((ToFPMT*)PMT->At(j))->pmt_id;
399 l2->adc[j] =((ToFPMT*)PMT->At(j))->adc;
400 l2->tdc_tw[j] =((ToFPMT*)PMT->At(j))->tdc_tw;
401 }
402 } //ELENA
403 }

  ViewVC Help
Powered by ViewVC 1.1.23