/[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.41 by mocchiut, Tue Oct 14 14:07:36 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 118  void ToFLevel2::Clear(Option_t *t){ Line 120  void ToFLevel2::Clear(Option_t *t){
120    if(PMT)PMT->Delete(); //ELENA    if(PMT)PMT->Delete(); //ELENA
121    memset(tof_j_flag, 0, 6*sizeof(Int_t));    memset(tof_j_flag, 0, 6*sizeof(Int_t));
122    unpackError = 0;    unpackError = 0;
123      unpackWarning = 0;
124    //    //
125  };  };
126    
# Line 221  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 224  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
224      return npad;      return npad;
225  };  };
226    
227    /**
228     * Method to get the number of hit paddles on a ToF plane.
229     * @param plane Plane ID (11, 12, 21, 22, 31, 32) or Plane index (0,1,2,3,4,5).
230     */
231    Int_t ToFLevel2::GetTrueNHitPaddles(Int_t plane){
232        Int_t npad=0;
233        TClonesArray* Pmt = this->PMT;
234        int paddle[24];
235        memset(paddle,0, 24*sizeof(int));
236        for(int i=0; i<Pmt->GetEntries(); i++) {  //loop per vedere quale TOF è colpito
237          ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
238          int pplane = -1;
239          int ppaddle = -1;
240          GetPMTPaddle(pmthit->pmt_id,pplane,ppaddle);
241          if ( pplane == plane ) paddle[ppaddle]++;
242        }
243        for(int i=0;i<24;i++) if ( paddle[i]>0 ) npad++;
244    
245        return npad;
246    };
247    
248  //wm Nov 08  //wm Nov 08
249  //gf Apr 07  //gf Apr 07
250  /**  /**
# Line 235  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 259  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
259   * @param plane Plane index (0,1,2,3,4,5)   * @param plane Plane index (0,1,2,3,4,5)
260   * @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; )
261   */   */
262  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){
263      //  printf("fiffi\n");
264      Float_t dedx = 0.;
265      Float_t PadEdx =0.;
266      Int_t SatWarning;
267      Int_t pad=-1;
268      //
269      if(!trk) return 0; //ELENA
270      //
271      if ( trk->trkseqno == -1 ){ //standalone, only paddles along the track, or about...
272        //    printf("ciccio\n");
273        Float_t xleft=0;
274        Float_t xright=0;
275        Float_t yleft=0;
276        Float_t yright=0;
277        Float_t xtof_temp[6]={100.,100.,100.,100.,100.,100.};
278        Float_t ytof_temp[6]={100.,100.,100.,100.,100.,100.};
279        ToFTrkVar *t_tof = trk;
280        
281        xtof_temp[0]=t_tof->xtofpos[0];
282        ytof_temp[0]=t_tof->ytofpos[0];
283        xtof_temp[1]=t_tof->xtofpos[0];
284        ytof_temp[1]=t_tof->ytofpos[0];
285    
286        xtof_temp[2]=t_tof->xtofpos[1];
287        ytof_temp[2]=t_tof->ytofpos[1];
288        xtof_temp[3]=t_tof->xtofpos[1];
289        ytof_temp[3]=t_tof->ytofpos[1];
290    
291        xtof_temp[4]=t_tof->xtofpos[2];
292        ytof_temp[4]=t_tof->ytofpos[2];
293        xtof_temp[5]=t_tof->xtofpos[2];
294        ytof_temp[5]=t_tof->ytofpos[2];
295    
296        if(t_tof->xtofpos[0]<100. && t_tof->ytofpos[0]<100.){
297          xtof_temp[1]=t_tof->xtofpos[0];
298          ytof_temp[0]=t_tof->ytofpos[0];
299        }else if(t_tof->xtofpos[0]>=100. && t_tof->ytofpos[0]<100.){
300          ytof_temp[0]=t_tof->ytofpos[0];
301          this->GetPaddleGeometry(0,(Int_t)log2(this->tof_j_flag[0]),xleft, xright, yleft, yright);
302          xtof_temp[1]=xleft+2.55;
303        }else if(t_tof->ytofpos[0]>=100. && t_tof->xtofpos[0]<100.){
304          xtof_temp[1]=t_tof->xtofpos[0];
305          this->GetPaddleGeometry(1,(Int_t)log2(this->tof_j_flag[1]),xleft, xright, yleft, yright);
306          ytof_temp[0]=yleft+2.75;
307        }
308        
309        if(t_tof->xtofpos[1]<100. && t_tof->ytofpos[1]<100.){
310          xtof_temp[2]=t_tof->xtofpos[1];
311          ytof_temp[3]=t_tof->ytofpos[1];
312        }else if(t_tof->xtofpos[1]>=100. && t_tof->ytofpos[1]<100.){
313          ytof_temp[3]=t_tof->ytofpos[1];
314          this->GetPaddleGeometry(3,(Int_t)log2(this->tof_j_flag[3]),xleft, xright, yleft, yright);
315          xtof_temp[2]=xleft+4.5;
316        }else if(t_tof->ytofpos[1]>=100. && t_tof->xtofpos[1]<100.){
317          xtof_temp[2]=t_tof->xtofpos[1];
318          this->GetPaddleGeometry(2,(Int_t)log2(this->tof_j_flag[2]),xleft, xright, yleft, yright);
319          ytof_temp[3]=yleft+3.75;
320        }
321        
322        if(t_tof->xtofpos[2]<100. && t_tof->ytofpos[2]<100.){
323          xtof_temp[5]=t_tof->xtofpos[2];
324          ytof_temp[4]=t_tof->ytofpos[2];
325        }else if(t_tof->xtofpos[2]>=100. && t_tof->ytofpos[2]<100.){
326          ytof_temp[4]=t_tof->ytofpos[2];
327          this->GetPaddleGeometry(4,(Int_t)log2(this->tof_j_flag[4]),xleft, xright, yleft, yright);
328          xtof_temp[5]=xleft+3;
329        }else if(t_tof->ytofpos[2]>=100. && t_tof->xtofpos[2]<100.){
330          xtof_temp[5]=t_tof->xtofpos[2];
331          this->GetPaddleGeometry(5,(Int_t)log2(this->tof_j_flag[5]),xleft, xright, yleft, yright);
332          ytof_temp[4]=yleft+2.5;
333        }
334    
335        if ( (xtof_temp[0])> 17.85 && fabs(xtof_temp[0])<17.85+4. ) xtof_temp[0] =17.84;
336        if ( (xtof_temp[1])> 17.85 && fabs(xtof_temp[1])<17.85+4. ) xtof_temp[1] =17.84;
337        if ( (ytof_temp[0])> 13.75 && fabs(ytof_temp[0])<13.75+4. ) ytof_temp[0] =13.74;
338        if ( (ytof_temp[1])> 13.75 && fabs(ytof_temp[1])<13.75+4. ) ytof_temp[1] =13.74;
339        if ( (xtof_temp[0])< -17.85 && fabs(xtof_temp[0])>-(17.85+4.) ) xtof_temp[0] =-17.84;
340        if ( (xtof_temp[1])< -17.85 && fabs(xtof_temp[1])>-(17.85+4.) ) xtof_temp[1] =-17.84;
341        if ( (ytof_temp[0])< -13.75 && fabs(ytof_temp[0])>-(13.75+4.) ) ytof_temp[0] =-13.74;
342        if ( (ytof_temp[1])< -13.75 && fabs(ytof_temp[1])>-(13.75+4.) ) ytof_temp[1] =-13.74;
343    
344        if ( (xtof_temp[2])> 4.5 && (xtof_temp[2])<4.5+4. ) xtof_temp[2] =4.4;
345        if ( (xtof_temp[3])> 4.45 && (xtof_temp[3])<4.5+4. ) xtof_temp[3] =4.4;
346        if ( (ytof_temp[2])> 3.75 && (ytof_temp[2])<3.75+4. ) ytof_temp[2] =3.74;
347        if ( (ytof_temp[3])> 3.75 && (ytof_temp[3])<3.75+4. ) ytof_temp[3] =3.74;
348        if ( (xtof_temp[2])< -4.5 && (xtof_temp[2])>-(4.5+4.) ) xtof_temp[2] =-4.4;
349        if ( (xtof_temp[3])< -4.45 && (xtof_temp[3])>-(4.5+4.) ) xtof_temp[3] =-4.4;
350        if ( (ytof_temp[2])< -3.75 && (ytof_temp[2])>-(3.75+4.) ) ytof_temp[2] =-3.74;
351        if ( (ytof_temp[3])< -3.75 && (ytof_temp[3])>-(3.75+4.) ) ytof_temp[3] =-3.74;
352    
353        if ( (xtof_temp[4])> 6. && (xtof_temp[4])<6.+4. ) xtof_temp[2] =5.9;
354        if ( (xtof_temp[5])> 6. && (xtof_temp[5])<6.+4. ) xtof_temp[3] =5.9;
355        if ( (ytof_temp[4])> 5. && (ytof_temp[4])<5.+4. ) ytof_temp[2] =4.9;
356        if ( (ytof_temp[5])> 5. && (ytof_temp[5])<5.+4. ) ytof_temp[3] =4.9;
357        if ( (xtof_temp[4])< -6. && (xtof_temp[4])>-(6.+4.) ) xtof_temp[2] =-5.9;
358        if ( (xtof_temp[5])< -6. && (xtof_temp[5])>-(6.+4.) ) xtof_temp[3] =-5.9;
359        if ( (ytof_temp[4])< -5. && (ytof_temp[4])>-(5.+4.) ) ytof_temp[2] =-4.9;
360        if ( (ytof_temp[5])< -5. && (ytof_temp[5])>-(5.+4.) ) ytof_temp[3] =-4.9;
361    
362    
363        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
364          Int_t paddleid=ii;
365          pad = GetPaddleid(plane,paddleid);
366          Int_t IpaddleT=-1;
367          IpaddleT=this->GetPaddleIdOfTrack(xtof_temp[plane],ytof_temp[plane], plane,0.0);
368    //      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]);
369          //      if ( IpaddleT == paddleid || IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
370          if ( IpaddleT == paddleid || GetTrueNHitPaddles(plane) == 1 ){
371            //IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
372            GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
373            dedx += PadEdx;
374          }
375        };
376      } else {
377        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
378          Int_t paddleid=ii;
379          pad = GetPaddleid(plane,paddleid);
380          GetdEdxPaddle(trk, pad, adcfl, PadEdx, SatWarning);
381          dedx += PadEdx;
382    //      printf("TTT %i %i %f\n",paddleid,plane,PadEdx);
383        };
384      }
385      //
386      return(dedx);
387    };
388    
389    
390    //wm Nov 08
391    //gf Apr 07
392    /**
393     * Method to get the mean dEdx from a ToF layer - ATTENTION:
394     * It will sum up the dEdx of all the paddles, but since by definition
395     * only the paddle hitted by the track gets a dEdx value and the other
396     * paddles are set to zero, the output is just the dEdx of the hitted
397     * paddle in each layer!
398     * The "adcfl" option is not very useful (an artificial dEdx is per
399     * definition= 1 mip and not a real measurement), anyway left in the code
400     * @param notrack Track Number
401     * @param plane Plane index (0,1,2,3,4,5)
402     * @param adcflag in the plane (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
403     */
404    Float_t ToFLevel2::GetdEdx(Int_t notrack, Int_t plane, Int_t adcfl){
405      //  printf("fiffi\n");
406    Float_t dedx = 0.;    Float_t dedx = 0.;
407    Float_t PadEdx =0.;    Float_t PadEdx =0.;
408    Int_t SatWarning;    Int_t SatWarning;
# Line 245  Float_t ToFLevel2::GetdEdx(Int_t notrack Line 411  Float_t ToFLevel2::GetdEdx(Int_t notrack
411    ToFTrkVar *trk = GetToFTrkVar(notrack);    ToFTrkVar *trk = GetToFTrkVar(notrack);
412    if(!trk) return 0; //ELENA    if(!trk) return 0; //ELENA
413    //    //
414    for (Int_t ii=0; ii<GetNPaddle(plane); ii++){    if ( trk->trkseqno == -1 ){ //standalone, only paddles along the track, or about...
415      Int_t paddleid=ii;      //    printf("ciccio\n");
416      pad = GetPaddleid(plane,paddleid);      Float_t xleft=0;
417      GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);      Float_t xright=0;
418      dedx += PadEdx;      Float_t yleft=0;
419    };      Float_t yright=0;
420        Float_t xtof_temp[6]={100.,100.,100.,100.,100.,100.};
421        Float_t ytof_temp[6]={100.,100.,100.,100.,100.,100.};
422        ToFTrkVar *t_tof = trk;
423        
424        xtof_temp[0]=t_tof->xtofpos[0];
425        ytof_temp[0]=t_tof->ytofpos[0];
426        xtof_temp[1]=t_tof->xtofpos[0];
427        ytof_temp[1]=t_tof->ytofpos[0];
428    
429        xtof_temp[2]=t_tof->xtofpos[1];
430        ytof_temp[2]=t_tof->ytofpos[1];
431        xtof_temp[3]=t_tof->xtofpos[1];
432        ytof_temp[3]=t_tof->ytofpos[1];
433    
434        xtof_temp[4]=t_tof->xtofpos[2];
435        ytof_temp[4]=t_tof->ytofpos[2];
436        xtof_temp[5]=t_tof->xtofpos[2];
437        ytof_temp[5]=t_tof->ytofpos[2];
438    
439        if(t_tof->xtofpos[0]<100. && t_tof->ytofpos[0]<100.){
440          xtof_temp[1]=t_tof->xtofpos[0];
441          ytof_temp[0]=t_tof->ytofpos[0];
442        }else if(t_tof->xtofpos[0]>=100. && t_tof->ytofpos[0]<100.){
443          ytof_temp[0]=t_tof->ytofpos[0];
444          this->GetPaddleGeometry(0,(Int_t)log2(this->tof_j_flag[0]),xleft, xright, yleft, yright);
445          xtof_temp[1]=xleft+2.55;
446        }else if(t_tof->ytofpos[0]>=100. && t_tof->xtofpos[0]<100.){
447          xtof_temp[1]=t_tof->xtofpos[0];
448          this->GetPaddleGeometry(1,(Int_t)log2(this->tof_j_flag[1]),xleft, xright, yleft, yright);
449          ytof_temp[0]=yleft+2.75;
450        }
451        
452        if(t_tof->xtofpos[1]<100. && t_tof->ytofpos[1]<100.){
453          xtof_temp[2]=t_tof->xtofpos[1];
454          ytof_temp[3]=t_tof->ytofpos[1];
455        }else if(t_tof->xtofpos[1]>=100. && t_tof->ytofpos[1]<100.){
456          ytof_temp[3]=t_tof->ytofpos[1];
457          this->GetPaddleGeometry(3,(Int_t)log2(this->tof_j_flag[3]),xleft, xright, yleft, yright);
458          xtof_temp[2]=xleft+4.5;
459        }else if(t_tof->ytofpos[1]>=100. && t_tof->xtofpos[1]<100.){
460          xtof_temp[2]=t_tof->xtofpos[1];
461          this->GetPaddleGeometry(2,(Int_t)log2(this->tof_j_flag[2]),xleft, xright, yleft, yright);
462          ytof_temp[3]=yleft+3.75;
463        }
464        
465        if(t_tof->xtofpos[2]<100. && t_tof->ytofpos[2]<100.){
466          xtof_temp[5]=t_tof->xtofpos[2];
467          ytof_temp[4]=t_tof->ytofpos[2];
468        }else if(t_tof->xtofpos[2]>=100. && t_tof->ytofpos[2]<100.){
469          ytof_temp[4]=t_tof->ytofpos[2];
470          this->GetPaddleGeometry(4,(Int_t)log2(this->tof_j_flag[4]),xleft, xright, yleft, yright);
471          xtof_temp[5]=xleft+3;
472        }else if(t_tof->ytofpos[2]>=100. && t_tof->xtofpos[2]<100.){
473          xtof_temp[5]=t_tof->xtofpos[2];
474          this->GetPaddleGeometry(5,(Int_t)log2(this->tof_j_flag[5]),xleft, xright, yleft, yright);
475          ytof_temp[4]=yleft+2.5;
476        }
477    
478        if ( (xtof_temp[0])> 17.85 && fabs(xtof_temp[0])<17.85+4. ) xtof_temp[0] =17.84;
479        if ( (xtof_temp[1])> 17.85 && fabs(xtof_temp[1])<17.85+4. ) xtof_temp[1] =17.84;
480        if ( (ytof_temp[0])> 13.75 && fabs(ytof_temp[0])<13.75+4. ) ytof_temp[0] =13.74;
481        if ( (ytof_temp[1])> 13.75 && fabs(ytof_temp[1])<13.75+4. ) ytof_temp[1] =13.74;
482        if ( (xtof_temp[0])< -17.85 && fabs(xtof_temp[0])>-(17.85+4.) ) xtof_temp[0] =-17.84;
483        if ( (xtof_temp[1])< -17.85 && fabs(xtof_temp[1])>-(17.85+4.) ) xtof_temp[1] =-17.84;
484        if ( (ytof_temp[0])< -13.75 && fabs(ytof_temp[0])>-(13.75+4.) ) ytof_temp[0] =-13.74;
485        if ( (ytof_temp[1])< -13.75 && fabs(ytof_temp[1])>-(13.75+4.) ) ytof_temp[1] =-13.74;
486    
487        if ( (xtof_temp[2])> 4.5 && (xtof_temp[2])<4.5+4. ) xtof_temp[2] =4.4;
488        if ( (xtof_temp[3])> 4.45 && (xtof_temp[3])<4.5+4. ) xtof_temp[3] =4.4;
489        if ( (ytof_temp[2])> 3.75 && (ytof_temp[2])<3.75+4. ) ytof_temp[2] =3.74;
490        if ( (ytof_temp[3])> 3.75 && (ytof_temp[3])<3.75+4. ) ytof_temp[3] =3.74;
491        if ( (xtof_temp[2])< -4.5 && (xtof_temp[2])>-(4.5+4.) ) xtof_temp[2] =-4.4;
492        if ( (xtof_temp[3])< -4.45 && (xtof_temp[3])>-(4.5+4.) ) xtof_temp[3] =-4.4;
493        if ( (ytof_temp[2])< -3.75 && (ytof_temp[2])>-(3.75+4.) ) ytof_temp[2] =-3.74;
494        if ( (ytof_temp[3])< -3.75 && (ytof_temp[3])>-(3.75+4.) ) ytof_temp[3] =-3.74;
495    
496        if ( (xtof_temp[4])> 6. && (xtof_temp[4])<6.+4. ) xtof_temp[2] =5.9;
497        if ( (xtof_temp[5])> 6. && (xtof_temp[5])<6.+4. ) xtof_temp[3] =5.9;
498        if ( (ytof_temp[4])> 5. && (ytof_temp[4])<5.+4. ) ytof_temp[2] =4.9;
499        if ( (ytof_temp[5])> 5. && (ytof_temp[5])<5.+4. ) ytof_temp[3] =4.9;
500        if ( (xtof_temp[4])< -6. && (xtof_temp[4])>-(6.+4.) ) xtof_temp[2] =-5.9;
501        if ( (xtof_temp[5])< -6. && (xtof_temp[5])>-(6.+4.) ) xtof_temp[3] =-5.9;
502        if ( (ytof_temp[4])< -5. && (ytof_temp[4])>-(5.+4.) ) ytof_temp[2] =-4.9;
503        if ( (ytof_temp[5])< -5. && (ytof_temp[5])>-(5.+4.) ) ytof_temp[3] =-4.9;
504    
505    
506        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
507          Int_t paddleid=ii;
508          pad = GetPaddleid(plane,paddleid);
509          Int_t IpaddleT=-1;
510          IpaddleT=this->GetPaddleIdOfTrack(xtof_temp[plane],ytof_temp[plane], plane,0.0);
511    //      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]);
512          //      if ( IpaddleT == paddleid || IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
513          if ( IpaddleT == paddleid || GetTrueNHitPaddles(plane) == 1 ){
514            //IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
515            GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);
516            dedx += PadEdx;
517          }
518        };
519      } else {
520        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
521          Int_t paddleid=ii;
522          pad = GetPaddleid(plane,paddleid);
523          GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);
524          dedx += PadEdx;
525    //      printf("TTT %i %i %f\n",paddleid,plane,PadEdx);
526        };
527      }
528    //    //
529    return(dedx);    return(dedx);
530  };  };
# Line 404  void ToFLevel2::GetPMTIndex(Int_t ind, I Line 678  void ToFLevel2::GetPMTIndex(Int_t ind, I
678   */   */
679  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){
680    
681  /*    /*
682  Float_t  PMTsat[48] = {      Float_t  PMTsat[48] = {
683  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,
684  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,
685  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,
686  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,
687  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,
688  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 } ;
689  */    */
690    
691  // new values from Napoli dec 2008    // new values from Napoli dec 2008
692  Float_t  PMTsat[48] = {    Float_t  PMTsat[48] = {
693  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,
694  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,
695  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,
696  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,
697  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,
698  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 };
699    
700  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
701    
702    
703    PadEdx = 0.;    PadEdx = 0.;
704  //  SatWarning = 1000;    //  SatWarning = 1000;
705    SatWarning = 0;   // 0=good, increase for each bad PMT    SatWarning = 0;   // 0=good, increase for each bad PMT
706    
707    Float_t dEdx[48] = {0};    Float_t dEdx[48] = {0};
# Line 474  for (Int_t i=0; i<48;i++) PMTsat[i] = PM Line 748  for (Int_t i=0; i<48;i++) PMTsat[i] = PM
748    }    }
749    
750    
751  //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version    //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version
752    
753  // Increase SatWarning Counter for each PMT>Sat    // Increase SatWarning Counter for each PMT>Sat
754    if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;      if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;  
755    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;
756    
757  // if ADC  > sat set dEdx=1000    // if ADC  > sat set dEdx=1000
758    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;
759    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;
760    
761  // 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
762    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;
763    if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];      if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];  
764    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];
765        
766  };  };
767    
768  //  //
769    //  wm Nov 08 revision - saturation values included
770    /// gf Apr 07
771    /**
772     * Method to get the dEdx from a given ToF paddle.
773     * If two PMTs are good, the mean dEdx of both PMTs is taken, otherwise
774     * just the dEdx of the "good" PMT. If both PMTs are above saturation => dEdx=1000
775     * @param notrack Track Number
776     * @param Paddle index (0,1,...,23).
777     * @param adcflag in the paddle (100<-> independent of the adcflag; !=0&&!=100 <-> at least one PMT with adcflag!=0; )
778     * @param PadEdx dEdx from a given ToF paddle
779     * @param SatWarning 1 if the PMT ios near saturation region (adcraw ~3000)
780     */
781    void ToFLevel2::GetdEdxPaddle(ToFTrkVar *trk, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning){
782    
783      /*
784        Float_t  PMTsat[48] = {
785        3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37,
786        3130.05, 3087.07, 3112.22, 3102.92, 3080.58, 3092.55, 3087.94, 3125.03,
787        3094.09, 3143.16, 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53,
788        3097.11, 3133.53, 3114.73, 3113.01, 3091.19, 3097.99, 3033.84, 3134.98,
789        3081.37, 3111.04, 3066.77, 3108.17, 3133, 3111.06, 3052.52, 3140.66,
790        3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 } ;
791      */
792    
793      // new values from Napoli dec 2008
794      Float_t  PMTsat[48] = {
795        3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,
796        3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,
797        3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,
798        3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,
799        3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,
800        3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };
801    
802      for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.;  // safety margin
803    
804    
805      PadEdx = 0.;
806      //  SatWarning = 1000;
807      SatWarning = 0;   // 0=good, increase for each bad PMT
808    
809      Float_t dEdx[48] = {0};
810      Int_t pmt_id = -1;
811      Float_t adcraw[48];
812      //
813      if(!trk) return; //ELENA
814      //
815    
816      Int_t pmtleft=-1;
817      Int_t pmtright=-1;
818      GetPaddlePMT(paddleid, pmtleft, pmtright);
819    
820      adcraw[pmtleft] = 4095;
821      adcraw[pmtright] = 4095;
822    
823      
824      for (Int_t jj=0; jj<npmt(); jj++){
825        
826        ToFPMT *pmt = GetToFPMT(jj);
827        if(!pmt)break; //ELENA
828        
829        pmt_id = pmt->pmt_id;
830        if(pmt_id==pmtleft){
831          adcraw[pmtleft] = pmt->adc;
832        }
833        
834        if(pmt_id==pmtright){
835          adcraw[pmtright] = pmt->adc;
836        }
837      }
838    
839      
840      for (Int_t i=0; i<trk->npmtadc; i++){
841    
842        if((trk->adcflag).At(i)==0 || adcfl==100){
843          if((trk->pmtadc).At(i) == pmtleft)dEdx[pmtleft] = (trk->dedx).At(i);
844          if((trk->pmtadc).At(i) == pmtright)dEdx[pmtright] = (trk->dedx).At(i);
845        }else{
846          if((trk->pmtadc).At(i) == pmtleft)dEdx[pmtleft] = 0.;
847          if((trk->pmtadc).At(i) == pmtright)dEdx[pmtright] = 0.;
848        }
849      }
850    
851    
852      //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version
853    
854      // Increase SatWarning Counter for each PMT>Sat
855      if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;  
856      if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;
857    
858      // if ADC  > sat set dEdx=1000
859      if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;
860      if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;
861    
862      // if two PMT are good, take mean dEdx, otherwise only the good dEdx
863      if(dEdx[pmtleft]<1000 && dEdx[pmtright]<1000) PadEdx = (dEdx[pmtleft]+dEdx[pmtright])*0.5;
864      if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];  
865      if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];
866      
867    };
868    
869  // gf Apr 07  // gf Apr 07
870    
# Line 1149  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1522  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1522    //    //
1523    // 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
1524    //    //
1525      printf("\n\n\n ERROR: NOT IMPLEMENTED ANYMORE, write Emiliano if you need this method (Emiliano.Mocchiutti@ts.infn.it) \n\n\n");
1526      return(-1);
1527      //   //
1528      //   // structures to communicate with F77
1529    //    //   //
1530    // structures to communicate with F77    //   extern struct ToFInput  tofinput_;
1531    //  //   extern struct ToFOutput tofoutput_;
1532    extern struct ToFInput  tofinput_;  //   //
1533    extern struct ToFOutput tofoutput_;  //   // DB connection
1534    //  //   //
1535    // DB connection  //   TString host;
1536    //  //   TString user;
1537    TString host;  //   TString psw;
1538    TString user;  //   const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");
1539    TString psw;  //   const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");
1540    const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");  //   const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");
1541    const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");  //   if ( !pamdbhost ) pamdbhost = "";
1542    const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");  //   if ( !pamdbuser ) pamdbuser = "";
1543    if ( !pamdbhost ) pamdbhost = "";  //   if ( !pamdbpsw ) pamdbpsw = "";
1544    if ( !pamdbuser ) pamdbuser = "";  //   if ( strcmp(pamdbhost,"") ) host = pamdbhost;
1545    if ( !pamdbpsw ) pamdbpsw = "";  //   if ( strcmp(pamdbuser,"") ) user = pamdbuser;
1546    if ( strcmp(pamdbhost,"") ) host = pamdbhost;  //   if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;
1547    if ( strcmp(pamdbuser,"") ) user = pamdbuser;  //   //
1548    if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;  //   //
1549    //  //   TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
1550    //  //   if ( !dbc->IsConnected() ) return 1;
1551    TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());  //   stringstream myquery;
1552    if ( !dbc->IsConnected() ) return 1;  //   myquery.str("");
1553    stringstream myquery;  //   myquery << "SET time_zone='+0:00';";
1554    myquery.str("");  //   dbc->Query(myquery.str().c_str());
1555    myquery << "SET time_zone='+0:00'";  //   delete dbc->Query("SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';");
1556    dbc->Query(myquery.str().c_str());  //   GL_PARAM *glparam = new GL_PARAM();
1557    GL_PARAM *glparam = new GL_PARAM();  //   glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table
1558    glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table  //   trk->LoadField(glparam->PATH+glparam->NAME);
1559    trk->LoadField(glparam->PATH+glparam->NAME);  //   //
1560    //  //   Bool_t defcal = true;
1561    Bool_t defcal = true;  //   Int_t error=glparam->Query_GL_PARAM(run->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table
1562    Int_t error=glparam->Query_GL_PARAM(run->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table  //   if ( error<0 ) {
1563    if ( error<0 ) {  //     return(1);
1564      return(1);  //   };
1565    };  //   printf(" Reading ToF parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());
1566    printf(" Reading ToF parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());  //   if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false;
1567    if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false;  //   //
1568    //  //   Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length();
1569    Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length();  //   rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen);
1570    rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen);  //   //
1571    //  //   Int_t adc[4][12];
1572    Int_t adc[4][12];  //   Int_t tdc[4][12];
1573    Int_t tdc[4][12];  //   Float_t tdcc[4][12];
1574    Float_t tdcc[4][12];  //   //
1575    //  //   // process tof data
1576    // process tof data  //   //
1577    //  //   for (Int_t hh=0; hh<12;hh++){
1578    for (Int_t hh=0; hh<12;hh++){  //     for (Int_t kk=0; kk<4;kk++){
1579      for (Int_t kk=0; kk<4;kk++){  //            adc[kk][hh] = 4095;
1580             adc[kk][hh] = 4095;  //            tdc[kk][hh] = 4095;
1581             tdc[kk][hh] = 4095;  //            tdcc[kk][hh] = 4095.;
1582             tdcc[kk][hh] = 4095.;  //            tofinput_.adc[hh][kk] = 4095;
1583             tofinput_.adc[hh][kk] = 4095;  //            tofinput_.tdc[hh][kk] = 4095;
1584             tofinput_.tdc[hh][kk] = 4095;  //     };
1585      };  //   };
1586    };  //   Int_t ntrkentry = 0;
1587    Int_t ntrkentry = 0;  //   Int_t npmtentry = 0;
1588    Int_t npmtentry = 0;  //   Int_t gg = 0;
1589    Int_t gg = 0;  //   Int_t hh = 0;
1590    Int_t hh = 0;  //   Int_t adcf[48];
1591    Int_t adcf[48];  //   memset(adcf, 0, 48*sizeof(Int_t));
1592    memset(adcf, 0, 48*sizeof(Int_t));  //   Int_t tdcf[48];
1593    Int_t tdcf[48];  //   memset(tdcf, 0, 48*sizeof(Int_t));
1594    memset(tdcf, 0, 48*sizeof(Int_t));  //   for (Int_t pm=0; pm < this->ntrk() ; pm++){
1595    for (Int_t pm=0; pm < this->ntrk() ; pm++){  //      ToFTrkVar *ttf = this->GetToFTrkVar(pm);
1596       ToFTrkVar *ttf = this->GetToFTrkVar(pm);  //      for ( Int_t nc=0; nc < ttf->npmttdc; nc++){
1597       for ( Int_t nc=0; nc < ttf->npmttdc; nc++){  //             if ( (ttf->tdcflag).At(nc) != 0 ) tdcf[(ttf->pmttdc).At(nc)] = 1;
1598              if ( (ttf->tdcflag).At(nc) != 0 ) tdcf[(ttf->pmttdc).At(nc)] = 1;  //      };
1599       };  //      for ( Int_t nc=0; nc < ttf->npmtadc; nc++){
1600       for ( Int_t nc=0; nc < ttf->npmtadc; nc++){  //             if ( (ttf->adcflag).At(nc) != 0 ) adcf[(ttf->pmtadc).At(nc)] = 1;
1601              if ( (ttf->adcflag).At(nc) != 0 ) adcf[(ttf->pmtadc).At(nc)] = 1;  //      };
1602       };  //   };
1603    };  //   //
1604    //  //   for (Int_t pm=0; pm < this->npmt() ; pm++){
1605    for (Int_t pm=0; pm < this->npmt() ; pm++){  //      ToFPMT *pmt = this->GetToFPMT(pm);
1606       ToFPMT *pmt = this->GetToFPMT(pm);  //      this->GetPMTIndex(pmt->pmt_id, gg, hh);
1607       this->GetPMTIndex(pmt->pmt_id, gg, hh);  //      if ( adcf[pmt->pmt_id] == 0 ){
1608       if ( adcf[pmt->pmt_id] == 0 ){  //              tofinput_.adc[gg][hh] = (int)pmt->adc;
1609               tofinput_.adc[gg][hh] = (int)pmt->adc;  //              adc[hh][gg] = (int)pmt->adc;
1610               adc[hh][gg] = (int)pmt->adc;  //      };
1611       };  //      if ( tdcf[pmt->pmt_id] == 0 ){
1612       if ( tdcf[pmt->pmt_id] == 0 ){  //              tofinput_.tdc[gg][hh] = (int)pmt->tdc;
1613               tofinput_.tdc[gg][hh] = (int)pmt->tdc;  //              tdc[hh][gg] = (int)pmt->tdc;
1614               tdc[hh][gg] = (int)pmt->tdc;  //      };
1615       };  //      tdcc[hh][gg] = (float)pmt->tdc_tw;
1616       tdcc[hh][gg] = (float)pmt->tdc_tw;  //      // Int_t pppid = this->GetPMTid(hh,gg);
1617       // 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);
1618       //      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);  //   };
1619    };  //   //
1620    //  //   Int_t unpackError = this->unpackError;
1621    Int_t unpackError = this->unpackError;  //   //
1622    //  //   for (Int_t hh=0; hh<5;hh++){
1623    for (Int_t hh=0; hh<5;hh++){  //      tofinput_.patterntrig[hh]=trg->patterntrig[hh];
1624       tofinput_.patterntrig[hh]=trg->patterntrig[hh];  //   };
1625    };  //   //
1626    //  //   this->Clear();
1627    this->Clear();  //   //
1628    //  //       Int_t pmt_id = 0;
1629        Int_t pmt_id = 0;  //       ToFPMT *t_pmt = new ToFPMT();
1630        ToFPMT *t_pmt = new ToFPMT();  //       if(!(this->PMT)) this->PMT = new TClonesArray("ToFPMT",12); //ELENA
1631        if(!(this->PMT)) this->PMT = new TClonesArray("ToFPMT",12); //ELENA  //       TClonesArray &tpmt = *this->PMT;
1632        TClonesArray &tpmt = *this->PMT;  //       ToFTrkVar *t_tof = new ToFTrkVar();
1633        ToFTrkVar *t_tof = new ToFTrkVar();  //       if(!(this->ToFTrk)) this->ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA
1634        if(!(this->ToFTrk)) this->ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA  //       TClonesArray &t = *this->ToFTrk;
1635        TClonesArray &t = *this->ToFTrk;  //       //
1636        //  //       //
1637        //  //       // Here we have calibrated data, ready to be passed to the FORTRAN routine which will extract common and track-related  variables.
1638        // Here we have calibrated data, ready to be passed to the FORTRAN routine which will extract common and track-related  variables.  //       //
1639        //  //       npmtentry = 0;
1640        npmtentry = 0;  //       //
1641        //  //       ntrkentry = 0;
1642        ntrkentry = 0;  //       //
1643        //  //       // Calculate tracks informations from ToF alone
1644        // Calculate tracks informations from ToF alone  //       //
1645        //  //       tofl2com();
1646        tofl2com();  //       //
1647        //  //       memcpy(this->tof_j_flag,tofoutput_.tof_j_flag,6*sizeof(Int_t));
1648        memcpy(this->tof_j_flag,tofoutput_.tof_j_flag,6*sizeof(Int_t));  //       //
1649        //  //       t_tof->trkseqno = -1;
1650        t_tof->trkseqno = -1;  //       //
1651        //  //       // and now we must copy from the output structure to the level2 class:
1652        // and now we must copy from the output structure to the level2 class:  //       //
1653        //  //       t_tof->npmttdc = 0;
1654        t_tof->npmttdc = 0;  //       //
1655        //  //       for (Int_t hh=0; hh<12;hh++){
1656        for (Int_t hh=0; hh<12;hh++){  //         for (Int_t kk=0; kk<4;kk++){
1657          for (Int_t kk=0; kk<4;kk++){  //           if ( tofoutput_.tofmask[hh][kk] != 0 ){
1658            if ( tofoutput_.tofmask[hh][kk] != 0 ){  //             pmt_id = this->GetPMTid(kk,hh);
1659              pmt_id = this->GetPMTid(kk,hh);  //             t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1660              t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);  //             t_tof->tdcflag.AddAt(tofoutput_.tdcflagtof[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1661              t_tof->tdcflag.AddAt(tofoutput_.tdcflagtof[hh][kk],t_tof->npmttdc); // gf: Jan 09/07  //             t_tof->npmttdc++;
1662              t_tof->npmttdc++;  //           };
1663            };  //         };
1664          };  //       };
1665        };  //       for (Int_t kk=0; kk<13;kk++){
1666        for (Int_t kk=0; kk<13;kk++){  //         t_tof->beta[kk] = tofoutput_.betatof_a[kk];
1667          t_tof->beta[kk] = tofoutput_.betatof_a[kk];  //       }
1668        }  //       //
1669        //  //       t_tof->npmtadc = 0;
1670        t_tof->npmtadc = 0;  //       for (Int_t hh=0; hh<12;hh++){
1671        for (Int_t hh=0; hh<12;hh++){  //         for (Int_t kk=0; kk<4;kk++){
1672          for (Int_t kk=0; kk<4;kk++){  //           if ( tofoutput_.adctof_c[hh][kk] < 1000 ){
1673            if ( tofoutput_.adctof_c[hh][kk] < 1000 ){  //             t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);
1674              t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);  //             pmt_id = this->GetPMTid(kk,hh);
1675              pmt_id = this->GetPMTid(kk,hh);  //             t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1676              t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);  //             t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1677              t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07  //             t_tof->npmtadc++;
1678              t_tof->npmtadc++;  //           };
1679            };  //         };
1680          };  //       };
1681        };  //       //
1682        //  //       memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1683        memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));  //       memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1684        memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));  //       memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1685        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));
1686        memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));  //       //
1687        //  //       new(t[ntrkentry]) ToFTrkVar(*t_tof);
1688        new(t[ntrkentry]) ToFTrkVar(*t_tof);  //       ntrkentry++;
1689        ntrkentry++;  //       t_tof->Clear();
1690        t_tof->Clear();  //       //
1691        //  //       //
1692        //  //       //
1693        //  //       t_pmt->Clear();
1694        t_pmt->Clear();  //       //
1695        //  //       for (Int_t hh=0; hh<12;hh++){
1696        for (Int_t hh=0; hh<12;hh++){  //         for (Int_t kk=0; kk<4;kk++){
1697          for (Int_t kk=0; kk<4;kk++){  //          // new WM
1698           // new WM  //           if ( tofoutput_.tdc_c[hh][kk] < 4095 || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){
1699            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 ){
1700  //          if ( tdcc[kk][hh] < 4095. || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){  //             //
1701              //  //             t_pmt->pmt_id = this->GetPMTid(kk,hh);
1702              t_pmt->pmt_id = this->GetPMTid(kk,hh);  //             t_pmt->tdc_tw = tofoutput_.tdc_c[hh][kk];
1703              t_pmt->tdc_tw = tofoutput_.tdc_c[hh][kk];  //             t_pmt->adc = (Float_t)adc[kk][hh];
1704              t_pmt->adc = (Float_t)adc[kk][hh];  //             t_pmt->tdc = (Float_t)tdc[kk][hh];
1705              t_pmt->tdc = (Float_t)tdc[kk][hh];  //             //
1706              //  //             new(tpmt[npmtentry]) ToFPMT(*t_pmt);
1707              new(tpmt[npmtentry]) ToFPMT(*t_pmt);  //             npmtentry++;
1708              npmtentry++;  //             t_pmt->Clear();
1709              t_pmt->Clear();  //           };
1710            };  //         };
1711          };  //       };
1712        };  //       //
1713        //  //       // Calculate track-related variables
1714        // Calculate track-related variables  //       //
1715        //  //       if ( trk->ntrk() > 0 ){
1716        if ( trk->ntrk() > 0 ){  //         //
1717          //  //         // We have at least one track
1718          // We have at least one track  //         //
1719          //  //         //
1720          //  //         // Run over tracks
1721          // Run over tracks  //         //
1722          //  //         for(Int_t nt=0; nt < trk->ntrk(); nt++){
1723          for(Int_t nt=0; nt < trk->ntrk(); nt++){  //           //
1724            //  //           TrkTrack *ptt = trk->GetStoredTrack(nt);
1725            TrkTrack *ptt = trk->GetStoredTrack(nt);  //           //
1726            //  //           // Copy the alpha vector in the input structure
1727            // Copy the alpha vector in the input structure  //           //
1728            //  //           for (Int_t e = 0; e < 5 ; e++){
1729            for (Int_t e = 0; e < 5 ; e++){  //             tofinput_.al_pp[e] = ptt->al[e];
1730              tofinput_.al_pp[e] = ptt->al[e];  //           };
1731            };  //           //
1732            //  //           // Get tracker related variables for this track
1733            // Get tracker related variables for this track  //           //
1734            //  //           toftrk();
1735            toftrk();  //           //
1736            //  //           // Copy values in the class from the structure (we need to use a temporary class to store variables).
1737            // Copy values in the class from the structure (we need to use a temporary class to store variables).  //           //
1738            //  //           t_tof->npmttdc = 0;
1739            t_tof->npmttdc = 0;  //           for (Int_t hh=0; hh<12;hh++){
1740            for (Int_t hh=0; hh<12;hh++){  //             for (Int_t kk=0; kk<4;kk++){
1741              for (Int_t kk=0; kk<4;kk++){  //               if ( tofoutput_.tofmask[hh][kk] != 0 ){
1742                if ( tofoutput_.tofmask[hh][kk] != 0 ){  //                 pmt_id = this->GetPMTid(kk,hh);
1743                  pmt_id = this->GetPMTid(kk,hh);  //                 t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1744                  t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);  //                 t_tof->tdcflag.AddAt(tofoutput_.tdcflag[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1745                  t_tof->tdcflag.AddAt(tofoutput_.tdcflag[hh][kk],t_tof->npmttdc); // gf: Jan 09/07  //                 t_tof->npmttdc++;
1746                  t_tof->npmttdc++;  //               };
1747                };  //             };
1748              };  //           };
1749            };  //           for (Int_t kk=0; kk<13;kk++){
1750            for (Int_t kk=0; kk<13;kk++){  //             t_tof->beta[kk] = tofoutput_.beta_a[kk];
1751              t_tof->beta[kk] = tofoutput_.beta_a[kk];  //           };
1752            };  //           //
1753            //  //           t_tof->npmtadc = 0;
1754            t_tof->npmtadc = 0;  //           for (Int_t hh=0; hh<12;hh++){
1755            for (Int_t hh=0; hh<12;hh++){  //             for (Int_t kk=0; kk<4;kk++){
1756              for (Int_t kk=0; kk<4;kk++){  //               if ( tofoutput_.adc_c[hh][kk] < 1000 ){
1757                if ( tofoutput_.adc_c[hh][kk] < 1000 ){  //                 t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);
1758                  t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);  //                 pmt_id = this->GetPMTid(kk,hh);
1759                  pmt_id = this->GetPMTid(kk,hh);  //                 t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1760                  t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);  //                 t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1761                  t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07  //                 t_tof->npmtadc++;
1762                  t_tof->npmtadc++;  //               };
1763                };  //             };
1764              };  //           };
1765            };  //           //
1766            //  //           memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1767            memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));  //           memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1768            memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));  //           memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1769            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));
1770            memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));  //           //
1771            //  //           // Store the tracker track number in order to be sure to have shyncronized data during analysis
1772            // Store the tracker track number in order to be sure to have shyncronized data during analysis  //           //
1773            //  //           t_tof->trkseqno = nt;
1774            t_tof->trkseqno = nt;  //           //
1775            //  //           // create a new object for this event with track-related variables
1776            // create a new object for this event with track-related variables  //           //
1777            //  //           new(t[ntrkentry]) ToFTrkVar(*t_tof);
1778            new(t[ntrkentry]) ToFTrkVar(*t_tof);  //           ntrkentry++;
1779            ntrkentry++;  //           t_tof->Clear();
1780            t_tof->Clear();  //           //
1781            //  //         }; // loop on all the tracks
1782          }; // loop on all the tracks  //       //
1783        //  //       this->unpackError = unpackError;
1784        this->unpackError = unpackError;  //       if ( defcal ){
1785        if ( defcal ){  //         this->default_calib = 1;
1786          this->default_calib = 1;  //       } else {
1787        } else {  //         this->default_calib = 0;
1788          this->default_calib = 0;  //       };
1789        };  //};
1790   };  //  return(0);
1791    }
1792    
1793    bool ToFLevel2::bit(int decimal, char pos){
1794    return(0);    return( (decimal>>pos)%2 );
1795    }
1796    
1797    bool ToFLevel2::checkPMT(TString givenpmt){
1798      TClonesArray* Pmt = this->PMT;
1799      //  printf(" ou %s entries %i \n",givenpmt.Data(),Pmt->GetEntries());
1800      for(int i=0; i<Pmt->GetEntries(); i++) {  
1801        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1802        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1803        //    printf(" name %s \n",pmtname.Data());
1804        if ( !strcmp(pmtname.Data(),givenpmt.Data()) )
1805          return true;
1806      }
1807      //  printf(" PMT %s missing \n",givenpmt.Data());
1808      return false;
1809    }
1810    
1811    bool ToFLevel2::checkPMTpatternPMThit(TrigLevel2 *trg, int &pmtpattern, int &pmtnosignal){
1812      UInt_t *patterntrig = trg->patterntrig;
1813      pmtpattern = 0;
1814      pmtnosignal = 0;
1815      bool good = true;
1816      //S3
1817      if ( this->bit(patterntrig[2],0) ){ pmtpattern++;  if ( !this->checkPMT("S31_1A")){ pmtnosignal++; good = false;}}
1818      if ( this->bit(patterntrig[2],1) ){ pmtpattern++;  if ( !this->checkPMT("S31_2A")){ pmtnosignal++; good = false;}}
1819      if ( this->bit(patterntrig[2],2) ){ pmtpattern++;  if ( !this->checkPMT("S31_3A")){ pmtnosignal++; good = false;}}
1820      if ( this->bit(patterntrig[2],3) ){ pmtpattern++;  if ( !this->checkPMT("S31_1B")){ pmtnosignal++; good = false;}}
1821      if ( this->bit(patterntrig[2],4) ){ pmtpattern++;  if ( !this->checkPMT("S31_2B")){ pmtnosignal++; good = false;}}
1822      if ( this->bit(patterntrig[2],5) ){ pmtpattern++;  if ( !this->checkPMT("S31_3B")){ pmtnosignal++; good = false;}}      
1823      if ( this->bit(patterntrig[2],6) ){ pmtpattern++;  if ( !this->checkPMT("S32_1A")){ pmtnosignal++; good = false;}}
1824      if ( this->bit(patterntrig[2],7) ){ pmtpattern++;  if ( !this->checkPMT("S32_2A")){ pmtnosignal++; good = false;}}
1825      if ( this->bit(patterntrig[2],8) ){ pmtpattern++;  if ( !this->checkPMT("S32_3A")){ pmtnosignal++; good = false;}}
1826      if ( this->bit(patterntrig[2],9) ){ pmtpattern++;  if ( !this->checkPMT("S32_1B")){ pmtnosignal++; good = false;}}
1827      if ( this->bit(patterntrig[2],10) ){ pmtpattern++;  if ( !this->checkPMT("S32_2B")){ pmtnosignal++; good = false;}}
1828      if ( this->bit(patterntrig[2],11) ){ pmtpattern++;  if ( !this->checkPMT("S32_3B")){ pmtnosignal++; good = false;}}      
1829      //S2
1830      if ( this->bit(patterntrig[3],0) ){ pmtpattern++;  if ( !this->checkPMT("S21_1A")){ pmtnosignal++; good = false;}}
1831      if ( this->bit(patterntrig[3],1) ){ pmtpattern++;  if ( !this->checkPMT("S21_2A")){ pmtnosignal++; good = false;}}
1832      if ( this->bit(patterntrig[3],2) ){ pmtpattern++;  if ( !this->checkPMT("S21_1B")){ pmtnosignal++; good = false;}}
1833      if ( this->bit(patterntrig[3],3) ){ pmtpattern++;  if ( !this->checkPMT("S21_2B")){ pmtnosignal++; good = false;}}      
1834      if ( this->bit(patterntrig[3],4) ){ pmtpattern++;  if ( !this->checkPMT("S22_1A")){ pmtnosignal++; good = false;}}
1835      if ( this->bit(patterntrig[3],5) ){ pmtpattern++;  if ( !this->checkPMT("S22_2A")){ pmtnosignal++; good = false;}}
1836      if ( this->bit(patterntrig[3],6) ){ pmtpattern++;  if ( !this->checkPMT("S22_1B")){ pmtnosignal++; good = false;}}
1837      if ( this->bit(patterntrig[3],7) ){ pmtpattern++;  if ( !this->checkPMT("S22_2B")){ pmtnosignal++; good = false;}}      
1838      //S12
1839      if ( this->bit(patterntrig[4],0) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1840      if ( this->bit(patterntrig[4],1) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1841      if ( this->bit(patterntrig[4],2) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1842      if ( this->bit(patterntrig[4],3) ){ pmtpattern++;  if ( !this->checkPMT("S12_4A")){ pmtnosignal++; good = false;}}
1843      if ( this->bit(patterntrig[4],4) ){ pmtpattern++;  if ( !this->checkPMT("S12_5A")){ pmtnosignal++; good = false;}}
1844      if ( this->bit(patterntrig[4],5) ){ pmtpattern++;  if ( !this->checkPMT("S12_6A")){ pmtnosignal++; good = false;}}      
1845      if ( this->bit(patterntrig[4],6) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1846      if ( this->bit(patterntrig[4],7) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1847      if ( this->bit(patterntrig[4],8) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1848      if ( this->bit(patterntrig[4],9) ){ pmtpattern++;  if ( !this->checkPMT("S12_4B")){ pmtnosignal++; good = false;}}
1849      if ( this->bit(patterntrig[4],10) ){ pmtpattern++; if ( !this->checkPMT("S12_5B")){ pmtnosignal++; good = false;}}
1850      if ( this->bit(patterntrig[4],11) ){ pmtpattern++; if ( !this->checkPMT("S12_6B")){ pmtnosignal++; good = false;}}      
1851      //S11
1852      if ( this->bit(patterntrig[5],0) ){ pmtpattern++;  if ( !this->checkPMT("S11_1A")){ pmtnosignal++; good = false;}}
1853      if ( this->bit(patterntrig[5],1) ){ pmtpattern++;  if ( !this->checkPMT("S11_2A")){ pmtnosignal++; good = false;}}
1854      if ( this->bit(patterntrig[5],2) ){ pmtpattern++;  if ( !this->checkPMT("S11_3A")){ pmtnosignal++; good = false;}}
1855      if ( this->bit(patterntrig[5],3) ){ pmtpattern++;  if ( !this->checkPMT("S11_4A")){ pmtnosignal++; good = false;}}
1856      if ( this->bit(patterntrig[5],4) ){ pmtpattern++;  if ( !this->checkPMT("S11_5A")){ pmtnosignal++; good = false;}}
1857      if ( this->bit(patterntrig[5],5) ){ pmtpattern++;  if ( !this->checkPMT("S11_6A")){ pmtnosignal++; good = false;}}
1858      if ( this->bit(patterntrig[5],6) ){ pmtpattern++;  if ( !this->checkPMT("S11_7A")){ pmtnosignal++; good = false;}}
1859      if ( this->bit(patterntrig[5],7) ){ pmtpattern++;  if ( !this->checkPMT("S11_8A")){ pmtnosignal++; good = false;}}      
1860      if ( this->bit(patterntrig[5],8) ){ pmtpattern++;  if ( !this->checkPMT("S11_1B")){ pmtnosignal++; good = false;}}
1861      if ( this->bit(patterntrig[5],9) ){ pmtpattern++;  if ( !this->checkPMT("S11_2B")){ pmtnosignal++; good = false;}}
1862      if ( this->bit(patterntrig[5],10) ){ pmtpattern++; if ( !this->checkPMT("S11_3B")){ pmtnosignal++; good = false;}}
1863      if ( this->bit(patterntrig[5],11) ){ pmtpattern++; if ( !this->checkPMT("S11_4B")){ pmtnosignal++; good = false;}}
1864      if ( this->bit(patterntrig[5],12) ){ pmtpattern++; if ( !this->checkPMT("S11_5B")){ pmtnosignal++; good = false;}}
1865      if ( this->bit(patterntrig[5],13) ){ pmtpattern++; if ( !this->checkPMT("S11_6B")){ pmtnosignal++; good = false;}}
1866      if ( this->bit(patterntrig[5],14) ){ pmtpattern++; if ( !this->checkPMT("S11_7B")){ pmtnosignal++; good = false;}}
1867      if ( this->bit(patterntrig[5],15) ){ pmtpattern++; if ( !this->checkPMT("S11_8B")){ pmtnosignal++; good = false;}}
1868    
1869      return good;
1870    }
1871    
1872    bool ToFLevel2::checkPMTpmttrig(TrigLevel2 *trg){
1873      //  UInt_t *patterntrig = trg->patterntrig;
1874      int rS11 = 0;
1875      int rS12 = 0;
1876      int rS21 = 0;
1877      int rS22 = 0;
1878      int rS31 = 0;
1879      int rS32 = 0;
1880    
1881      // trigger configuration for the event from saved pmts
1882      TClonesArray* Pmt = this->PMT;
1883      for(int i=0; i<Pmt->GetEntries(); i++) {  
1884        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1885        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1886        if ( pmtname.Contains("S11") ) rS11++;
1887        if ( pmtname.Contains("S12") ) rS12++;
1888        if ( pmtname.Contains("S21") ) rS21++;
1889        if ( pmtname.Contains("S22") ) rS22++;
1890        if ( pmtname.Contains("S31") ) rS31++;
1891        if ( pmtname.Contains("S32") ) rS32++;
1892      }
1893      int rTOF1 = (rS11 + rS12) * (rS21 + rS22) * (rS31 + rS32);
1894      int rTOF2 = (rS11 * rS12) * (rS21 * rS22) * (rS31 * rS32);
1895    
1896      int rTOF3 = (rS21 + rS22) * (rS31 + rS32);
1897      int rTOF4 = (rS21 * rS22) * (rS31 * rS32);
1898    
1899      int rTOF5 = rS12 * (rS21 * rS22);
1900    
1901      int rTOF6 = (rS11 + rS12) * (rS31 + rS32);
1902      int rTOF7 = (rS11 * rS12) * (rS31 * rS32);
1903    
1904    
1905      // trigger configuration of the run
1906      bool TCTOF1 = false;
1907      bool TCTOF2 = false;
1908      bool TCTOF3 = false;
1909      bool TCTOF4 = false;
1910      bool TCTOF5 = false;
1911      bool TCTOF6 = false;
1912      bool TCTOF7 = false;
1913      if ( trg->trigconf & (1<<0) ) TCTOF1 = true;
1914      if ( trg->trigconf & (1<<1) ) TCTOF2 = true;
1915      if ( trg->trigconf & (1<<2) ) TCTOF3 = true;
1916      if ( trg->trigconf & (1<<3) ) TCTOF4 = true;
1917      if ( trg->trigconf & (1<<4) ) TCTOF5 = true;
1918      if ( trg->trigconf & (1<<5) ) TCTOF6 = true;
1919      if ( trg->trigconf & (1<<6) ) TCTOF7 = true;
1920    
1921      // do patterntrig pmts match the trigger configuration?
1922      bool pmtsconf_trigconf_match = true;
1923      if ( rTOF1 == 0 && TCTOF1 ) pmtsconf_trigconf_match = false;
1924      if ( rTOF2 == 0 && TCTOF2 ) pmtsconf_trigconf_match = false;
1925      if ( rTOF3 == 0 && TCTOF3 ) pmtsconf_trigconf_match = false;
1926      if ( rTOF4 == 0 && TCTOF4 ) pmtsconf_trigconf_match = false;
1927      if ( rTOF5 == 0 && TCTOF5 ) pmtsconf_trigconf_match = false;
1928      if ( rTOF6 == 0 && TCTOF6 ) pmtsconf_trigconf_match = false;
1929      if ( rTOF7 == 0 && TCTOF7 ) pmtsconf_trigconf_match = false;
1930    
1931      return pmtsconf_trigconf_match;
1932    }
1933    
1934    void ToFLevel2::printPMT(){
1935      TClonesArray* Pmt = this->PMT;
1936      for(int i=0; i<Pmt->GetEntries(); i++) {  
1937        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1938        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1939        printf(" PMT hit: %s \n",pmtname.Data());
1940      }
1941  }  }
1942    
1943    
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
1944  ToFdEdx::ToFdEdx()  ToFdEdx::ToFdEdx()
1945  {  {
1946    memset(conn,0,12*sizeof(Bool_t));    memset(conn,0,12*sizeof(Bool_t));
1947    memset(ts,0,12*sizeof(UInt_t));    memset(ts,0,12*sizeof(UInt_t));
1948    memset(te,0,12*sizeof(UInt_t));    memset(te,0,12*sizeof(UInt_t));
1949      eDEDXpmt = new TArrayF(48);
1950    Define_PMTsat();    Define_PMTsat();
1951    Clear();    Clear();
1952  }  }
1953    
1954    ToFdEdx::~ToFdEdx(){
1955      Clear();
1956      Delete();
1957    }
1958    
1959    void ToFdEdx::Delete(Option_t *option){
1960      if ( eDEDXpmt ){
1961        eDEDXpmt->Set(0);
1962        if ( eDEDXpmt) delete eDEDXpmt;
1963      }
1964    }
1965    
1966  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1967  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)
1968  {  {
# Line 1493  void ToFdEdx::Clear(Option_t *option) Line 2004  void ToFdEdx::Clear(Option_t *option)
2004  {  {
2005    //    //
2006    // Set arrays and initialize structure    // Set arrays and initialize structure
2007      //  eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure
2008    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);  
2009    //    //
2010  };  };
2011    
# Line 1515  void ToFdEdx::Print(Option_t *option) Line 2017  void ToFdEdx::Print(Option_t *option)
2017    
2018  };  };
2019    
   
2020  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2021  // void ToFdEdx::InitPar(TString parname, TString parfile)  void ToFdEdx::Init(pamela::tof::TofEvent *tofl0)
2022  // {  {
2023  //   // expensive function - call it once/run    //
2024      ToFLevel2 tf;
2025      for (Int_t gg=0; gg<4;gg++){
2026        for (Int_t hh=0; hh<12;hh++){
2027  //   ReadParAtt(            Form("%s/attenuation.txt"              , pardir) );        //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];          
2028  //   ReadParPos(            Form("%s/desaturation_position.txt"    , pardir) );        int mm = tf.GetPMTid(gg,hh);        
2029  //   ReadParBBneg(          Form("%s/BetheBloch.txt"               , pardir) );        adc[mm]= (0xFFF & tofl0->adc[gg][hh]); // EM, exclude warning bits
2030  //   ReadParBBpos(          Form("%s/BetheBloch_betagt1.txt"       , pardir) );      };      
2031  //   ReadParDesatBB(        Form("%s/desaturation_beta.txt"        , pardir) );    };
2032      
2033  // };  };
   
2034    
2035  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2036  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)
2037  {  {
2038      //
2039      ToFLevel2 tf;
2040      //  for (Int_t gg=0; gg<4;gg++){
2041      //    for (Int_t hh=0; hh<12;hh++){
2042      int mm = tf.GetPMTid(gg,hh);    
2043      adc[mm]=adce;
2044      
2045    };
2046    //------------------------------------------------------------------------
2047    void ToFdEdx::Process(UInt_t atime, Float_t betamean, Float_t *xtr_tof, Float_t *ytr_tof, Int_t exitat)
2048    {
2049      bool debug = false;
2050      if ( debug ) printf(" INSIDE TOFDEDX PROCESS \n");
2051    // the parameters should be already initialised by InitPar()    // the parameters should be already initialised by InitPar()
2052      //  printf(" in process \n");
   
2053    Clear();    Clear();
2054    
   
   
   //  Float_t betamean = fabs(trackTRK->GetToFTrack()->beta[12]);  
   
   if(betamean<0.05 || betamean>2){  
     for(int i=0;i<48;i++)INFOpmt[i]=1;  
   }  
   
2055   // define angle:     // define angle:  
2056    double dx   = xtr_tof[1] - xtr_tof[5];    double dx   = xtr_tof[1] - xtr_tof[5];
2057    double dy   = ytr_tof[0] - ytr_tof[4];    double dy   = ytr_tof[0] - ytr_tof[4];
2058    double dr   = sqrt(dx*dx+dy*dy);    double dr   = sqrt(dx*dx+dy*dy);
2059    double theta=atan(dr/76.81);    double theta=atan(dr/76.81);
2060      //
2061      if ( xtr_tof[1] > 99. ||  xtr_tof[5] > 99. || ytr_tof[0] > 99. ||  ytr_tof[4] > 99. ) theta = 0.;
2062      for (Int_t ii=0; ii<6; ii++){
2063    //  TArrayF adc;      if ( xtr_tof[ii] > 99. ) xtr_tof[ii] = 0.;
2064    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];  
     };        
2065    };    };
2066        //
2067        if ( debug ) printf(" theta %f \n",theta);
2068        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]);
2069        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]);
2070      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------
2071      
2072      int Aconn=conn[0];    // PMT 0,20,22,24
2073      int Bconn=conn[1];    // PMT 6,12,26,34
2074      int Cconn=conn[2];    // PMT 4,14,28,32
2075      int Dconn=conn[3];    // PMT 2,8,10,30
2076      int Econn=conn[4];    // PMT 42,43,44,47
2077      int Fconn=conn[5];    // PMT 7,19,23,27
2078      int Gconn=conn[6];    // PMT 3,11,25,33
2079      int Hconn=conn[7];    // PMT 1,9,13,21
2080      int Iconn=conn[8];    // PMT 5,29,31,35
2081      int Lconn=conn[9];    // PMT 37,40,45,46
2082      int Mconn=conn[10];    // PMT 15,16,17,18
2083      int Nconn=conn[11];    // PMT 36,38,39,41
2084      if( false ) cout << Gconn << Iconn << Lconn <<endl; // to avoid compilation warnings
2085        
2086      //  printf(" size %i \n",eDEDXpmt.GetSize());
2087    for( int ii=0; ii<48; ii++ ) {    for( int ii=0; ii<48; ii++ ) {
2088      if( adc[ii] >= PMTsat[ii]-5 )  continue;      //
2089      if( adc[ii] <= 0. )            continue;      //    eDEDXpmt.SetAt(-1.,ii);
2090          //    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]);
2091      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC      if ( debug ) printf("II %i adc %f \n",ii,adc[ii]);
2092      double adccorr = adcpC*fabs(cos(theta));  
2093        if( adc[ii] >= 4095. ){
2094           if(adccorr<=0.)           continue;        //      eDEDXpmt[ii] = 0.;
2095          eDEDXpmt->AddAt(0.,ii);
2096          if ( debug ) printf(" %i adc>4095 \n",ii);
2097          continue; // EMILIANO
2098        };
2099    
2100      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------      if( adc[ii] >= (PMTsat[ii]-5.) && adc[ii] < 4095. ){
2101          eDEDXpmt->AddAt(1000.,ii);
2102          if ( debug ) printf(" %i adc> pmtsat && adc<4095 \n",ii);
2103          continue; // EMILIANO
2104        };
2105    
2106      int Aconn=conn[0];    // PMT 0,20,22,24      if( adc[ii] <= 0. ) {
2107      int Bconn=conn[1];    // PMT 6,12,26,34        eDEDXpmt->AddAt(1500.,ii);
2108      int Cconn=conn[2];    // PMT 4,14,28,32        if ( debug ) printf(" %i adc<=0 \n",ii);
2109      int Dconn=conn[3];    // PMT 2,8,10,30        continue;
2110      int Econn=conn[4];    // PMT 42,43,44,47      };
2111      int Fconn=conn[5];    // PMT 7,19,23,27      //
2112      int Gconn=conn[6];    // PMT 3,11,25,33      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC
2113      int Hconn=conn[7];    // PMT 1,9,13,21      if ( exitat == 0 ){
2114      int Iconn=conn[8];    // PMT 5,29,31,35        eDEDXpmt->AddAt((Float_t)adcpC,ii);
2115      int Lconn=conn[9];    // PMT 37,40,45,46        continue;
2116      int Mconn=conn[10];    // PMT 15,16,17,18      }
2117      int Nconn=conn[11];    // PMT 36,38,39,41      //    printf(" e qua? \n");
2118    
2119        double adccorr = adcpC*fabs(cos(theta));    
2120        if ( debug ) printf(" adccorr %f \n",adccorr);
2121        if(adccorr<=0.){
2122          if ( debug ) printf(" %i adccorr<=0 \n",ii);
2123          //      eDEDXpmt->AddAt((Float_t)adcpC,ii);//?
2124          continue;
2125        }
2126        if ( exitat == 1 ){
2127          eDEDXpmt->AddAt((Float_t)adccorr,ii);
2128          continue;
2129        }
2130        //    printf(" e quo? \n");
2131    
2132      //    int standard=0;      //    int standard=0;
     if( false ) cout << Gconn << Iconn << Lconn <<endl;  
2133      int S115B_ok=0;      int S115B_ok=0;
2134      int S115B_break=0;      int S115B_break=0;
2135    
 //   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;  
 //     }  
2136      if(atime<1158720000)S115B_ok=1;      if(atime<1158720000)S115B_ok=1;
2137      else S115B_break=1;      else S115B_break=1;
2138    
2139    
2140   //------------------------------------------------------------------------      //------------------------------------------------------------------------
2141        //    printf(" e qui? \n");
2142  //---------------------------------------------------- Z reconstruction      //---------------------------------------------------- Z reconstruction
2143    
2144  double adcHe, adcnorm, adclin, dEdx, Zeta;      double adcHe, adcnorm, adclin, dEdx;//, Zeta; // EM GCC4.7
2145    
2146   adcHe=-2;      adcHe=-2;
2147   adcnorm=-2;      adcnorm=-2;
2148   adclin=-2;      adclin=-2;
2149   dEdx=-2;      dEdx=-2;
2150   Zeta=-2;      //    Zeta=-2;//EM GCC4.7
2151        Double_t correction = 1.;
   
 //  float ZetaH=-2;  
 //  float dEdxH=-2;  
   
 //  double day = (atime-1150000000)/84600;  
2152    
2153      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){
2154         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.675;        correction = 1.675;
2155      }      }
2156      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){
2157         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/2.482;        correction = 2.482;
2158      }      }
2159      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){
2160        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.464;        correction = 1.464;
2161      }      }
2162      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){
2163         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.995;        correction = 1.995;
2164      }      }
2165      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){
2166         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.273;        correction = 1.273;
2167      }      }
2168      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){
2169         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
2170      }      }
2171      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){
2172         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
2173      }      }
2174      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){
2175         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.018;        correction = 1.018;
2176      }      }
2177      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))){
2178        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!!!  
2179      }      }
2180      else if(S115B_break==1 && ii==9 && Hconn==1){      else if(S115B_break==1 && ii==9 && Hconn==1){
2181         adcHe   = (f_att5B( ytr_tof[0] ))/1.64;        correction = 1.64;
2182        }
2183        else correction = 1.;
2184        
2185        if( ii==9 && S115B_break==1 ){
2186          adcHe   = f_att5B( ytr_tof[0] )/correction;
2187        } else {
2188          adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof)/correction;
2189        };
2190        if(adcHe<=0){
2191          if ( debug ) printf(" %i adcHe<=0 \n",ii);
2192          //      eDEDXpmt->AddAt((Float_t)adccorr,ii); //?
2193          continue;
2194        }
2195        if ( exitat == 2 ){
2196          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt(36.*(Float_t)adccorr/adcHe,ii);
2197          else  adclin  = 4.*(Float_t)adccorr/adcHe;
2198          continue;
2199      }      }
     else  adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof);  
   
     if(adcHe<=0)   continue;  
