/[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.48 by pam-fi, Wed May 20 10:57:02 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 134  void ToFLevel2::Delete(Option_t *t){ //E Line 147  void ToFLevel2::Delete(Option_t *t){ //E
147    //    //
148  }; //ELENA  }; //ELENA
149    
150    /**
151     * Retrieves the itrk-th tof track stored in the array
152     * @param itrk Array index (min 0, max ToFLevel2::ntrk())
153     *
154     */
155  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t itrk){  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t itrk){
156    //        //    
157    if(itrk >= ntrk()){    if(itrk >= ntrk()){
# Line 148  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t Line 166  ToFTrkVar *ToFLevel2::GetToFTrkVar(Int_t
166    return toftrack;    return toftrack;
167  }  }
168    
169    /**
170     * Retrieves the tof track matching the seqno-th tracker stored track.
171     * @param seqno Track sequential number
172     * (seqno = -1 for standalone tof track, seqno=0-TrkLevel2::ntrk() for tof tracks associated to a tracker track)
173     *
174     */
175    ToFTrkVar *ToFLevel2::GetToFStoredTrack(int seqno){
176    
177      if( ntrk()==0 ){
178        printf("ToFLevel2::GetToFStoredTrack(int) : requested tracker SeqNo %i but no ToFrimeter tracks are stored\n",seqno);
179        return NULL;
180      };
181      
182      ToFTrkVar *c = 0;
183      Int_t it_tof=0;
184        
185      do {
186        c = GetToFTrkVar(it_tof);
187        it_tof++;
188      } while( c && seqno != c->trkseqno && it_tof < ntrk());      
189      
190      if(!c || seqno != c->trkseqno){
191        c = 0;
192        if(seqno!=-1 ) printf("ToFLevel2::GetToFStoredTrack(int) : requested tracker SeqNo %i does not match ToFrimeter stored tracks\n",seqno);
193      };
194      return c;
195        
196    }
197    
198    
199  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit){  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit){
200    //        //    
201    if(ihit >= npmt()){    if(ihit >= npmt()){
# Line 211  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit) Line 259  ToFPMT *ToFLevel2::GetToFPMT(Int_t ihit)
259         false) return true;         false) return true;
260      else return false;      else return false;
261  };  };
262    
263  /**  /**
264   * 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.
265     * The method uses "HitPaddle" which checks if there is a TDC signal
266     * from both PMTs.
267   * @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).
268   */   */
269  Int_t ToFLevel2::GetNHitPaddles(Int_t plane){  Int_t ToFLevel2::GetNHitPaddles(Int_t plane){
# Line 221  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 272  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
272      return npad;      return npad;
273  };  };
274    
275    /**
276     * Optional method to get the number of hit paddles on a ToF plane.
277     * The method does NOT check if there is a signal from both PMTs, it only
278     * checks if there is some PMT signal in a paddle
279     * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
280     */
281    Int_t ToFLevel2::GetTrueNHitPaddles(Int_t plane){
282        Int_t npad=0;
283        TClonesArray* Pmt = this->PMT;
284        int paddle[24];
285        memset(paddle,0, 24*sizeof(int));
286        for(int i=0; i<Pmt->GetEntries(); i++) {  //loop per vedere quale TOF è colpito
287          ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
288          int pplane = -1;
289          int ppaddle = -1;
290          GetPMTPaddle(pmthit->pmt_id,pplane,ppaddle);
291          if ( pplane == plane ) paddle[ppaddle]++;
292        }
293        for(int i=0;i<24;i++) if ( paddle[i]>0 ) npad++;
294    
295        return npad;
296    };
297    
298    //new, wm Feb 15
299  //wm Nov 08  //wm Nov 08
300  //gf Apr 07  //gf Apr 07
301  /**  /**
302   * Method to get the mean dEdx from a ToF layer - ATTENTION:   * Method to get the mean dEdx from a ToF layer
303   * 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
304   * 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
305   * 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
306   * paddle in each layer!   * The method was modified for the "ToF-standalone" part in february 2015
307   * The "adcfl" option is not very useful (an artificial dEdx is per   * The "adcfl" option is not very useful (an artificial dEdx is per
308   * 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
309   * @param notrack Track Number   * @param notrack Track Number (array index, ranging from 0 to ntrk())
310   * @param plane Plane index (0,1,2,3,4,5)   * @param plane Plane index (0,1,2,3,4,5)
311   * @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; )
312   */   */
313  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){
314        ToFTrkVar *trk = GetToFTrkVar(notrack);
315    //    ToFTrkVar *trk = GetToFStoredTrack(seqno);//Elena 2015
316      return this->GetdEdx(trk, plane, adcfl);
317    }
318    
319    //new, wm Feb 15
320    //wm Nov 08
321    //gf Apr 07
322    /**
323     * Method to get the mean dEdx from a ToF layer
324     * By definition there should be PMTs with dEdx values only in one paddle of a layer
325     * (the paddle hitted by the track), this method looks for the hitted paddle
326     * and gives the mean dEdx of that paddle as the output
327     * The method was modified for the "ToF-standalone" part in february 2015
328     * The "adcfl" option is not very useful (an artificial dEdx is per
329     * definition= 1 mip and not a real measurement), anyway left in the code
330     * @param trk Pointer to TofTrkVar object
331     * @param plane Plane index (0,1,2,3,4,5)
332     * @param adcflag in the plane (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
333     */
334    Float_t ToFLevel2::GetdEdx(ToFTrkVar *trk, Int_t plane, Int_t adcfl){
335      
336    Float_t dedx = 0.;    Float_t dedx = 0.;
337    Float_t PadEdx =0.;    Float_t PadEdx =0.;
338    Int_t SatWarning;    Int_t SatWarning;
339    Int_t pad=-1;    Int_t pad=-1;
340    //    //
341    ToFTrkVar *trk = GetToFTrkVar(notrack);    if(!trk) cout << "ToFLevel2::GetdEdx(...) ---> NULL ToFTrkVar obj "<<endl;
342    if(!trk) return 0; //ELENA    if(!trk) return 0; //ELENA
343    //    //
344    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;  
   };  
