/[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.36 by mocchiut, Thu Apr 12 12:27:10 2012 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 236  Int_t ToFLevel2::GetNHitPaddles(Int_t pl Line 260  Int_t ToFLevel2::GetNHitPaddles(Int_t pl
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(Int_t notrack, Int_t plane, Int_t adcfl){
263      //  printf("fiffi\n");
264    Float_t dedx = 0.;    Float_t dedx = 0.;
265    Float_t PadEdx =0.;    Float_t PadEdx =0.;
266    Int_t SatWarning;    Int_t SatWarning;
# Line 245  Float_t ToFLevel2::GetdEdx(Int_t notrack Line 269  Float_t ToFLevel2::GetdEdx(Int_t notrack
269    ToFTrkVar *trk = GetToFTrkVar(notrack);    ToFTrkVar *trk = GetToFTrkVar(notrack);
270    if(!trk) return 0; //ELENA    if(!trk) return 0; //ELENA
271    //    //
272    for (Int_t ii=0; ii<GetNPaddle(plane); ii++){    if ( trk->trkseqno == -1 ){ //standalone, only paddles along the track, or about...
273      Int_t paddleid=ii;      //    printf("ciccio\n");
274      pad = GetPaddleid(plane,paddleid);      Float_t xleft=0;
275      GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);      Float_t xright=0;
276      dedx += PadEdx;      Float_t yleft=0;
277    };      Float_t yright=0;
278        Float_t xtof_temp[6]={100.,100.,100.,100.,100.,100.};
279        Float_t ytof_temp[6]={100.,100.,100.,100.,100.,100.};
280        ToFTrkVar *t_tof = trk;
281        
282        xtof_temp[0]=t_tof->xtofpos[0];
283        ytof_temp[0]=t_tof->ytofpos[0];
284        xtof_temp[1]=t_tof->xtofpos[0];
285        ytof_temp[1]=t_tof->ytofpos[0];
286    
287        xtof_temp[2]=t_tof->xtofpos[1];
288        ytof_temp[2]=t_tof->ytofpos[1];
289        xtof_temp[3]=t_tof->xtofpos[1];
290        ytof_temp[3]=t_tof->ytofpos[1];
291    
292        xtof_temp[4]=t_tof->xtofpos[2];
293        ytof_temp[4]=t_tof->ytofpos[2];
294        xtof_temp[5]=t_tof->xtofpos[2];
295        ytof_temp[5]=t_tof->ytofpos[2];
296    
297        if(t_tof->xtofpos[0]<100. && t_tof->ytofpos[0]<100.){
298          xtof_temp[1]=t_tof->xtofpos[0];
299          ytof_temp[0]=t_tof->ytofpos[0];
300        }else if(t_tof->xtofpos[0]>=100. && t_tof->ytofpos[0]<100.){
301          ytof_temp[0]=t_tof->ytofpos[0];
302          this->GetPaddleGeometry(0,(Int_t)log2(this->tof_j_flag[0]),xleft, xright, yleft, yright);
303          xtof_temp[1]=xleft+2.55;
304        }else if(t_tof->ytofpos[0]>=100. && t_tof->xtofpos[0]<100.){
305          xtof_temp[1]=t_tof->xtofpos[0];
306          this->GetPaddleGeometry(1,(Int_t)log2(this->tof_j_flag[1]),xleft, xright, yleft, yright);
307          ytof_temp[0]=yleft+2.75;
308        }
309        
310        if(t_tof->xtofpos[1]<100. && t_tof->ytofpos[1]<100.){
311          xtof_temp[2]=t_tof->xtofpos[1];
312          ytof_temp[3]=t_tof->ytofpos[1];
313        }else if(t_tof->xtofpos[1]>=100. && t_tof->ytofpos[1]<100.){
314          ytof_temp[3]=t_tof->ytofpos[1];
315          this->GetPaddleGeometry(3,(Int_t)log2(this->tof_j_flag[3]),xleft, xright, yleft, yright);
316          xtof_temp[2]=xleft+4.5;
317        }else if(t_tof->ytofpos[1]>=100. && t_tof->xtofpos[1]<100.){
318          xtof_temp[2]=t_tof->xtofpos[1];
319          this->GetPaddleGeometry(2,(Int_t)log2(this->tof_j_flag[2]),xleft, xright, yleft, yright);
320          ytof_temp[3]=yleft+3.75;
321        }
322        
323        if(t_tof->xtofpos[2]<100. && t_tof->ytofpos[2]<100.){
324          xtof_temp[5]=t_tof->xtofpos[2];
325          ytof_temp[4]=t_tof->ytofpos[2];
326        }else if(t_tof->xtofpos[2]>=100. && t_tof->ytofpos[2]<100.){
327          ytof_temp[4]=t_tof->ytofpos[2];
328          this->GetPaddleGeometry(4,(Int_t)log2(this->tof_j_flag[4]),xleft, xright, yleft, yright);
329          xtof_temp[5]=xleft+3;
330        }else if(t_tof->ytofpos[2]>=100. && t_tof->xtofpos[2]<100.){
331          xtof_temp[5]=t_tof->xtofpos[2];
332          this->GetPaddleGeometry(5,(Int_t)log2(this->tof_j_flag[5]),xleft, xright, yleft, yright);
333          ytof_temp[4]=yleft+2.5;
334        }
335    
336        if ( (xtof_temp[0])> 17.85 && fabs(xtof_temp[0])<17.85+4. ) xtof_temp[0] =17.84;
337        if ( (xtof_temp[1])> 17.85 && fabs(xtof_temp[1])<17.85+4. ) xtof_temp[1] =17.84;
338        if ( (ytof_temp[0])> 13.75 && fabs(ytof_temp[0])<13.75+4. ) ytof_temp[0] =13.74;
339        if ( (ytof_temp[1])> 13.75 && fabs(ytof_temp[1])<13.75+4. ) ytof_temp[1] =13.74;
340        if ( (xtof_temp[0])< -17.85 && fabs(xtof_temp[0])>-(17.85+4.) ) xtof_temp[0] =-17.84;
341        if ( (xtof_temp[1])< -17.85 && fabs(xtof_temp[1])>-(17.85+4.) ) xtof_temp[1] =-17.84;
342        if ( (ytof_temp[0])< -13.75 && fabs(ytof_temp[0])>-(13.75+4.) ) ytof_temp[0] =-13.74;
343        if ( (ytof_temp[1])< -13.75 && fabs(ytof_temp[1])>-(13.75+4.) ) ytof_temp[1] =-13.74;
344    
345        if ( (xtof_temp[2])> 4.5 && (xtof_temp[2])<4.5+4. ) xtof_temp[2] =4.4;
346        if ( (xtof_temp[3])> 4.45 && (xtof_temp[3])<4.5+4. ) xtof_temp[3] =4.4;
347        if ( (ytof_temp[2])> 3.75 && (ytof_temp[2])<3.75+4. ) ytof_temp[2] =3.74;
348        if ( (ytof_temp[3])> 3.75 && (ytof_temp[3])<3.75+4. ) ytof_temp[3] =3.74;
349        if ( (xtof_temp[2])< -4.5 && (xtof_temp[2])>-(4.5+4.) ) xtof_temp[2] =-4.4;
350        if ( (xtof_temp[3])< -4.45 && (xtof_temp[3])>-(4.5+4.) ) xtof_temp[3] =-4.4;
351        if ( (ytof_temp[2])< -3.75 && (ytof_temp[2])>-(3.75+4.) ) ytof_temp[2] =-3.74;
352        if ( (ytof_temp[3])< -3.75 && (ytof_temp[3])>-(3.75+4.) ) ytof_temp[3] =-3.74;
353    
354        if ( (xtof_temp[4])> 6. && (xtof_temp[4])<6.+4. ) xtof_temp[2] =5.9;
355        if ( (xtof_temp[5])> 6. && (xtof_temp[5])<6.+4. ) xtof_temp[3] =5.9;
356        if ( (ytof_temp[4])> 5. && (ytof_temp[4])<5.+4. ) ytof_temp[2] =4.9;
357        if ( (ytof_temp[5])> 5. && (ytof_temp[5])<5.+4. ) ytof_temp[3] =4.9;
358        if ( (xtof_temp[4])< -6. && (xtof_temp[4])>-(6.+4.) ) xtof_temp[2] =-5.9;
359        if ( (xtof_temp[5])< -6. && (xtof_temp[5])>-(6.+4.) ) xtof_temp[3] =-5.9;
360        if ( (ytof_temp[4])< -5. && (ytof_temp[4])>-(5.+4.) ) ytof_temp[2] =-4.9;
361        if ( (ytof_temp[5])< -5. && (ytof_temp[5])>-(5.+4.) ) ytof_temp[3] =-4.9;
362    
363    
364        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
365          Int_t paddleid=ii;
366          pad = GetPaddleid(plane,paddleid);
367          Int_t IpaddleT=-1;
368          IpaddleT=this->GetPaddleIdOfTrack(xtof_temp[plane],ytof_temp[plane], plane,0.0);
369    //      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]);
370          //      if ( IpaddleT == paddleid || IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
371          if ( IpaddleT == paddleid || GetTrueNHitPaddles(plane) == 1 ){
372            //IpaddleT-1 == paddleid || IpaddleT+1 == paddleid ){
373            GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);
374            dedx += PadEdx;
375          }
376        };
377      } else {
378        for (Int_t ii=0; ii<GetNPaddle(plane); ii++){
379          Int_t paddleid=ii;
380          pad = GetPaddleid(plane,paddleid);
381          GetdEdxPaddle(notrack, pad, adcfl, PadEdx, SatWarning);
382          dedx += PadEdx;
383    //      printf("TTT %i %i %f\n",paddleid,plane,PadEdx);
384        };
385      }
386    //    //
387    return(dedx);    return(dedx);
388  };  };
# Line 404  void ToFLevel2::GetPMTIndex(Int_t ind, I Line 536  void ToFLevel2::GetPMTIndex(Int_t ind, I
536   */   */
537  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){
538    
539  /*    /*
540  Float_t  PMTsat[48] = {      Float_t  PMTsat[48] = {
541  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,
542  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,
543  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,
544  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,
545  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,
546  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 } ;
547  */    */
548    
549  // new values from Napoli dec 2008    // new values from Napoli dec 2008
550  Float_t  PMTsat[48] = {    Float_t  PMTsat[48] = {
551  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,
552  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,
553  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,
554  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,
555  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,
556  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 };
557    
558  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
559    
560    
561    PadEdx = 0.;    PadEdx = 0.;
562  //  SatWarning = 1000;    //  SatWarning = 1000;
563    SatWarning = 0;   // 0=good, increase for each bad PMT    SatWarning = 0;   // 0=good, increase for each bad PMT
564    
565    Float_t dEdx[48] = {0};    Float_t dEdx[48] = {0};
# Line 474  for (Int_t i=0; i<48;i++) PMTsat[i] = PM Line 606  for (Int_t i=0; i<48;i++) PMTsat[i] = PM
606    }    }
607    
608    
609  //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version    //  if( adcraw[pmtleft] >3000 || adcraw[pmtright] >3000)SatWarning=1;  //old version
610    
611  // Increase SatWarning Counter for each PMT>Sat    // Increase SatWarning Counter for each PMT>Sat
612    if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;      if( adcraw[pmtleft] > PMTsat[pmtleft])SatWarning++;  
613    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;    if( adcraw[pmtright] > PMTsat[pmtright])SatWarning++;
614    
615  // if ADC  > sat set dEdx=1000    // if ADC  > sat set dEdx=1000
616    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;    if( adcraw[pmtleft] > PMTsat[pmtleft]) dEdx[pmtleft] = 1000.;
617    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;    if( adcraw[pmtright] > PMTsat[pmtright]) dEdx[pmtright] = 1000. ;
618    
619  // 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
620    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;
621    if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];      if(dEdx[pmtleft]==1000 && dEdx[pmtright]<1000) PadEdx = dEdx[pmtright];  
622    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];    if(dEdx[pmtleft]<1000 && dEdx[pmtright]==1000) PadEdx = dEdx[pmtleft];
# Line 1149  Int_t ToFLevel2::Process(TrkLevel2 *trk, Line 1281  Int_t ToFLevel2::Process(TrkLevel2 *trk,
1281    //    //
1282    // 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
1283    //    //
1284      printf("\n\n\n ERROR: NOT IMPLEMENTED ANYMORE, write Emiliano if you need this method (Emiliano.Mocchiutti@ts.infn.it) \n\n\n");
1285      return(-1);
1286      //   //
1287      //   // structures to communicate with F77
1288    //    //   //
1289    // structures to communicate with F77    //   extern struct ToFInput  tofinput_;
1290    //  //   extern struct ToFOutput tofoutput_;
1291    extern struct ToFInput  tofinput_;  //   //
1292    extern struct ToFOutput tofoutput_;  //   // DB connection
1293    //  //   //
1294    // DB connection  //   TString host;
1295    //  //   TString user;
1296    TString host;  //   TString psw;
1297    TString user;  //   const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");
1298    TString psw;  //   const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");
1299    const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");  //   const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");
1300    const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");  //   if ( !pamdbhost ) pamdbhost = "";
1301    const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");  //   if ( !pamdbuser ) pamdbuser = "";
1302    if ( !pamdbhost ) pamdbhost = "";  //   if ( !pamdbpsw ) pamdbpsw = "";
1303    if ( !pamdbuser ) pamdbuser = "";  //   if ( strcmp(pamdbhost,"") ) host = pamdbhost;
1304    if ( !pamdbpsw ) pamdbpsw = "";  //   if ( strcmp(pamdbuser,"") ) user = pamdbuser;
1305    if ( strcmp(pamdbhost,"") ) host = pamdbhost;  //   if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;
1306    if ( strcmp(pamdbuser,"") ) user = pamdbuser;  //   //
1307    if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;  //   //
1308    //  //   TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
1309    //  //   if ( !dbc->IsConnected() ) return 1;
1310    TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());  //   stringstream myquery;
1311    if ( !dbc->IsConnected() ) return 1;  //   myquery.str("");
1312    stringstream myquery;  //   myquery << "SET time_zone='+0:00'";
1313    myquery.str("");  //   dbc->Query(myquery.str().c_str());
1314    myquery << "SET time_zone='+0:00'";  //   GL_PARAM *glparam = new GL_PARAM();
1315    dbc->Query(myquery.str().c_str());  //   glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table
1316    GL_PARAM *glparam = new GL_PARAM();  //   trk->LoadField(glparam->PATH+glparam->NAME);
1317    glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table  //   //
1318    trk->LoadField(glparam->PATH+glparam->NAME);  //   Bool_t defcal = true;
1319    //  //   Int_t error=glparam->Query_GL_PARAM(run->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table
1320    Bool_t defcal = true;  //   if ( error<0 ) {
1321    Int_t error=glparam->Query_GL_PARAM(run->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table  //     return(1);
1322    if ( error<0 ) {  //   };
1323      return(1);  //   printf(" Reading ToF parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());
1324    };  //   if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false;
1325    printf(" Reading ToF parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());  //   //
1326    if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false;  //   Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length();
1327    //  //   rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen);
1328    Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length();  //   //
1329    rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen);  //   Int_t adc[4][12];
1330    //  //   Int_t tdc[4][12];
1331    Int_t adc[4][12];  //   Float_t tdcc[4][12];
1332    Int_t tdc[4][12];  //   //
1333    Float_t tdcc[4][12];  //   // process tof data
1334    //  //   //
1335    // process tof data  //   for (Int_t hh=0; hh<12;hh++){
1336    //  //     for (Int_t kk=0; kk<4;kk++){
1337    for (Int_t hh=0; hh<12;hh++){  //            adc[kk][hh] = 4095;
1338      for (Int_t kk=0; kk<4;kk++){  //            tdc[kk][hh] = 4095;
1339             adc[kk][hh] = 4095;  //            tdcc[kk][hh] = 4095.;
1340             tdc[kk][hh] = 4095;  //            tofinput_.adc[hh][kk] = 4095;
1341             tdcc[kk][hh] = 4095.;  //            tofinput_.tdc[hh][kk] = 4095;
1342             tofinput_.adc[hh][kk] = 4095;  //     };
1343             tofinput_.tdc[hh][kk] = 4095;  //   };
1344      };  //   Int_t ntrkentry = 0;
1345    };  //   Int_t npmtentry = 0;
1346    Int_t ntrkentry = 0;  //   Int_t gg = 0;
1347    Int_t npmtentry = 0;  //   Int_t hh = 0;
1348    Int_t gg = 0;  //   Int_t adcf[48];
1349    Int_t hh = 0;  //   memset(adcf, 0, 48*sizeof(Int_t));
1350    Int_t adcf[48];  //   Int_t tdcf[48];
1351    memset(adcf, 0, 48*sizeof(Int_t));  //   memset(tdcf, 0, 48*sizeof(Int_t));
1352    Int_t tdcf[48];  //   for (Int_t pm=0; pm < this->ntrk() ; pm++){
1353    memset(tdcf, 0, 48*sizeof(Int_t));  //      ToFTrkVar *ttf = this->GetToFTrkVar(pm);
1354    for (Int_t pm=0; pm < this->ntrk() ; pm++){  //      for ( Int_t nc=0; nc < ttf->npmttdc; nc++){
1355       ToFTrkVar *ttf = this->GetToFTrkVar(pm);  //             if ( (ttf->tdcflag).At(nc) != 0 ) tdcf[(ttf->pmttdc).At(nc)] = 1;
1356       for ( Int_t nc=0; nc < ttf->npmttdc; nc++){  //      };
1357              if ( (ttf->tdcflag).At(nc) != 0 ) tdcf[(ttf->pmttdc).At(nc)] = 1;  //      for ( Int_t nc=0; nc < ttf->npmtadc; nc++){
1358       };  //             if ( (ttf->adcflag).At(nc) != 0 ) adcf[(ttf->pmtadc).At(nc)] = 1;
1359       for ( Int_t nc=0; nc < ttf->npmtadc; nc++){  //      };
1360              if ( (ttf->adcflag).At(nc) != 0 ) adcf[(ttf->pmtadc).At(nc)] = 1;  //   };
1361       };  //   //
1362    };  //   for (Int_t pm=0; pm < this->npmt() ; pm++){
1363    //  //      ToFPMT *pmt = this->GetToFPMT(pm);
1364    for (Int_t pm=0; pm < this->npmt() ; pm++){  //      this->GetPMTIndex(pmt->pmt_id, gg, hh);
1365       ToFPMT *pmt = this->GetToFPMT(pm);  //      if ( adcf[pmt->pmt_id] == 0 ){
1366       this->GetPMTIndex(pmt->pmt_id, gg, hh);  //              tofinput_.adc[gg][hh] = (int)pmt->adc;
1367       if ( adcf[pmt->pmt_id] == 0 ){  //              adc[hh][gg] = (int)pmt->adc;
1368               tofinput_.adc[gg][hh] = (int)pmt->adc;  //      };
1369               adc[hh][gg] = (int)pmt->adc;  //      if ( tdcf[pmt->pmt_id] == 0 ){
1370       };  //              tofinput_.tdc[gg][hh] = (int)pmt->tdc;
1371       if ( tdcf[pmt->pmt_id] == 0 ){  //              tdc[hh][gg] = (int)pmt->tdc;
1372               tofinput_.tdc[gg][hh] = (int)pmt->tdc;  //      };
1373               tdc[hh][gg] = (int)pmt->tdc;  //      tdcc[hh][gg] = (float)pmt->tdc_tw;
1374       };  //      // Int_t pppid = this->GetPMTid(hh,gg);
1375       tdcc[hh][gg] = (float)pmt->tdc_tw;  //      //      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);
1376       // Int_t pppid = this->GetPMTid(hh,gg);  //   };
1377       //      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);  //   //
1378    };  //   Int_t unpackError = this->unpackError;
1379    //  //   //
1380    Int_t unpackError = this->unpackError;  //   for (Int_t hh=0; hh<5;hh++){
1381    //  //      tofinput_.patterntrig[hh]=trg->patterntrig[hh];
1382    for (Int_t hh=0; hh<5;hh++){  //   };
1383       tofinput_.patterntrig[hh]=trg->patterntrig[hh];  //   //
1384    };  //   this->Clear();
1385    //  //   //
1386    this->Clear();  //       Int_t pmt_id = 0;
1387    //  //       ToFPMT *t_pmt = new ToFPMT();
1388        Int_t pmt_id = 0;  //       if(!(this->PMT)) this->PMT = new TClonesArray("ToFPMT",12); //ELENA
1389        ToFPMT *t_pmt = new ToFPMT();  //       TClonesArray &tpmt = *this->PMT;
1390        if(!(this->PMT)) this->PMT = new TClonesArray("ToFPMT",12); //ELENA  //       ToFTrkVar *t_tof = new ToFTrkVar();
1391        TClonesArray &tpmt = *this->PMT;  //       if(!(this->ToFTrk)) this->ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA
1392        ToFTrkVar *t_tof = new ToFTrkVar();  //       TClonesArray &t = *this->ToFTrk;
1393        if(!(this->ToFTrk)) this->ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA  //       //
1394        TClonesArray &t = *this->ToFTrk;  //       //
1395        //  //       // Here we have calibrated data, ready to be passed to the FORTRAN routine which will extract common and track-related  variables.
1396        //  //       //
1397        // Here we have calibrated data, ready to be passed to the FORTRAN routine which will extract common and track-related  variables.  //       npmtentry = 0;
1398        //  //       //
1399        npmtentry = 0;  //       ntrkentry = 0;
1400        //  //       //
1401        ntrkentry = 0;  //       // Calculate tracks informations from ToF alone
1402        //  //       //
1403        // Calculate tracks informations from ToF alone  //       tofl2com();
1404        //  //       //
1405        tofl2com();  //       memcpy(this->tof_j_flag,tofoutput_.tof_j_flag,6*sizeof(Int_t));
1406        //  //       //
1407        memcpy(this->tof_j_flag,tofoutput_.tof_j_flag,6*sizeof(Int_t));  //       t_tof->trkseqno = -1;
1408        //  //       //
1409        t_tof->trkseqno = -1;  //       // and now we must copy from the output structure to the level2 class:
1410        //  //       //
1411        // and now we must copy from the output structure to the level2 class:  //       t_tof->npmttdc = 0;
1412        //  //       //
1413        t_tof->npmttdc = 0;  //       for (Int_t hh=0; hh<12;hh++){
1414        //  //         for (Int_t kk=0; kk<4;kk++){
1415        for (Int_t hh=0; hh<12;hh++){  //           if ( tofoutput_.tofmask[hh][kk] != 0 ){
1416          for (Int_t kk=0; kk<4;kk++){  //             pmt_id = this->GetPMTid(kk,hh);
1417            if ( tofoutput_.tofmask[hh][kk] != 0 ){  //             t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1418              pmt_id = this->GetPMTid(kk,hh);  //             t_tof->tdcflag.AddAt(tofoutput_.tdcflagtof[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1419              t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);  //             t_tof->npmttdc++;
1420              t_tof->tdcflag.AddAt(tofoutput_.tdcflagtof[hh][kk],t_tof->npmttdc); // gf: Jan 09/07  //           };
1421              t_tof->npmttdc++;  //         };
1422            };  //       };
1423          };  //       for (Int_t kk=0; kk<13;kk++){
1424        };  //         t_tof->beta[kk] = tofoutput_.betatof_a[kk];
1425        for (Int_t kk=0; kk<13;kk++){  //       }
1426          t_tof->beta[kk] = tofoutput_.betatof_a[kk];  //       //
1427        }  //       t_tof->npmtadc = 0;
1428        //  //       for (Int_t hh=0; hh<12;hh++){
1429        t_tof->npmtadc = 0;  //         for (Int_t kk=0; kk<4;kk++){
1430        for (Int_t hh=0; hh<12;hh++){  //           if ( tofoutput_.adctof_c[hh][kk] < 1000 ){
1431          for (Int_t kk=0; kk<4;kk++){  //             t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);
1432            if ( tofoutput_.adctof_c[hh][kk] < 1000 ){  //             pmt_id = this->GetPMTid(kk,hh);
1433              t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);  //             t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1434              pmt_id = this->GetPMTid(kk,hh);  //             t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1435              t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);  //             t_tof->npmtadc++;
1436              t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07  //           };
1437              t_tof->npmtadc++;  //         };
1438            };  //       };
1439          };  //       //
1440        };  //       memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1441        //  //       memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1442        memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));  //       memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1443        memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));  //       memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));
1444        memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));  //       //
1445        memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));  //       new(t[ntrkentry]) ToFTrkVar(*t_tof);
1446        //  //       ntrkentry++;
1447        new(t[ntrkentry]) ToFTrkVar(*t_tof);  //       t_tof->Clear();
1448        ntrkentry++;  //       //
1449        t_tof->Clear();  //       //
1450        //  //       //
1451        //  //       t_pmt->Clear();
1452        //  //       //
1453        t_pmt->Clear();  //       for (Int_t hh=0; hh<12;hh++){
1454        //  //         for (Int_t kk=0; kk<4;kk++){
1455        for (Int_t hh=0; hh<12;hh++){  //          // new WM
1456          for (Int_t kk=0; kk<4;kk++){  //           if ( tofoutput_.tdc_c[hh][kk] < 4095 || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){
1457           // new WM  // //          if ( tdcc[kk][hh] < 4095. || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){
1458            if ( tofoutput_.tdc_c[hh][kk] < 4095 || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){  //             //
1459  //          if ( tdcc[kk][hh] < 4095. || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){  //             t_pmt->pmt_id = this->GetPMTid(kk,hh);
1460              //  //             t_pmt->tdc_tw = tofoutput_.tdc_c[hh][kk];
1461              t_pmt->pmt_id = this->GetPMTid(kk,hh);  //             t_pmt->adc = (Float_t)adc[kk][hh];
1462              t_pmt->tdc_tw = tofoutput_.tdc_c[hh][kk];  //             t_pmt->tdc = (Float_t)tdc[kk][hh];
1463              t_pmt->adc = (Float_t)adc[kk][hh];  //             //
1464              t_pmt->tdc = (Float_t)tdc[kk][hh];  //             new(tpmt[npmtentry]) ToFPMT(*t_pmt);
1465              //  //             npmtentry++;
1466              new(tpmt[npmtentry]) ToFPMT(*t_pmt);  //             t_pmt->Clear();
1467              npmtentry++;  //           };
1468              t_pmt->Clear();  //         };
1469            };  //       };
1470          };  //       //
1471        };  //       // Calculate track-related variables
1472        //  //       //
1473        // Calculate track-related variables  //       if ( trk->ntrk() > 0 ){
1474        //  //         //
1475        if ( trk->ntrk() > 0 ){  //         // We have at least one track
1476          //  //         //
1477          // We have at least one track  //         //
1478          //  //         // Run over tracks
1479          //  //         //
1480          // Run over tracks  //         for(Int_t nt=0; nt < trk->ntrk(); nt++){
1481          //  //           //
1482          for(Int_t nt=0; nt < trk->ntrk(); nt++){  //           TrkTrack *ptt = trk->GetStoredTrack(nt);
1483            //  //           //
1484            TrkTrack *ptt = trk->GetStoredTrack(nt);  //           // Copy the alpha vector in the input structure
1485            //  //           //
1486            // Copy the alpha vector in the input structure  //           for (Int_t e = 0; e < 5 ; e++){
1487            //  //             tofinput_.al_pp[e] = ptt->al[e];
1488            for (Int_t e = 0; e < 5 ; e++){  //           };
1489              tofinput_.al_pp[e] = ptt->al[e];  //           //
1490            };  //           // Get tracker related variables for this track
1491            //  //           //
1492            // Get tracker related variables for this track  //           toftrk();
1493            //  //           //
1494            toftrk();  //           // Copy values in the class from the structure (we need to use a temporary class to store variables).
1495            //  //           //
1496            // Copy values in the class from the structure (we need to use a temporary class to store variables).  //           t_tof->npmttdc = 0;
1497            //  //           for (Int_t hh=0; hh<12;hh++){
1498            t_tof->npmttdc = 0;  //             for (Int_t kk=0; kk<4;kk++){
1499            for (Int_t hh=0; hh<12;hh++){  //               if ( tofoutput_.tofmask[hh][kk] != 0 ){
1500              for (Int_t kk=0; kk<4;kk++){  //                 pmt_id = this->GetPMTid(kk,hh);
1501                if ( tofoutput_.tofmask[hh][kk] != 0 ){  //                 t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1502                  pmt_id = this->GetPMTid(kk,hh);  //                 t_tof->tdcflag.AddAt(tofoutput_.tdcflag[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1503                  t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);  //                 t_tof->npmttdc++;
1504                  t_tof->tdcflag.AddAt(tofoutput_.tdcflag[hh][kk],t_tof->npmttdc); // gf: Jan 09/07  //               };
1505                  t_tof->npmttdc++;  //             };
1506                };  //           };
1507              };  //           for (Int_t kk=0; kk<13;kk++){
1508            };  //             t_tof->beta[kk] = tofoutput_.beta_a[kk];
1509            for (Int_t kk=0; kk<13;kk++){  //           };
1510              t_tof->beta[kk] = tofoutput_.beta_a[kk];  //           //
1511            };  //           t_tof->npmtadc = 0;
1512            //  //           for (Int_t hh=0; hh<12;hh++){
1513            t_tof->npmtadc = 0;  //             for (Int_t kk=0; kk<4;kk++){
1514            for (Int_t hh=0; hh<12;hh++){  //               if ( tofoutput_.adc_c[hh][kk] < 1000 ){
1515              for (Int_t kk=0; kk<4;kk++){  //                 t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);
1516                if ( tofoutput_.adc_c[hh][kk] < 1000 ){  //                 pmt_id = this->GetPMTid(kk,hh);
1517                  t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);  //                 t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1518                  pmt_id = this->GetPMTid(kk,hh);  //                 t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1519                  t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);  //                 t_tof->npmtadc++;
1520                  t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07  //               };
1521                  t_tof->npmtadc++;  //             };
1522                };  //           };
1523              };  //           //
1524            };  //           memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1525            //  //           memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1526            memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));  //           memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1527            memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));  //           memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));
1528            memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));  //           //
1529            memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));  //           // Store the tracker track number in order to be sure to have shyncronized data during analysis
1530            //  //           //
1531            // Store the tracker track number in order to be sure to have shyncronized data during analysis  //           t_tof->trkseqno = nt;
1532            //  //           //
1533            t_tof->trkseqno = nt;  //           // create a new object for this event with track-related variables
1534            //  //           //
1535            // create a new object for this event with track-related variables  //           new(t[ntrkentry]) ToFTrkVar(*t_tof);
1536            //  //           ntrkentry++;
1537            new(t[ntrkentry]) ToFTrkVar(*t_tof);  //           t_tof->Clear();
1538            ntrkentry++;  //           //
1539            t_tof->Clear();  //         }; // loop on all the tracks
1540            //  //       //
1541          }; // loop on all the tracks  //       this->unpackError = unpackError;
1542        //  //       if ( defcal ){
1543        this->unpackError = unpackError;  //         this->default_calib = 1;
1544        if ( defcal ){  //       } else {
1545          this->default_calib = 1;  //         this->default_calib = 0;
1546        } else {  //       };
1547          this->default_calib = 0;  //};
1548        };  //  return(0);
1549   };  }
1550    
1551    bool ToFLevel2::bit(int decimal, char pos){
1552      return( (decimal>>pos)%2 );
1553    return(0);  }
1554    
1555    bool ToFLevel2::checkPMT(TString givenpmt){
1556      TClonesArray* Pmt = this->PMT;
1557      //  printf(" ou %s entries %i \n",givenpmt.Data(),Pmt->GetEntries());
1558      for(int i=0; i<Pmt->GetEntries(); i++) {  
1559        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1560        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1561        //    printf(" name %s \n",pmtname.Data());
1562        if ( !strcmp(pmtname.Data(),givenpmt.Data()) )
1563          return true;
1564      }
1565      //  printf(" PMT %s missing \n",givenpmt.Data());
1566      return false;
1567    }
1568    
1569    bool ToFLevel2::checkPMTpatternPMThit(TrigLevel2 *trg, int &pmtpattern, int &pmtnosignal){
1570      UInt_t *patterntrig = trg->patterntrig;
1571      pmtpattern = 0;
1572      pmtnosignal = 0;
1573      bool good = true;
1574      //S3
1575      if ( this->bit(patterntrig[2],0) ){ pmtpattern++;  if ( !this->checkPMT("S31_1A")){ pmtnosignal++; good = false;}}
1576      if ( this->bit(patterntrig[2],1) ){ pmtpattern++;  if ( !this->checkPMT("S31_2A")){ pmtnosignal++; good = false;}}
1577      if ( this->bit(patterntrig[2],2) ){ pmtpattern++;  if ( !this->checkPMT("S31_3A")){ pmtnosignal++; good = false;}}
1578      if ( this->bit(patterntrig[2],3) ){ pmtpattern++;  if ( !this->checkPMT("S31_1B")){ pmtnosignal++; good = false;}}
1579      if ( this->bit(patterntrig[2],4) ){ pmtpattern++;  if ( !this->checkPMT("S31_2B")){ pmtnosignal++; good = false;}}
1580      if ( this->bit(patterntrig[2],5) ){ pmtpattern++;  if ( !this->checkPMT("S31_3B")){ pmtnosignal++; good = false;}}      
1581      if ( this->bit(patterntrig[2],6) ){ pmtpattern++;  if ( !this->checkPMT("S32_1A")){ pmtnosignal++; good = false;}}
1582      if ( this->bit(patterntrig[2],7) ){ pmtpattern++;  if ( !this->checkPMT("S32_2A")){ pmtnosignal++; good = false;}}
1583      if ( this->bit(patterntrig[2],8) ){ pmtpattern++;  if ( !this->checkPMT("S32_3A")){ pmtnosignal++; good = false;}}
1584      if ( this->bit(patterntrig[2],9) ){ pmtpattern++;  if ( !this->checkPMT("S32_1B")){ pmtnosignal++; good = false;}}
1585      if ( this->bit(patterntrig[2],10) ){ pmtpattern++;  if ( !this->checkPMT("S32_2B")){ pmtnosignal++; good = false;}}
1586      if ( this->bit(patterntrig[2],11) ){ pmtpattern++;  if ( !this->checkPMT("S32_3B")){ pmtnosignal++; good = false;}}      
1587      //S2
1588      if ( this->bit(patterntrig[3],0) ){ pmtpattern++;  if ( !this->checkPMT("S21_1A")){ pmtnosignal++; good = false;}}
1589      if ( this->bit(patterntrig[3],1) ){ pmtpattern++;  if ( !this->checkPMT("S21_2A")){ pmtnosignal++; good = false;}}
1590      if ( this->bit(patterntrig[3],2) ){ pmtpattern++;  if ( !this->checkPMT("S21_1B")){ pmtnosignal++; good = false;}}
1591      if ( this->bit(patterntrig[3],3) ){ pmtpattern++;  if ( !this->checkPMT("S21_2B")){ pmtnosignal++; good = false;}}      
1592      if ( this->bit(patterntrig[3],4) ){ pmtpattern++;  if ( !this->checkPMT("S22_1A")){ pmtnosignal++; good = false;}}
1593      if ( this->bit(patterntrig[3],5) ){ pmtpattern++;  if ( !this->checkPMT("S22_2A")){ pmtnosignal++; good = false;}}
1594      if ( this->bit(patterntrig[3],6) ){ pmtpattern++;  if ( !this->checkPMT("S22_1B")){ pmtnosignal++; good = false;}}
1595      if ( this->bit(patterntrig[3],7) ){ pmtpattern++;  if ( !this->checkPMT("S22_2B")){ pmtnosignal++; good = false;}}      
1596      //S12
1597      if ( this->bit(patterntrig[4],0) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1598      if ( this->bit(patterntrig[4],1) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1599      if ( this->bit(patterntrig[4],2) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1600      if ( this->bit(patterntrig[4],3) ){ pmtpattern++;  if ( !this->checkPMT("S12_4A")){ pmtnosignal++; good = false;}}
1601      if ( this->bit(patterntrig[4],4) ){ pmtpattern++;  if ( !this->checkPMT("S12_5A")){ pmtnosignal++; good = false;}}
1602      if ( this->bit(patterntrig[4],5) ){ pmtpattern++;  if ( !this->checkPMT("S12_6A")){ pmtnosignal++; good = false;}}      
1603      if ( this->bit(patterntrig[4],6) ){ pmtpattern++;  if ( !this->checkPMT("S12_1A")){ pmtnosignal++; good = false;}}
1604      if ( this->bit(patterntrig[4],7) ){ pmtpattern++;  if ( !this->checkPMT("S12_2A")){ pmtnosignal++; good = false;}}
1605      if ( this->bit(patterntrig[4],8) ){ pmtpattern++;  if ( !this->checkPMT("S12_3A")){ pmtnosignal++; good = false;}}
1606      if ( this->bit(patterntrig[4],9) ){ pmtpattern++;  if ( !this->checkPMT("S12_4B")){ pmtnosignal++; good = false;}}
1607      if ( this->bit(patterntrig[4],10) ){ pmtpattern++; if ( !this->checkPMT("S12_5B")){ pmtnosignal++; good = false;}}
1608      if ( this->bit(patterntrig[4],11) ){ pmtpattern++; if ( !this->checkPMT("S12_6B")){ pmtnosignal++; good = false;}}      
1609      //S11
1610      if ( this->bit(patterntrig[5],0) ){ pmtpattern++;  if ( !this->checkPMT("S11_1A")){ pmtnosignal++; good = false;}}
1611      if ( this->bit(patterntrig[5],1) ){ pmtpattern++;  if ( !this->checkPMT("S11_2A")){ pmtnosignal++; good = false;}}
1612      if ( this->bit(patterntrig[5],2) ){ pmtpattern++;  if ( !this->checkPMT("S11_3A")){ pmtnosignal++; good = false;}}
1613      if ( this->bit(patterntrig[5],3) ){ pmtpattern++;  if ( !this->checkPMT("S11_4A")){ pmtnosignal++; good = false;}}
1614      if ( this->bit(patterntrig[5],4) ){ pmtpattern++;  if ( !this->checkPMT("S11_5A")){ pmtnosignal++; good = false;}}
1615      if ( this->bit(patterntrig[5],5) ){ pmtpattern++;  if ( !this->checkPMT("S11_6A")){ pmtnosignal++; good = false;}}
1616      if ( this->bit(patterntrig[5],6) ){ pmtpattern++;  if ( !this->checkPMT("S11_7A")){ pmtnosignal++; good = false;}}
1617      if ( this->bit(patterntrig[5],7) ){ pmtpattern++;  if ( !this->checkPMT("S11_8A")){ pmtnosignal++; good = false;}}      
1618      if ( this->bit(patterntrig[5],8) ){ pmtpattern++;  if ( !this->checkPMT("S11_1B")){ pmtnosignal++; good = false;}}
1619      if ( this->bit(patterntrig[5],9) ){ pmtpattern++;  if ( !this->checkPMT("S11_2B")){ pmtnosignal++; good = false;}}
1620      if ( this->bit(patterntrig[5],10) ){ pmtpattern++; if ( !this->checkPMT("S11_3B")){ pmtnosignal++; good = false;}}
1621      if ( this->bit(patterntrig[5],11) ){ pmtpattern++; if ( !this->checkPMT("S11_4B")){ pmtnosignal++; good = false;}}
1622      if ( this->bit(patterntrig[5],12) ){ pmtpattern++; if ( !this->checkPMT("S11_5B")){ pmtnosignal++; good = false;}}
1623      if ( this->bit(patterntrig[5],13) ){ pmtpattern++; if ( !this->checkPMT("S11_6B")){ pmtnosignal++; good = false;}}
1624      if ( this->bit(patterntrig[5],14) ){ pmtpattern++; if ( !this->checkPMT("S11_7B")){ pmtnosignal++; good = false;}}
1625      if ( this->bit(patterntrig[5],15) ){ pmtpattern++; if ( !this->checkPMT("S11_8B")){ pmtnosignal++; good = false;}}
1626    
1627      return good;
1628    }
1629    
1630    bool ToFLevel2::checkPMTpmttrig(TrigLevel2 *trg){
1631      //  UInt_t *patterntrig = trg->patterntrig;
1632      int rS11 = 0;
1633      int rS12 = 0;
1634      int rS21 = 0;
1635      int rS22 = 0;
1636      int rS31 = 0;
1637      int rS32 = 0;
1638    
1639      // trigger configuration for the event from saved pmts
1640      TClonesArray* Pmt = this->PMT;
1641      for(int i=0; i<Pmt->GetEntries(); i++) {  
1642        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1643        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1644        if ( pmtname.Contains("S11") ) rS11++;
1645        if ( pmtname.Contains("S12") ) rS12++;
1646        if ( pmtname.Contains("S21") ) rS21++;
1647        if ( pmtname.Contains("S22") ) rS22++;
1648        if ( pmtname.Contains("S31") ) rS31++;
1649        if ( pmtname.Contains("S32") ) rS32++;
1650      }
1651      int rTOF1 = (rS11 + rS12) * (rS21 + rS22) * (rS31 + rS32);
1652      int rTOF2 = (rS11 * rS12) * (rS21 * rS22) * (rS31 * rS32);
1653    
1654      int rTOF3 = (rS21 + rS22) * (rS31 + rS32);
1655      int rTOF4 = (rS21 * rS22) * (rS31 * rS32);
1656    
1657      int rTOF5 = rS12 * (rS21 * rS22);
1658    
1659      int rTOF6 = (rS11 + rS12) * (rS31 + rS32);
1660      int rTOF7 = (rS11 * rS12) * (rS31 * rS32);
1661    
1662    
1663      // trigger configuration of the run
1664      bool TCTOF1 = false;
1665      bool TCTOF2 = false;
1666      bool TCTOF3 = false;
1667      bool TCTOF4 = false;
1668      bool TCTOF5 = false;
1669      bool TCTOF6 = false;
1670      bool TCTOF7 = false;
1671      if ( trg->trigconf & (1<<0) ) TCTOF1 = true;
1672      if ( trg->trigconf & (1<<1) ) TCTOF2 = true;
1673      if ( trg->trigconf & (1<<2) ) TCTOF3 = true;
1674      if ( trg->trigconf & (1<<3) ) TCTOF4 = true;
1675      if ( trg->trigconf & (1<<4) ) TCTOF5 = true;
1676      if ( trg->trigconf & (1<<5) ) TCTOF6 = true;
1677      if ( trg->trigconf & (1<<6) ) TCTOF7 = true;
1678    
1679      // do patterntrig pmts match the trigger configuration?
1680      bool pmtsconf_trigconf_match = true;
1681      if ( rTOF1 == 0 && TCTOF1 ) pmtsconf_trigconf_match = false;
1682      if ( rTOF2 == 0 && TCTOF2 ) pmtsconf_trigconf_match = false;
1683      if ( rTOF3 == 0 && TCTOF3 ) pmtsconf_trigconf_match = false;
1684      if ( rTOF4 == 0 && TCTOF4 ) pmtsconf_trigconf_match = false;
1685      if ( rTOF5 == 0 && TCTOF5 ) pmtsconf_trigconf_match = false;
1686      if ( rTOF6 == 0 && TCTOF6 ) pmtsconf_trigconf_match = false;
1687      if ( rTOF7 == 0 && TCTOF7 ) pmtsconf_trigconf_match = false;
1688    
1689      return pmtsconf_trigconf_match;
1690    }
1691    
1692    void ToFLevel2::printPMT(){
1693      TClonesArray* Pmt = this->PMT;
1694      for(int i=0; i<Pmt->GetEntries(); i++) {  
1695        ToFPMT* pmthit = (ToFPMT*)Pmt->At(i);
1696        TString pmtname = this->GetPMTName(pmthit->pmt_id);
1697        printf(" PMT hit: %s \n",pmtname.Data());
1698      }
1699  }  }
1700    
1701    
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
1702  ToFdEdx::ToFdEdx()  ToFdEdx::ToFdEdx()
1703  {  {
1704    memset(conn,0,12*sizeof(Bool_t));    memset(conn,0,12*sizeof(Bool_t));
1705    memset(ts,0,12*sizeof(UInt_t));    memset(ts,0,12*sizeof(UInt_t));
1706    memset(te,0,12*sizeof(UInt_t));    memset(te,0,12*sizeof(UInt_t));
1707      eDEDXpmt = new TArrayF(48);
1708    Define_PMTsat();    Define_PMTsat();
1709    Clear();    Clear();
1710  }  }
1711    
1712    ToFdEdx::~ToFdEdx(){
1713      Clear();
1714      Delete();
1715    }
1716    
1717    void ToFdEdx::Delete(Option_t *option){
1718      if ( eDEDXpmt ){
1719        eDEDXpmt->Set(0);
1720        if ( eDEDXpmt) delete eDEDXpmt;
1721      }
1722    }
1723    
1724  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1725  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)  void ToFdEdx::CheckConnectors(UInt_t atime, GL_PARAM *glparam, TSQLServer *dbc)
1726  {  {
# Line 1493  void ToFdEdx::Clear(Option_t *option) Line 1762  void ToFdEdx::Clear(Option_t *option)
1762  {  {
1763    //    //
1764    // Set arrays and initialize structure    // Set arrays and initialize structure
1765      //  eDEDXpmt.Set(48);    eDEDXpmt.Reset(-1);   // Set array size  and reset structure
1766    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);  
1767    //    //
1768  };  };
1769    
# Line 1515  void ToFdEdx::Print(Option_t *option) Line 1775  void ToFdEdx::Print(Option_t *option)
1775    
1776  };  };
1777    
   