2200    
2201      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);
2202      else adcnorm = f_pos( (parPos[ii]), adccorr);      else adcnorm = f_pos( (parPos[ii]), adccorr);
2203        if(adcnorm<=0){
2204      if(adcnorm<=0) continue;        if ( debug ) printf(" %i adcnorm<=0 \n",ii);
2205          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
2206          continue;
2207        }
2208        if ( debug ) printf(" adcnorm %f \n",adcnorm);
2209    
2210      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;
2211      else  adclin  = 4.*adcnorm/adcHe;      else  adclin  = 4.*adcnorm/adcHe;
2212        if ( debug ) printf(" adclin %f \n",adclin);
2213      if(adclin<=0)  continue;      if(adclin<=0){
2214          if ( debug ) printf(" %i adclin<=0 \n",ii);
2215          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
2216          continue;
2217        }
2218        if ( exitat == 3 ){
2219          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt((Float_t)adclin,ii);
2220          else  eDEDXpmt->AddAt((Float_t)adclin,ii);
2221          continue;
2222        }
2223        //
2224        if ( betamean > 99. ){
2225          //      eDEDXpmt.AddAt((Float_t)adclin,ii);
2226          eDEDXpmt->AddAt((Float_t)adclin,ii);
2227          //      printf(" AAPMT IS %i dedx is %f vector is %f \n",ii,adclin,eDEDXpmt[ii]);
2228          if ( debug ) printf(" %i betamean > 99 \n",ii);
2229          continue;
2230        };
2231        //
2232      double dEdxHe=-2;      double dEdxHe=-2;
2233      if(ii==9 && S115B_break==1){      if(ii==9 && S115B_break==1){
2234        if( betamean <1. ) dEdxHe = f_BB5B( betamean );        if( betamean <1. ) dEdxHe = f_BB5B( betamean );
# Line 1709  double adcHe, adcnorm, adclin, dEdx, Zet Line 2237  double adcHe, adcnorm, adclin, dEdx, Zet
2237        if( betamean <1. ) dEdxHe = f_BB( (parBBneg[ii]), betamean );        if( betamean <1. ) dEdxHe = f_BB( (parBBneg[ii]), betamean );
2238        else                       dEdxHe = parBBpos[ii];        else                       dEdxHe = parBBpos[ii];
2239      }      }
   
     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;  
