/[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.31 by mocchiut, Fri Feb 5 12:51:44 2010 UTC revision 1.42 by pam-fi, Fri Oct 17 07:54:17 2014 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 221  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 262  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
262      return npad;      return npad;
263  };  };
264    
265    /**
266     * Method to get the number of hit paddles on a ToF plane.
267     * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
268     */
269    Int_t ToFLevel2::GetTrueNHitPaddles(Int_t plane){
270        Int_t npad=0;
271        TClonesArray* Pmt = this->PMT;
272        int paddle[24];
273        memset(paddle,0, 24*sizeof(int));
274        for(int i=0; i<Pmt->GetEntries(); i++) {  //loop per vedere quale TOF è colpito
275          ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
276          int pplane = -1;
277          int ppaddle = -1;
278          GetPMTPaddle(pmthit->pmt_id,pplane,ppaddle);
279          if ( pplane == plane ) paddle[ppaddle]++;
280        }
281        for(int i=0;i<24;i++) if ( paddle[i]>0 ) npad++;
282    
283        return npad;
284    };
285    
286  //wm Nov 08  //wm Nov 08
287  //gf Apr 07  //gf Apr 07
288  /**  /**
# Line 235  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 297  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
297   * @param plane Plane index (0,1,2,3,4,5)   * @param plane Plane index (0,1,2,3,4,5)
298   * @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; )
299   */   */
300  Float_t ToFLevel2::GetdEdx(Int_t notrack, Int_t plane, Int_t adcfl){  Float_t ToFLevel2::GetdEdx(ToFTrkVar *trk, Int_t plane, Int_t adcfl){
301      //  printf("fiffi\n");
302      Float_t dedx = 0.;
303      Float_t PadEdx =0.;
304      Int_t SatWarning;
305      Int_t pad=-1;
306      //
307      if(!trk) return 0; //ELENA
308      //
309      if ( trk->trkseqno == -1 ){ //standalone, only paddles along the track, or about...
310        //    printf("ciccio\n");
311        Float_t xleft=0;
312        Float_t xright=0;
313        Float_t yleft=0;
314        Float_t yright=0;
315        Float_t xtof_temp[6]={100.,100.,100.,100.,100.,100.};
316        Float_t ytof_temp[6]={100.,100.,100.,100.,100.,100.};
317        ToFTrkVar *t_tof = trk;
318        
319        xtof_temp[0]=t_tof->xtofpos[0];
320        ytof_temp[0]=t_tof->ytofpos[0];
321        xtof_temp[1]=t_tof->xtofpos[0];
322        ytof_temp[1]=t_tof->ytofpos[0];
323    
324        xtof_temp[2]=t_tof->xtofpos[1];
325        ytof_temp[2]=t_tof->ytofpos[1];
326        xtof_temp[3]=t_tof->xtofpos[1];
327        ytof_temp[3]=t_tof->ytofpos[1];
328    
329        xtof_temp[4]=t_tof->xtofpos[2];
330        ytof_temp[4]=t_tof->ytofpos[2];
331        xtof_temp[5]=t_tof->xtofpos[2];
332        ytof_temp[5]=t_tof->ytofpos[2];
333    
334        if(t_tof->xtofpos[0]<100. && t_tof->ytofpos[0]<100.){
335          xtof_temp[1]=t_tof->xtofpos[0];
336          ytof_temp[0]=t_tof->ytofpos[0];
337        }else if(t_tof->xtofpos[0]>=100. && t_tof->ytofpos[0]<100.){
338          ytof_temp[0]=t_tof->ytofpos[0];
339          this->GetPaddleGeometry(0,(Int_t)log2(this->tof_j_flag[0]),xleft, xright, yleft, yright);
340          xtof_temp[1]=xleft+2.55;
341        }else if(t_tof->ytofpos[0]>=100. && t_tof->xtofpos[0]<100.){
342          xtof_temp[1]=t_tof->xtofpos[0];
343          this->GetPaddleGeometry(1,(Int_t)log2(this->tof_j_flag[1]),xleft, xright, yleft, yright);
344          ytof_temp[0]=yleft+2.75;
345        }
346        
347        if(t_tof->xtofpos[1]<100. && t_tof->ytofpos[1]<100.){
348          xtof_temp[2]=t_tof->xtofpos[1];
349          ytof_temp[3]=t_tof->ytofpos[1];
350        }else if(t_tof->xtofpos[1]>=100. && t_tof->ytofpos[1]<100.){
351          ytof_temp[3]=t_tof->ytofpos[1];
352          this->GetPaddleGeometry(3,(Int_t)log2(this->tof_j_flag[3]),xleft, xright, yleft, yright);
353          xtof_temp[2]=xleft+4.5;
354        }else if(t_tof->ytofpos[1]>=100. && t_tof->xtofpos[1]<100.){
355          xtof_temp[2]=t_tof->xtofpos[1];
356          this->GetPaddleGeometry(2,(Int_t)log2(this->tof_j_flag[2]),xleft, xright, yleft, yright);
357          ytof_temp[3]=yleft+3.75;
358        }
359        
360        if(t_tof->xtofpos[2]<100. && t_tof->ytofpos[2]<100.){
361          xtof_temp[5]=t_tof->xtofpos[2];
362          ytof_temp[4]=t_tof->ytofpos[2];
363        }else if(t_tof->xtofpos[2]>=100. && t_tof->ytofpos[2]<100.){
364          ytof_temp[4]=t_tof->ytofpos[2];
365          this->GetPaddleGeometry(4,(Int_t)log2(this->tof_j_flag[4]),xleft, xright, yleft, yright);
366          xtof_temp[5]=xleft+3;
367        }else if(t_tof->ytofpos[2]>=100. && t_tof->xtofpos[2]<100.){
368          xtof_temp[5]=t_tof->xtofpos[2];
369          this->GetPaddleGeometry(5,(Int_t)log2(this->tof_j_flag[5]),xleft, xright, yleft, yright);
370          ytof_temp[4]=yleft+2.5;
371        }
372    
373        if ( (xtof_temp[0])> 17.85 && fabs(xtof_temp[0])<17.85+4. ) xtof_temp[0] =17.84;
374        if ( (xtof_temp[1])> 17.85 && fabs(xtof_temp[1])<17.85+4. ) xtof_temp[1] =17.84;
375        if ( (ytof_temp[0])> 13.75 && fabs(ytof_temp[0])<13.75+4. ) ytof_temp[0] =13.74;
376        if ( (ytof_temp[1])> 13.75 && fabs(ytof_temp[1])<13.75+4. ) ytof_temp[1] =13.74;
377        if ( (xtof_temp[0])< -17.85 && fabs(xtof_temp[0])>-(17.85+4.) ) xtof_temp[0] =-17.84;
378        if ( (xtof_temp[1])< -17.85 && fabs(xtof_temp[1])>-(17.85+4.) ) xtof_temp[1] =-17.84;
379        if ( (ytof_temp[0])< -13.75 && fabs(ytof_temp[0])>-(13.75+4.) ) ytof_temp[0] =-13.74;
380        if ( (ytof_temp[1])< -13.75 && fabs(ytof_temp[1])>-(13.75+4.) ) ytof_temp[1] =-13.74;
381    
382        if ( (xtof_temp[2])> 4.5 && (xtof_temp[2])<4.5+4. ) xtof_temp[2] =4.4;
383        if ( (xtof_temp[3])> 4.45 && (xtof_temp[3])<4.5+4. ) xtof_temp[3] =4.4;
384        if ( (ytof_temp[2])> 3.75 && (ytof_temp[2])<3.75+4. ) ytof_temp[2] =3.74;
385        if ( (ytof_temp[3])> 3.75 && (ytof_temp[3])<3.75+4. ) ytof_temp[3] =3.74;
386        if ( (xtof_temp[2])< -4.5 && (xtof_temp[2])>-(4.5+4.) ) xtof_temp[2] =-4.4;
387        if ( (xtof_temp[3])< -4.45 && (xtof_temp[3])>-(4.5+4.) ) xtof_temp[3] =-4.4;
388        if ( (ytof_temp[2])< -3.75 && (ytof_temp[2])>-(3.75+4.) ) ytof_temp[2] =-3.74;
389        if ( (ytof_temp[3])< -3.75 && (ytof_temp[3])>-(3.75+4.) ) ytof_temp[3] =-3.74;
390    
391        if ( (xtof_temp[4])> 6. && (xtof_temp[4])<6.+4. ) xtof_temp[2] =5.9;
392        if ( (xtof_temp[5])> 6. && (xtof_temp[5])<6.+4. ) xtof_temp[3] =5.9;
393        if ( (ytof_temp[4])> 5. && (ytof_temp[4])<5.+4. ) ytof_temp[2] =4.9;
394        if ( (ytof_temp[5])> 5. && (ytof_temp[5])<5.+4. ) ytof_temp[3] =4.9;
395        if ( (xtof_temp[4])< -6. && (xtof_temp[4])>-(6.+4.) ) xtof_temp[2] =-5.9;
396        if ( (xtof_temp[5])< -6. && (xtof_temp[5])>-(6.+4.) ) xtof_temp[3] =-5.9;
397        if ( (ytof_temp[4])< -5. && (ytof_temp[4])>-(5.+4.) ) ytof_temp[2] =-4.9;
398        if ( (ytof_temp[5])< -5. && (ytof_temp[5])>-(5.+4.) ) ytof_temp[3] =-4.9;
399    
400    
401        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
402          Int_t paddleid=ii;
403          pad = GetPaddleid(plane,paddleid);
404          Int_t IpaddleT=-1;
405          IpaddleT=this->GetPaddleIdOfTrack(xtof_temp[plane],ytof_temp[plane], plane,0.0);
406    //      printf("SSS %i %i %f %f  %f %f \n",IpaddleT,paddleid,xtof_temp[plane],ytof_temp[plane],t_tof->xtofpos[plane],t_tof->ytofpos[plane]);
407          //      if ( IpaddleT == paddleid || IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
408          if ( IpaddleT == paddleid || GetTrueNHitPaddles(plane) == 1 ){
409            //IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
410            GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
411            dedx += PadEdx;
412          }
413        };
414      } else {
415        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
416          Int_t paddleid=ii;
417          pad = GetPaddleid(plane,paddleid);
418          GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
419          dedx += PadEdx;
420    //      printf("TTT %i %i %f\n",paddleid,plane,PadEdx);
421        };
422      }
423      //
424      return(dedx);
425    };
426    
427    
428    //wm Nov 08
429    //gf Apr 07
430    /**
431     * Method to get the mean dEdx from a ToF layer - ATTENTION:
432     * It will sum up the dEdx of all the paddles, but since by definition
433     * only the paddle hitted by the track gets a dEdx value and the other
434     * paddles are set to zero, the output is just the dEdx of the hitted
435     * paddle in each layer!
436     * The "adcfl" option is not very useful (an artificial dEdx is per
437     * definition= 1 mip and not a real measurement), anyway left in the code
438     * @param notrack Track Number
439     * @param plane Plane index (0,1,2,3,4,5)
440     * @param adcflag in the plane (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
441     */
442    Float_t ToFLevel2::GetdEdx(Int_t notrack, Int_t plane, Int_t adcfl){
443      //  printf("fiffi\n");
444    Float_t dedx = 0.;    Float_t dedx = 0.;
445    Float_t PadEdx =0.;    Float_t PadEdx =0.;
446    Int_t SatWarning;    Int_t SatWarning;
# Line 245  Float_t ToFLevel2::GetdEdx(Int_t notrack Line 449  Float_t ToFLevel2::GetdEdx(Int_t notrack
449    ToFTrkVar *trk = GetToFTrkVar(notrack);    ToFTrkVar *trk = GetToFTrkVar(notrack);
450    if(!trk) return 0; //ELENA    if(!trk) return 0; //ELENA
451    //    //
452    for (Int_t ii=0; ii<GetNPaddle(plane); ii++){    if ( trk->trkseqno == -1 ){ //standalone, only paddles along the track, or about...
453      Int_t paddleid=ii;      //    printf("ciccio\n");
454      pad = GetPaddleid(plane,paddleid);      Float_t xleft=0;
455      GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);      Float_t xright=0;
456      dedx += PadEdx;      Float_t yleft=0;
457    };      Float_t yright=0;
458        Float_t xtof_temp[6]={100.,100.,100.,100.,100.,100.};
459        Float_t ytof_temp[6]={100.,100.,100.,100.,100.,100.};
460        ToFTrkVar *t_tof = trk;
461        
462        xtof_temp[0]=t_tof->xtofpos[0];
463        ytof_temp[0]=t_tof->ytofpos[0];
464        xtof_temp[1]=t_tof->xtofpos[0];
465        ytof_temp[1]=t_tof->ytofpos[0];
466    
467        xtof_temp[2]=t_tof->xtofpos[1];
468        ytof_temp[2]=t_tof->ytofpos[1];
469        xtof_temp[3]=t_tof->xtofpos[1];
470        ytof_temp[3]=t_tof->ytofpos[1];
471    
472        xtof_temp[4]=t_tof->xtofpos[2];
473        ytof_temp[4]=t_tof->ytofpos[2];
474        xtof_temp[5]=t_tof->xtofpos[2];
475        ytof_temp[5]=t_tof->ytofpos[2];
476    
477        if(t_tof->xtofpos[0]<100. && t_tof->ytofpos[0]<100.){
478          xtof_temp[1]=t_tof->xtofpos[0];
479          ytof_temp[0]=t_tof->ytofpos[0];
480        }else if(t_tof->xtofpos[0]>=100. && t_tof->ytofpos[0]<100.){
481          ytof_temp[0]=t_tof->ytofpos[0];
482          this->GetPaddleGeometry(0,(Int_t)log2(this->tof_j_flag[0]),xleft, xright, yleft, yright);
483          xtof_temp[1]=xleft+2.55;
484        }else if(t_tof->ytofpos[0]>=100. && t_tof->xtofpos[0]<100.){
485          xtof_temp[1]=t_tof->xtofpos[0];
486          this->GetPaddleGeometry(1,(Int_t)log2(this->tof_j_flag[1]),xleft, xright, yleft, yright);
487          ytof_temp[0]=yleft+2.75;
488        }
489        
490        if(t_tof->xtofpos[1]<100. && t_tof->ytofpos[1]<100.){
491          xtof_temp[2]=t_tof->xtofpos[1];
492          ytof_temp[3]=t_tof->ytofpos[1];
493        }else if(t_tof->xtofpos[1]>=100. && t_tof->ytofpos[1]<100.){
494          ytof_temp[3]=t_tof->ytofpos[1];
495          this->GetPaddleGeometry(3,(Int_t)log2(this->tof_j_flag[3]),xleft, xright, yleft, yright);
496          xtof_temp[2]=xleft+4.5;
497        }else if(t_tof->ytofpos[1]>=100. && t_tof->xtofpos[1]<100.){
498          xtof_temp[2]=t_tof->xtofpos[1];
499          this->GetPaddleGeometry(2,(Int_t)log2(this->tof_j_flag[2]),xleft, xright, yleft, yright);
500          ytof_temp[3]=yleft+3.75;
501        }
502        
503        if(t_tof->xtofpos[2]<100. && t_tof->ytofpos[2]<100.){
504          xtof_temp[5]=t_tof->xtofpos[2];
505          ytof_temp[4]=t_tof->ytofpos[2];
506        }else if(t_tof->xtofpos[2]>=100. && t_tof->ytofpos[2]<100.){
507          ytof_temp[4]=t_tof->ytofpos[2];
508          this->GetPaddleGeometry(4,(Int_t)log2(this->tof_j_flag[4]),xleft, xright, yleft, yright);
509          xtof_temp[5]=xleft+3;
510        }else if(t_tof->ytofpos[2]>=100. && t_tof->xtofpos[2]<100.){
511          xtof_temp[5]=t_tof->xtofpos[2];
512          this->GetPaddleGeometry(5,(Int_t)log2(this->tof_j_flag[5]),xleft, xright, yleft, yright);
513          ytof_temp[4]=yleft+2.5;
514        }
515    
516        if ( (xtof_temp[0])> 17.85 && fabs(xtof_temp[0])<17.85+4. ) xtof_temp[0] =17.84;
517        if ( (xtof_temp[1])> 17.85 && fabs(xtof_temp[1])<17.85+4. ) xtof_temp[1] =17.84;
518        if ( (ytof_temp[0])> 13.75 && fabs(ytof_temp[0])<13.75+4. ) ytof_temp[0] =13.74;
519        if ( (ytof_temp[1])> 13.75 && fabs(ytof_temp[1])<13.75+4. ) ytof_temp[1] =13.74;
520        if ( (xtof_temp[0])< -17.85 && fabs(xtof_temp[0])>-(17.85+4.) ) xtof_temp[0] =-17.84;
521        if ( (xtof_temp[1])< -17.85 && fabs(xtof_temp[1])>-(17.85+4.) ) xtof_temp[1] =-17.84;
522        if ( (ytof_temp[0])< -13.75 && fabs(ytof_temp[0])>-(13.75+4.) ) ytof_temp[0] =-13.74;
523        if ( (ytof_temp[1])< -13.75 && fabs(ytof_temp[1])>-(13.75+4.) ) ytof_temp[1] =-13.74;
524    
525        if ( (xtof_temp[2])> 4.5 && (xtof_temp[2])<4.5+4. ) xtof_temp[2] =4.4;
526        if ( (xtof_temp[3])> 4.45 && (xtof_temp[3])<4.5+4. ) xtof_temp[3] =4.4;
527        if ( (ytof_temp[2])> 3.75 && (ytof_temp[2])<3.75+4. ) ytof_temp[2] =3.74;
528        if ( (ytof_temp[3])> 3.75 && (ytof_temp[3])<3.75+4. ) ytof_temp[3] =3.74;
529        if ( (xtof_temp[2])< -4.5 && (xtof_temp[2])>-(4.5+4.) ) xtof_temp[2] =-4.4;
530        if ( (xtof_temp[3])< -4.45 && (xtof_temp[3])>-(4.5+4.) ) xtof_temp[3] =-4.4;
531        if ( (ytof_temp[2])< -3.75 && (ytof_temp[2])>-(3.75+4.) ) ytof_temp[2] =-3.74;
532        if ( (ytof_temp[3])< -3.75 && (ytof_temp[3])>-(3.75+4.) ) ytof_temp[3] =-3.74;
533    
534        if ( (xtof_temp[4])> 6. && (xtof_temp[4])<6.+4. ) xtof_temp[2] =5.9;
535        if ( (xtof_temp[5])> 6. && (xtof_temp[5])<6.+4. ) xtof_temp[3] =5.9;
536        if ( (ytof_temp[4])> 5. && (ytof_temp[4])<5.+4. ) ytof_temp[2] =4.9;
537        if ( (ytof_temp[5])> 5. && (ytof_temp[5])<5.+4. ) ytof_temp[3] =4.9;
538        if ( (xtof_temp[4])< -6. && (xtof_temp[4])>-(6.+4.) ) xtof_temp[2] =-5.9;
539        if ( (xtof_temp[5])< -6. && (xtof_temp[5])>-(6.+4.) ) xtof_temp[3] =-5.9;
540        if ( (ytof_temp[4])< -5. && (ytof_temp[4])>-(5.+4.) ) ytof_temp[2] =-4.9;
541        if ( (ytof_temp[5])< -5. && (ytof_temp[5])>-(5.+4.) ) ytof_temp[3] =-4.9;
542    
543    
544        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
545          Int_t paddleid=ii;
546          pad = GetPaddleid(plane,paddleid);
547          Int_t IpaddleT=-1;
548          IpaddleT=this->GetPaddleIdOfTrack(xtof_temp[plane],ytof_temp[plane], plane,0.0);
549    //      printf("SSS %i %i %f %f  %f %f \n",IpaddleT,paddleid,xtof_temp[plane],ytof_temp[plane],t_tof->xtofpos[plane],t_tof->ytofpos[plane]);
550          //      if ( IpaddleT == paddleid || IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
551          if ( IpaddleT == paddleid || GetTrueNHitPaddles(plane) == 1 ){
552            //IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
553            GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);
554            dedx += PadEdx;
555          }
556        };
557      } else {
558        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
559          Int_t paddleid=ii;
560          pad = GetPaddleid(plane,paddleid);
561          GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);
562          dedx += PadEdx;
563    //      printf("TTT %i %i %f\n",paddleid,plane,PadEdx);
564        };
565      }
566    //    //
567    return(dedx);    return(dedx);
568  };  };
# Line 404  void ToFLevel2::GetPMTIndex(Int_t ind, I Line 716  void ToFLevel2::GetPMTIndex(Int_t ind, I
716   */   */
717  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){
718    
719  /*    /*
720  Float_t  PMTsat[48] = {      Float_t  PMTsat[48] = {
721  3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,      3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,
722  3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,      3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,
723  3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,      3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,
724  3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,      3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,
725  3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,      3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,
726  3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;      3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;
727  */    */
   
 // 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 };  
728    
729  for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin    // new values from Napoli dec 2008
730      Float_t  PMTsat[48] = {
731        3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,
732        3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,
733        3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,
734        3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,
735        3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,
736        3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };
737    
738      for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin
739    
740    
741    PadEdx = 0.;    PadEdx = 0.;
742  //  SatWarning = 1000;    //  SatWarning = 1000;
743    SatWarning = 0;   // 0=good, increase for each bad PMT    SatWarning = 0;   // 0=good, increase for each bad PMT
744    
745    Float_t dEdx[48] = {0};    Float_t dEdx[48] = {0};
# Line 474  for (Int_t i=0; i<48;i++) PMTsat[i] = PM Line 786  for (Int_t i=0; i<48;i++) PMTsat[i] = PM
786    }    }
787    
788    
789  //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version    //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version
790    
791  // Increase SatWarning Counter for each PMT>Sat    // Increase SatWarning Counter for each PMT>Sat
792    if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;      if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;  
793    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;
794    
795  // if ADC  > sat set dEdx=1000    // if ADC  > sat set dEdx=1000
796    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;
797    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;
798    
799  // 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
800    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;
801    if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];      if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];  
802    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];
803        
804  };  };
805    
806  //  //
807    //  wm Nov 08 revision - saturation values included
808    /// gf Apr 07
809    /**
810     * Method to get the dEdx from a given ToF paddle.
811     * If two PMTs are good, the mean dEdx of both PMTs is taken, otherwise
812     * just the dEdx of the "good" PMT. If both PMTs are above saturation => dEdx=1000
813     * @param notrack Track Number
814     * @param Paddle index (0,1,...,23).
815     * @param adcflag in the paddle (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
816     * @param PadEdx dEdx from a given ToF paddle
817     * @param SatWarning 1 if the PMT ios near saturation region (adcraw ~3000)
818     */
819    void ToFLevel2::GetdEdxPaddle(ToFTrkVar *trk, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning){
820    
821      /*
822        Float_t  PMTsat[48] = {
823        3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,
824        3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,
825        3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,
826        3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,
827        3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,
828        3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;
829      */
830    
831      // new values from Napoli dec 2008
832      Float_t  PMTsat[48] = {
833        3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,
834        3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,
835        3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,
836        3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,
837        3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,
838        3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };
839    
840      for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin
841    
842    
843      PadEdx = 0.;
844      //  SatWarning = 1000;
845      SatWarning = 0;   // 0=good, increase for each bad PMT
846    
847      Float_t dEdx[48] = {0};
848      Int_t pmt_id = -1;
849      Float_t adcraw[48];
850      //
851      if(!trk) return; //ELENA
852      //
853    
854      Int_t pmtleft=-1;
855      Int_t pmtright=-1;
856      GetPaddlePMT(paddleid, pmtleft, pmtright);
857    
858      adcraw[pmtleft] = 4095;
859      adcraw[pmtright] = 4095;
860    
861      
862      for (Int_t jj=0; jj<npmt(); jj++){
863        
864        ToFPMT *pmt = GetToFPMT(jj);
865        if(!pmt)break; //ELENA
866        
867        pmt_id = pmt->pmt_id;
868        if(pmt_id==pmtleft){
869          adcraw[pmtleft] = pmt->adc;
870        }
871        
872        if(pmt_id==pmtright){
873          adcraw[pmtright] = pmt->adc;
874        }
875      }
876    
877      
878      for (Int_t i=0; i<trk->npmtadc; i++){
879    
880        if((trk->adcflag).At(i)==0 || adcfl==100){
881          if((trk->pmtadc).At(i) == pmtleft)dEdx[pmtleft] = (trk->dedx).At(i);
882          if((trk->pmtadc).At(i) == pmtright)dEdx[pmtright] = (trk->dedx).At(i);
883        }else{
884          if((trk->pmtadc).At(i) == pmtleft)dEdx[pmtleft] = 0.;
885          if((trk->pmtadc).At(i) == pmtright)dEdx[pmtright] = 0.;
886        }
887      }
888    
889    
890      //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version
891    
892      // Increase SatWarning Counter for each PMT>Sat
893      if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;  
894      if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;
895    
896      // if ADC  > sat set dEdx=1000
897      if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;
898      if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;
899    
900      // if two PMT are good, take mean dEdx, otherwise only the good dEdx
901      if(dEdx[pmtleft]<1000 && dEdx[pmtright]<1000) PadEdx = (dEdx[pmtleft]+dEdx[pmtright])*0.5;
902      if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];  
903      if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];
904      
905    };
906    
907  // gf Apr 07  // gf Apr 07
908    
# Line 1177  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1588  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1588  //   if ( !dbc->IsConnected() ) return 1;  //   if ( !dbc->IsConnected() ) return 1;
1589  //   stringstream myquery;  //   stringstream myquery;
1590  //   myquery.str("");  //   myquery.str("");
1591  //   myquery << "SET time_zone='+0:00'";  //   myquery << "SET time_zone='+0:00';";
1592  //   dbc->Query(myquery.str().c_str());  //   dbc->Query(myquery.str().c_str());
1593    //   delete dbc->Query("SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';");
1594  //   GL_PARAM *glparam = new GL_PARAM();  //   GL_PARAM *glparam = new GL_PARAM();
1595  //   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
1596  //   trk->LoadField(glparam->PATH+glparam->NAME);  //   trk->LoadField(glparam->PATH+glparam->NAME);
# Line 1416  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1828  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1828  //  return(0);  //  return(0);
1829  }  }
1830    
1831    bool ToFLevel2::bit(int decimal, char pos){
1832      return( (decimal>>pos)%2 );
1833    }
1834    
1835    bool ToFLevel2::checkPMT(TString givenpmt){
1836      TClonesArray* Pmt = this->PMT;
1837      //  printf(" ou %s entries %i \n",givenpmt.Data(),Pmt->GetEntries());
1838      for(int i=0; i<Pmt->GetEntries(); i++) {  
1839        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1840        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1841        //    printf(" name %s \n",pmtname.Data());
1842        if ( !strcmp(pmtname.Data(),givenpmt.Data()) )
1843          return true;
1844      }
1845      //  printf(" PMT %s missing \n",givenpmt.Data());
1846      return false;
1847    }
1848    
1849    bool ToFLevel2::checkPMTpatternPMThit(TrigLevel2 *trg, int &pmtpattern, int &pmtnosignal){
1850      UInt_t *patterntrig = trg->patterntrig;
1851      pmtpattern = 0;
1852      pmtnosignal = 0;
1853      bool good = true;
1854      //S3
1855      if ( this->bit(patterntrig[2],0) ){ pmtpattern++;  if ( !this->checkPMT("S31_1A")){ pmtnosignal++; good = false;}}
1856      if ( this->bit(patterntrig[2],1) ){ pmtpattern++;  if ( !this->checkPMT("S31_2A")){ pmtnosignal++; good = false;}}
1857      if ( this->bit(patterntrig[2],2) ){ pmtpattern++;  if ( !this->checkPMT("S31_3A")){ pmtnosignal++; good = false;}}
1858      if ( this->bit(patterntrig[2],3) ){ pmtpattern++;  if ( !this->checkPMT("S31_1B")){ pmtnosignal++; good = false;}}
1859      if ( this->bit(patterntrig[2],4) ){ pmtpattern++;  if ( !this->checkPMT("S31_2B")){ pmtnosignal++; good = false;}}
1860      if ( this->bit(patterntrig[2],5) ){ pmtpattern++;  if ( !this->checkPMT("S31_3B")){ pmtnosignal++; good = false;}}      
1861      if ( this->bit(patterntrig[2],6) ){ pmtpattern++;  if ( !this->checkPMT("S32_1A")){ pmtnosignal++; good = false;}}
1862      if ( this->bit(patterntrig[2],7) ){ pmtpattern++;  if ( !this->checkPMT("S32_2A")){ pmtnosignal++; good = false;}}
1863      if ( this->bit(patterntrig[2],8) ){ pmtpattern++;  if ( !this->checkPMT("S32_3A")){ pmtnosignal++; good = false;}}
1864      if ( this->bit(patterntrig[2],9) ){ pmtpattern++;  if ( !this->checkPMT("S32_1B")){ pmtnosignal++; good = false;}}
1865      if ( this->bit(patterntrig[2],10) ){ pmtpattern++;  if ( !this->checkPMT("S32_2B")){ pmtnosignal++; good = false;}}
1866      if ( this->bit(patterntrig[2],11) ){ pmtpattern++;  if ( !this->checkPMT("S32_3B")){ pmtnosignal++; good = false;}}      
1867      //S2
1868      if ( this->bit(patterntrig[3],0) ){ pmtpattern++;  if ( !this->checkPMT("S21_1A")){ pmtnosignal++; good = false;}}
1869      if ( this->bit(patterntrig[3],1) ){ pmtpattern++;  if ( !this->checkPMT("S21_2A")){ pmtnosignal++; good = false;}}
1870      if ( this->bit(patterntrig[3],2) ){ pmtpattern++;  if ( !this->checkPMT("S21_1B")){ pmtnosignal++; good = false;}}
1871      if ( this->bit(patterntrig[3],3) ){ pmtpattern++;  if ( !this->checkPMT("S21_2B")){ pmtnosignal++; good = false;}}      
1872      if ( this->bit(patterntrig[3],4) ){ pmtpattern++;  if ( !this->checkPMT("S22_1A")){ pmtnosignal++; good = false;}}
1873      if ( this->bit(patterntrig[3],5) ){ pmtpattern++;  if ( !this->checkPMT("S22_2A")){ pmtnosignal++; good = false;}}
1874      if ( this->bit(patterntrig[3],6) ){ pmtpattern++;  if ( !this->checkPMT("S22_1B")){ pmtnosignal++; good = false;}}
1875      if ( this->bit(patterntrig[3],7) ){ pmtpattern++;  if ( !this->checkPMT("S22_2B")){ pmtnosignal++; good = false;}}      
1876      //S12
1877      if ( this->bit(patterntrig[4],0) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1878      if ( this->bit(patterntrig[4],1) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1879      if ( this->bit(patterntrig[4],2) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1880      if ( this->bit(patterntrig[4],3) ){ pmtpattern++;  if ( !this->checkPMT("S12_4A")){ pmtnosignal++; good = false;}}
1881      if ( this->bit(patterntrig[4],4) ){ pmtpattern++;  if ( !this->checkPMT("S12_5A")){ pmtnosignal++; good = false;}}
1882      if ( this->bit(patterntrig[4],5) ){ pmtpattern++;  if ( !this->checkPMT("S12_6A")){ pmtnosignal++; good = false;}}      
1883      if ( this->bit(patterntrig[4],6) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1884      if ( this->bit(patterntrig[4],7) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1885      if ( this->bit(patterntrig[4],8) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1886      if ( this->bit(patterntrig[4],9) ){ pmtpattern++;  if ( !this->checkPMT("S12_4B")){ pmtnosignal++; good = false;}}
1887      if ( this->bit(patterntrig[4],10) ){ pmtpattern++; if ( !this->checkPMT("S12_5B")){ pmtnosignal++; good = false;}}
1888      if ( this->bit(patterntrig[4],11) ){ pmtpattern++; if ( !this->checkPMT("S12_6B")){ pmtnosignal++; good = false;}}      
1889      //S11
1890      if ( this->bit(patterntrig[5],0) ){ pmtpattern++;  if ( !this->checkPMT("S11_1A")){ pmtnosignal++; good = false;}}
1891      if ( this->bit(patterntrig[5],1) ){ pmtpattern++;  if ( !this->checkPMT("S11_2A")){ pmtnosignal++; good = false;}}
1892      if ( this->bit(patterntrig[5],2) ){ pmtpattern++;  if ( !this->checkPMT("S11_3A")){ pmtnosignal++; good = false;}}
1893      if ( this->bit(patterntrig[5],3) ){ pmtpattern++;  if ( !this->checkPMT("S11_4A")){ pmtnosignal++; good = false;}}
1894      if ( this->bit(patterntrig[5],4) ){ pmtpattern++;  if ( !this->checkPMT("S11_5A")){ pmtnosignal++; good = false;}}
1895      if ( this->bit(patterntrig[5],5) ){ pmtpattern++;  if ( !this->checkPMT("S11_6A")){ pmtnosignal++; good = false;}}
1896      if ( this->bit(patterntrig[5],6) ){ pmtpattern++;  if ( !this->checkPMT("S11_7A")){ pmtnosignal++; good = false;}}
1897      if ( this->bit(patterntrig[5],7) ){ pmtpattern++;  if ( !this->checkPMT("S11_8A")){ pmtnosignal++; good = false;}}      
1898      if ( this->bit(patterntrig[5],8) ){ pmtpattern++;  if ( !this->checkPMT("S11_1B")){ pmtnosignal++; good = false;}}
1899      if ( this->bit(patterntrig[5],9) ){ pmtpattern++;  if ( !this->checkPMT("S11_2B")){ pmtnosignal++; good = false;}}
1900      if ( this->bit(patterntrig[5],10) ){ pmtpattern++; if ( !this->checkPMT("S11_3B")){ pmtnosignal++; good = false;}}
1901      if ( this->bit(patterntrig[5],11) ){ pmtpattern++; if ( !this->checkPMT("S11_4B")){ pmtnosignal++; good = false;}}
1902      if ( this->bit(patterntrig[5],12) ){ pmtpattern++; if ( !this->checkPMT("S11_5B")){ pmtnosignal++; good = false;}}
1903      if ( this->bit(patterntrig[5],13) ){ pmtpattern++; if ( !this->checkPMT("S11_6B")){ pmtnosignal++; good = false;}}
1904      if ( this->bit(patterntrig[5],14) ){ pmtpattern++; if ( !this->checkPMT("S11_7B")){ pmtnosignal++; good = false;}}
1905      if ( this->bit(patterntrig[5],15) ){ pmtpattern++; if ( !this->checkPMT("S11_8B")){ pmtnosignal++; good = false;}}
1906    
1907      return good;
1908    }
1909    
1910    bool ToFLevel2::checkPMTpmttrig(TrigLevel2 *trg){
1911      //  UInt_t *patterntrig = trg->patterntrig;
1912      int rS11 = 0;
1913      int rS12 = 0;
1914      int rS21 = 0;
1915      int rS22 = 0;
1916      int rS31 = 0;
1917      int rS32 = 0;
1918    
1919      // trigger configuration for the event from saved pmts
1920      TClonesArray* Pmt = this->PMT;
1921      for(int i=0; i<Pmt->GetEntries(); i++) {  
1922        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1923        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1924        if ( pmtname.Contains("S11") ) rS11++;
1925        if ( pmtname.Contains("S12") ) rS12++;
1926        if ( pmtname.Contains("S21") ) rS21++;
1927        if ( pmtname.Contains("S22") ) rS22++;
1928        if ( pmtname.Contains("S31") ) rS31++;
1929        if ( pmtname.Contains("S32") ) rS32++;
1930      }
1931      int rTOF1 = (rS11 + rS12) * (rS21 + rS22) * (rS31 + rS32);
1932      int rTOF2 = (rS11 * rS12) * (rS21 * rS22) * (rS31 * rS32);
1933    
1934      int rTOF3 = (rS21 + rS22) * (rS31 + rS32);
1935      int rTOF4 = (rS21 * rS22) * (rS31 * rS32);
1936    
1937      int rTOF5 = rS12 * (rS21 * rS22);
1938    
1939      int rTOF6 = (rS11 + rS12) * (rS31 + rS32);
1940      int rTOF7 = (rS11 * rS12) * (rS31 * rS32);
1941    
1942    
1943      // trigger configuration of the run
1944      bool TCTOF1 = false;
1945      bool TCTOF2 = false;
1946      bool TCTOF3 = false;
1947      bool TCTOF4 = false;
1948      bool TCTOF5 = false;
1949      bool TCTOF6 = false;
1950      bool TCTOF7 = false;
1951      if ( trg->trigconf & (1<<0) ) TCTOF1 = true;
1952      if ( trg->trigconf & (1<<1) ) TCTOF2 = true;
1953      if ( trg->trigconf & (1<<2) ) TCTOF3 = true;
1954      if ( trg->trigconf & (1<<3) ) TCTOF4 = true;
1955      if ( trg->trigconf & (1<<4) ) TCTOF5 = true;
1956      if ( trg->trigconf & (1<<5) ) TCTOF6 = true;
1957      if ( trg->trigconf & (1<<6) ) TCTOF7 = true;
1958    
1959      // do patterntrig pmts match the trigger configuration?
1960      bool pmtsconf_trigconf_match = true;
1961      if ( rTOF1 == 0 && TCTOF1 ) pmtsconf_trigconf_match = false;
1962      if ( rTOF2 == 0 && TCTOF2 ) pmtsconf_trigconf_match = false;
1963      if ( rTOF3 == 0 && TCTOF3 ) pmtsconf_trigconf_match = false;
1964      if ( rTOF4 == 0 && TCTOF4 ) pmtsconf_trigconf_match = false;
1965      if ( rTOF5 == 0 && TCTOF5 ) pmtsconf_trigconf_match = false;
1966      if ( rTOF6 == 0 && TCTOF6 ) pmtsconf_trigconf_match = false;
1967      if ( rTOF7 == 0 && TCTOF7 ) pmtsconf_trigconf_match = false;
1968    
1969      return pmtsconf_trigconf_match;
1970    }
1971    
1972    void ToFLevel2::printPMT(){
1973      TClonesArray* Pmt = this->PMT;
1974      for(int i=0; i<Pmt->GetEntries(); i++) {  
1975        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1976        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1977        printf(" PMT hit: %s \n",pmtname.Data());
1978      }
1979    }
1980    
1981    
1982  ToFdEdx::ToFdEdx()  ToFdEdx::ToFdEdx()
1983  {  {
1984    memset(conn,0,12*sizeof(Bool_t));    memset(conn,0,12*sizeof(Bool_t));
1985    memset(ts,0,12*sizeof(UInt_t));    memset(ts,0,12*sizeof(UInt_t));
1986    memset(te,0,12*sizeof(UInt_t));    memset(te,0,12*sizeof(UInt_t));
1987      eDEDXpmt = new TArrayF(48);
1988    Define_PMTsat();    Define_PMTsat();
1989    Clear();    Clear();
1990  }  }
1991    
1992    ToFdEdx::~ToFdEdx(){
1993      Clear();
1994      Delete();
1995    }
1996    
1997    void ToFdEdx::Delete(Option_t *option){
1998      if ( eDEDXpmt ){
1999        eDEDXpmt->Set(0);
2000        if ( eDEDXpmt) delete eDEDXpmt;
2001      }
2002    }
2003    
2004  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2005  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)
2006  {  {
# Line 1466  void ToFdEdx::Clear(Option_t *option) Line 2042  void ToFdEdx::Clear(Option_t *option)
2042  {  {
2043    //    //
2044    // Set arrays and initialize structure    // Set arrays and initialize structure
2045    eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure    //  eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure
2046      eDEDXpmt->Set(48);    eDEDXpmt->Reset(-1);   // Set array size  and reset structure
2047    //    //
2048  };  };
2049    
# Line 1487  void ToFdEdx::Init(pamela::tof::TofEvent Line 2064  void ToFdEdx::Init(pamela::tof::TofEvent
2064      for (Int_t hh=0; hh<12;hh++){      for (Int_t hh=0; hh<12;hh++){
2065        //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];                  //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];          
2066        int mm = tf.GetPMTid(gg,hh);                int mm = tf.GetPMTid(gg,hh);        
2067        adc[mm]=tofl0->adc[gg][hh];        adc[mm]= (0xFFF & tofl0->adc[gg][hh]); // EM, exclude warning bits
2068      };            };      
2069    };    };
2070        
# Line 1505  void ToFdEdx::Init(Int_t gg, Int_t hh, F Line 2082  void ToFdEdx::Init(Int_t gg, Int_t hh, F
2082        
2083  };  };
2084  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2085  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)
2086  {  {
2087      bool debug = false;
2088      if ( debug ) printf(" INSIDE TOFDEDX PROCESS \n");
2089    // the parameters should be already initialised by InitPar()    // the parameters should be already initialised by InitPar()
2090      //  printf(" in process \n");
2091    Clear();    Clear();
2092    
2093   // define angle:     // define angle:  
# Line 1522  void ToFdEdx::Process(UInt_t atime, Floa Line 2102  void ToFdEdx::Process(UInt_t atime, Floa
2102      if ( ytr_tof[ii] > 99. ) ytr_tof[ii] = 0.;      if ( ytr_tof[ii] > 99. ) ytr_tof[ii] = 0.;
2103    };    };
2104    //    //
2105        if ( debug ) printf(" theta %f \n",theta);
2106      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]);
2107      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]);
2108      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------
2109      
2110      int Aconn=conn[0];    // PMT 0,20,22,24
2111      int Bconn=conn[1];    // PMT 6,12,26,34
2112      int Cconn=conn[2];    // PMT 4,14,28,32
2113      int Dconn=conn[3];    // PMT 2,8,10,30
2114      int Econn=conn[4];    // PMT 42,43,44,47
2115      int Fconn=conn[5];    // PMT 7,19,23,27
2116      int Gconn=conn[6];    // PMT 3,11,25,33
2117      int Hconn=conn[7];    // PMT 1,9,13,21
2118      int Iconn=conn[8];    // PMT 5,29,31,35
2119      int Lconn=conn[9];    // PMT 37,40,45,46
2120      int Mconn=conn[10];    // PMT 15,16,17,18
2121      int Nconn=conn[11];    // PMT 36,38,39,41
2122      if( false ) cout << Gconn << Iconn << Lconn <<endl; // to avoid compilation warnings
2123        
2124      //  printf(" size %i \n",eDEDXpmt.GetSize());
2125    for( int ii=0; ii<48; ii++ ) {    for( int ii=0; ii<48; ii++ ) {
2126      //      //
2127        //    eDEDXpmt.SetAt(-1.,ii);
2128      //    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]);
2129      if( adc[ii] >= PMTsat[ii]-5 )  continue;      if ( debug ) printf("II %i adc %f \n",ii,adc[ii]);
2130      if( adc[ii] <= 0. )            continue;  
2131        if( adc[ii] >= 4095. ){
2132          //      eDEDXpmt[ii] = 0.;
2133          eDEDXpmt->AddAt(0.,ii);
2134          if ( debug ) printf(" %i adc>4095 \n",ii);
2135          continue; // EMILIANO
2136        };
2137    
2138        if( adc[ii] >= (PMTsat[ii]-5.) && adc[ii] < 4095. ){
2139          eDEDXpmt->AddAt(1000.,ii);
2140          if ( debug ) printf(" %i adc> pmtsat && adc<4095 \n",ii);
2141          continue; // EMILIANO
2142        };
2143    
2144        if( adc[ii] <= 0. ) {
2145          eDEDXpmt->AddAt(1500.,ii);
2146          if ( debug ) printf(" %i adc<=0 \n",ii);
2147          continue;
2148        };
2149      //      //
2150      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC
2151      double adccorr = adcpC*fabs(cos(theta));      if ( exitat == 0 ){
2152      //        eDEDXpmt->AddAt((Float_t)adcpC,ii);
2153      if(adccorr<=0.)           continue;        continue;
2154        }
2155      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------      //    printf(" e qua? \n");
2156    
2157      int Aconn=conn[0];    // PMT 0,20,22,24      double adccorr = adcpC*fabs(cos(theta));    
2158      int Bconn=conn[1];    // PMT 6,12,26,34      if ( debug ) printf(" adccorr %f \n",adccorr);
2159      int Cconn=conn[2];    // PMT 4,14,28,32      if(adccorr<=0.){
2160      int Dconn=conn[3];    // PMT 2,8,10,30        if ( debug ) printf(" %i adccorr<=0 \n",ii);
2161      int Econn=conn[4];    // PMT 42,43,44,47        //      eDEDXpmt->AddAt((Float_t)adcpC,ii);//?
2162      int Fconn=conn[5];    // PMT 7,19,23,27        continue;
2163      int Gconn=conn[6];    // PMT 3,11,25,33      }
2164      int Hconn=conn[7];    // PMT 1,9,13,21      if ( exitat == 1 ){
2165      int Iconn=conn[8];    // PMT 5,29,31,35        eDEDXpmt->AddAt((Float_t)adccorr,ii);
2166      int Lconn=conn[9];    // PMT 37,40,45,46        continue;
2167      int Mconn=conn[10];    // PMT 15,16,17,18      }
2168      int Nconn=conn[11];    // PMT 36,38,39,41      //    printf(" e quo? \n");
2169    
2170      //    int standard=0;      //    int standard=0;
     if( false ) cout << Gconn << Iconn << Lconn <<endl;  
2171      int S115B_ok=0;      int S115B_ok=0;
2172      int S115B_break=0;      int S115B_break=0;
2173    
# Line 1560  void ToFdEdx::Process(UInt_t atime, Floa Line 2176  void ToFdEdx::Process(UInt_t atime, Floa
2176    
2177    
2178      //------------------------------------------------------------------------      //------------------------------------------------------------------------
2179        //    printf(" e qui? \n");
2180      //---------------------------------------------------- Z reconstruction      //---------------------------------------------------- Z reconstruction
2181    
2182      double adcHe, adcnorm, adclin, dEdx, Zeta;      double adcHe, adcnorm, adclin, dEdx;//, Zeta; // EM GCC4.7
2183    
2184      adcHe=-2;      adcHe=-2;
2185      adcnorm=-2;      adcnorm=-2;
2186      adclin=-2;      adclin=-2;
2187      dEdx=-2;      dEdx=-2;
2188      Zeta=-2;      //    Zeta=-2;//EM GCC4.7
2189        Double_t correction = 1.;
2190    
2191      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){
2192        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.675;        correction = 1.675;
2193      }      }
2194      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){
2195        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/2.482;        correction = 2.482;
2196      }      }
2197      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){
2198        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.464;        correction = 1.464;
2199      }      }
2200      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){
2201        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.995;        correction = 1.995;
2202      }      }
2203      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){
2204        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.273;        correction = 1.273;
2205      }      }
2206      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){
2207        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
2208      }      }
2209      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){
2210        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
2211      }      }
2212      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){
2213        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.018;        correction = 1.018;
2214      }      }
2215      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))){
2216        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!!!  
2217      }      }
2218      else if(S115B_break==1 && ii==9 && Hconn==1){      else if(S115B_break==1 && ii==9 && Hconn==1){
2219        adcHe   = (f_att5B( ytr_tof[0] ))/1.64;        correction = 1.64;
2220        }
2221        else correction = 1.;
2222        
2223        if( ii==9 && S115B_break==1 ){
2224          adcHe   = f_att5B( ytr_tof[0] )/correction;
2225        } else {
2226          adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof)/correction;
2227        };
2228        if(adcHe<=0){
2229          if ( debug ) printf(" %i adcHe<=0 \n",ii);
2230          //      eDEDXpmt->AddAt((Float_t)adccorr,ii); //?
2231          continue;
2232        }
2233        if ( exitat == 2 ){
2234          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt(36.*(Float_t)adccorr/adcHe,ii);
2235          else  adclin  = 4.*(Float_t)adccorr/adcHe;
2236          continue;
2237      }      }
     else  adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof);  
   
     if(adcHe<=0)   continue;  