1778  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1779  // void ToFdEdx::InitPar(TString parname, TString parfile)  void ToFdEdx::Init(pamela::tof::TofEvent *tofl0)
1780  // {  {
1781  //   // expensive function - call it once/run    //
1782      ToFLevel2 tf;
1783      for (Int_t gg=0; gg<4;gg++){
1784        for (Int_t hh=0; hh<12;hh++){
1785  //   ReadParAtt(            Form("%s/attenuation.txt"              , pardir) );        //          tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];          
1786  //   ReadParPos(            Form("%s/desaturation_position.txt"    , pardir) );        int mm = tf.GetPMTid(gg,hh);        
1787  //   ReadParBBneg(          Form("%s/BetheBloch.txt"               , pardir) );        adc[mm]=tofl0->adc[gg][hh];
1788  //   ReadParBBpos(          Form("%s/BetheBloch_betagt1.txt"       , pardir) );      };      
1789  //   ReadParDesatBB(        Form("%s/desaturation_beta.txt"        , pardir) );    };
1790      
1791  // };  };
   
1792    
1793  //------------------------------------------------------------------------  //------------------------------------------------------------------------
1794  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)
1795    {
1796      //
1797      ToFLevel2 tf;
1798      //  for (Int_t gg=0; gg<4;gg++){
1799      //    for (Int_t hh=0; hh<12;hh++){
1800      int mm = tf.GetPMTid(gg,hh);    
1801      adc[mm]=adce;
1802      
1803    };
1804    //------------------------------------------------------------------------
1805    void ToFdEdx::Process(UInt_t atime, Float_t betamean, Float_t *xtr_tof, Float_t *ytr_tof, Int_t exitat)
1806  {  {
1807      bool debug = false;
1808      if ( debug ) printf(" INSIDE TOFDEDX PROCESS \n");
1809    // the parameters should be already initialised by InitPar()    // the parameters should be already initialised by InitPar()
1810      //  printf(" in process \n");
   
1811    Clear();    Clear();
1812    
   
   
   //  Float_t betamean = fabs(trackTRK->GetToFTrack()->beta[12]);  
   
   if(betamean<0.05 || betamean>2){  
     for(int i=0;i<48;i++)INFOpmt[i]=1;  
   }  
   
1813   // define angle:     // define angle:  
1814    double dx   = xtr_tof[1] - xtr_tof[5];    double dx   = xtr_tof[1] - xtr_tof[5];
1815    double dy   = ytr_tof[0] - ytr_tof[4];    double dy   = ytr_tof[0] - ytr_tof[4];
1816    double dr   = sqrt(dx*dx+dy*dy);    double dr   = sqrt(dx*dx+dy*dy);
1817    double theta=atan(dr/76.81);    double theta=atan(dr/76.81);
1818      //
1819      if ( xtr_tof[1] > 99. ||  xtr_tof[5] > 99. || ytr_tof[0] > 99. ||  ytr_tof[4] > 99. ) theta = 0.;
1820      for (Int_t ii=0; ii<6; ii++){
1821    //  TArrayF adc;      if ( xtr_tof[ii] > 99. ) xtr_tof[ii] = 0.;
1822    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];  
     };        
1823    };    };
1824        //
1825        if ( debug ) printf(" theta %f \n",theta);
1826        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]);
1827        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]);
1828      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------
1829      
1830      int Aconn=conn[0];    // PMT 0,20,22,24
1831      int Bconn=conn[1];    // PMT 6,12,26,34
1832      int Cconn=conn[2];    // PMT 4,14,28,32
1833      int Dconn=conn[3];    // PMT 2,8,10,30
1834      int Econn=conn[4];    // PMT 42,43,44,47
1835      int Fconn=conn[5];    // PMT 7,19,23,27
1836      int Gconn=conn[6];    // PMT 3,11,25,33
1837      int Hconn=conn[7];    // PMT 1,9,13,21
1838      int Iconn=conn[8];    // PMT 5,29,31,35
1839      int Lconn=conn[9];    // PMT 37,40,45,46
1840      int Mconn=conn[10];    // PMT 15,16,17,18
1841      int Nconn=conn[11];    // PMT 36,38,39,41
1842      if( false ) cout << Gconn << Iconn << Lconn <<endl; // to avoid compilation warnings
1843        
1844      //  printf(" size %i \n",eDEDXpmt.GetSize());
1845    for( int ii=0; ii<48; ii++ ) {    for( int ii=0; ii<48; ii++ ) {
1846      if( adc[ii] >= PMTsat[ii]-5 )  continue;      //
1847      if( adc[ii] <= 0. )            continue;      //    eDEDXpmt.SetAt(-1.,ii);
1848          //    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]);
1849      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC      if ( debug ) printf("II %i adc %f \n",ii,adc[ii]);
1850      double adccorr = adcpC*fabs(cos(theta));  
1851        if( adc[ii] >= 4095. ){
1852           if(adccorr<=0.)           continue;        //      eDEDXpmt[ii] = 0.;
1853          eDEDXpmt->AddAt(0.,ii);
1854          if ( debug ) printf(" %i adc>4095 \n",ii);
1855          continue; // EMILIANO
1856        };
1857    
1858      //--------------------- TABLE OF PERIODS WITH HV PROBLEMS ----------------------------      if( adc[ii] >= (PMTsat[ii]-5.) && adc[ii] < 4095. ){
1859          eDEDXpmt->AddAt(1000.,ii);
1860          if ( debug ) printf(" %i adc> pmtsat && adc<4095 \n",ii);
1861          continue; // EMILIANO
1862        };
1863    
1864      int Aconn=conn[0];    // PMT 0,20,22,24      if( adc[ii] <= 0. ) {
1865      int Bconn=conn[1];    // PMT 6,12,26,34        eDEDXpmt->AddAt(1500.,ii);
1866      int Cconn=conn[2];    // PMT 4,14,28,32        if ( debug ) printf(" %i adc<=0 \n",ii);
1867      int Dconn=conn[3];    // PMT 2,8,10,30        continue;
1868      int Econn=conn[4];    // PMT 42,43,44,47      };
1869      int Fconn=conn[5];    // PMT 7,19,23,27      //
1870      int Gconn=conn[6];    // PMT 3,11,25,33      double adcpC   = f_adcPC( adc[ii] );    // - adc conversion in pC
1871      int Hconn=conn[7];    // PMT 1,9,13,21      if ( exitat == 0 ){
1872      int Iconn=conn[8];    // PMT 5,29,31,35        eDEDXpmt->AddAt((Float_t)adcpC,ii);
1873      int Lconn=conn[9];    // PMT 37,40,45,46        continue;
1874      int Mconn=conn[10];    // PMT 15,16,17,18      }
1875      int Nconn=conn[11];    // PMT 36,38,39,41      //    printf(" e qua? \n");
1876    
1877        double adccorr = adcpC*fabs(cos(theta));    
1878        if ( debug ) printf(" adccorr %f \n",adccorr);
1879        if(adccorr<=0.){
1880          if ( debug ) printf(" %i adccorr<=0 \n",ii);
1881          //      eDEDXpmt->AddAt((Float_t)adcpC,ii);//?
1882          continue;
1883        }
1884        if ( exitat == 1 ){
1885          eDEDXpmt->AddAt((Float_t)adccorr,ii);
1886          continue;
1887        }
1888        //    printf(" e quo? \n");
1889    
1890      //    int standard=0;      //    int standard=0;
     if( false ) cout << Gconn << Iconn << Lconn <<endl;  
1891      int S115B_ok=0;      int S115B_ok=0;
1892      int S115B_break=0;      int S115B_break=0;
1893    
 //   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;  
 //     }  
1894      if(atime<1158720000)S115B_ok=1;      if(atime<1158720000)S115B_ok=1;
1895      else S115B_break=1;      else S115B_break=1;
1896    
1897    
1898   //------------------------------------------------------------------------      //------------------------------------------------------------------------
1899        //    printf(" e qui? \n");
1900  //---------------------------------------------------- Z reconstruction      //---------------------------------------------------- Z reconstruction
1901    
1902  double adcHe, adcnorm, adclin, dEdx, Zeta;      double adcHe, adcnorm, adclin, dEdx, Zeta;
1903    
1904   adcHe=-2;      adcHe=-2;
1905   adcnorm=-2;      adcnorm=-2;
1906   adclin=-2;      adclin=-2;
1907   dEdx=-2;      dEdx=-2;
1908   Zeta=-2;      Zeta=-2;
1909        Double_t correction = 1.;
   
 //  float ZetaH=-2;  
 //  float dEdxH=-2;  
   
 //  double day = (atime-1150000000)/84600;  
1910    
1911      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){      if(Aconn==1 && (ii==0 || ii==20 || ii==22 || ii==24)){
1912         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.675;        correction = 1.675;
1913      }      }
1914      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){      else if(Bconn==1 && (ii==6 || ii==12 || ii==26 || ii==34)){
1915         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/2.482;        correction = 2.482;
1916      }      }
1917      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){      else if(Cconn==1 && (ii==4 || ii==14 || ii==28 || ii==32)){
1918        adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.464;        correction = 1.464;
1919      }      }
1920      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){      else if(Dconn==1 && (ii==2 || ii==8 || ii==10 || ii==30)){
1921         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.995;        correction = 1.995;
1922      }      }
1923      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){      else if(Econn==1 && (ii==42 || ii==43 || ii==44 || ii==47)){
1924         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.273;        correction = 1.273;
1925      }      }
1926      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){      else if(Fconn==1 && (ii==7 || ii==19 || ii==23 || ii==27)){
1927         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
1928      }      }
1929      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){      else if(Mconn==1 && (ii==15 || ii==16 || ii==17 || ii==18)){
1930         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.565;        correction = 1.565;
1931      }      }
1932      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){      else if(Nconn==1 && (ii==36 || ii==38 || ii==39 || ii==41)){
1933         adcHe   = (Get_adc_he(ii, xtr_tof, ytr_tof))/1.018;        correction = 1.018;
1934      }      }
1935      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))){
1936        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!!!  
1937      }      }
1938      else if(S115B_break==1 && ii==9 && Hconn==1){      else if(S115B_break==1 && ii==9 && Hconn==1){
1939         adcHe   = (f_att5B( ytr_tof[0] ))/1.64;        correction = 1.64;
1940        }
1941        else correction = 1.;
1942        
1943        if( ii==9 && S115B_break==1 ){
1944          adcHe   = f_att5B( ytr_tof[0] )/correction;
1945        } else {
1946          adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof)/correction;
1947        };
1948        if(adcHe<=0){
1949          if ( debug ) printf(" %i adcHe<=0 \n",ii);
1950          //      eDEDXpmt->AddAt((Float_t)adccorr,ii); //?
1951          continue;
1952        }
1953        if ( exitat == 2 ){
1954          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt(36.*(Float_t)adccorr/adcHe,ii);
1955          else  adclin  = 4.*(Float_t)adccorr/adcHe;
1956          continue;
1957      }      }
     else  adcHe   = Get_adc_he(ii, xtr_tof, ytr_tof);  
   
     if(adcHe<=0)   continue;  