2240            
2241      double zpdl=-1;      if ( debug ) printf(" dEdxHe %f \n",dEdxHe);
2242            
2243      if((j%2==0 || j==0) && eZpmt[j]!=-1 && eZpmt[j+1]!=-1){      if(dEdxHe<=0){
2244        zpdl=0.5*(eZpmt[j]+eZpmt[j+1]);        eDEDXpmt->AddAt((Float_t)adclin,ii);
2245      }else if((j%2==0 || j==0) && eZpmt[j]!=-1 && eZpmt[j+1]==-1){        if ( debug ) printf(" %i dEdxHe<=0 \n",ii);
2246        zpdl=eZpmt[j];        continue;
2247      }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];  
     }  
       
     if(jj%2==0 || jj==0)eDEDXpad[k]= (Float_t)dedxpdl;  
       
     if((jj%2==0 || jj==0)&&eDEDXpad[k]!=-1){  
       if(k>=0&&k<8)eDEDXlayer[0]=eDEDXpad[k];  
       if(k>=8&&k<14)eDEDXlayer[1]=eDEDXpad[k];  
       if(k>=14&&k<16)eDEDXlayer[2]=eDEDXpad[k];  
       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];  
     }  
2248    
2249      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 );
2250      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];  
2251    
2252      if(eDEDXlayer[2]!=-1&&eDEDXlayer[3]!=-1&&fabs(eDEDXlayer[2]-eDEDXlayer[3])<10)eDEDXplane[1]=0.5*(eDEDXlayer[2]+eDEDXlayer[3]);      if(dEdx<=0){
2253      else if(eDEDXlayer[2]!=-1&&eDEDXlayer[3]==-1)eDEDXplane[1]=eDEDXlayer[2];        eDEDXpmt->AddAt((Float_t)adclin,ii);
2254      else if(eDEDXlayer[3]!=-1&&eDEDXlayer[2]==-1)eDEDXplane[1]=eDEDXlayer[3];        if ( debug ) printf(" %i dEdx<=0 \n",ii);
2255          continue;
2256        };
2257    
2258      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);
2259      else if(eDEDXlayer[4]!=-1&&eDEDXlayer[5]==-1)eDEDXplane[2]=eDEDXlayer[4];      eDEDXpmt->AddAt((Float_t)dEdx,ii);
2260      else if(eDEDXlayer[5]!=-1&&eDEDXlayer[4]==-1)eDEDXplane[2]=eDEDXlayer[5];      //    eDEDXpmt.AddAt((Float_t)dEdx,ii);
2261    
2262    }      //    printf(" PMT IS %i dedx is %f vector is %f \n",ii,dEdx,eDEDXpmt[ii]);
     
