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

Diff of /DarthVader/ToFLevel2/src/ToFLevel2.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by mocchiut, Mon Jun 19 13:27:45 2006 UTC revision 1.7 by mocchiut, Fri Jul 21 12:00:22 2006 UTC
# Line 2  Line 2 
2  #include <ToFLevel2.h>  #include <ToFLevel2.h>
3  #include <iostream>  #include <iostream>
4  using namespace std;  using namespace std;
5    ClassImp(ToFPMT);
6  ClassImp(ToFTrkVar);  ClassImp(ToFTrkVar);
7  ClassImp(ToFLevel2);  ClassImp(ToFLevel2);
8    
9  ToFTrkVar::ToFTrkVar() {  ToFPMT::ToFPMT(){
10      pmt_id = 0;
11    trkseqno = 0;    adc = 0.;
12      tdc_tw = 0.;
13    }
14    
15    for (Int_t kk=0; kk<13;kk++){  ToFPMT::ToFPMT(const ToFPMT &t){
16      beta_a[kk] = 0;    pmt_id = t.pmt_id;
17    }    adc = t.adc;
18      tdc_tw = t.tdc_tw;
   for (Int_t kk=0; kk<4;kk++){  
     for (Int_t hh=0; hh<12;hh++){  
       adc_c[hh][kk] = 0;  
     }  
   }  
19  }  }
20    
21  ToFTrkVar::ToFTrkVar(const ToFTrkVar &t){  void ToFPMT::Clear(){
22      pmt_id = 0;
23      adc = 0.;
24      tdc_tw = 0.;
25    }
26    
   trkseqno = t.trkseqno;    
27    
   memcpy(adc_c,t.adc_c,sizeof(adc_c));  
   memcpy(beta_a,t.beta_a,sizeof(beta_a));  
 }  
28    
29  ToFLevel2::ToFLevel2() {      ToFTrkVar::ToFTrkVar() {
30      trkseqno = 0;
31      npmttdc = 0;
32      npmtadc = 0;
33      pmttdc = TArrayI(48);
34      pmtadc = TArrayI(48);
35      dedx = TArrayF(48);
36    //    //
   ToFTrk = new TClonesArray("ToFTrkVar",1);  
37    //    //
38    for (Int_t kk=0; kk<3;kk++){    memset(beta,  0, 13*sizeof(Float_t));
39      xtofpos[kk] = 0.;    memset(xtofpos,  0, 3*sizeof(Float_t));
40      ytofpos[kk] = 0.;    memset(ytofpos,  0, 3*sizeof(Float_t));
41    }    //
42    };
43    
44    for (Int_t kk=0; kk<6;kk++){  void ToFTrkVar::Clear() {
45      tof_i_flag[kk] = 0;    trkseqno = 0;
46      tof_j_flag[kk] = 0;    npmttdc = 0;
47    }    npmtadc = 0;
48        pmttdc.Reset();
49    for (Int_t kk=0; kk<13;kk++){    pmtadc.Reset();
50      betatof_a[kk] = 0;    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    for (Int_t kk=0; kk<4;kk++){  ToFTrkVar::ToFTrkVar(const ToFTrkVar &t){
     for (Int_t hh=0; hh<12;hh++){  
       adctof_c[hh][kk] = 0;  
     }  
   }    
59    
60    for (Int_t kk=0; kk<4;kk++){    trkseqno = t.trkseqno;  
61      for (Int_t hh=0; hh<12;hh++){    //
62        tdc_c[hh][kk] = 0;    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){  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t itrk){
# Line 73  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t Line 99  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t
99    ToFTrkVar *toftrack = (ToFTrkVar*)t[itrk];    ToFTrkVar *toftrack = (ToFTrkVar*)t[itrk];
100    return toftrack;    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 paddle ID (11 12 21 22 31 32) from the paddle index (0 1 2 3 4 5)   * 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){    Int_t  ToFLevel2::GetToFPlaneID(Int_t ip){
123        if(ip>=0 && ip<6)return 10*((int)(ip/2+1.1))+(ip%2)+1;        if(ip>=0 && ip<6)return 10*((int)(ip/2+1.1))+(ip%2)+1;
124        else return -1;        else return -1;
125    };    };
126  /**  /**
127   * Method to get the paddle index (0 1 2 3 4 5) from the paddle ID (11 12 21 22 31 32)   * 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){    Int_t  ToFLevel2::GetToFPlaneIndex(Int_t plane_id){
130        if(        if(
# Line 129  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 168  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
168      for(Int_t i=0; i<8; i++)npad = npad + (int)HitPaddle(plane,i);      for(Int_t i=0; i<8; i++)npad = npad + (int)HitPaddle(plane,i);
169      return npad;      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    }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.23