1958    
1959      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);      if(ii==9 && S115B_break==1)  adcnorm = f_pos5B(adccorr);
1960      else adcnorm = f_pos( (parPos[ii]), adccorr);      else adcnorm = f_pos( (parPos[ii]), adccorr);
1961        if(adcnorm<=0){
1962      if(adcnorm<=0) continue;        if ( debug ) printf(" %i adcnorm<=0 \n",ii);
1963          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
1964          continue;
1965        }
1966        if ( debug ) printf(" adcnorm %f \n",adcnorm);
1967    
1968      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;      if(ii==9 && S115B_break==1)  adclin  = 36.*adcnorm/adcHe;
1969      else  adclin  = 4.*adcnorm/adcHe;      else  adclin  = 4.*adcnorm/adcHe;
1970        if ( debug ) printf(" adclin %f \n",adclin);
1971      if(adclin<=0)  continue;      if(adclin<=0){
1972          if ( debug ) printf(" %i adclin<=0 \n",ii);
1973          //      eDEDXpmt->AddAt((Float_t)adccorr,ii);//?
1974          continue;
1975        }
1976        if ( exitat == 3 ){
1977          if(ii==9 && S115B_break==1)  eDEDXpmt->AddAt((Float_t)adclin,ii);
1978          else  eDEDXpmt->AddAt((Float_t)adclin,ii);
1979          continue;
1980        }
1981        //
1982        if ( betamean > 99. ){
1983          //      eDEDXpmt.AddAt((Float_t)adclin,ii);
1984          eDEDXpmt->AddAt((Float_t)adclin,ii);
1985          //      printf(" AAPMT IS %i dedx is %f vector is %f \n",ii,adclin,eDEDXpmt[ii]);
1986          if ( debug ) printf(" %i betamean > 99 \n",ii);
1987          continue;
1988        };
1989        //
1990      double dEdxHe=-2;      double dEdxHe=-2;
1991      if(ii==9 && S115B_break==1){      if(ii==9 && S115B_break==1){
1992        if( betamean <1. ) dEdxHe = f_BB5B( betamean );        if( betamean <1. ) dEdxHe = f_BB5B( betamean );
# Line 1709  double adcHe, adcnorm, adclin, dEdx, Zet Line 1995  double adcHe, adcnorm, adclin, dEdx, Zet
1995        if( betamean <1. ) dEdxHe = f_BB( (parBBneg[ii]), betamean );        if( betamean <1. ) dEdxHe = f_BB( (parBBneg[ii]), betamean );
1996        else                       dEdxHe = parBBpos[ii];        else                       dEdxHe = parBBpos[ii];
1997      }      }
1998        
1999      if(dEdxHe<=0)  continue;      if ( debug ) printf(" dEdxHe %f \n",dEdxHe);
2000        
2001        if(dEdxHe<=0){
2002          eDEDXpmt->AddAt((Float_t)adclin,ii);
2003          if ( debug ) printf(" %i dEdxHe<=0 \n",ii);
2004          continue;
2005        };
2006    
2007      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );      if(ii==9 && S115B_break==1)  dEdx = f_desatBB5B( adclin );
2008      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );      else  dEdx = f_desatBB((parDesatBB[ii]), adclin );
2009    
2010      if(dEdx<=0)    continue;      if(dEdx<=0){
2011          eDEDXpmt->AddAt((Float_t)adclin,ii);
2012      if(ii==9 && S115B_break==1)  Zeta = sqrt(36.*(dEdx/dEdxHe));        if ( debug ) printf(" %i dEdx<=0 \n",ii);
2013      else  Zeta = sqrt(4.*(dEdx/dEdxHe));        continue;
2014        };
     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];  
