/[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.3 by mocchiut, Fri Jun 30 09:22:03 2006 UTC revision 1.4 by mocchiut, Thu Jul 6 09:03:27 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      adc = 0.;
12      tdc_tw = 0.;
13    }
14    
15    trkseqno = 0;  ToFPMT::ToFPMT(const ToFPMT &t){
16      pmt_id = t.pmt_id;
17      adc = t.adc;
18      tdc_tw = t.tdc_tw;
19    }
20    
21    for (Int_t kk=0; kk<13;kk++){  void ToFPMT::Clear(){
22      beta_a[kk] = 0;    pmt_id = 0;
23    }    adc = 0.;
24      tdc_tw = 0.;
   for (Int_t kk=0; kk<4;kk++){  
     for (Int_t hh=0; hh<12;hh++){  
       adc_c[hh][kk] = 0;  
     }  
   }  
25  }  }
26    
 ToFTrkVar::ToFTrkVar(const ToFTrkVar &t){  
27    
   trkseqno = t.trkseqno;    
28    
29    memcpy(adc_c,t.adc_c,sizeof(adc_c));  ToFTrkVar::ToFTrkVar() {
30    memcpy(beta_a,t.beta_a,sizeof(beta_a));    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  ToFLevel2::ToFLevel2() {      void ToFTrkVar::Clear() {
45      trkseqno = 0;
46      npmttdc = 0;
47      npmtadc = 0;
48      pmttdc.Reset();
49      pmtadc.Reset();
50      dedx.Reset();
51    //    //
52    ToFTrk = new TClonesArray("ToFTrkVar",1);    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    for (Int_t kk=0; kk<3;kk++){  };
     xtofpos[kk] = 0.;  
     ytofpos[kk] = 0.;  
   }  
   
   for (Int_t kk=0; kk<6;kk++){  
     tof_i_flag[kk] = 0;  
     tof_j_flag[kk] = 0;  
   }  
     
   for (Int_t kk=0; kk<13;kk++){  
     betatof_a[kk] = 0;  
   }  
   
   for (Int_t kk=0; kk<4;kk++){  
     for (Int_t hh=0; hh<12;hh++){  
       adctof_c[hh][kk] = 0;  
     }  
   }    
57    
58    for (Int_t kk=0; kk<4;kk++){  ToFTrkVar::ToFTrkVar(const ToFTrkVar &t){
     for (Int_t hh=0; hh<12;hh++){  
       tdc_c[hh][kk] = 0;  
     }  
   }    
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  void ToFLevel2::Clear(){  ToFLevel2::ToFLevel2() {    
75    //    //
76    ToFTrk->Clear();    PMT = new TClonesArray("ToFPMT",12);
77      ToFTrk = new TClonesArray("ToFTrkVar",2);
78    //    //
79    for (Int_t kk=0; kk<3;kk++){    memset(tof_j_flag, 0, 6*sizeof(Int_t));
80      xtofpos[kk] = 0.;  };
     ytofpos[kk] = 0.;  
   }  
   
   for (Int_t kk=0; kk<6;kk++){  
     tof_i_flag[kk] = 0;  
     tof_j_flag[kk] = 0;  
   }  
     
   for (Int_t kk=0; kk<13;kk++){  
     betatof_a[kk] = 0;  
   }  
   
   for (Int_t kk=0; kk<4;kk++){  
     for (Int_t hh=0; hh<12;hh++){  
       adctof_c[hh][kk] = 0;  
     }  
   }    
81    
82    for (Int_t kk=0; kk<4;kk++){  void ToFLevel2::Clear(){
83      for (Int_t hh=0; hh<12;hh++){    //
84        tdc_c[hh][kk] = 0;    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 103  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 159  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[hh][kk] = (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[hh][kk] = 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    
315          /* tofEvent->tdc[ch][hb] */      
316          
317          if( ind == 2*k + j ){
318            ch = tof[2*j][k]     - 1;
319            hb = tof[2*j + 1][k] - 1;      
320            break;
321          };
322          j++;
323        };
324        k++;
325      };
326      return;
327    };

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

  ViewVC Help
Powered by ViewVC 1.1.23