/[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.29 by mocchiut, Thu Dec 31 07:55:53 2009 UTC revision 1.46 by pam-fi, Tue May 19 10:49:14 2015 UTC
# Line 21  ToFPMT::ToFPMT(){ Line 21  ToFPMT::ToFPMT(){
21    adc = 0.;    adc = 0.;
22    tdc_tw = 0.;    tdc_tw = 0.;
23    tdc = 0.;    tdc = 0.;
24      l0flag_adc = 0.;
25      l0flag_tdc = 0.;
26  }  }
27    
28  ToFPMT::ToFPMT(const ToFPMT &t){  ToFPMT::ToFPMT(const ToFPMT &t){
# Line 111  void ToFLevel2::Set(){//ELENA Line 113  void ToFLevel2::Set(){//ELENA
113      if(!PMT)PMT = new TClonesArray("ToFPMT",12); //ELENA      if(!PMT)PMT = new TClonesArray("ToFPMT",12); //ELENA
114      if(!ToFTrk)ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA      if(!ToFTrk)ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA
115  }//ELENA  }//ELENA
116    //--------------------------------------
117    //
118    //
119    //--------------------------------------
120    void ToFLevel2::SetTrackArray(TClonesArray *track){//ELENA
121        if(track && strcmp(track->GetClass()->GetName(),"ToFTrkVar")==0){
122            if(ToFTrk)ToFTrk->Clear("C");
123            ToFTrk = track;
124        }
125    }
126    
127  void ToFLevel2::Clear(Option_t *t){  void ToFLevel2::Clear(Option_t *t){
128    //    //
# Line 118  void ToFLevel2::Clear(Option_t *t){ Line 130  void ToFLevel2::Clear(Option_t *t){
130    if(PMT)PMT->Delete(); //ELENA    if(PMT)PMT->Delete(); //ELENA
131    memset(tof_j_flag, 0, 6*sizeof(Int_t));    memset(tof_j_flag, 0, 6*sizeof(Int_t));
132    unpackError = 0;    unpackError = 0;
133      unpackWarning = 0;
134    //    //
135  };  };
136    
# Line 148  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t Line 161  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t
161    return toftrack;    return toftrack;
162  }  }
163    
164    /**
165     * Retrieves the tof track matching the seqno-th tracker stored track.
166     *
167     */
168    ToFTrkVar *ToFLevel2::GetToFStoredTrack(int seqno){
169    
170      if( ntrk()==0 ){
171        printf("ToFLevel2::GetToFStoredTrack(int) : requested tracker SeqNo %i but no ToFrimeter tracks are stored\n",seqno);
172        return NULL;
173      };
174      
175      ToFTrkVar *c = 0;
176      Int_t it_tof=0;
177        
178      do {
179        c = GetToFTrkVar(it_tof);
180        it_tof++;
181      } while( c && seqno != c->trkseqno && it_tof < ntrk());      
182      
183      if(!c || seqno != c->trkseqno){
184        c = 0;
185        if(seqno!=-1 ) printf("ToFLevel2::GetToFStoredTrack(int) : requested tracker SeqNo %i does not match ToFrimeter stored tracks\n",seqno);
186      };
187      return c;
188        
189    }
190    
191    
192  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit){  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit){
193    //        //    
194    if(ihit >= npmt()){    if(ihit >= npmt()){
# Line 211  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit) Line 252  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit)
252         false) return true;         false) return true;
253      else return false;      else return false;
254  };  };
255    
256  /**  /**
257   * Method to get the number of hit paddles on a ToF plane.   * Strict method to get the number of hit paddles on a ToF plane.
258     * The method uses "HitPaddle" which checks if there is a TDC signal
259     * from both PMTs.
260   * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).   * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
261   */   */
262  Int_t ToFLevel2::GetNHitPaddles(Int_t plane){  Int_t ToFLevel2::GetNHitPaddles(Int_t plane){
# Line 221  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 265  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
265      return npad;      return npad;
266  };  };
267    
268    /**
269     * Optional method to get the number of hit paddles on a ToF plane.
270     * The method does NOT check if there is a signal from both PMTs, it only
271     * checks if there is some PMT signal in a paddle
272     * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
273     */
274    Int_t ToFLevel2::GetTrueNHitPaddles(Int_t plane){
275        Int_t npad=0;
276        TClonesArray* Pmt = this->PMT;
277        int paddle[24];
278        memset(paddle,0, 24*sizeof(int));
279        for(int i=0; i<Pmt->GetEntries(); i++) {  //loop per vedere quale TOF è colpito
280          ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
281          int pplane = -1;
282          int ppaddle = -1;
283          GetPMTPaddle(pmthit->pmt_id,pplane,ppaddle);
284          if ( pplane == plane ) paddle[ppaddle]++;
285        }
286        for(int i=0;i<24;i++) if ( paddle[i]>0 ) npad++;
287    
288        return npad;
289    };
290    
291    //new, wm Feb 15
292  //wm Nov 08  //wm Nov 08
293  //gf Apr 07  //gf Apr 07
294  /**  /**
295   * Method to get the mean dEdx from a ToF layer - ATTENTION:   * Method to get the mean dEdx from a ToF layer
296   * It will sum up the dEdx of all the paddles, but since by definition   * By definition there should be PMTs with dEdx values only in one paddle of a layer
297   * only the paddle hitted by the track gets a dEdx value and the other   * (the paddle hitted by the track), this method looks for the hitted paddle
298   * paddles are set to zero, the output is just the dEdx of the hitted   * and gives the mean dEdx of that paddle as the output
299   * paddle in each layer!   * The method was modified for the "ToF-standalone" part in february 2015
300   * The "adcfl" option is not very useful (an artificial dEdx is per   * The "adcfl" option is not very useful (an artificial dEdx is per
301   * definition= 1 mip and not a real measurement), anyway left in the code   * definition= 1 mip and not a real measurement), anyway left in the code
302   * @param notrack Track Number   * @param notrack Track Number
# Line 236  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 304  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
304   * @param adcflag in the plane (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )   * @param adcflag in the plane (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
305   */   */
306  Float_t ToFLevel2::GetdEdx(Int_t notrack, Int_t plane, Int_t adcfl){  Float_t ToFLevel2::GetdEdx(Int_t notrack, Int_t plane, Int_t adcfl){
307    //  ToFTrkVar *trk = GetToFTrkVar(notrack);
308        ToFTrkVar *trk = GetToFStoredTrack(notrack);//Elena 2015
309      return this->GetdEdx(trk, plane, adcfl);
310    }
311    
312    //new, wm Feb 15
313    //wm Nov 08
314    //gf Apr 07
315    /**
316     * Method to get the mean dEdx from a ToF layer
317     * By definition there should be PMTs with dEdx values only in one paddle of a layer
318     * (the paddle hitted by the track), this method looks for the hitted paddle
319     * and gives the mean dEdx of that paddle as the output
320     * The method was modified for the "ToF-standalone" part in february 2015
321     * The "adcfl" option is not very useful (an artificial dEdx is per
322     * definition= 1 mip and not a real measurement), anyway left in the code
323     * @param trk Pointer to TofTrkVar object
324     * @param plane Plane index (0,1,2,3,4,5)
325     * @param adcflag in the plane (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
326     */
327    Float_t ToFLevel2::GetdEdx(ToFTrkVar *trk, Int_t plane, Int_t adcfl){
328      
329    Float_t dedx = 0.;    Float_t dedx = 0.;
330    Float_t PadEdx =0.;    Float_t PadEdx =0.;
331    Int_t SatWarning;    Int_t SatWarning;
332    Int_t pad=-1;    Int_t pad=-1;
333    //    //
334    ToFTrkVar *trk = GetToFTrkVar(notrack);    if(!trk) cout << "ToFLevel2::GetdEdx(...) ---> NULL ToFTrkVar obj "<<endl;
335    if(!trk) return 0; //ELENA    if(!trk) return 0; //ELENA
336    //    //
337    for (Int_t ii=0; ii<GetNPaddle(plane); ii++){    // ToF standalone part
     Int_t paddleid=ii;  
     pad = GetPaddleid(plane,paddleid);  
     GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);  
     dedx += PadEdx;  
   };  
338    //    //
339      if ( trk->trkseqno == -1 ){
340        
341        //    ToFTrkVar *t_tof = trk;
342        
343        // Find the hitted paddle  (two good TDC values) using the tof_j_flag (from tofl2com.for)
344        
345        Int_t Ipaddle=-1;
346        // if tof_j_flag == 0: no paddle was hitted. Otherwise decode tof_j_flag to get the paddle
347        if (this->tof_j_flag[plane] > 0)  Ipaddle = (Int_t)log2(this->tof_j_flag[plane]) ;
348        
349        Ipaddle =  (Int_t)log2(this->tof_j_flag[plane]) ;
350        
351        // Get the dEdx of this paddle using "GetdEdxPaddle"
352        if (Ipaddle>-1) {
353          Int_t pad = GetPaddleid(plane,Ipaddle);
354          GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
355          dedx = PadEdx;
356        }
357        
358        // If there was no correct hitted paddle, but there was one (and only one) paddle with some
359        // PMT entries in the PMT-class (found with "GetTrueNHitPaddles", use the dEdx of this paddle
360        
361        if ((Ipaddle<0) && (GetTrueNHitPaddles(plane)==1)) {
362          // find the paddle by looping over the paddles in each layer
363          // since GetTrueNHitPaddles==1 this is OK
364          for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
365            Int_t paddleid=ii;
366            Int_t pad = GetPaddleid(plane,paddleid);
367            GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
368            dedx += PadEdx;
369          }
370        }
371      } else {
372        // track dependent dEdx: simple, there will be only one paddle hitted in    each layer
373        // so just loop over the paddles in each layer
374        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
375          Int_t paddleid=ii;
376          pad = GetPaddleid(plane,paddleid);
377          GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
378          dedx += PadEdx;
379        }
380      }
381      //
382    return(dedx);    return(dedx);
383  };  }
384    
385  /**  /**
386   * Method to fill the ADC_C 4x12 matrix with the dEdx values and the TDC 4x12 matrix   * Method to fill the ADC_C 4x12 matrix with the dEdx values and the TDC 4x12 matrix
# Line 328  Int_t ToFLevel2::GetPlaneIndex(Int_t pmt Line 455  Int_t ToFLevel2::GetPlaneIndex(Int_t pmt
455   */   */
456  Int_t ToFLevel2::GetPMTid(Int_t hh, Int_t kk){  Int_t ToFLevel2::GetPMTid(Int_t hh, Int_t kk){
457    //    //
458    short tof[4][24] = {    static const short tof[4][24] = {
459      {4, 4,  4,  4,  1,  1, 2, 2,  3,  3, 3, 3,  3,  3, 1, 1,  1,  1, 2, 3,  3, 3, 3,  4},      {4, 4,  4,  4,  1,  1, 2, 2,  3,  3, 3, 3,  3,  3, 1, 1,  1,  1, 2, 3,  3, 3, 3,  4},
460      {1, 3,  5,  7, 10, 12, 2, 4,  2,  4, 6, 8, 10, 12, 1, 5,  3,  9, 7, 9, 11, 1, 5,  9},      {1, 3,  5,  7, 10, 12, 2, 4,  2,  4, 6, 8, 10, 12, 1, 5,  3,  9, 7, 9, 11, 1, 5,  9},
461      {2, 2,  2,  2,  1,  1, 1, 1,  4,  4, 4, 4,  4,  4, 2, 1,  2,  1, 2, 2,  2, 3, 3,  4},      {2, 2,  2,  2,  1,  1, 1, 1,  4,  4, 4, 4,  4,  4, 2, 1,  2,  1, 2, 2,  2, 3, 3,  4},
# Line 364  Int_t ToFLevel2::GetPMTid(Int_t hh, Int_ Line 491  Int_t ToFLevel2::GetPMTid(Int_t hh, Int_
491   */   */
492  void ToFLevel2::GetPMTIndex(Int_t ind, Int_t &hb, Int_t &ch){  void ToFLevel2::GetPMTIndex(Int_t ind, Int_t &hb, Int_t &ch){
493    //    //
494    short tof[4][24] = {    static const short tof[4][24] = {
495      {4, 4,  4,  4,  1,  1, 2, 2,  3,  3, 3, 3,  3,  3, 1, 1,  1,  1, 2, 3,  3, 3, 3,  4},      {4, 4,  4,  4,  1,  1, 2, 2,  3,  3, 3, 3,  3,  3, 1, 1,  1,  1, 2, 3,  3, 3, 3,  4},
496      {1, 3,  5,  7, 10, 12, 2, 4,  2,  4, 6, 8, 10, 12, 1, 5,  3,  9, 7, 9, 11, 1, 5,  9},      {1, 3,  5,  7, 10, 12, 2, 4,  2,  4, 6, 8, 10, 12, 1, 5,  3,  9, 7, 9, 11, 1, 5,  9},
497      {2, 2,  2,  2,  1,  1, 1, 1,  4,  4, 4, 4,  4,  4, 2, 1,  2,  1, 2, 2,  2, 3, 3,  4},      {2, 2,  2,  2,  1,  1, 1, 1,  4,  4, 4, 4,  4,  4, 2, 1,  2,  1, 2, 2,  2, 3, 3,  4},
# Line 404  void ToFLevel2::GetPMTIndex(Int_t ind, I Line 531  void ToFLevel2::GetPMTIndex(Int_t ind, I
531   */   */
532  void ToFLevel2::GetdEdxPaddle(Int_t notrack, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning){  void ToFLevel2::GetdEdxPaddle(Int_t notrack, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning){
533    
534  /*  //  ToFTrkVar *trk = GetToFTrkVar(notrack);
535  Float_t  PMTsat[48] = {      ToFTrkVar *trk = GetToFStoredTrack(notrack); //Elena 2015
536  3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,    this->GetdEdxPaddle(trk, paddleid, adcfl, PadEdx, SatWarning);
537  3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,    
538  3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,  };
 3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,  
 3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,  
 3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;  
 */  
   
 // new values from Napoli dec 2008  
 Float_t  PMTsat[48] = {  
 3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,  
 3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,  
 3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,  
 3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,  
 3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,  
 3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };  
539    
540  for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin  //
541    //  wm Nov 08 revision - saturation values included
542    /// gf Apr 07
543    /**
544     * Method to get the dEdx from a given ToF paddle.
545     * If two PMTs are good, the mean dEdx of both PMTs is taken, otherwise
546     * just the dEdx of the "good" PMT. If both PMTs are above saturation => dEdx=1000
547     * @param notrack Track Number
548     * @param Paddle index (0,1,...,23).
549     * @param adcflag in the paddle (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
550     * @param PadEdx dEdx from a given ToF paddle
551     * @param SatWarning 1 if the PMT ios near saturation region (adcraw ~3000)
552     */
553    void ToFLevel2::GetdEdxPaddle(ToFTrkVar *trk, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning){
554    
555      /*
556        Float_t  PMTsat[48] = {
557        3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,
558        3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,
559        3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,
560        3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,
561        3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,
562        3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;
563      */
564    
565      // new values from Napoli dec 2008
566      Float_t  PMTsat[48] = {
567        3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,
568        3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,
569        3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,
570        3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,
571        3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,
572        3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };
573    
574      for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin
575    
576    
577    PadEdx = 0.;    PadEdx = 0.;
578  //  SatWarning = 1000;    //  SatWarning = 1000;
579    SatWarning = 0;   // 0=good, increase for each bad PMT    SatWarning = 0;   // 0=good, increase for each bad PMT
580    
581    Float_t dEdx[48] = {0};    Float_t dEdx[48] = {0};
582    Int_t pmt_id = -1;    Int_t pmt_id = -1;
583    Float_t adcraw[48];    Float_t adcraw[48];
584    //    //
585    ToFTrkVar *trk = GetToFTrkVar(notrack);    if(!trk)cout << "ToFLevel2::GetdEdxPaddle(...) ---> NULL ToFTrkVar obj "<<endl;
586    if(!trk) return; //ELENA    if(!trk) return; //ELENA
587    //    //
588    
# Line 474  for (Int_t i=0; i<48;i++) PMTsat[i] = PM Line 622  for (Int_t i=0; i<48;i++) PMTsat[i] = PM
622    }    }
623    
624    
625  //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version    //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version
626    
627  // Increase SatWarning Counter for each PMT>Sat    // Increase SatWarning Counter for each PMT>Sat
628    if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;      if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;  
629    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;
630    
631  // if ADC  > sat set dEdx=1000    // if ADC  > sat set dEdx=1000
632    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;
633    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;
634    
635  // if two PMT are good, take mean dEdx, otherwise only the good dEdx    // if two PMT are good, take mean dEdx, otherwise only the good dEdx
636    if(dEdx[pmtleft]<1000 && dEdx[pmtright]<1000) PadEdx = (dEdx[pmtleft]+dEdx[pmtright])*0.5;    if(dEdx[pmtleft]<1000 && dEdx[pmtright]<1000) PadEdx = (dEdx[pmtleft]+dEdx[pmtright])*0.5;
637    if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];      if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];  
638    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];
639        
640  };  };
 //  
   
641    
642  // gf Apr 07  // gf Apr 07
643    
# Line 507  TString ToFLevel2::GetPMTName(Int_t ind, Line 653  TString ToFLevel2::GetPMTName(Int_t ind,
653        
654    TString pmtname = " ";    TString pmtname = " ";
655        
656    TString photoS[48] = {    static const TString photoS[48] = {
657      "S11_1A", "S11_1B", "S11_2A", "S11_2B", "S11_3A", "S11_3B", "S11_4A",      "S11_1A", "S11_1B", "S11_2A", "S11_2B", "S11_3A", "S11_3B", "S11_4A",
658      "S11_4B",      "S11_4B",
659      "S11_5A", "S11_5B", "S11_6A", "S11_6B", "S11_7A", "S11_7B", "S11_8A",      "S11_5A", "S11_5B", "S11_6A", "S11_6B", "S11_7A", "S11_7B", "S11_8A",
# Line 967  Int_t ToFLevel2::GetNPaddle(Int_t plane) Line 1113  Int_t ToFLevel2::GetNPaddle(Int_t plane)
1113   * @param cut on chi2   * @param cut on chi2
1114   */   */
1115    
 Float_t ToFLevel2::CalcBeta(Int_t notrack, Float_t resmax, Float_t qualitycut, Float_t chi2cut){  
1116    
1117  //  cout<<" in CalcBeta "<<resmax<<" "<<chi2cut<<" "<<qualitycut<<endl;  Float_t ToFTrkVar::CalcBeta( Float_t resmax, Float_t qualitycut, Float_t chi2cut){
1118    
1119    
1120    Float_t bxx = 100.;    Float_t bxx = 100.;
1121    //    //
1122    ToFTrkVar *trk = GetToFTrkVar(notrack);    ToFTrkVar *trk = this;
   if(!trk) return 0; //ELENA  
1123    
1124    
1125    Float_t chi2,xhelp,beta_mean;    Float_t chi2,xhelp,beta_mean;
# Line 1001  Float_t  w_il[6]; Line 1146  Float_t  w_il[6];
1146    for (Int_t i=0; i<trk->npmttdc; i++){    for (Int_t i=0; i<trk->npmttdc; i++){
1147      //      //
1148      pmt_id = (trk->pmttdc).At(i);      pmt_id = (trk->pmttdc).At(i);
1149      pmt_plane = GetPlaneIndex(pmt_id);      pmt_plane = ToFLevel2::GetPlaneIndex(pmt_id);
1150      tdcfl = (trk->tdcflag).At(i);      tdcfl = (trk->tdcflag).At(i);
1151      if (w_il[pmt_plane] != 1.) w_il[pmt_plane] = tdcfl; //tdcflag      if (w_il[pmt_plane] != 1.) w_il[pmt_plane] = tdcfl; //tdcflag
1152                                       };                                       };
# Line 1088  Int_t ibot[12] = {4,5,4,5,4,5,4,5,2,3,2, Line 1233  Int_t ibot[12] = {4,5,4,5,4,5,4,5,2,3,2,
1233    //    //
1234    return(bxx);    return(bxx);
1235  };  };
1236    ////////////////////////////////////////////////////
1237    ////////////////////////////////////////////////////
1238    /**
1239     * See ToFTrkVar::CalcBeta(Float_t,Float_t, Float_t).
1240     */
1241    Float_t ToFLevel2::CalcBeta(Int_t notrack, Float_t resmax, Float_t qualitycut, Float_t chi2cut){
1242    
1243    //  cout<<" in CalcBeta "<<resmax<<" "<<chi2cut<<" "<<qualitycut<<endl;
1244    
1245      ToFTrkVar *trk = GetToFTrkVar(notrack);
1246      if(!trk) return 0; //ELENA
1247    
1248      return trk->CalcBeta(resmax,qualitycut,chi2cut);
1249    
1250    };
1251    
1252    
1253  ////////////////////////////////////////////////////  ////////////////////////////////////////////////////
# Line 1177  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1337  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1337  //   if ( !dbc->IsConnected() ) return 1;  //   if ( !dbc->IsConnected() ) return 1;
1338  //   stringstream myquery;  //   stringstream myquery;
1339  //   myquery.str("");  //   myquery.str("");
1340  //   myquery << "SET time_zone='+0:00'";  //   myquery << "SET time_zone='+0:00';";
1341  //   dbc->Query(myquery.str().c_str());  //   dbc->Query(myquery.str().c_str());
1342    //   delete dbc->Query("SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';");
1343  //   GL_PARAM *glparam = new GL_PARAM();  //   GL_PARAM *glparam = new GL_PARAM();
1344  //   glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table  //   glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table
1345  //   trk->LoadField(glparam->PATH+glparam->NAME);  //   trk->LoadField(glparam->PATH+glparam->NAME);
# Line 1416  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1577  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1577  //  return(0);  //  return(0);
1578  }  }
1579    
1580    bool ToFLevel2::bit(int decimal, char pos){
1581      return( (decimal>>pos)%2 );
1582    }
1583    
1584    bool ToFLevel2::checkPMT(TString givenpmt){
1585      TClonesArray* Pmt = this->PMT;
1586      //  printf(" ou %s entries %i \n",givenpmt.Data(),Pmt->GetEntries());
1587      for(int i=0; i<Pmt->GetEntries(); i++) {  
1588        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1589        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1590        //    printf(" name %s \n",pmtname.Data());
1591        if ( !strcmp(pmtname.Data(),givenpmt.Data()) )
1592          return true;
1593      }
1594      //  printf(" PMT %s missing \n",givenpmt.Data());
1595      return false;
1596    }
1597    
1598    bool ToFLevel2::checkPMTpatternPMThit(TrigLevel2 *trg, int &pmtpattern, int &pmtnosignal){
1599      UInt_t *patterntrig = trg->patterntrig;
1600      pmtpattern = 0;
1601      pmtnosignal = 0;
1602      bool good = true;
1603      //S3
1604      if ( this->bit(patterntrig[2],0) ){ pmtpattern++;  if ( !this->checkPMT("S31_1A")){ pmtnosignal++; good = false;}}
1605      if ( this->bit(patterntrig[2],1) ){ pmtpattern++;  if ( !this->checkPMT("S31_2A")){ pmtnosignal++; good = false;}}
1606      if ( this->bit(patterntrig[2],2) ){ pmtpattern++;  if ( !this->checkPMT("S31_3A")){ pmtnosignal++; good = false;}}
1607      if ( this->bit(patterntrig[2],3) ){ pmtpattern++;  if ( !this->checkPMT("S31_1B")){ pmtnosignal++; good = false;}}
1608      if ( this->bit(patterntrig[2],4) ){ pmtpattern++;  if ( !this->checkPMT("S31_2B")){ pmtnosignal++; good = false;}}
1609      if ( this->bit(patterntrig[2],5) ){ pmtpattern++;  if ( !this->checkPMT("S31_3B")){ pmtnosignal++; good = false;}}      
1610      if ( this->bit(patterntrig[2],6) ){ pmtpattern++;  if ( !this->checkPMT("S32_1A")){ pmtnosignal++; good = false;}}
1611      if ( this->bit(patterntrig[2],7) ){ pmtpattern++;  if ( !this->checkPMT("S32_2A")){ pmtnosignal++; good = false;}}
1612      if ( this->bit(patterntrig[2],8) ){ pmtpattern++;  if ( !this->checkPMT("S32_3A")){ pmtnosignal++; good = false;}}
1613      if ( this->bit(patterntrig[2],9) ){ pmtpattern++;  if ( !this->checkPMT("S32_1B")){ pmtnosignal++; good = false;}}
1614      if ( this->bit(patterntrig[2],10) ){ pmtpattern++;  if ( !this->checkPMT("S32_2B")){ pmtnosignal++; good = false;}}
1615      if ( this->bit(patterntrig[2],11) ){ pmtpattern++;  if ( !this->checkPMT("S32_3B")){ pmtnosignal++; good = false;}}      
1616      //S2
1617      if ( this->bit(patterntrig[3],0) ){ pmtpattern++;  if ( !this->checkPMT("S21_1A")){ pmtnosignal++; good = false;}}
1618      if ( this->bit(patterntrig[3],1) ){ pmtpattern++;  if ( !this->checkPMT("S21_2A")){ pmtnosignal++; good = false;}}
1619      if ( this->bit(patterntrig[3],2) ){ pmtpattern++;  if ( !this->checkPMT("S21_1B")){ pmtnosignal++; good = false;}}
1620      if ( this->bit(patterntrig[3],3) ){ pmtpattern++;  if ( !this->checkPMT("S21_2B")){ pmtnosignal++; good = false;}}      
1621      if ( this->bit(patterntrig[3],4) ){ pmtpattern++;  if ( !this->checkPMT("S22_1A")){ pmtnosignal++; good = false;}}
1622      if ( this->bit(patterntrig[3],5) ){ pmtpattern++;  if ( !this->checkPMT("S22_2A")){ pmtnosignal++; good = false;}}
1623      if ( this->bit(patterntrig[3],6) ){ pmtpattern++;  if ( !this->checkPMT("S22_1B")){ pmtnosignal++; good = false;}}
1624      if ( this->bit(patterntrig[3],7) ){ pmtpattern++;  if ( !this->checkPMT("S22_2B")){ pmtnosignal++; good = false;}}      
1625      //S12
1626      if ( this->bit(patterntrig[4],0) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1627      if ( this->bit(patterntrig[4],1) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1628      if ( this->bit(patterntrig[4],2) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1629      if ( this->bit(patterntrig[4],3) ){ pmtpattern++;  if ( !this->checkPMT("S12_4A")){ pmtnosignal++; good = false;}}
1630      if ( this->bit(patterntrig[4],4) ){ pmtpattern++;  if ( !this->checkPMT("S12_5A")){ pmtnosignal++; good = false;}}
1631      if ( this->bit(patterntrig[4],5) ){ pmtpattern++;  if ( !this->checkPMT("S12_6A")){ pmtnosignal++; good = false;}}      
1632      if ( this->bit(patterntrig[4],6) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1633      if ( this->bit(patterntrig[4],7) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1634      if ( this->bit(patterntrig[4],8) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1635      if ( this->bit(patterntrig[4],9) ){ pmtpattern++;  if ( !this->checkPMT("S12_4B")){ pmtnosignal++; good = false;}}
1636      if ( this->bit(patterntrig[4],10) ){ pmtpattern++; if ( !this->checkPMT("S12_5B")){ pmtnosignal++; good = false;}}
1637      if ( this->bit(patterntrig[4],11) ){ pmtpattern++; if ( !this->checkPMT("S12_6B")){ pmtnosignal++; good = false;}}      
1638      //S11
1639      if ( this->bit(patterntrig[5],0) ){ pmtpattern++;  if ( !this->checkPMT("S11_1A")){ pmtnosignal++; good = false;}}
1640      if ( this->bit(patterntrig[5],1) ){ pmtpattern++;  if ( !this->checkPMT("S11_2A")){ pmtnosignal++; good = false;}}
1641      if ( this->bit(patterntrig[5],2) ){ pmtpattern++;  if ( !this->checkPMT("S11_3A")){ pmtnosignal++; good = false;}}
1642      if ( this->bit(patterntrig[5],3) ){ pmtpattern++;  if ( !this->checkPMT("S11_4A")){ pmtnosignal++; good = false;}}
1643      if ( this->bit(patterntrig[5],4) ){ pmtpattern++;  if ( !this->checkPMT("S11_5A")){ pmtnosignal++; good = false;}}
1644      if ( this->bit(patterntrig[5],5) ){ pmtpattern++;  if ( !this->checkPMT("S11_6A")){ pmtnosignal++; good = false;}}
1645      if ( this->bit(patterntrig[5],6) ){ pmtpattern++;  if ( !this->checkPMT("S11_7A")){ pmtnosignal++; good = false;}}
1646      if ( this->bit(patterntrig[5],7) ){ pmtpattern++;  if ( !this->checkPMT("S11_8A")){ pmtnosignal++; good = false;}}      
1647      if ( this->bit(patterntrig[5],8) ){ pmtpattern++;  if ( !this->checkPMT("S11_1B")){ pmtnosignal++; good = false;}}
1648      if ( this->bit(patterntrig[5],9) ){ pmtpattern++;  if ( !this->checkPMT("S11_2B")){ pmtnosignal++; good = false;}}
1649      if ( this->bit(patterntrig[5],10) ){ pmtpattern++; if ( !this->checkPMT("S11_3B")){ pmtnosignal++; good = false;}}
1650      if ( this->bit(patterntrig[5],11) ){ pmtpattern++; if ( !this->checkPMT("S11_4B")){ pmtnosignal++; good = false;}}
1651      if ( this->bit(patterntrig[5],12) ){ pmtpattern++; if ( !this->checkPMT("S11_5B")){ pmtnosignal++; good = false;}}
1652      if ( this->bit(patterntrig[5],13) ){ pmtpattern++; if ( !this->checkPMT("S11_6B")){ pmtnosignal++; good = false;}}
1653      if ( this->bit(patterntrig[5],14) ){ pmtpattern++; if ( !this->checkPMT("S11_7B")){ pmtnosignal++; good = false;}}
1654      if ( this->bit(patterntrig[5],15) ){ pmtpattern++; if ( !this->checkPMT("S11_8B")){ pmtnosignal++; good = false;}}
1655    
1656      return good;
1657    }
1658    
1659    bool ToFLevel2::checkPMTpmttrig(TrigLevel2 *trg){
1660      //  UInt_t *patterntrig = trg->patterntrig;
1661      int rS11 = 0;
1662      int rS12 = 0;
1663      int rS21 = 0;
1664      int rS22 = 0;
1665      int rS31 = 0;
1666      int rS32 = 0;
1667    
1668      // trigger configuration for the event from saved pmts
1669      TClonesArray* Pmt = this->PMT;
1670      for(int i=0; i<Pmt->GetEntries(); i++) {  
1671        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1672        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1673        if ( pmtname.Contains("S11") ) rS11++;
1674        if ( pmtname.Contains("S12") ) rS12++;
1675        if ( pmtname.Contains("S21") ) rS21++;
1676        if ( pmtname.Contains("S22") ) rS22++;
1677        if ( pmtname.Contains("S31") ) rS31++;
1678        if ( pmtname.Contains("S32") ) rS32++;
1679      }
1680      int rTOF1 = (rS11 + rS12) * (rS21 + rS22) * (rS31 + rS32);
1681      int rTOF2 = (rS11 * rS12) * (rS21 * rS22) * (rS31 * rS32);
1682    
1683      int rTOF3 = (rS21 + rS22) * (rS31 + rS32);
1684      int rTOF4 = (rS21 * rS22) * (rS31 * rS32);
1685    
1686      int rTOF5 = rS12 * (rS21 * rS22);
1687    
1688      int rTOF6 = (rS11 + rS12) * (rS31 + rS32);
1689      int rTOF7 = (rS11 * rS12) * (rS31 * rS32);
1690    
1691    
1692      // trigger configuration of the run
1693      bool TCTOF1 = false;
1694      bool TCTOF2 = false;
1695      bool TCTOF3 = false;
1696      bool TCTOF4 = false;
1697      bool TCTOF5 = false;
1698      bool TCTOF6 = false;
1699      bool TCTOF7 = false;
1700      if ( trg->trigconf & (1<<0) ) TCTOF1 = true;
1701      if ( trg->trigconf & (1<<1) ) TCTOF2 = true;
1702      if ( trg->trigconf & (1<<2) ) TCTOF3 = true;
1703      if ( trg->trigconf & (1<<3) ) TCTOF4 = true;
1704      if ( trg->trigconf & (1<<4) ) TCTOF5 = true;
1705      if ( trg->trigconf & (1<<5) ) TCTOF6 = true;
1706      if ( trg->trigconf & (1<<6) ) TCTOF7 = true;
1707    
1708      // do patterntrig pmts match the trigger configuration?
1709      bool pmtsconf_trigconf_match = true;
1710      if ( rTOF1 == 0 && TCTOF1 ) pmtsconf_trigconf_match = false;
1711      if ( rTOF2 == 0 && TCTOF2 ) pmtsconf_trigconf_match = false;
1712      if ( rTOF3 == 0 && TCTOF3 ) pmtsconf_trigconf_match = false;
1713      if ( rTOF4 == 0 && TCTOF4 ) pmtsconf_trigconf_match = false;
1714      if ( rTOF5 == 0 && TCTOF5 ) pmtsconf_trigconf_match = false;
1715      if ( rTOF6 == 0 && TCTOF6 ) pmtsconf_trigconf_match = false;
1716      if ( rTOF7 == 0 && TCTOF7 ) pmtsconf_trigconf_match = false;
1717    
1718      return pmtsconf_trigconf_match;
1719    }
1720    
1721    void ToFLevel2::printPMT(){
1722      TClonesArray* Pmt = this->PMT;
1723      for(int i=0; i<Pmt->GetEntries(); i++) {  
1724        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1725        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1726        printf(" PMT hit: %s \n",pmtname.Data());
1727      }
1728    }
1729    
1730    
1731  ToFdEdx::ToFdEdx()  ToFdEdx::ToFdEdx()
1732  {  {
1733    memset(conn,0,12*sizeof(Bool_t));    memset(conn,0,12*sizeof(Bool_t));
1734    memset(ts,0,12*sizeof(UInt_t));    memset(ts,0,12*sizeof(UInt_t));
1735    memset(te,0,12*sizeof(UInt_t));    memset(te,0,12*sizeof(UInt_t));
1736      eDEDXpmt = new TArrayF(48);
1737    Define_PMTsat();    Define_PMTsat();
1738    Clear();    Clear();
1739  }  }
1740    
1741    ToFdEdx::~ToFdEdx(){
1742      Clear();
1743      Delete();
1744    }
1745    
1746    void ToFdEdx::Delete(Option_t *option){
1747      if ( eDEDXpmt ){
1748        eDEDXpmt->Set(0);
1749        if ( eDEDXpmt) delete eDEDXpmt;
1750      }
1751    }
1752    
1753  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1754  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)
1755  {  {
# Line 1466  void ToFdEdx::Clear(Option_t *option) Line 1791  void ToFdEdx::Clear(Option_t *option)
1791  {  {
1792    //    //
1793    // Set arrays and initialize structure    // Set arrays and initialize structure
1794    eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure    //  eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure
1795      eDEDXpmt->Set(48);    eDEDXpmt->Reset(-1);   // Set array size  and reset structure
1796    //    //
1797  };  };
1798    
# Line 1487  void ToFdEdx::Init(pamela::tof::TofEvent Line 1813  void ToFdEdx::Init(pamela::tof::TofEvent
1813      for (Int_t hh=0; hh<12;hh++){      for (Int_t hh=0; hh<12;hh++){
1814        //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];                  //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];          
1815        int mm = tf.GetPMTid(gg,hh);                int mm = tf.GetPMTid(gg,hh);        
1816        adc[mm]=tofl0->adc[gg][hh];        adc[mm]= (0xFFF & tofl0->adc[gg][hh]); // EM, exclude warning bits
1817      };            };      
1818    };    };
1819        
# Line 1505  void ToFdEdx::Init(Int_t gg, Int_t hh, F Line 1831  void ToFdEdx::Init(Int_t gg, Int_t hh, F
1831        
1832  };  };
1833  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1834  void ToFdEdx::Process(UInt_t atime, Float_t betamean, Float_t *xtr_tof, Float_t *ytr_tof)  void ToFdEdx::Process(UInt_t atime, Float_t betamean, Float_t *xtr_tof, Float_t *ytr_tof, Int_t exitat)
1835  {  {
1836      bool debug = false;
1837      if ( debug ) printf(" INSIDE TOFDEDX PROCESS \n");
1838    // the parameters should be already initialised by InitPar()    // the parameters should be already initialised by InitPar()
1839      //  printf(" in process \n");
1840    Clear();    Clear();
1841    
1842   // define angle:     // define angle:  
# Line 1519  void ToFdEdx::Process(UInt_t atime, Floa Line 1848  void ToFdEdx::Process(UInt_t atime, Floa
1848    if ( xtr_tof[1] > 99. ||  xtr_tof[5] > 99. || ytr_tof[0] > 99. ||  ytr_tof[4] > 99. ) theta = 0.;    if ( xtr_tof[1] > 99. ||  xtr_tof[5] > 99. || ytr_tof[0] > 99. ||  ytr_tof[4] > 99. ) theta = 0.;
1849    for (Int_t ii=0; ii<6; ii++){    for (Int_t ii=0; ii<6; ii++){
1850      if ( xtr_tof[ii] > 99. ) xtr_tof[ii] = 0.;      if ( xtr_tof[ii] > 99. ) xtr_tof[ii] = 0.;
1851      if ( ytr_tof[ii] > 99. ) xtr_tof[ii] = 0.;      if ( ytr_tof[ii] > 99. ) ytr_tof[ii] = 0.;
1852    };    };
1853    //    //
1854        if ( debug ) printf(" theta %f \n",theta);
1855      if ( debug ) printf(" xtr_tof %.1f %.1f %.1f %.1f %.1f %.1f \n",xtr_tof[0],xtr_tof[1],xtr_tof[2],xtr_tof[3],xtr_tof[4],xtr_tof[5]);
1856      if ( debug ) printf(" ytr_tof %.1f %.1f %.1f %.1f %.1f %.1f \n",ytr_tof[0],ytr_tof[1],ytr_tof[2],ytr_tof[3],ytr_tof[4],ytr_tof[5]);
1857      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------
1858      
1859      int Aconn=conn[0];    // PMT 0,20,22,24
1860      int Bconn=conn[1];    // PMT 6,12,26,34
1861      int Cconn=conn[2];    // PMT 4,14,28,32
1862      int Dconn=conn[3];    // PMT 2,8,10,30
1863      int Econn=conn[4];    // PMT 42,43,44,47
1864      int Fconn=conn[5];    // PMT 7,19,23,27
1865      int Gconn=conn[6];    // PMT 3,11,25,33
1866      int Hconn=conn[7];    // PMT 1,9,13,21
1867      int Iconn=conn[8];    // PMT 5,29,31,35
1868      int Lconn=conn[9];    // PMT 37,40,45,46
1869      int Mconn=conn[10];    // PMT 15,16,17,18
1870      int Nconn=conn[11];    // PMT 36,38,39,41
1871      if( false ) cout << Gconn << Iconn << Lconn <<endl; // to avoid compilation warnings
1872        
1873      //  printf(" size %i \n",eDEDXpmt.GetSize());
1874    for( int ii=0; ii<48; ii++ ) {    for( int ii=0; ii<48; ii++ ) {
1875      //      //
1876        //    eDEDXpmt.SetAt(-1.,ii);
1877      //    printf(" ii %i beta %f atime %u xtr 1 %f ytr 1 %f adc %f \n",ii,betamean,atime,xtr_tof[0],ytr_tof[0],adc[ii]);      //    printf(" ii %i beta %f atime %u xtr 1 %f ytr 1 %f adc %f \n",ii,betamean,atime,xtr_tof[0],ytr_tof[0],adc[ii]);
1878      if( adc[ii] >= PMTsat[ii]-5 )  continue;      if ( debug ) printf("II %i adc %f \n",ii,adc[ii]);
1879      if( adc[ii] <= 0. )            continue;  
1880        if( adc[ii] >= 4095. ){
1881          //      eDEDXpmt[ii] = 0.;
1882          eDEDXpmt->AddAt(0.,ii);
1883          if ( debug ) printf(" %i adc>4095 \n",ii);
1884          continue; // EMILIANO
1885        };
1886    
1887        if( adc[ii] >= (PMTsat[ii]-5.) && adc[ii] < 4095. ){
1888          eDEDXpmt->AddAt(1000.,ii);
1889          if ( debug ) printf(" %i adc> pmtsat && adc<4095 \n",ii);
1890          continue; // EMILIANO
1891        };
1892    
1893        if( adc[ii] <= 0. ) {
1894          eDEDXpmt->AddAt(1500.,ii);
1895          if ( debug ) printf(" %i adc<=0 \n",ii);
1896          continue;
1897        };
1898      //      //
1899      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC
1900      double adccorr = adcpC*fabs(cos(theta));      if ( exitat == 0 ){
1901      //        eDEDXpmt->AddAt((Float_t)adcpC,ii);
1902      if(adccorr<=0.)           continue;        continue;
1903        }
1904      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------      //    printf(" e qua? \n");
1905    
1906      int Aconn=conn[0];    // PMT 0,20,22,24      double adccorr = adcpC*fabs(cos(theta));    
1907      int Bconn=conn[1];    // PMT 6,12,26,34      if ( debug ) printf(" adccorr %f \n",adccorr);
1908      int Cconn=conn[2];    // PMT 4,14,28,32      if(adccorr<=0.){
1909      int Dconn=conn[3];    // PMT 2,8,10,30        if ( debug ) printf(" %i adccorr<=0 \n",ii);
1910      int Econn=conn[4];    // PMT 42,43,44,47        //      eDEDXpmt->AddAt((Float_t)adcpC,ii);//?
1911      int Fconn=conn[5];    // PMT 7,19,23,27        continue;
1912      int Gconn=conn[6];    // PMT 3,11,25,33      }
1913      int Hconn=conn[7];    // PMT 1,9,13,21      if ( exitat == 1 ){
1914      int Iconn=conn[8];    // PMT 5,29,31,35        eDEDXpmt->AddAt((Float_t)adccorr,ii);
1915      int Lconn=conn[9];    // PMT 37,40,45,46        continue;
1916      int Mconn=conn[10];    // PMT 15,16,17,18      }
1917      int Nconn=conn[11];    // PMT 36,38,39,41      //    printf(" e quo? \n");
1918    
1919      //    int standard=0;      //    int standard=0;
     if( false ) cout << Gconn << Iconn << Lconn <<endl;  
1920      int S115B_ok=0;      int S115B_ok=0;
1921      int S115B_break=0;      int S115B_break=0;
1922    
# Line 1560  void ToFdEdx::Process(UInt_t atime, Floa Line 1925  void ToFdEdx::Process(UInt_t atime, Floa
1925    
1926    
1927      //------------------------------------------------------------------------      //------------------------------------------------------------------------
1928        //    printf(" e qui? \n");
1929      //---------------------------------------------------- Z reconstruction      //---------------------------------------------------- Z reconstruction
1930    
1931      double adcHe, adcnorm, adclin, dEdx, Zeta;      double adcHe, adcnorm, adclin, dEdx;//, Zeta; // EM GCC4.7
1932    
1933      adcHe=-2;      adcHe=-2;
1934      adcnorm=-2;      adcnorm=-2;
1935      adclin=-2;      adclin=-2;
1936      dEdx=-2;      dEdx=-2;
1937      Zeta=-2;      //    Zeta=-2;//EM GCC4.7
1938        Double_t correction = 1.;
1939    
1940      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){
1941        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.675;        correction = 1.675;
1942      }      }
1943      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){
1944        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/2.482;        correction = 2.482;
1945      }      }
1946      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){
1947        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.464;        correction = 1.464;
1948      }      }
1949      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){
1950        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.995;        correction = 1.995;
1951      }      }
1952      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){
1953        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.273;        correction = 1.273;
1954      }      }
1955      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){
1956        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
1957      }      }
1958      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){
1959        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
1960      }      }
1961      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){
1962        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.018;        correction = 1.018;
1963      }      }
1964      else if(Hconn==1 && (ii==1 || ii==13 || ii==21 || (ii==9&&S115B_ok==1))){      else if(Hconn==1 && (ii==1 || ii==13 || ii==21 || (ii==9&&S115B_ok==1))){
1965        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.84;        correction = 1.84;
     }  
     else if(S115B_break==1 && ii==9 && Hconn==0){  
       adcHe   = f_att5B( ytr_tof[0] );   //N.B.: this function refers to the Carbon!!!  
1966      }      }
1967      else if(S115B_break==1 && ii==9 && Hconn==1){      else if(S115B_break==1 && ii==9 && Hconn==1){
1968        adcHe   = (f_att5B( ytr_tof[0] ))/1.64;        correction = 1.64;
1969        }
1970        else correction = 1.;
1971        
1972        if( ii==9 && S115B_break==1 ){
1973          adcHe   = f_att5B( ytr_tof[0] )/correction;
1974        } else {
1975          adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof)/correction;
1976        };
1977        if(adcHe<=0){
1978          if ( debug ) printf(" %i adcHe<=0 \n",ii);
1979          //      eDEDXpmt->AddAt((Float_t)adccorr,ii); //?
1980          continue;
1981        }
1982        if ( exitat == 2 ){
1983          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt(36.*(Float_t)adccorr/adcHe,ii);
1984          else  adclin  = 4.*(Float_t)adccorr/adcHe;
1985          continue;
1986      }      }
     else  adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof);  
   
     if(adcHe<=0)   continue;  