2015    
2016      if(eZlayer[2]!=-1&&eZlayer[3]!=-1&&fabs(eZlayer[2]-eZlayer[3])<1.5)eZplane[1]=0.5*(eZlayer[2]+eZlayer[3]);      if ( debug ) printf(" dEdx %f \n",dEdx);
2017      else if(eZlayer[2]!=-1&&eZlayer[3]==-1)eZplane[1]=eZlayer[2];      eDEDXpmt->AddAt((Float_t)dEdx,ii);
2018      else if(eZlayer[3]!=-1&&eZlayer[2]==-1)eZplane[1]=eZlayer[3];      //    eDEDXpmt.AddAt((Float_t)dEdx,ii);
2019    
2020      if(eZlayer[4]!=-1&&eZlayer[5]!=-1&&fabs(eZlayer[4]-eZlayer[5])<1.5)eZplane[2]=0.5*(eZlayer[4]+eZlayer[5]);      //    printf(" PMT IS %i dedx is %f vector is %f \n",ii,dEdx,eDEDXpmt[ii]);
     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];  
     }  
   
     if(eDEDXlayer[0]!=-1&&eDEDXlayer[1]!=-1&&fabs(eDEDXlayer[0]-eDEDXlayer[1])<10)eDEDXplane[0]=0.5*(eDEDXlayer[0]+eDEDXlayer[1]);  
     else if(eDEDXlayer[0]!=-1&&eDEDXlayer[1]==-1)eDEDXplane[0]=eDEDXlayer[0];  
     else if(eDEDXlayer[1]!=-1&&eDEDXlayer[0]==-1)eDEDXplane[0]=eDEDXlayer[1];  
   
     if(eDEDXlayer[2]!=-1&&eDEDXlayer[3]!=-1&&fabs(eDEDXlayer[2]-eDEDXlayer[3])<10)eDEDXplane[1]=0.5*(eDEDXlayer[2]+eDEDXlayer[3]);  
     else if(eDEDXlayer[2]!=-1&&eDEDXlayer[3]==-1)eDEDXplane[1]=eDEDXlayer[2];  
     else if(eDEDXlayer[3]!=-1&&eDEDXlayer[2]==-1)eDEDXplane[1]=eDEDXlayer[3];  
   
     if(eDEDXlayer[4]!=-1&&eDEDXlayer[5]!=-1&&fabs(eDEDXlayer[4]-eDEDXlayer[5])<10)eDEDXplane[2]=0.5*(eDEDXlayer[4]+eDEDXlayer[5]);  
     else if(eDEDXlayer[4]!=-1&&eDEDXlayer[5]==-1)eDEDXplane[2]=eDEDXlayer[4];  
     else if(eDEDXlayer[5]!=-1&&eDEDXlayer[4]==-1)eDEDXplane[2]=eDEDXlayer[5];  
   
   }  
     
