/[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.7 - (show annotations) (download)
Fri Jul 21 12:00:22 2006 UTC (18 years, 4 months ago) by mocchiut
Branch: MAIN
CVS Tags: v1r01, v2r00BETA
Changes since 1.6: +1 -1 lines
Bug fixed in ToFLevel2.cpp

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

  ViewVC Help
Powered by ViewVC 1.1.23