2263    
2264      }  //end loop on 48 PMT
2265    
2266  };  };
2267    
2268    
2269  //------------------------------------------------------------------------  //------------------------------------------------------------------------
 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]);  
         
     }  
   }  
 }  
   
   
 //------------------------------------------------------------------------  
2270  void ToFdEdx::Define_PMTsat()  void ToFdEdx::Define_PMTsat()
2271  {  {
2272    Float_t  sat[48] = {    Float_t  sat[48] = {
# Line 1861  void ToFdEdx::Define_PMTsat() Line 2280  void ToFdEdx::Define_PMTsat()
2280  }  }
2281    
2282  //------------------------------------------------------------------------  //------------------------------------------------------------------------
 // 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);  
 // }  
   
 //------------------------------------------------------------------------  
2283  void ToFdEdx::ReadParBBpos( const char *fname )  void ToFdEdx::ReadParBBpos( const char *fname )
2284  {  {
2285    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2286    parBBpos.Set(48);    parBBpos.Set(48);
2287    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2288    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
# Line 1900  void ToFdEdx::ReadParBBpos( const char * Line 2298  void ToFdEdx::ReadParBBpos( const char *
2298  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2299  void ToFdEdx::ReadParDesatBB( const char *fname )  void ToFdEdx::ReadParDesatBB( const char *fname )
2300  {  {
2301    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2302    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2303    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2304      int   tid=0;      int   tid=0;
# Line 1917  void ToFdEdx::ReadParDesatBB( const char Line 2315  void ToFdEdx::ReadParDesatBB( const char
2315  void ToFdEdx::ReadParBBneg( const char *fname )  void ToFdEdx::ReadParBBneg( const char *fname )
2316    
2317  {  {
2318    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2319    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2320    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2321      int   tid=0;      int   tid=0;
# Line 1932  void ToFdEdx::ReadParBBneg( const char * Line 2330  void ToFdEdx::ReadParBBneg( const char *
2330  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2331  void ToFdEdx::ReadParPos( const char *fname )  void ToFdEdx::ReadParPos( const char *fname )
2332  {  {
2333    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2334    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2335    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2336      int   tid=0;      int   tid=0;
# Line 1947  void ToFdEdx::ReadParPos( const char *fn Line 2345  void ToFdEdx::ReadParPos( const char *fn
2345  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2346  void ToFdEdx::ReadParAtt( const char *fname )  void ToFdEdx::ReadParAtt( const char *fname )
2347  {  {
2348    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2349    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2350    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2351      int   tid=0;      int   tid=0;
# Line 2020  float ToFdEdx::Get_adc_he( int id, float Line 2418  float ToFdEdx::Get_adc_he( int id, float
2418    //             pl_x - coord x of the tof plane    //             pl_x - coord x of the tof plane
2419    //             pl_y - coord y    //             pl_y - coord y
2420    
2421     adc_he = 0;    adc_he = 0;
2422    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)] );
2423    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)] );
2424    return adc_he;    return adc_he;
# Line 2055  double ToFdEdx::f_desatBB5B( float x ) Line 2453  double ToFdEdx::f_desatBB5B( float x )
2453      0.009*x*x;      0.009*x*x;
2454  }  }
2455    
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.41

  ViewVC Help
Powered by ViewVC 1.1.23