2021    
2022      }  //end loop on 48 PMT
2023    
2024  };  };
2025    
2026    
2027  //------------------------------------------------------------------------  //------------------------------------------------------------------------
 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]);  
         
     }  
   }  
 }  
   
   
 //------------------------------------------------------------------------  
2028  void ToFdEdx::Define_PMTsat()  void ToFdEdx::Define_PMTsat()
2029  {  {
2030    Float_t  sat[48] = {    Float_t  sat[48] = {
# Line 1861  void ToFdEdx::Define_PMTsat() Line 2038  void ToFdEdx::Define_PMTsat()
2038  }  }
2039    
2040  //------------------------------------------------------------------------  //------------------------------------------------------------------------
 // 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);  
 // }  
   
 //------------------------------------------------------------------------  
2041  void ToFdEdx::ReadParBBpos( const char *fname )  void ToFdEdx::ReadParBBpos( const char *fname )
2042  {  {
2043    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2044    parBBpos.Set(48);    parBBpos.Set(48);
2045    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2046    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
# Line 1900  void ToFdEdx::ReadParBBpos( const char * Line 2056  void ToFdEdx::ReadParBBpos( const char *
2056  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2057  void ToFdEdx::ReadParDesatBB( const char *fname )  void ToFdEdx::ReadParDesatBB( const char *fname )
2058  {  {
2059    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2060    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2061    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2062      int   tid=0;      int   tid=0;
# Line 1917  void ToFdEdx::ReadParDesatBB( const char Line 2073  void ToFdEdx::ReadParDesatBB( const char
2073  void ToFdEdx::ReadParBBneg( const char *fname )  void ToFdEdx::ReadParBBneg( const char *fname )
2074    
2075  {  {
2076    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2077    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2078    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2079      int   tid=0;      int   tid=0;
# Line 1932  void ToFdEdx::ReadParBBneg( const char * Line 2088  void ToFdEdx::ReadParBBneg( const char *
2088  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2089  void ToFdEdx::ReadParPos( const char *fname )  void ToFdEdx::ReadParPos( const char *fname )
2090  {  {
2091    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2092    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2093    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2094      int   tid=0;      int   tid=0;
# Line 1947  void ToFdEdx::ReadParPos( const char *fn Line 2103  void ToFdEdx::ReadParPos( const char *fn
2103  //------------------------------------------------------------------------  //------------------------------------------------------------------------
2104  void ToFdEdx::ReadParAtt( const char *fname )  void ToFdEdx::ReadParAtt( const char *fname )
2105  {  {
2106    printf("read %s\n",fname);    //  printf("read %s\n",fname);
2107    FILE *fattin = fopen( fname , "r" );    FILE *fattin = fopen( fname , "r" );
2108    for (int i=0; i<48; i++) {    for (int i=0; i<48; i++) {
2109      int   tid=0;      int   tid=0;
# Line 2020  float ToFdEdx::Get_adc_he( int id, float Line 2176  float ToFdEdx::Get_adc_he( int id, float
2176    //             pl_x - coord x of the tof plane    //             pl_x - coord x of the tof plane
2177    //             pl_y - coord y    //             pl_y - coord y
2178    
2179     adc_he = 0;    adc_he = 0;
2180    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)] );
2181    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)] );
2182    return adc_he;    return adc_he;
# Line 2055  double ToFdEdx::f_desatBB5B( float x ) Line 2211  double ToFdEdx::f_desatBB5B( float x )
2211      0.009*x*x;      0.009*x*x;
2212  }  }
2213    
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

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

  ViewVC Help
Powered by ViewVC 1.1.23