345    //    //
346      if ( trk->trkseqno == -1 ){
347        
348        //    ToFTrkVar *t_tof = trk;
349        
350        // Find the hitted paddle  (two good TDC values) using the tof_j_flag (from tofl2com.for)
351        
352        Int_t Ipaddle=-1;
353        // if tof_j_flag == 0: no paddle was hitted. Otherwise decode tof_j_flag to get the paddle
354        if (this->tof_j_flag[plane] > 0)  Ipaddle = (Int_t)log2(this->tof_j_flag[plane]) ;
355        
356        Ipaddle =  (Int_t)log2(this->tof_j_flag[plane]) ;
357        
358        // Get the dEdx of this paddle using "GetdEdxPaddle"
359        if (Ipaddle>-1) {
360          Int_t pad = GetPaddleid(plane,Ipaddle);
361          GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
362          dedx = PadEdx;
363        }
364        
365        // If there was no correct hitted paddle, but there was one (and only one) paddle with some
366        // PMT entries in the PMT-class (found with "GetTrueNHitPaddles", use the dEdx of this paddle
367        
368        if ((Ipaddle<0) && (GetTrueNHitPaddles(plane)==1)) {
369          // find the paddle by looping over the paddles in each layer
370          // since GetTrueNHitPaddles==1 this is OK
371          for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
372            Int_t paddleid=ii;
373            Int_t pad = GetPaddleid(plane,paddleid);
374            GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
375            dedx += PadEdx;
376          }
377        }
378      } else {
379        // track dependent dEdx: simple, there will be only one paddle hitted in    each layer
380        // so just loop over the paddles in each layer
381        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
382          Int_t paddleid=ii;
383          pad = GetPaddleid(plane,paddleid);
384          GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
385          dedx += PadEdx;
386        }
387      }
388      //
389    return(dedx);    return(dedx);
390  };  }
391    
392  /**  /**
393   * 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
394   * with the time-walk corrected TDC values.   * with the time-walk corrected TDC values.
395   * @param notrack Track Number   * @param notrack Track Number (arry index, ranging from 0 to ntrk())
396   * @param adc  ADC_C matrix with dEdx values   * @param adc  ADC_C matrix with dEdx values
397   * @param tdc  TDC matrix   * @param tdc  TDC matrix
398   */   */
# Line 328  Int_t ToFLevel2::GetPlaneIndex(Int_t pmt Line 462  Int_t ToFLevel2::GetPlaneIndex(Int_t pmt
462   */   */
463  Int_t ToFLevel2::GetPMTid(Int_t hh, Int_t kk){  Int_t ToFLevel2::GetPMTid(Int_t hh, Int_t kk){
464    //    //
465    short tof[4][24] = {    static const short tof[4][24] = {
466      {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},
467      {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},
468      {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 498  Int_t ToFLevel2::GetPMTid(Int_t hh, Int_
498   */   */
499  void ToFLevel2::GetPMTIndex(Int_t ind, Int_t &hb, Int_t &ch){  void ToFLevel2::GetPMTIndex(Int_t ind, Int_t &hb, Int_t &ch){
500    //    //
501    short tof[4][24] = {    static const short tof[4][24] = {
502      {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},
503      {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},
504      {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 396  void ToFLevel2::GetPMTIndex(Int_t ind, I Line 530  void ToFLevel2::GetPMTIndex(Int_t ind, I
530   * Method to get the dEdx from a given ToF paddle.   * Method to get the dEdx from a given ToF paddle.
531   * If two PMTs are good, the mean dEdx of both PMTs is taken, otherwise   * If two PMTs are good, the mean dEdx of both PMTs is taken, otherwise
532   * just the dEdx of the "good" PMT. If both PMTs are above saturation => dEdx=1000   * just the dEdx of the "good" PMT. If both PMTs are above saturation => dEdx=1000
533   * @param notrack Track Number   * @param notrack Track Number (-1 for standalone info)
534   * @param Paddle index (0,1,...,23).   * @param Paddle index (0,1,...,23).
535   * @param adcflag in the paddle (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )   * @param adcflag in the paddle (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
536   * @param PadEdx dEdx from a given ToF paddle   * @param PadEdx dEdx from a given ToF paddle
# Line 404  void ToFLevel2::GetPMTIndex(Int_t ind, I Line 538  void ToFLevel2::GetPMTIndex(Int_t ind, I
538   */   */
539  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){
540    
541  /*    ToFTrkVar *trk = GetToFTrkVar(notrack);
542  Float_t  PMTsat[48] = {  //    ToFTrkVar *trk = GetToFStoredTrack(seqno); //Elena 2015
543  3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,    this->GetdEdxPaddle(trk, paddleid, adcfl, PadEdx, SatWarning);
544  3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,    
545  3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,  };
546  3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,  
547  3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,  //
548  3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;  //  wm Nov 08 revision - saturation values included
549  */  /// gf Apr 07
550    /**
551  // new values from Napoli dec 2008   * Method to get the dEdx from a given ToF paddle.
552  Float_t  PMTsat[48] = {   * If two PMTs are good, the mean dEdx of both PMTs is taken, otherwise
553  3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,   * just the dEdx of the "good" PMT. If both PMTs are above saturation => dEdx=1000
554  3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,   * @param notrack Track Number
555  3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,   * @param Paddle index (0,1,...,23).
556  3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,   * @param adcflag in the paddle (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
557  3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,   * @param PadEdx dEdx from a given ToF paddle
558  3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };   * @param SatWarning 1 if the PMT ios near saturation region (adcraw ~3000)
559     */
560    void ToFLevel2::GetdEdxPaddle(ToFTrkVar *trk, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning){
561    
562      /*
563        Float_t  PMTsat[48] = {
564        3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,
565        3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,
566        3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,
567        3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,
568        3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,
569        3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;
570      */
571    
572  for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin    // new values from Napoli dec 2008
573      Float_t  PMTsat[48] = {
574        3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,
575        3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,
576        3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,
577        3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,
578        3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,
579        3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };
580    
581      for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin
582    
583    
584    PadEdx = 0.;    PadEdx = 0.;
585  //  SatWarning = 1000;    //  SatWarning = 1000;
586    SatWarning = 0;   // 0=good, increase for each bad PMT    SatWarning = 0;   // 0=good, increase for each bad PMT
587    
588    Float_t dEdx[48] = {0};    Float_t dEdx[48] = {0};
589    Int_t pmt_id = -1;    Int_t pmt_id = -1;
590    Float_t adcraw[48];    Float_t adcraw[48];
591    //    //
592    ToFTrkVar *trk = GetToFTrkVar(notrack);    if(!trk)cout << "ToFLevel2::GetdEdxPaddle(...) ---> NULL ToFTrkVar obj "<<endl;
593    if(!trk) return; //ELENA    if(!trk) return; //ELENA
594    //    //
595    
# Line 474  for (Int_t i=0; i<48;i++) PMTsat[i] = PM Line 629  for (Int_t i=0; i<48;i++) PMTsat[i] = PM
629    }    }
630    
631    
632  //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version    //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version
633    
634  // Increase SatWarning Counter for each PMT>Sat    // Increase SatWarning Counter for each PMT>Sat
635    if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;      if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;  
636    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;
637    
638  // if ADC  > sat set dEdx=1000    // if ADC  > sat set dEdx=1000
639    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;
640    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;
641    
642  // 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
643    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;
644    if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];      if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];  
645    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];
646        
647  };  };
 //  
   
648    
649  // gf Apr 07  // gf Apr 07
650    
# Line 507  TString ToFLevel2::GetPMTName(Int_t ind, Line 660  TString ToFLevel2::GetPMTName(Int_t ind,
660        
661    TString pmtname = " ";    TString pmtname = " ";
662        
663    TString photoS[48] = {    static const TString photoS[48] = {
664      "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",
665      "S11_4B",      "S11_4B",
666      "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 1120  Int_t ToFLevel2::GetNPaddle(Int_t plane)
1120   * @param cut on chi2   * @param cut on chi2
1121   */   */
1122    
 Float_t ToFLevel2::CalcBeta(Int_t notrack, Float_t resmax, Float_t qualitycut, Float_t chi2cut){  
1123    
1124  //  cout<<" in CalcBeta "<<resmax<<" "<<chi2cut<<" "<<qualitycut<<endl;  Float_t ToFTrkVar::CalcBeta( Float_t resmax, Float_t qualitycut, Float_t chi2cut){
1125    
1126    
1127    Float_t bxx = 100.;    Float_t bxx = 100.;
1128    //    //
1129    ToFTrkVar *trk = GetToFTrkVar(notrack);    ToFTrkVar *trk = this;
   if(!trk) return 0; //ELENA  
1130    
1131    
1132    Float_t chi2,xhelp,beta_mean;    Float_t chi2,xhelp,beta_mean;
# Line 1001  Float_t  w_il[6]; Line 1153  Float_t  w_il[6];
1153    for (Int_t i=0; i<trk->npmttdc; i++){    for (Int_t i=0; i<trk->npmttdc; i++){
1154      //      //
1155      pmt_id = (trk->pmttdc).At(i);      pmt_id = (trk->pmttdc).At(i);
1156      pmt_plane = GetPlaneIndex(pmt_id);      pmt_plane = ToFLevel2::GetPlaneIndex(pmt_id);
1157      tdcfl = (trk->tdcflag).At(i);      tdcfl = (trk->tdcflag).At(i);
1158      if (w_il[pmt_plane] != 1.) w_il[pmt_plane] = tdcfl; //tdcflag      if (w_il[pmt_plane] != 1.) w_il[pmt_plane] = tdcfl; //tdcflag
1159                                       };                                       };
# Line 1088  Int_t ibot[12] = {4,5,4,5,4,5,4,5,2,3,2, Line 1240  Int_t ibot[12] = {4,5,4,5,4,5,4,5,2,3,2,
1240    //    //
1241    return(bxx);    return(bxx);
1242  };  };
1243    ////////////////////////////////////////////////////
1244    ////////////////////////////////////////////////////
1245    /**
1246     * See ToFTrkVar::CalcBeta(Float_t,Float_t, Float_t).
1247     * @param notrack Track Number (arry index, ranging from 0 to ntrk())
1248     */
1249    Float_t ToFLevel2::CalcBeta(Int_t notrack, Float_t resmax, Float_t qualitycut, Float_t chi2cut){
1250    
1251    //  cout<<" in CalcBeta "<<resmax<<" "<<chi2cut<<" "<<qualitycut<<endl;
1252    
1253      ToFTrkVar *trk = GetToFTrkVar(notrack);
1254    //    ToFTrkVar *trk = GetToFStoredTrack(seqno);//Elena Apr 2015
1255      if(!trk) return 0; //ELENA
1256    
1257      return trk->CalcBeta(resmax,qualitycut,chi2cut);
1258    
1259    };
1260    
1261    
1262  ////////////////////////////////////////////////////  ////////////////////////////////////////////////////
# Line 1177  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1346  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1346  //   if ( !dbc->IsConnected() ) return 1;  //   if ( !dbc->IsConnected() ) return 1;
1347  //   stringstream myquery;  //   stringstream myquery;
1348  //   myquery.str("");  //   myquery.str("");
1349  //   myquery << "SET time_zone='+0:00'";  //   myquery << "SET time_zone='+0:00';";
1350  //   dbc->Query(myquery.str().c_str());  //   dbc->Query(myquery.str().c_str());
1351    //   delete dbc->Query("SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';");
1352  //   GL_PARAM *glparam = new GL_PARAM();  //   GL_PARAM *glparam = new GL_PARAM();
1353  //   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
1354  //   trk->LoadField(glparam->PATH+glparam->NAME);  //   trk->LoadField(glparam->PATH+glparam->NAME);
# Line 1416  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1586  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1586  //  return(0);  //  return(0);
1587  }  }
1588    
1589    bool ToFLevel2::bit(int decimal, char pos){
1590      return( (decimal>>pos)%2 );
1591    }
1592    
1593    bool ToFLevel2::checkPMT(TString givenpmt){
1594      TClonesArray* Pmt = this->PMT;
1595      //  printf(" ou %s entries %i \n",givenpmt.Data(),Pmt->GetEntries());
1596      for(int i=0; i<Pmt->GetEntries(); i++) {  
1597        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1598        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1599        //    printf(" name %s \n",pmtname.Data());
1600        if ( !strcmp(pmtname.Data(),givenpmt.Data()) )
1601          return true;
1602      }
1603      //  printf(" PMT %s missing \n",givenpmt.Data());
1604      return false;
1605    }
1606    
1607    bool ToFLevel2::checkPMTpatternPMThit(TrigLevel2 *trg, int &pmtpattern, int &pmtnosignal){
1608      UInt_t *patterntrig = trg->patterntrig;
1609      pmtpattern = 0;
1610      pmtnosignal = 0;
1611      bool good = true;
1612      //S3
1613      if ( this->bit(patterntrig[2],0) ){ pmtpattern++;  if ( !this->checkPMT("S31_1A")){ pmtnosignal++; good = false;}}
1614      if ( this->bit(patterntrig[2],1) ){ pmtpattern++;  if ( !this->checkPMT("S31_2A")){ pmtnosignal++; good = false;}}
1615      if ( this->bit(patterntrig[2],2) ){ pmtpattern++;  if ( !this->checkPMT("S31_3A")){ pmtnosignal++; good = false;}}
1616      if ( this->bit(patterntrig[2],3) ){ pmtpattern++;  if ( !this->checkPMT("S31_1B")){ pmtnosignal++; good = false;}}
1617      if ( this->bit(patterntrig[2],4) ){ pmtpattern++;  if ( !this->checkPMT("S31_2B")){ pmtnosignal++; good = false;}}
1618      if ( this->bit(patterntrig[2],5) ){ pmtpattern++;  if ( !this->checkPMT("S31_3B")){ pmtnosignal++; good = false;}}      
1619      if ( this->bit(patterntrig[2],6) ){ pmtpattern++;  if ( !this->checkPMT("S32_1A")){ pmtnosignal++; good = false;}}
1620      if ( this->bit(patterntrig[2],7) ){ pmtpattern++;  if ( !this->checkPMT("S32_2A")){ pmtnosignal++; good = false;}}
1621      if ( this->bit(patterntrig[2],8) ){ pmtpattern++;  if ( !this->checkPMT("S32_3A")){ pmtnosignal++; good = false;}}
1622      if ( this->bit(patterntrig[2],9) ){ pmtpattern++;  if ( !this->checkPMT("S32_1B")){ pmtnosignal++; good = false;}}
1623      if ( this->bit(patterntrig[2],10) ){ pmtpattern++;  if ( !this->checkPMT("S32_2B")){ pmtnosignal++; good = false;}}
1624      if ( this->bit(patterntrig[2],11) ){ pmtpattern++;  if ( !this->checkPMT("S32_3B")){ pmtnosignal++; good = false;}}      
1625      //S2
1626      if ( this->bit(patterntrig[3],0) ){ pmtpattern++;  if ( !this->checkPMT("S21_1A")){ pmtnosignal++; good = false;}}
1627      if ( this->bit(patterntrig[3],1) ){ pmtpattern++;  if ( !this->checkPMT("S21_2A")){ pmtnosignal++; good = false;}}
1628      if ( this->bit(patterntrig[3],2) ){ pmtpattern++;  if ( !this->checkPMT("S21_1B")){ pmtnosignal++; good = false;}}
1629      if ( this->bit(patterntrig[3],3) ){ pmtpattern++;  if ( !this->checkPMT("S21_2B")){ pmtnosignal++; good = false;}}      
1630      if ( this->bit(patterntrig[3],4) ){ pmtpattern++;  if ( !this->checkPMT("S22_1A")){ pmtnosignal++; good = false;}}
1631      if ( this->bit(patterntrig[3],5) ){ pmtpattern++;  if ( !this->checkPMT("S22_2A")){ pmtnosignal++; good = false;}}
1632      if ( this->bit(patterntrig[3],6) ){ pmtpattern++;  if ( !this->checkPMT("S22_1B")){ pmtnosignal++; good = false;}}
1633      if ( this->bit(patterntrig[3],7) ){ pmtpattern++;  if ( !this->checkPMT("S22_2B")){ pmtnosignal++; good = false;}}      
1634      //S12
1635      if ( this->bit(patterntrig[4],0) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1636      if ( this->bit(patterntrig[4],1) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1637      if ( this->bit(patterntrig[4],2) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1638      if ( this->bit(patterntrig[4],3) ){ pmtpattern++;  if ( !this->checkPMT("S12_4A")){ pmtnosignal++; good = false;}}
1639      if ( this->bit(patterntrig[4],4) ){ pmtpattern++;  if ( !this->checkPMT("S12_5A")){ pmtnosignal++; good = false;}}
1640      if ( this->bit(patterntrig[4],5) ){ pmtpattern++;  if ( !this->checkPMT("S12_6A")){ pmtnosignal++; good = false;}}      
1641      if ( this->bit(patterntrig[4],6) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1642      if ( this->bit(patterntrig[4],7) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1643      if ( this->bit(patterntrig[4],8) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1644      if ( this->bit(patterntrig[4],9) ){ pmtpattern++;  if ( !this->checkPMT("S12_4B")){ pmtnosignal++; good = false;}}
1645      if ( this->bit(patterntrig[4],10) ){ pmtpattern++; if ( !this->checkPMT("S12_5B")){ pmtnosignal++; good = false;}}
1646      if ( this->bit(patterntrig[4],11) ){ pmtpattern++; if ( !this->checkPMT("S12_6B")){ pmtnosignal++; good = false;}}      
1647      //S11
1648      if ( this->bit(patterntrig[5],0) ){ pmtpattern++;  if ( !this->checkPMT("S11_1A")){ pmtnosignal++; good = false;}}
1649      if ( this->bit(patterntrig[5],1) ){ pmtpattern++;  if ( !this->checkPMT("S11_2A")){ pmtnosignal++; good = false;}}
1650      if ( this->bit(patterntrig[5],2) ){ pmtpattern++;  if ( !this->checkPMT("S11_3A")){ pmtnosignal++; good = false;}}
1651      if ( this->bit(patterntrig[5],3) ){ pmtpattern++;  if ( !this->checkPMT("S11_4A")){ pmtnosignal++; good = false;}}
1652      if ( this->bit(patterntrig[5],4) ){ pmtpattern++;  if ( !this->checkPMT("S11_5A")){ pmtnosignal++; good = false;}}
1653      if ( this->bit(patterntrig[5],5) ){ pmtpattern++;  if ( !this->checkPMT("S11_6A")){ pmtnosignal++; good = false;}}
1654      if ( this->bit(patterntrig[5],6) ){ pmtpattern++;  if ( !this->checkPMT("S11_7A")){ pmtnosignal++; good = false;}}
1655      if ( this->bit(patterntrig[5],7) ){ pmtpattern++;  if ( !this->checkPMT("S11_8A")){ pmtnosignal++; good = false;}}      
1656      if ( this->bit(patterntrig[5],8) ){ pmtpattern++;  if ( !this->checkPMT("S11_1B")){ pmtnosignal++; good = false;}}
1657      if ( this->bit(patterntrig[5],9) ){ pmtpattern++;  if ( !this->checkPMT("S11_2B")){ pmtnosignal++; good = false;}}
1658      if ( this->bit(patterntrig[5],10) ){ pmtpattern++; if ( !this->checkPMT("S11_3B")){ pmtnosignal++; good = false;}}
1659      if ( this->bit(patterntrig[5],11) ){ pmtpattern++; if ( !this->checkPMT("S11_4B")){ pmtnosignal++; good = false;}}
1660      if ( this->bit(patterntrig[5],12) ){ pmtpattern++; if ( !this->checkPMT("S11_5B")){ pmtnosignal++; good = false;}}
1661      if ( this->bit(patterntrig[5],13) ){ pmtpattern++; if ( !this->checkPMT("S11_6B")){ pmtnosignal++; good = false;}}
1662      if ( this->bit(patterntrig[5],14) ){ pmtpattern++; if ( !this->checkPMT("S11_7B")){ pmtnosignal++; good = false;}}
1663      if ( this->bit(patterntrig[5],15) ){ pmtpattern++; if ( !this->checkPMT("S11_8B")){ pmtnosignal++; good = false;}}
1664    
1665      return good;
1666    }
1667    
1668    bool ToFLevel2::checkPMTpmttrig(TrigLevel2 *trg){
1669      //  UInt_t *patterntrig = trg->patterntrig;
1670      int rS11 = 0;
1671      int rS12 = 0;
1672      int rS21 = 0;
1673      int rS22 = 0;
1674      int rS31 = 0;
1675      int rS32 = 0;
1676    
1677      // trigger configuration for the event from saved pmts
1678      TClonesArray* Pmt = this->PMT;
1679      for(int i=0; i<Pmt->GetEntries(); i++) {  
1680        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1681        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1682        if ( pmtname.Contains("S11") ) rS11++;
1683        if ( pmtname.Contains("S12") ) rS12++;
1684        if ( pmtname.Contains("S21") ) rS21++;
1685        if ( pmtname.Contains("S22") ) rS22++;
1686        if ( pmtname.Contains("S31") ) rS31++;
1687        if ( pmtname.Contains("S32") ) rS32++;
1688      }
1689      int rTOF1 = (rS11 + rS12) * (rS21 + rS22) * (rS31 + rS32);
1690      int rTOF2 = (rS11 * rS12) * (rS21 * rS22) * (rS31 * rS32);
1691    
1692      int rTOF3 = (rS21 + rS22) * (rS31 + rS32);
1693      int rTOF4 = (rS21 * rS22) * (rS31 * rS32);
1694    
1695      int rTOF5 = rS12 * (rS21 * rS22);
1696    
1697      int rTOF6 = (rS11 + rS12) * (rS31 + rS32);
1698      int rTOF7 = (rS11 * rS12) * (rS31 * rS32);
1699    
1700    
1701      // trigger configuration of the run
1702      bool TCTOF1 = false;
1703      bool TCTOF2 = false;
1704      bool TCTOF3 = false;
1705      bool TCTOF4 = false;
1706      bool TCTOF5 = false;
1707      bool TCTOF6 = false;
1708      bool TCTOF7 = false;
1709      if ( trg->trigconf & (1<<0) ) TCTOF1 = true;
1710      if ( trg->trigconf & (1<<1) ) TCTOF2 = true;
1711      if ( trg->trigconf & (1<<2) ) TCTOF3 = true;
1712      if ( trg->trigconf & (1<<3) ) TCTOF4 = true;
1713      if ( trg->trigconf & (1<<4) ) TCTOF5 = true;
1714      if ( trg->trigconf & (1<<5) ) TCTOF6 = true;
1715      if ( trg->trigconf & (1<<6) ) TCTOF7 = true;
1716    
1717      // do patterntrig pmts match the trigger configuration?
1718      bool pmtsconf_trigconf_match = true;
1719      if ( rTOF1 == 0 && TCTOF1 ) pmtsconf_trigconf_match = false;
1720      if ( rTOF2 == 0 && TCTOF2 ) pmtsconf_trigconf_match = false;
1721      if ( rTOF3 == 0 && TCTOF3 ) pmtsconf_trigconf_match = false;
1722      if ( rTOF4 == 0 && TCTOF4 ) pmtsconf_trigconf_match = false;
1723      if ( rTOF5 == 0 && TCTOF5 ) pmtsconf_trigconf_match = false;
1724      if ( rTOF6 == 0 && TCTOF6 ) pmtsconf_trigconf_match = false;
1725      if ( rTOF7 == 0 && TCTOF7 ) pmtsconf_trigconf_match = false;
1726    
1727      return pmtsconf_trigconf_match;
1728    }
1729    
1730    void ToFLevel2::printPMT(){
1731      TClonesArray* Pmt = this->PMT;
1732      for(int i=0; i<Pmt->GetEntries(); i++) {  
1733        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1734        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1735        printf(" PMT hit: %s \n",pmtname.Data());
1736      }
1737    }
1738    
1739    
1740  ToFdEdx::ToFdEdx()  ToFdEdx::ToFdEdx()
1741  {  {
1742    memset(conn,0,12*sizeof(Bool_t));    memset(conn,0,12*sizeof(Bool_t));
1743    memset(ts,0,12*sizeof(UInt_t));    memset(ts,0,12*sizeof(UInt_t));
1744    memset(te,0,12*sizeof(UInt_t));    memset(te,0,12*sizeof(UInt_t));
1745      eDEDXpmt = new TArrayF(48);
1746    Define_PMTsat();    Define_PMTsat();
1747    Clear();    Clear();
1748  }  }
1749    
1750    ToFdEdx::~ToFdEdx(){
1751      Clear();
1752      Delete();
1753    }
1754    
1755    void ToFdEdx::Delete(Option_t *option){
1756      if ( eDEDXpmt ){
1757        eDEDXpmt->Set(0);
1758        if ( eDEDXpmt) delete eDEDXpmt;
1759      }
1760    }
1761    
1762  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1763  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)
1764  {  {
# Line 1466  void ToFdEdx::Clear(Option_t *option) Line 1800  void ToFdEdx::Clear(Option_t *option)
1800  {  {
1801    //    //
1802    // Set arrays and initialize structure    // Set arrays and initialize structure
1803    eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure    //  eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure
1804      eDEDXpmt->Set(48);    eDEDXpmt->Reset(-1);   // Set array size  and reset structure
1805    //    //
1806  };  };
1807    
# Line 1487  void ToFdEdx::Init(pamela::tof::TofEvent Line 1822  void ToFdEdx::Init(pamela::tof::TofEvent
1822      for (Int_t hh=0; hh<12;hh++){      for (Int_t hh=0; hh<12;hh++){
1823        //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];                  //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];          
1824        int mm = tf.GetPMTid(gg,hh);                int mm = tf.GetPMTid(gg,hh);        
1825        adc[mm]=tofl0->adc[gg][hh];        adc[mm]= (0xFFF & tofl0->adc[gg][hh]); // EM, exclude warning bits
1826      };            };      
1827    };    };
1828        
# Line 1505  void ToFdEdx::Init(Int_t gg, Int_t hh, F Line 1840  void ToFdEdx::Init(Int_t gg, Int_t hh, F
1840        
1841  };  };
1842  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1843  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)
1844  {  {
1845      bool debug = false;
1846      if ( debug ) printf(" INSIDE TOFDEDX PROCESS \n");
1847    // the parameters should be already initialised by InitPar()    // the parameters should be already initialised by InitPar()
1848      //  printf(" in process \n");
1849    Clear();    Clear();
1850    
1851   // define angle:     // define angle:  
# Line 1519  void ToFdEdx::Process(UInt_t atime, Floa Line 1857  void ToFdEdx::Process(UInt_t atime, Floa
1857    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.;
1858    for (Int_t ii=0; ii<6; ii++){    for (Int_t ii=0; ii<6; ii++){
1859      if ( xtr_tof[ii] > 99. ) xtr_tof[ii] = 0.;      if ( xtr_tof[ii] > 99. ) xtr_tof[ii] = 0.;
1860      if ( ytr_tof[ii] > 99. ) xtr_tof[ii] = 0.;      if ( ytr_tof[ii] > 99. ) ytr_tof[ii] = 0.;
1861    };    };
1862    //    //
1863        if ( debug ) printf(" theta %f \n",theta);
1864      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]);
1865      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]);
1866      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------
1867      
1868      int Aconn=conn[0];    // PMT 0,20,22,24
1869      int Bconn=conn[1];    // PMT 6,12,26,34
1870      int Cconn=conn[2];    // PMT 4,14,28,32
1871      int Dconn=conn[3];    // PMT 2,8,10,30
1872      int Econn=conn[4];    // PMT 42,43,44,47
1873      int Fconn=conn[5];    // PMT 7,19,23,27
1874      int Gconn=conn[6];    // PMT 3,11,25,33
1875      int Hconn=conn[7];    // PMT 1,9,13,21
1876      int Iconn=conn[8];    // PMT 5,29,31,35
1877      int Lconn=conn[9];    // PMT 37,40,45,46
1878      int Mconn=conn[10];    // PMT 15,16,17,18
1879      int Nconn=conn[11];    // PMT 36,38,39,41
1880      if( false ) cout << Gconn << Iconn << Lconn <<endl; // to avoid compilation warnings
1881        
1882      //  printf(" size %i \n",eDEDXpmt.GetSize());
1883    for( int ii=0; ii<48; ii++ ) {    for( int ii=0; ii<48; ii++ ) {
1884      //      //
1885        //    eDEDXpmt.SetAt(-1.,ii);
1886      //    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]);
1887      if( adc[ii] >= PMTsat[ii]-5 )  continue;      if ( debug ) printf("II %i adc %f \n",ii,adc[ii]);
1888      if( adc[ii] <= 0. )            continue;  
1889        if( adc[ii] >= 4095. ){
1890          //      eDEDXpmt[ii] = 0.;
1891          eDEDXpmt->AddAt(0.,ii);
1892          if ( debug ) printf(" %i adc>4095 \n",ii);
1893          continue; // EMILIANO
1894        };
1895    
1896        if( adc[ii] >= (PMTsat[ii]-5.) && adc[ii] < 4095. ){
1897          eDEDXpmt->AddAt(1000.,ii);
1898          if ( debug ) printf(" %i adc> pmtsat && adc<4095 \n",ii);
1899          continue; // EMILIANO
1900        };
1901    
1902        if( adc[ii] <= 0. ) {
1903          eDEDXpmt->AddAt(1500.,ii);
1904          if ( debug ) printf(" %i adc<=0 \n",ii);
1905          continue;
1906        };
1907      //      //
1908      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC
1909      double adccorr = adcpC*fabs(cos(theta));      if ( exitat == 0 ){
1910      //        eDEDXpmt->AddAt((Float_t)adcpC,ii);
1911      if(adccorr<=0.)           continue;        continue;
1912        }
1913      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------      //    printf(" e qua? \n");
1914    
1915      int Aconn=conn[0];    // PMT 0,20,22,24      double adccorr = adcpC*fabs(cos(theta));    
1916      int Bconn=conn[1];    // PMT 6,12,26,34      if ( debug ) printf(" adccorr %f \n",adccorr);
1917      int Cconn=conn[2];    // PMT 4,14,28,32      if(adccorr<=0.){
1918      int Dconn=conn[3];    // PMT 2,8,10,30        if ( debug ) printf(" %i adccorr<=0 \n",ii);
1919      int Econn=conn[4];    // PMT 42,43,44,47        //      eDEDXpmt->AddAt((Float_t)adcpC,ii);//?
1920      int Fconn=conn[5];    // PMT 7,19,23,27        continue;
1921      int Gconn=conn[6];    // PMT 3,11,25,33      }
1922      int Hconn=conn[7];    // PMT 1,9,13,21      if ( exitat == 1 ){
1923      int Iconn=conn[8];    // PMT 5,29,31,35        eDEDXpmt->AddAt((Float_t)adccorr,ii);
1924      int Lconn=conn[9];    // PMT 37,40,45,46        continue;
1925      int Mconn=conn[10];    // PMT 15,16,17,18      }
1926      int Nconn=conn[11];    // PMT 36,38,39,41      //    printf(" e quo? \n");
1927    
1928      //    int standard=0;      //    int standard=0;
     if( false ) cout << Gconn << Iconn << Lconn <<endl;  
1929      int S115B_ok=0;      int S115B_ok=0;
1930      int S115B_break=0;      int S115B_break=0;
1931    
# Line 1560  void ToFdEdx::Process(UInt_t atime, Floa Line 1934  void ToFdEdx::Process(UInt_t atime, Floa
1934    
1935    
1936      //------------------------------------------------------------------------      //------------------------------------------------------------------------
1937        //    printf(" e qui? \n");
1938      //---------------------------------------------------- Z reconstruction      //---------------------------------------------------- Z reconstruction
1939    
1940      double adcHe, adcnorm, adclin, dEdx, Zeta;      double adcHe, adcnorm, adclin, dEdx;//, Zeta; // EM GCC4.7
1941    
1942      adcHe=-2;      adcHe=-2;
1943      adcnorm=-2;      adcnorm=-2;
1944      adclin=-2;      adclin=-2;
1945      dEdx=-2;      dEdx=-2;
1946      Zeta=-2;      //    Zeta=-2;//EM GCC4.7
1947        Double_t correction = 1.;
1948    
1949      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){
1950        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.675;        correction = 1.675;
1951      }      }
1952      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){
1953        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/2.482;        correction = 2.482;
1954      }      }
1955      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){
1956        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.464;        correction = 1.464;
1957      }      }
1958      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){
1959        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.995;        correction = 1.995;
1960      }      }
1961      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){
1962        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.273;        correction = 1.273;
1963      }      }
1964      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){
1965        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
1966      }      }
1967      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){
1968        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
1969      }      }
1970      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){
1971        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.018;        correction = 1.018;
1972      }      }
1973      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))){
1974        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!!!  
1975      }      }
1976      else if(S115B_break==1 && ii==9 && Hconn==1){      else if(S115B_break==1 && ii==9 && Hconn==1){
1977        adcHe   = (f_att5B( ytr_tof[0] ))/1.64;        correction = 1.64;
1978        }
1979        else correction = 1.;
1980        
1981        if( ii==9 && S115B_break==1 ){
1982          adcHe   = f_att5B( ytr_tof[0] )/correction;
1983        } else {
1984          adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof)/correction;
1985        };
1986        if(adcHe<=0){
1987          if ( debug ) printf(" %i adcHe<=0 \n",ii);
1988          //      eDEDXpmt->AddAt((Float_t)adccorr,ii); //?
1989          continue;
1990        }
1991        if ( exitat == 2 ){
1992          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt(36.*(Float_t)adccorr/adcHe,ii);
1993          else  adclin  = 4.*(Float_t)adccorr/adcHe;
1994          continue;
1995      }      }
     else  adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof);  
   
     if(adcHe<=0)   continue;  