2238    
2239      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);
2240      else adcnorm = f_pos( (parPos[ii]), adccorr);      else adcnorm = f_pos( (parPos[ii]), adccorr);
2241        if(adcnorm<=0){
2242      if(adcnorm<=0) continue;        if ( debug ) printf(" %i adcnorm<=0 \n",ii);
2243          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
2244          continue;
2245        }
2246        if ( debug ) printf(" adcnorm %f \n",adcnorm);
2247    
2248      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;
2249      else  adclin  = 4.*adcnorm/adcHe;      else  adclin  = 4.*adcnorm/adcHe;
2250        if ( debug ) printf(" adclin %f \n",adclin);
2251      if(adclin<=0)  continue;      if(adclin<=0){
2252          if ( debug ) printf(" %i adclin<=0 \n",ii);
2253          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
2254          continue;
2255        }
2256        if ( exitat == 3 ){
2257          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt((Float_t)adclin,ii);
2258          else  eDEDXpmt->AddAt((Float_t)adclin,ii);
2259          continue;
2260        }
2261      //      //
2262      if ( betamean > 99. ){      if ( betamean > 99. ){
2263        //      eDEDXpmt.AddAt((Float_t)adclin,ii);        //      eDEDXpmt.AddAt((Float_t)adclin,ii);
2264        eDEDXpmt[ii]=(Float_t)adclin;        eDEDXpmt->AddAt((Float_t)adclin,ii);
2265        //      printf(" AAPMT IS %i dedx is %f vector is %f \n",ii,adclin,eDEDXpmt[ii]);        //      printf(" AAPMT IS %i dedx is %f vector is %f \n",ii,adclin,eDEDXpmt[ii]);
2266          if ( debug ) printf(" %i betamean > 99 \n",ii);
2267        continue;        continue;
2268      };      };
2269      //      //
# Line 1634  void ToFdEdx::Process(UInt_t atime, Floa Line 2276  void ToFdEdx::Process(UInt_t atime, Floa
2276        else                       dEdxHe = parBBpos[ii];        else                       dEdxHe = parBBpos[ii];
2277      }      }
2278            
2279      if(dEdxHe<=0)  continue;      if ( debug ) printf(" dEdxHe %f \n",dEdxHe);
2280        
2281        if(dEdxHe<=0){
2282          eDEDXpmt->AddAt((Float_t)adclin,ii);
2283          if ( debug ) printf(" %i dEdxHe<=0 \n",ii);
2284          continue;
2285        };
2286    
2287      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );
2288      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );
2289    
2290      if(dEdx<=0)    continue;      if(dEdx<=0){
2291          eDEDXpmt->AddAt((Float_t)adclin,ii);
2292          if ( debug ) printf(" %i dEdx<=0 \n",ii);
2293          continue;
2294        };
2295    
2296      eDEDXpmt[ii]=(Float_t)dEdx;      if ( debug ) printf(" dEdx %f \n",dEdx);
2297        eDEDXpmt->AddAt((Float_t)dEdx,ii);
2298      //    eDEDXpmt.AddAt((Float_t)dEdx,ii);      //    eDEDXpmt.AddAt((Float_t)dEdx,ii);
2299    
2300      //    printf(" PMT IS %i dedx is %f vector is %f \n",ii,dEdx,eDEDXpmt[ii]);      //    printf(" PMT IS %i dedx is %f vector is %f \n",ii,dEdx,eDEDXpmt[ii]);
# Line 1838  double ToFdEdx::f_desatBB5B( float x ) Line 2491  double ToFdEdx::f_desatBB5B( float x )
2491      0.009*x*x;      0.009*x*x;
2492  }  }
2493    
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.42

  ViewVC Help
Powered by ViewVC 1.1.23