1987    
1988      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);
1989      else adcnorm = f_pos( (parPos[ii]), adccorr);      else adcnorm = f_pos( (parPos[ii]), adccorr);
1990        if(adcnorm<=0){
1991      if(adcnorm<=0) continue;        if ( debug ) printf(" %i adcnorm<=0 \n",ii);
1992          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
1993          continue;
1994        }
1995        if ( debug ) printf(" adcnorm %f \n",adcnorm);
1996    
1997      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;
1998      else  adclin  = 4.*adcnorm/adcHe;      else  adclin  = 4.*adcnorm/adcHe;
1999        if ( debug ) printf(" adclin %f \n",adclin);
2000      if(adclin<=0)  continue;      if(adclin<=0){
2001          if ( debug ) printf(" %i adclin<=0 \n",ii);
2002          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
2003          continue;
2004        }
2005        if ( exitat == 3 ){
2006          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt((Float_t)adclin,ii);
2007          else  eDEDXpmt->AddAt((Float_t)adclin,ii);
2008          continue;
2009        }
2010      //      //
2011      if ( betamean > 99. ){      if ( betamean > 99. ){
2012        eDEDXpmt[ii]=(Float_t)adclin;        //      eDEDXpmt.AddAt((Float_t)adclin,ii);
2013          eDEDXpmt->AddAt((Float_t)adclin,ii);
2014          //      printf(" AAPMT IS %i dedx is %f vector is %f \n",ii,adclin,eDEDXpmt[ii]);
2015          if ( debug ) printf(" %i betamean > 99 \n",ii);
2016        continue;        continue;
2017      };      };
2018      //      //
# Line 1632  void ToFdEdx::Process(UInt_t atime, Floa Line 2025  void ToFdEdx::Process(UInt_t atime, Floa
2025        else                       dEdxHe = parBBpos[ii];        else                       dEdxHe = parBBpos[ii];
2026      }      }
2027            
2028      if(dEdxHe<=0)  continue;      if ( debug ) printf(" dEdxHe %f \n",dEdxHe);
2029        
2030        if(dEdxHe<=0){
2031          eDEDXpmt->AddAt((Float_t)adclin,ii);
2032          if ( debug ) printf(" %i dEdxHe<=0 \n",ii);
2033          continue;
2034        };
2035    
2036      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );
2037      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );
2038    
2039      if(dEdx<=0)    continue;      if(dEdx<=0){
2040          eDEDXpmt->AddAt((Float_t)adclin,ii);
2041          if ( debug ) printf(" %i dEdx<=0 \n",ii);
2042          continue;
2043        };
2044    
2045      eDEDXpmt[ii]=(Float_t)dEdx;      if ( debug ) printf(" dEdx %f \n",dEdx);
2046        eDEDXpmt->AddAt((Float_t)dEdx,ii);
2047        //    eDEDXpmt.AddAt((Float_t)dEdx,ii);
2048    
2049        //    printf(" PMT IS %i dedx is %f vector is %f \n",ii,dEdx,eDEDXpmt[ii]);
2050    
2051    }  //end loop on 48 PMT    }  //end loop on 48 PMT
2052    
# Line 1834  double ToFdEdx::f_desatBB5B( float x ) Line 2240  double ToFdEdx::f_desatBB5B( float x )
2240      0.009*x*x;      0.009*x*x;
2241  }  }
2242    
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

Legend:
Removed from v.1.29  
changed lines
  Added in v.1.46

  ViewVC Help
Powered by ViewVC 1.1.23