/[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.26 by carbone, Fri Nov 20 11:05:21 2009 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  */    */
728    
729  // new values from Napoli dec 2008    // new values from Napoli dec 2008
730  Float_t  PMTsat[48] = {    Float_t  PMTsat[48] = {
731  3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,      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,      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,      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,      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,      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 };      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    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    
909  /**  /**
# Line 1149  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1560  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1560    //    //
1561    // Copiare qui qualcosa di simile a calonuclei per evitare di riprocessare sempre tutto    // Copiare qui qualcosa di simile a calonuclei per evitare di riprocessare sempre tutto
1562    //    //
1563      printf("\n\n\n ERROR: NOT IMPLEMENTED ANYMORE, write Emiliano if you need this method (Emiliano.Mocchiutti@ts.infn.it) \n\n\n");
1564      return(-1);
1565      //   //
1566      //   // structures to communicate with F77
1567    //    //   //
1568    // structures to communicate with F77    //   extern struct ToFInput  tofinput_;
1569    //  //   extern struct ToFOutput tofoutput_;
1570    extern struct ToFInput  tofinput_;  //   //
1571    extern struct ToFOutput tofoutput_;  //   // DB connection
1572    //  //   //
1573    // DB connection  //   TString host;
1574    //  //   TString user;
1575    TString host;  //   TString psw;
1576    TString user;  //   const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");
1577    TString psw;  //   const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");
1578    const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");  //   const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");
1579    const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");  //   if ( !pamdbhost ) pamdbhost = "";
1580    const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");  //   if ( !pamdbuser ) pamdbuser = "";
1581    if ( !pamdbhost ) pamdbhost = "";  //   if ( !pamdbpsw ) pamdbpsw = "";
1582    if ( !pamdbuser ) pamdbuser = "";  //   if ( strcmp(pamdbhost,"") ) host = pamdbhost;
1583    if ( !pamdbpsw ) pamdbpsw = "";  //   if ( strcmp(pamdbuser,"") ) user = pamdbuser;
1584    if ( strcmp(pamdbhost,"") ) host = pamdbhost;  //   if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;
1585    if ( strcmp(pamdbuser,"") ) user = pamdbuser;  //   //
1586    if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;  //   //
1587    //  //   TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
1588    //  //   if ( !dbc->IsConnected() ) return 1;
1589    TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());  //   stringstream myquery;
1590    if ( !dbc->IsConnected() ) return 1;  //   myquery.str("");
1591    stringstream myquery;  //   myquery << "SET time_zone='+0:00';";
1592    myquery.str("");  //   dbc->Query(myquery.str().c_str());
1593    myquery << "SET time_zone='+0:00'";  //   delete dbc->Query("SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';");
1594    dbc->Query(myquery.str().c_str());  //   GL_PARAM *glparam = new GL_PARAM();
1595    GL_PARAM *glparam = new GL_PARAM();  //   glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table
1596    glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table  //   trk->LoadField(glparam->PATH+glparam->NAME);
1597    trk->LoadField(glparam->PATH+glparam->NAME);  //   //
1598    //  //   Bool_t defcal = true;
1599    Bool_t defcal = true;  //   Int_t error=glparam->Query_GL_PARAM(run->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table
1600    Int_t error=glparam->Query_GL_PARAM(run->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table  //   if ( error<0 ) {
1601    if ( error<0 ) {  //     return(1);
1602      return(1);  //   };
1603    };  //   printf(" Reading ToF parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());
1604    printf(" Reading ToF parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());  //   if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false;
1605    if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false;  //   //
1606    //  //   Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length();
1607    Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length();  //   rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen);
1608    rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen);  //   //
1609    //  //   Int_t adc[4][12];
1610    Int_t adc[4][12];  //   Int_t tdc[4][12];
1611    Int_t tdc[4][12];  //   Float_t tdcc[4][12];
1612    Float_t tdcc[4][12];  //   //
1613    //  //   // process tof data
1614    // process tof data  //   //
1615    //  //   for (Int_t hh=0; hh<12;hh++){
1616    for (Int_t hh=0; hh<12;hh++){  //     for (Int_t kk=0; kk<4;kk++){
1617      for (Int_t kk=0; kk<4;kk++){  //            adc[kk][hh] = 4095;
1618             adc[kk][hh] = 4095;  //            tdc[kk][hh] = 4095;
1619             tdc[kk][hh] = 4095;  //            tdcc[kk][hh] = 4095.;
1620             tdcc[kk][hh] = 4095.;  //            tofinput_.adc[hh][kk] = 4095;
1621             tofinput_.adc[hh][kk] = 4095;  //            tofinput_.tdc[hh][kk] = 4095;
1622             tofinput_.tdc[hh][kk] = 4095;  //     };
1623      };  //   };
1624    };  //   Int_t ntrkentry = 0;
1625    Int_t ntrkentry = 0;  //   Int_t npmtentry = 0;
1626    Int_t npmtentry = 0;  //   Int_t gg = 0;
1627    Int_t gg = 0;  //   Int_t hh = 0;
1628    Int_t hh = 0;  //   Int_t adcf[48];
1629    Int_t adcf[48];  //   memset(adcf, 0, 48*sizeof(Int_t));
1630    memset(adcf, 0, 48*sizeof(Int_t));  //   Int_t tdcf[48];
1631    Int_t tdcf[48];  //   memset(tdcf, 0, 48*sizeof(Int_t));
1632    memset(tdcf, 0, 48*sizeof(Int_t));  //   for (Int_t pm=0; pm < this->ntrk() ; pm++){
1633    for (Int_t pm=0; pm < this->ntrk() ; pm++){  //      ToFTrkVar *ttf = this->GetToFTrkVar(pm);
1634       ToFTrkVar *ttf = this->GetToFTrkVar(pm);  //      for ( Int_t nc=0; nc < ttf->npmttdc; nc++){
1635       for ( Int_t nc=0; nc < ttf->npmttdc; nc++){  //             if ( (ttf->tdcflag).At(nc) != 0 ) tdcf[(ttf->pmttdc).At(nc)] = 1;
1636              if ( (ttf->tdcflag).At(nc) != 0 ) tdcf[(ttf->pmttdc).At(nc)] = 1;  //      };
1637       };  //      for ( Int_t nc=0; nc < ttf->npmtadc; nc++){
1638       for ( Int_t nc=0; nc < ttf->npmtadc; nc++){  //             if ( (ttf->adcflag).At(nc) != 0 ) adcf[(ttf->pmtadc).At(nc)] = 1;
1639              if ( (ttf->adcflag).At(nc) != 0 ) adcf[(ttf->pmtadc).At(nc)] = 1;  //      };
1640       };  //   };
1641    };  //   //
1642    //  //   for (Int_t pm=0; pm < this->npmt() ; pm++){
1643    for (Int_t pm=0; pm < this->npmt() ; pm++){  //      ToFPMT *pmt = this->GetToFPMT(pm);
1644       ToFPMT *pmt = this->GetToFPMT(pm);  //      this->GetPMTIndex(pmt->pmt_id, gg, hh);
1645       this->GetPMTIndex(pmt->pmt_id, gg, hh);  //      if ( adcf[pmt->pmt_id] == 0 ){
1646       if ( adcf[pmt->pmt_id] == 0 ){  //              tofinput_.adc[gg][hh] = (int)pmt->adc;
1647               tofinput_.adc[gg][hh] = (int)pmt->adc;  //              adc[hh][gg] = (int)pmt->adc;
1648               adc[hh][gg] = (int)pmt->adc;  //      };
1649       };  //      if ( tdcf[pmt->pmt_id] == 0 ){
1650       if ( tdcf[pmt->pmt_id] == 0 ){  //              tofinput_.tdc[gg][hh] = (int)pmt->tdc;
1651               tofinput_.tdc[gg][hh] = (int)pmt->tdc;  //              tdc[hh][gg] = (int)pmt->tdc;
1652               tdc[hh][gg] = (int)pmt->tdc;  //      };
1653       };  //      tdcc[hh][gg] = (float)pmt->tdc_tw;
1654       tdcc[hh][gg] = (float)pmt->tdc_tw;  //      // Int_t pppid = this->GetPMTid(hh,gg);
1655       // Int_t pppid = this->GetPMTid(hh,gg);  //      //      printf(" pm %i pmt_id %i pppid %i hh %i gg %i tdcc %f tdc %f adc %f \n",pm,pmt->pmt_id,pppid,hh,gg,pmt->tdc_tw,pmt->tdc,pmt->adc);
1656       //      printf(" pm %i pmt_id %i pppid %i hh %i gg %i tdcc %f tdc %f adc %f \n",pm,pmt->pmt_id,pppid,hh,gg,pmt->tdc_tw,pmt->tdc,pmt->adc);  //   };
1657    };  //   //
1658    //  //   Int_t unpackError = this->unpackError;
1659    Int_t unpackError = this->unpackError;  //   //
1660    //  //   for (Int_t hh=0; hh<5;hh++){
1661    for (Int_t hh=0; hh<5;hh++){  //      tofinput_.patterntrig[hh]=trg->patterntrig[hh];
1662       tofinput_.patterntrig[hh]=trg->patterntrig[hh];  //   };
1663    };  //   //
1664    //  //   this->Clear();
1665    this->Clear();  //   //
1666    //  //       Int_t pmt_id = 0;
1667        Int_t pmt_id = 0;  //       ToFPMT *t_pmt = new ToFPMT();
1668        ToFPMT *t_pmt = new ToFPMT();  //       if(!(this->PMT)) this->PMT = new TClonesArray("ToFPMT",12); //ELENA
1669        if(!(this->PMT)) this->PMT = new TClonesArray("ToFPMT",12); //ELENA  //       TClonesArray &tpmt = *this->PMT;
1670        TClonesArray &tpmt = *this->PMT;  //       ToFTrkVar *t_tof = new ToFTrkVar();
1671        ToFTrkVar *t_tof = new ToFTrkVar();  //       if(!(this->ToFTrk)) this->ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA
1672        if(!(this->ToFTrk)) this->ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA  //       TClonesArray &t = *this->ToFTrk;
1673        TClonesArray &t = *this->ToFTrk;  //       //
1674        //  //       //
1675        //  //       // Here we have calibrated data, ready to be passed to the FORTRAN routine which will extract common and track-related  variables.
1676        // Here we have calibrated data, ready to be passed to the FORTRAN routine which will extract common and track-related  variables.  //       //
1677        //  //       npmtentry = 0;
1678        npmtentry = 0;  //       //
1679        //  //       ntrkentry = 0;
1680        ntrkentry = 0;  //       //
1681        //  //       // Calculate tracks informations from ToF alone
1682        // Calculate tracks informations from ToF alone  //       //
1683        //  //       tofl2com();
1684        tofl2com();  //       //
1685        //  //       memcpy(this->tof_j_flag,tofoutput_.tof_j_flag,6*sizeof(Int_t));
1686        memcpy(this->tof_j_flag,tofoutput_.tof_j_flag,6*sizeof(Int_t));  //       //
1687        //  //       t_tof->trkseqno = -1;
1688        t_tof->trkseqno = -1;  //       //
1689        //  //       // and now we must copy from the output structure to the level2 class:
1690        // and now we must copy from the output structure to the level2 class:  //       //
1691        //  //       t_tof->npmttdc = 0;
1692        t_tof->npmttdc = 0;  //       //
1693        //  //       for (Int_t hh=0; hh<12;hh++){
1694        for (Int_t hh=0; hh<12;hh++){  //         for (Int_t kk=0; kk<4;kk++){
1695          for (Int_t kk=0; kk<4;kk++){  //           if ( tofoutput_.tofmask[hh][kk] != 0 ){
1696            if ( tofoutput_.tofmask[hh][kk] != 0 ){  //             pmt_id = this->GetPMTid(kk,hh);
1697              pmt_id = this->GetPMTid(kk,hh);  //             t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1698              t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);  //             t_tof->tdcflag.AddAt(tofoutput_.tdcflagtof[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1699              t_tof->tdcflag.AddAt(tofoutput_.tdcflagtof[hh][kk],t_tof->npmttdc); // gf: Jan 09/07  //             t_tof->npmttdc++;
1700              t_tof->npmttdc++;  //           };
1701            };  //         };
1702          };  //       };
1703        };  //       for (Int_t kk=0; kk<13;kk++){
1704        for (Int_t kk=0; kk<13;kk++){  //         t_tof->beta[kk] = tofoutput_.betatof_a[kk];
1705          t_tof->beta[kk] = tofoutput_.betatof_a[kk];  //       }
1706        }  //       //
1707        //  //       t_tof->npmtadc = 0;
1708        t_tof->npmtadc = 0;  //       for (Int_t hh=0; hh<12;hh++){
1709        for (Int_t hh=0; hh<12;hh++){  //         for (Int_t kk=0; kk<4;kk++){
1710          for (Int_t kk=0; kk<4;kk++){  //           if ( tofoutput_.adctof_c[hh][kk] < 1000 ){
1711            if ( tofoutput_.adctof_c[hh][kk] < 1000 ){  //             t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);
1712              t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);  //             pmt_id = this->GetPMTid(kk,hh);
1713              pmt_id = this->GetPMTid(kk,hh);  //             t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1714              t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);  //             t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1715              t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07  //             t_tof->npmtadc++;
1716              t_tof->npmtadc++;  //           };
1717            };  //         };
1718          };  //       };
1719        };  //       //
1720        //  //       memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1721        memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));  //       memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1722        memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));  //       memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1723        memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));  //       memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));
1724        memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));  //       //
1725        //  //       new(t[ntrkentry]) ToFTrkVar(*t_tof);
1726        new(t[ntrkentry]) ToFTrkVar(*t_tof);  //       ntrkentry++;
1727        ntrkentry++;  //       t_tof->Clear();
1728        t_tof->Clear();  //       //
1729        //  //       //
1730        //  //       //
1731        //  //       t_pmt->Clear();
1732        t_pmt->Clear();  //       //
1733        //  //       for (Int_t hh=0; hh<12;hh++){
1734        for (Int_t hh=0; hh<12;hh++){  //         for (Int_t kk=0; kk<4;kk++){
1735          for (Int_t kk=0; kk<4;kk++){  //          // new WM
1736           // new WM  //           if ( tofoutput_.tdc_c[hh][kk] < 4095 || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){
1737            if ( tofoutput_.tdc_c[hh][kk] < 4095 || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){  // //          if ( tdcc[kk][hh] < 4095. || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){
1738  //          if ( tdcc[kk][hh] < 4095. || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){  //             //
1739              //  //             t_pmt->pmt_id = this->GetPMTid(kk,hh);
1740              t_pmt->pmt_id = this->GetPMTid(kk,hh);  //             t_pmt->tdc_tw = tofoutput_.tdc_c[hh][kk];
1741              t_pmt->tdc_tw = tofoutput_.tdc_c[hh][kk];  //             t_pmt->adc = (Float_t)adc[kk][hh];
1742              t_pmt->adc = (Float_t)adc[kk][hh];  //             t_pmt->tdc = (Float_t)tdc[kk][hh];
1743              t_pmt->tdc = (Float_t)tdc[kk][hh];  //             //
1744              //  //             new(tpmt[npmtentry]) ToFPMT(*t_pmt);
1745              new(tpmt[npmtentry]) ToFPMT(*t_pmt);  //             npmtentry++;
1746              npmtentry++;  //             t_pmt->Clear();
1747              t_pmt->Clear();  //           };
1748            };  //         };
1749          };  //       };
1750        };  //       //
1751        //  //       // Calculate track-related variables
1752        // Calculate track-related variables  //       //
1753        //  //       if ( trk->ntrk() > 0 ){
1754        if ( trk->ntrk() > 0 ){  //         //
1755          //  //         // We have at least one track
1756          // We have at least one track  //         //
1757          //  //         //
1758          //  //         // Run over tracks
1759          // Run over tracks  //         //
1760          //  //         for(Int_t nt=0; nt < trk->ntrk(); nt++){
1761          for(Int_t nt=0; nt < trk->ntrk(); nt++){  //           //
1762            //  //           TrkTrack *ptt = trk->GetStoredTrack(nt);
1763            TrkTrack *ptt = trk->GetStoredTrack(nt);  //           //
1764            //  //           // Copy the alpha vector in the input structure
1765            // Copy the alpha vector in the input structure  //           //
1766            //  //           for (Int_t e = 0; e < 5 ; e++){
1767            for (Int_t e = 0; e < 5 ; e++){  //             tofinput_.al_pp[e] = ptt->al[e];
1768              tofinput_.al_pp[e] = ptt->al[e];  //           };
1769            };  //           //
1770            //  //           // Get tracker related variables for this track
1771            // Get tracker related variables for this track  //           //
1772            //  //           toftrk();
1773            toftrk();  //           //
1774            //  //           // Copy values in the class from the structure (we need to use a temporary class to store variables).
1775            // Copy values in the class from the structure (we need to use a temporary class to store variables).  //           //
1776            //  //           t_tof->npmttdc = 0;
1777            t_tof->npmttdc = 0;  //           for (Int_t hh=0; hh<12;hh++){
1778            for (Int_t hh=0; hh<12;hh++){  //             for (Int_t kk=0; kk<4;kk++){
1779              for (Int_t kk=0; kk<4;kk++){  //               if ( tofoutput_.tofmask[hh][kk] != 0 ){
1780                if ( tofoutput_.tofmask[hh][kk] != 0 ){  //                 pmt_id = this->GetPMTid(kk,hh);
1781                  pmt_id = this->GetPMTid(kk,hh);  //                 t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1782                  t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);  //                 t_tof->tdcflag.AddAt(tofoutput_.tdcflag[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1783                  t_tof->tdcflag.AddAt(tofoutput_.tdcflag[hh][kk],t_tof->npmttdc); // gf: Jan 09/07  //                 t_tof->npmttdc++;
1784                  t_tof->npmttdc++;  //               };
1785                };  //             };
1786              };  //           };
1787            };  //           for (Int_t kk=0; kk<13;kk++){
1788            for (Int_t kk=0; kk<13;kk++){  //             t_tof->beta[kk] = tofoutput_.beta_a[kk];
1789              t_tof->beta[kk] = tofoutput_.beta_a[kk];  //           };
1790            };  //           //
1791            //  //           t_tof->npmtadc = 0;
1792            t_tof->npmtadc = 0;  //           for (Int_t hh=0; hh<12;hh++){
1793            for (Int_t hh=0; hh<12;hh++){  //             for (Int_t kk=0; kk<4;kk++){
1794              for (Int_t kk=0; kk<4;kk++){  //               if ( tofoutput_.adc_c[hh][kk] < 1000 ){
1795                if ( tofoutput_.adc_c[hh][kk] < 1000 ){  //                 t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);
1796                  t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);  //                 pmt_id = this->GetPMTid(kk,hh);
1797                  pmt_id = this->GetPMTid(kk,hh);  //                 t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1798                  t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);  //                 t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1799                  t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07  //                 t_tof->npmtadc++;
1800                  t_tof->npmtadc++;  //               };
1801                };  //             };
1802              };  //           };
1803            };  //           //
1804            //  //           memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1805            memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));  //           memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1806            memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));  //           memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1807            memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));  //           memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));
1808            memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));  //           //
1809            //  //           // Store the tracker track number in order to be sure to have shyncronized data during analysis
1810            // Store the tracker track number in order to be sure to have shyncronized data during analysis  //           //
1811            //  //           t_tof->trkseqno = nt;
1812            t_tof->trkseqno = nt;  //           //
1813            //  //           // create a new object for this event with track-related variables
1814            // create a new object for this event with track-related variables  //           //
1815            //  //           new(t[ntrkentry]) ToFTrkVar(*t_tof);
1816            new(t[ntrkentry]) ToFTrkVar(*t_tof);  //           ntrkentry++;
1817            ntrkentry++;  //           t_tof->Clear();
1818            t_tof->Clear();  //           //
1819            //  //         }; // loop on all the tracks
1820          }; // loop on all the tracks  //       //
1821        //  //       this->unpackError = unpackError;
1822        this->unpackError = unpackError;  //       if ( defcal ){
1823        if ( defcal ){  //         this->default_calib = 1;
1824          this->default_calib = 1;  //       } else {
1825        } else {  //         this->default_calib = 0;
1826          this->default_calib = 0;  //       };
1827        };  //};
1828   };  //  return(0);
1829    }
1830    
1831    bool ToFLevel2::bit(int decimal, char pos){
1832    return(0);    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 1493  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
2046    eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure    eDEDXpmt->Set(48);    eDEDXpmt->Reset(-1);   // Set array size  and reset structure
   eZpmt.Set(48);       eZpmt.Reset(-1);  
   eDEDXpad.Set(24);    eDEDXpad.Reset(-1);  
   eZpad.Set(24);       eZpad.Reset(-1);  
   eDEDXlayer.Set(6);   eDEDXlayer.Reset(-1);  
   eZlayer.Set(6);      eZlayer.Reset(-1);  
   eDEDXplane.Set(3);   eDEDXplane.Reset(-1);  
   eZplane.Set(3);      eZplane.Reset(-1);  
   INFOpmt.Set(48);     INFOpmt.Reset(0);  
   INFOlayer.Set(6);    INFOlayer.Reset(0);  
2047    //    //
2048  };  };
2049    
# Line 1515  void ToFdEdx::Print(Option_t *option) Line 2055  void ToFdEdx::Print(Option_t *option)
2055    
2056  };  };
2057    
   
2058  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2059  // void ToFdEdx::InitPar(TString parname, TString parfile)  void ToFdEdx::Init(pamela::tof::TofEvent *tofl0)
2060  // {  {
2061  //   // expensive function - call it once/run    //
2062      ToFLevel2 tf;
2063      for (Int_t gg=0; gg<4;gg++){
2064        for (Int_t hh=0; hh<12;hh++){
2065  //   ReadParAtt(            Form("%s/attenuation.txt"              , pardir) );        //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];          
2066  //   ReadParPos(            Form("%s/desaturation_position.txt"    , pardir) );        int mm = tf.GetPMTid(gg,hh);        
2067  //   ReadParBBneg(          Form("%s/BetheBloch.txt"               , pardir) );        adc[mm]= (0xFFF & tofl0->adc[gg][hh]); // EM, exclude warning bits
2068  //   ReadParBBpos(          Form("%s/BetheBloch_betagt1.txt"       , pardir) );      };      
2069  //   ReadParDesatBB(        Form("%s/desaturation_beta.txt"        , pardir) );    };
2070      
2071  // };  };
   
2072    
2073  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2074  void ToFdEdx::Process(UInt_t atime, Float_t betamean, Float_t *xtr_tof, Float_t *ytr_tof, pamela::tof::TofEvent *tofl0 )  void ToFdEdx::Init(Int_t gg, Int_t hh, Float_t adce)
2075    {
2076      //
2077      ToFLevel2 tf;
2078      //  for (Int_t gg=0; gg<4;gg++){
2079      //    for (Int_t hh=0; hh<12;hh++){
2080      int mm = tf.GetPMTid(gg,hh);    
2081      adc[mm]=adce;
2082      
2083    };
2084    //------------------------------------------------------------------------
2085    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    
   
   
   //  Float_t betamean = fabs(trackTRK->GetToFTrack()->beta[12]);  
   
   if(betamean<0.05 || betamean>2){  
     for(int i=0;i<48;i++)INFOpmt[i]=1;  
   }  
   
2093   // define angle:     // define angle:  
2094    double dx   = xtr_tof[1] - xtr_tof[5];    double dx   = xtr_tof[1] - xtr_tof[5];
2095    double dy   = ytr_tof[0] - ytr_tof[4];    double dy   = ytr_tof[0] - ytr_tof[4];
2096    double dr   = sqrt(dx*dx+dy*dy);    double dr   = sqrt(dx*dx+dy*dy);
2097    double theta=atan(dr/76.81);    double theta=atan(dr/76.81);
2098      //
2099      if ( xtr_tof[1] > 99. ||  xtr_tof[5] > 99. || ytr_tof[0] > 99. ||  ytr_tof[4] > 99. ) theta = 0.;
2100      for (Int_t ii=0; ii<6; ii++){
2101    //  TArrayF adc;      if ( xtr_tof[ii] > 99. ) xtr_tof[ii] = 0.;
2102    Float_t adc[48];      if ( ytr_tof[ii] > 99. ) ytr_tof[ii] = 0.;
   
   ToFLevel2 tf;  
   
   for (Int_t gg=0; gg<4;gg++){  
     for (Int_t hh=0; hh<12;hh++){  
       //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];            
       int mm = tf.GetPMTid(gg,hh);          
       adc[mm]=tofl0->adc[gg][hh];  
     };        
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      if( adc[ii] >= PMTsat[ii]-5 )  continue;      //
2127      if( adc[ii] <= 0. )            continue;      //    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]);
2129      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC      if ( debug ) printf("II %i adc %f \n",ii,adc[ii]);
2130      double adccorr = adcpC*fabs(cos(theta));  
2131        if( adc[ii] >= 4095. ){
2132           if(adccorr<=0.)           continue;        //      eDEDXpmt[ii] = 0.;
2133          eDEDXpmt->AddAt(0.,ii);
2134          if ( debug ) printf(" %i adc>4095 \n",ii);
2135          continue; // EMILIANO
2136        };
2137    
2138      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------      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      int Aconn=conn[0];    // PMT 0,20,22,24      if( adc[ii] <= 0. ) {
2145      int Bconn=conn[1];    // PMT 6,12,26,34        eDEDXpmt->AddAt(1500.,ii);
2146      int Cconn=conn[2];    // PMT 4,14,28,32        if ( debug ) printf(" %i adc<=0 \n",ii);
2147      int Dconn=conn[3];    // PMT 2,8,10,30        continue;
2148      int Econn=conn[4];    // PMT 42,43,44,47      };
2149      int Fconn=conn[5];    // PMT 7,19,23,27      //
2150      int Gconn=conn[6];    // PMT 3,11,25,33      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC
2151      int Hconn=conn[7];    // PMT 1,9,13,21      if ( exitat == 0 ){
2152      int Iconn=conn[8];    // PMT 5,29,31,35        eDEDXpmt->AddAt((Float_t)adcpC,ii);
2153      int Lconn=conn[9];    // PMT 37,40,45,46        continue;
2154      int Mconn=conn[10];    // PMT 15,16,17,18      }
2155      int Nconn=conn[11];    // PMT 36,38,39,41      //    printf(" e qua? \n");
2156    
2157        double adccorr = adcpC*fabs(cos(theta));    
2158        if ( debug ) printf(" adccorr %f \n",adccorr);
2159        if(adccorr<=0.){
2160          if ( debug ) printf(" %i adccorr<=0 \n",ii);
2161          //      eDEDXpmt->AddAt((Float_t)adcpC,ii);//?
2162          continue;
2163        }
2164        if ( exitat == 1 ){
2165          eDEDXpmt->AddAt((Float_t)adccorr,ii);
2166          continue;
2167        }
2168        //    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    
 //   if(atime>=1153660001 && atime<=1154375000)Dconn=1;  
 //     else if(atime>=1155850001 && atime<=1156280000){  
 //       Hconn=1;  
 //       Nconn=1;  
 //     }  
   
 //  else if(atime>=1168490001 && atime<=1168940000)Dconn=1;  
 //     else if(atime>=1168940001 && atime<=1169580000){  
 //       Fconn=1;  
 //       Mconn=1;  
 //     }  
   
 //  else if(atime>=1174665001 && atime<=1175000000)Bconn=1;  
 //     else if(atime>=1176120001 && atime<=1176800000)Hconn=1;  
 //     else if(atime>=1176800001 && atime<=1178330000)Econn=1;  
 //     else if(atime>=1178330001 && atime<=1181322000)Hconn=1;  
 //     else if(atime>=1182100001 && atime<=1183030000)Aconn=1;  
 //     else if(atime>=1184000001 && atime<=1184570000)Hconn=1;  
 //     else if(atime>=1185090001 && atime<=1185212000)Dconn=1;  
 //     else if(atime>=1191100001 && atime<=1191940000)Dconn=1;  
 //     else if(atime>=1196230001 && atime<=1196280000)Hconn=1;  
 //     else if(atime>=1206100001 && atime<=1206375600)Cconn=1;  
 //     else if(atime>=1217989201 && atime<=1218547800)Econn=1;  
 //     else if(atime>=1225789201 && atime<=1226566800)Econn=1;  
 //     else if(atime>=1229400901 && atime<=1229700000)Econn=1;  
 //     else if(atime>=1230318001 && atime<=1230415200)Econn=1;  
 //     else {  
 //       standard=1;  
 //     }  
2174      if(atime<1158720000)S115B_ok=1;      if(atime<1158720000)S115B_ok=1;
2175      else S115B_break=1;      else S115B_break=1;
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.;
   
 //  float ZetaH=-2;  
 //  float dEdxH=-2;  
   
 //  double day = (atime-1150000000)/84600;  
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. ){
2263          //      eDEDXpmt.AddAt((Float_t)adclin,ii);
2264          eDEDXpmt->AddAt((Float_t)adclin,ii);
2265          //      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;
2268        };
2269        //
2270      double dEdxHe=-2;      double dEdxHe=-2;
2271      if(ii==9 && S115B_break==1){      if(ii==9 && S115B_break==1){
2272        if( betamean <1. ) dEdxHe = f_BB5B( betamean );        if( betamean <1. ) dEdxHe = f_BB5B( betamean );
# Line 1709  double adcHe, adcnorm, adclin, dEdx, Zet Line 2275  double adcHe, adcnorm, adclin, dEdx, Zet
2275        if( betamean <1. ) dEdxHe = f_BB( (parBBneg[ii]), betamean );        if( betamean <1. ) dEdxHe = f_BB( (parBBneg[ii]), betamean );
2276        else                       dEdxHe = parBBpos[ii];        else                       dEdxHe = parBBpos[ii];
2277      }      }
   
     if(dEdxHe<=0)  continue;  
   
     if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );  
     else  dEdx = f_desatBB((parDesatBB[ii]), adclin );  
   
     if(dEdx<=0)    continue;  
   
     if(ii==9 && S115B_break==1)  Zeta = sqrt(36.*(dEdx/dEdxHe));  
     else  Zeta = sqrt(4.*(dEdx/dEdxHe));  
   
     if(Zeta<=0)    continue;  
   
 //--------------------- TIME DEPENDENCE ----------------------------------  
   
   
 //      TArrayF &binx = TDx[ii];  
 //      TArrayF &biny = TDy[ii];  
 //      for(int k=0; k<200; k++) {  
 //        if (day > binx[k]-2.5 && day<=binx[k]+2.5 && biny[k]>0)  {  
 //       ZetaH=Zeta/biny[k]*6;  
 //       dEdxH=dEdx/(pow(biny[k],2))*36;  
 //        }  
 //      }  
   
 //      if(ZetaH!=-2)eZpmt[ii]=(Float_t)ZetaH;  
 //      else eZpmt[ii]=(Float_t)Zeta;  
   
 //      if(dEdxH!=-2)eDEDXpmt[ii]=(Float_t)dEdxH;  
 //      else eDEDXpmt[ii]=(Float_t)dEdx;  
   
 //      printf("%5d %8.2f %8.2f %8.2f  %8.2f %8.2f  %8.2f %5.4f \n",               ii, adcpC,  adccorr, adcHe, dEdxHe, dEdx, Zeta, betamean );  
   
     eZpmt[ii]=(Float_t)Zeta;  
     eDEDXpmt[ii]=(Float_t)dEdx;  
   
   
  }  //end loop on 48 PMT  
   
 //---------------------------------------------------  paddle + layer --------------------  
   
   for(int j=0;j<48;j++){  
     int k=100;  
     if(j%2==0 || j==0)k=j/2;  
       
     double zpdl=-1;  
       
     if((j%2==0 || j==0) && eZpmt[j]!=-1 && eZpmt[j+1]!=-1){  
       zpdl=0.5*(eZpmt[j]+eZpmt[j+1]);  
     }else if((j%2==0 || j==0) && eZpmt[j]!=-1 && eZpmt[j+1]==-1){  
       zpdl=eZpmt[j];  
     }else if((j%2==0 || j==0) && eZpmt[j]==-1 && eZpmt[j+1]!=-1){  
       zpdl=eZpmt[j+1];  
     }  
       
     if(j%2==0 || j==0)eZpad[k]= (Float_t)zpdl;  
       
     if((j%2==0 || j==0)&&eZpad[k]!=-1){  
       if(k>=0&&k<8)eZlayer[0]=eZpad[k];  
       if(k>=8&&k<14)eZlayer[1]=eZpad[k];  
       if(k>=14&&k<16)eZlayer[2]=eZpad[k];  
       if(k>=16&&k<18)eZlayer[3]=eZpad[k];  
       if(k>=18&&k<21)eZlayer[4]=eZpad[k];  
       if(k>=21)eZlayer[5]=eZpad[k];  
     }  
   
     if(eZlayer[0]!=-1&&eZlayer[1]!=-1&&fabs(eZlayer[0]-eZlayer[1])<1.5)eZplane[0]=0.5*(eZlayer[0]+eZlayer[1]);  
     else if(eZlayer[0]!=-1&&eZlayer[1]==-1)eZplane[0]=eZlayer[0];  
     else if(eZlayer[1]!=-1&&eZlayer[0]==-1)eZplane[0]=eZlayer[1];  
   
     if(eZlayer[2]!=-1&&eZlayer[3]!=-1&&fabs(eZlayer[2]-eZlayer[3])<1.5)eZplane[1]=0.5*(eZlayer[2]+eZlayer[3]);  
     else if(eZlayer[2]!=-1&&eZlayer[3]==-1)eZplane[1]=eZlayer[2];  
     else if(eZlayer[3]!=-1&&eZlayer[2]==-1)eZplane[1]=eZlayer[3];  
   
     if(eZlayer[4]!=-1&&eZlayer[5]!=-1&&fabs(eZlayer[4]-eZlayer[5])<1.5)eZplane[2]=0.5*(eZlayer[4]+eZlayer[5]);  
     else if(eZlayer[4]!=-1&&eZlayer[5]==-1)eZplane[2]=eZlayer[4];  
     else if(eZlayer[5]!=-1&&eZlayer[4]==-1)eZplane[2]=eZlayer[5];  
   
   }  
   
   for(int jj=0;jj<48;jj++){  
     int k=100;  
     if(jj%2==0 || jj==0)k=jj/2;  
       
     double dedxpdl=-1;  
       
     if((jj%2==0 || jj==0) && eDEDXpmt[jj]!=-1 && eDEDXpmt[jj+1]!=-1){  
       dedxpdl=0.5*(eDEDXpmt[jj]+eDEDXpmt[jj+1]);  
     }else if((jj%2==0 || jj==0) && eDEDXpmt[jj]!=-1 && eDEDXpmt[jj+1]==-1){  
       dedxpdl=eDEDXpmt[jj];  
     }else if((jj%2==0 || jj==0) && eDEDXpmt[jj]==-1 && eDEDXpmt[jj+1]!=-1){  
       dedxpdl=eDEDXpmt[jj+1];  
     }  
2278            
2279      if(jj%2==0 || jj==0)eDEDXpad[k]= (Float_t)dedxpdl;      if ( debug ) printf(" dEdxHe %f \n",dEdxHe);
2280            
2281      if((jj%2==0 || jj==0)&&eDEDXpad[k]!=-1){      if(dEdxHe<=0){
2282        if(k>=0&&k<8)eDEDXlayer[0]=eDEDXpad[k];        eDEDXpmt->AddAt((Float_t)adclin,ii);
2283        if(k>=8&&k<14)eDEDXlayer[1]=eDEDXpad[k];        if ( debug ) printf(" %i dEdxHe<=0 \n",ii);
2284        if(k>=14&&k<16)eDEDXlayer[2]=eDEDXpad[k];        continue;
2285        if(k>=16&&k<18)eDEDXlayer[3]=eDEDXpad[k];      };
       if(k>=18&&k<21)eDEDXlayer[4]=eDEDXpad[k];  
       if(k>=21)eDEDXlayer[5]=eDEDXpad[k];  
     }  
2286    
2287      if(eDEDXlayer[0]!=-1&&eDEDXlayer[1]!=-1&&fabs(eDEDXlayer[0]-eDEDXlayer[1])<10)eDEDXplane[0]=0.5*(eDEDXlayer[0]+eDEDXlayer[1]);      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );
2288      else if(eDEDXlayer[0]!=-1&&eDEDXlayer[1]==-1)eDEDXplane[0]=eDEDXlayer[0];      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );
     else if(eDEDXlayer[1]!=-1&&eDEDXlayer[0]==-1)eDEDXplane[0]=eDEDXlayer[1];  
2289    
2290      if(eDEDXlayer[2]!=-1&&eDEDXlayer[3]!=-1&&fabs(eDEDXlayer[2]-eDEDXlayer[3])<10)eDEDXplane[1]=0.5*(eDEDXlayer[2]+eDEDXlayer[3]);      if(dEdx<=0){
2291      else if(eDEDXlayer[2]!=-1&&eDEDXlayer[3]==-1)eDEDXplane[1]=eDEDXlayer[2];        eDEDXpmt->AddAt((Float_t)adclin,ii);
2292      else if(eDEDXlayer[3]!=-1&&eDEDXlayer[2]==-1)eDEDXplane[1]=eDEDXlayer[3];        if ( debug ) printf(" %i dEdx<=0 \n",ii);
2293          continue;
2294        };
2295    
2296      if(eDEDXlayer[4]!=-1&&eDEDXlayer[5]!=-1&&fabs(eDEDXlayer[4]-eDEDXlayer[5])<10)eDEDXplane[2]=0.5*(eDEDXlayer[4]+eDEDXlayer[5]);      if ( debug ) printf(" dEdx %f \n",dEdx);
2297      else if(eDEDXlayer[4]!=-1&&eDEDXlayer[5]==-1)eDEDXplane[2]=eDEDXlayer[4];      eDEDXpmt->AddAt((Float_t)dEdx,ii);
2298      else if(eDEDXlayer[5]!=-1&&eDEDXlayer[4]==-1)eDEDXplane[2]=eDEDXlayer[5];      //    eDEDXpmt.AddAt((Float_t)dEdx,ii);
2299    
2300    }      //    printf(" PMT IS %i dedx is %f vector is %f \n",ii,dEdx,eDEDXpmt[ii]);
     
2301    
2302      }  //end loop on 48 PMT
2303    
2304  };  };
2305    
2306    
2307  //------------------------------------------------------------------------  //------------------------------------------------------------------------
 void ToFdEdx::PrintTD()  
 {  
   for(int i=0; i<48; i++) {    
     TArrayF &binx = TDx[i];  
     TArrayF &biny = TDy[i];  
     for(int k=0; k<200; k++) {  // bin temporali  
       printf("%d %d %f %f", i,k, binx[k], biny[k]);  
         
     }  
   }  
 }  
   
   
 //------------------------------------------------------------------------  
2308  void ToFdEdx::Define_PMTsat()  void ToFdEdx::Define_PMTsat()
2309  {  {
2310    Float_t  sat[48] = {    Float_t  sat[48] = {
# Line 1861  void ToFdEdx::Define_PMTsat() Line 2318  void ToFdEdx::Define_PMTsat()
2318  }  }
2319    
2320  //------------------------------------------------------------------------  //------------------------------------------------------------------------
 // void ToFdEdx::ReadParTD( Int_t ipmt, const char *fname )  
 // {  
 //   printf("read %s\n",fname);  
 //   if(ipmt<0)  return;  
 //   if(ipmt>47) return;  
 //   FILE *fattin = fopen( fname , "r" );  
 //   Float_t yTD[200],xTD[200];  
 //   for(int j=0;j<200;j++){  
 //     float x,y,ym,e;  
 //     if(fscanf(fattin,"%f %f %f %f",  
 //            &x, &y, &ym, &e )!=4) break;  
 //     xTD[j]=x;  
 //     if(ym>0&&fabs(y-ym)>1)  yTD[j]=ym;  
 //     else                    yTD[j]=y;  
 //   }  
 //   TDx[ipmt].Set(200,xTD);  
 //   TDy[ipmt].Set(200,yTD);  
 //   fclose(fattin);  
 // }  
   
 //------------------------------------------------------------------------  
2321  void ToFdEdx::ReadParBBpos( const char *fname )  void ToFdEdx::ReadParBBpos( const char *fname )
2322  {  {
2323    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2324    parBBpos.Set(48);    parBBpos.Set(48);
2325    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2326    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
# Line 1900  void ToFdEdx::ReadParBBpos( const char * Line 2336  void ToFdEdx::ReadParBBpos( const char *
2336  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2337  void ToFdEdx::ReadParDesatBB( const char *fname )  void ToFdEdx::ReadParDesatBB( const char *fname )
2338  {  {
2339    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2340    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2341    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2342      int   tid=0;      int   tid=0;
# Line 1917  void ToFdEdx::ReadParDesatBB( const char Line 2353  void ToFdEdx::ReadParDesatBB( const char
2353  void ToFdEdx::ReadParBBneg( const char *fname )  void ToFdEdx::ReadParBBneg( const char *fname )
2354    
2355  {  {
2356    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2357    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2358    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2359      int   tid=0;      int   tid=0;
# Line 1932  void ToFdEdx::ReadParBBneg( const char * Line 2368  void ToFdEdx::ReadParBBneg( const char *
2368  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2369  void ToFdEdx::ReadParPos( const char *fname )  void ToFdEdx::ReadParPos( const char *fname )
2370  {  {
2371    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2372    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2373    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2374      int   tid=0;      int   tid=0;
# Line 1947  void ToFdEdx::ReadParPos( const char *fn Line 2383  void ToFdEdx::ReadParPos( const char *fn
2383  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2384  void ToFdEdx::ReadParAtt( const char *fname )  void ToFdEdx::ReadParAtt( const char *fname )
2385  {  {
2386    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2387    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2388    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2389      int   tid=0;      int   tid=0;
# Line 2020  float ToFdEdx::Get_adc_he( int id, float Line 2456  float ToFdEdx::Get_adc_he( int id, float
2456    //             pl_x - coord x of the tof plane    //             pl_x - coord x of the tof plane
2457    //             pl_y - coord y    //             pl_y - coord y
2458    
2459     adc_he = 0;    adc_he = 0;
2460    if( eGeom.GetXY(id)==1 )  adc_he = f_att( (parAtt[id]), pl_x[eGeom.GetPlane(id)] );    if( eGeom.GetXY(id)==1 )  adc_he = f_att( (parAtt[id]), pl_x[eGeom.GetPlane(id)] );
2461    if( eGeom.GetXY(id)==2 )  adc_he = f_att( (parAtt[id]), pl_y[eGeom.GetPlane(id)] );    if( eGeom.GetXY(id)==2 )  adc_he = f_att( (parAtt[id]), pl_y[eGeom.GetPlane(id)] );
2462    return adc_he;    return adc_he;
# Line 2055  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.26  
changed lines
  Added in v.1.42

  ViewVC Help
Powered by ViewVC 1.1.23