1996    
1997      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);
1998      else adcnorm = f_pos( (parPos[ii]), adccorr);      else adcnorm = f_pos( (parPos[ii]), adccorr);
1999        if(adcnorm<=0){
2000      if(adcnorm<=0) continue;        if ( debug ) printf(" %i adcnorm<=0 \n",ii);
2001          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
2002          continue;
2003        }
2004        if ( debug ) printf(" adcnorm %f \n",adcnorm);
2005    
2006      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;
2007      else  adclin  = 4.*adcnorm/adcHe;      else  adclin  = 4.*adcnorm/adcHe;
2008        if ( debug ) printf(" adclin %f \n",adclin);
2009      if(adclin<=0)  continue;      if(adclin<=0){
2010          if ( debug ) printf(" %i adclin<=0 \n",ii);
2011          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
2012          continue;
2013        }
2014        if ( exitat == 3 ){
2015          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt((Float_t)adclin,ii);
2016          else  eDEDXpmt->AddAt((Float_t)adclin,ii);
2017          continue;
2018        }
2019      //      //
2020      if ( betamean > 99. ){      if ( betamean > 99. ){
2021        eDEDXpmt[ii]=(Float_t)adclin;        //      eDEDXpmt.AddAt((Float_t)adclin,ii);
2022          eDEDXpmt->AddAt((Float_t)adclin,ii);
2023          //      printf(" AAPMT IS %i dedx is %f vector is %f \n",ii,adclin,eDEDXpmt[ii]);
2024          if ( debug ) printf(" %i betamean > 99 \n",ii);
2025        continue;        continue;
2026      };      };
2027      //      //
# Line 1632  void ToFdEdx::Process(UInt_t atime, Floa Line 2034  void ToFdEdx::Process(UInt_t atime, Floa
2034        else                       dEdxHe = parBBpos[ii];        else                       dEdxHe = parBBpos[ii];
2035      }      }
2036            
2037      if(dEdxHe<=0)  continue;      if ( debug ) printf(" dEdxHe %f \n",dEdxHe);
2038        
2039        if(dEdxHe<=0){
2040          eDEDXpmt->AddAt((Float_t)adclin,ii);
2041          if ( debug ) printf(" %i dEdxHe<=0 \n",ii);
2042          continue;
2043        };
2044    
2045      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );
2046      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );
2047    
2048      if(dEdx<=0)    continue;      if(dEdx<=0){
2049          eDEDXpmt->AddAt((Float_t)adclin,ii);
2050          if ( debug ) printf(" %i dEdx<=0 \n",ii);
2051          continue;
2052        };
2053    
2054      eDEDXpmt[ii]=(Float_t)dEdx;      if ( debug ) printf(" dEdx %f \n",dEdx);
2055        eDEDXpmt->AddAt((Float_t)dEdx,ii);
2056        //    eDEDXpmt.AddAt((Float_t)dEdx,ii);
2057    
2058        //    printf(" PMT IS %i dedx is %f vector is %f \n",ii,dEdx,eDEDXpmt[ii]);
2059    
2060    }  //end loop on 48 PMT    }  //end loop on 48 PMT
2061    
# Line 1834  double ToFdEdx::f_desatBB5B( float x ) Line 2249  double ToFdEdx::f_desatBB5B( float x )
2249      0.009*x*x;      0.009*x*x;
2250  }  }
2251    
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

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

  ViewVC Help
Powered by ViewVC 1.1.23