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

Annotation of /DarthVader/ToFLevel2/src/ToFLevel2.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Fri Jul 14 14:06:16 2006 UTC (18 years, 5 months ago) by mocchiut
Branch: MAIN
CVS Tags: v1r01beta
Changes since 1.4: +7 -9 lines
Bug fixed in GetMatrix ToF method

1 mocchiut 1.1 #include <TObject.h>
2     #include <ToFLevel2.h>
3     #include <iostream>
4     using namespace std;
5 mocchiut 1.4 ClassImp(ToFPMT);
6 mocchiut 1.1 ClassImp(ToFTrkVar);
7     ClassImp(ToFLevel2);
8    
9 mocchiut 1.4 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 mocchiut 1.1 ToFTrkVar::ToFTrkVar() {
30 mocchiut 1.4 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 mocchiut 1.1
44 mocchiut 1.4 void ToFTrkVar::Clear() {
45 mocchiut 1.1 trkseqno = 0;
46 mocchiut 1.4 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 mocchiut 1.1
58     ToFTrkVar::ToFTrkVar(const ToFTrkVar &t){
59    
60     trkseqno = t.trkseqno;
61 mocchiut 1.4 //
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 mocchiut 1.1
74     ToFLevel2::ToFLevel2() {
75     //
76 mocchiut 1.4 PMT = new TClonesArray("ToFPMT",12);
77     ToFTrk = new TClonesArray("ToFTrkVar",2);
78 mocchiut 1.1 //
79 mocchiut 1.4 memset(tof_j_flag, 0, 6*sizeof(Int_t));
80 mocchiut 1.3 };
81    
82     void ToFLevel2::Clear(){
83     //
84     ToFTrk->Clear();
85 mocchiut 1.4 PMT->Clear();
86     memset(tof_j_flag, 0, 6*sizeof(Int_t));
87     //
88 mocchiut 1.1 };
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 mocchiut 1.4
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 mocchiut 1.1 //--------------------------------------
116     //
117     //
118     //--------------------------------------
119     /**
120 mocchiut 1.4 * Method to get the plane ID (11 12 21 22 31 32) from the plane index (0 1 2 3 4 5)
121 mocchiut 1.1 */
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 mocchiut 1.4 * Method to get the plane index (0 1 2 3 4 5) from the plane ID (11 12 21 22 31 32)
128 mocchiut 1.1 */
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 mocchiut 1.2 if(ip != -1)flag = tof_j_flag[ip] & (int)pow(2.,(double)paddle_id);
152 mocchiut 1.1 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 mocchiut 1.4
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 mocchiut 1.5 adc[kk][hh] = (trk->dedx).At(i);
221 mocchiut 1.4 //
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 mocchiut 1.5 tdc[kk][hh] = pmt->tdc_tw;
231 mocchiut 1.4 //
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 mocchiut 1.5 void ToFLevel2::GetPMTIndex(Int_t ind, Int_t &hb, Int_t &ch){
302 mocchiut 1.4 //
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 mocchiut 1.5 /* tofEvent->tdc[ch][hb] */
315 mocchiut 1.4 if( ind == 2*k + j ){
316 mocchiut 1.5 ch = tof[2*j][k] - 1;
317     hb = tof[2*j + 1][k] - 1;
318     return;
319 mocchiut 1.4 };
320     j++;
321     };
322     k++;
323     };
324     return;
325     };

  ViewVC Help
Powered by ViewVC 1.1.23