ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
/* $Id: AliTOFT0maker.cxx,v 1.8 2010/01/19 16:32:20 noferini Exp $ */

/////////////////////////////////////////////////////////////////////////////
//                                                                         //
//  This class contains the basic functions for the time zero              //
//  evaluation with TOF detector informations.                             //
// Use case in an analysis task:                                           //
//                                                                         //
// Create the object in the task constructor (fTOFmaker is a private var)  //
// AliESDpid *extPID=new AliESDpid();                                      //
// fTOFmaker = new AliTOFT0maker(extPID);                                  //
// fTOFmaker->SetTimeResolution(100.0); // if you want set the TOF res     //
// 115 ps is the TOF default resolution value                              //
//                                                                         //
// Use the RemakePID method in the task::Exec                              //
// Double_t* calcolot0;                                                    //
// calcolot0=fTOFmaker->RemakePID(fESD);                                   //
// //calcolot0[0] = calculated event time                                  // 
// //calcolot0[1] = event time time resolution                             //
// //calcolot0[2] = average event time for the current fill                //
// //calcolot0[3] = tracks at TOF                                          // 
// //calcolot0[4] = calculated event time (only TOF)                       //
// //calcolot0[5] = event time time resolution (only TOF)                  //
// //calcolot0[6] = sigma t0 fill                                          //
// //calcolot0[7] = tracks at TOF really used in tht algorithm             // 
//                                                                         //
// Let consider that:                                                      //
// - the PIF is automatically recalculated with the event time subtrction  //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

#include "AliTOFT0v1.h"
#include "AliTOFT0maker.h"
#include "AliPID.h"
#include "AliLog.h"
#include "AliESDpid.h"
#include "AliESDEvent.h"
#include "TFile.h"
#include "TH1F.h"
#include "AliTOFcalib.h"
#include "AliTOFRunParams.h"
#include "TRandom.h"
#include "AliTOFHeader.h"

ClassImp(AliTOFT0maker)
           
//____________________________________________________________________________ 
AliTOFT0maker::AliTOFT0maker():
  TObject(),
  fT0TOF(NULL),
  fPIDesd(NULL),
  fExternalPIDFlag(kFALSE),
  fTOFcalib(NULL),
  fNoTOFT0(0),
  fNmomBins(0),
  fTimeResolution(100),
  fT0sigma(1000),
  fHmapChannel(0),
  fKmask(0),
  fT0width(150.),
  fT0spreadExt(-1.),
  fT0fillExt(0),
  fTOFT0algorithm(1)
{
  // ctr
  fCalculated[0] = 0;
  fCalculated[1] = 0;
  fCalculated[2] = 0;
  fCalculated[3] = 0;

  fT0cur[0]=0.;
  fT0cur[1]=0.;

  if(AliPID::ParticleMass(0) == 0) new AliPID();

  fPIDesd = new AliESDpid();

  fNmomBins = fPIDesd->GetTOFResponse().GetNmomBins();
  SetTOFResponse();

  fT0TOF = new AliTOFT0v1(fPIDesd);

}
//____________________________________________________________________________ 
AliTOFT0maker::AliTOFT0maker(AliESDpid *externalPID, AliTOFcalib *tofCalib):
    TObject(),
    fT0TOF(NULL),
    fPIDesd(externalPID),
    fExternalPIDFlag(kTRUE),
    fTOFcalib(tofCalib),
    fNoTOFT0(0),
    fNmomBins(0),
    fTimeResolution(100),
    fT0sigma(1000),
    fHmapChannel(0),
    fKmask(0),
    fT0width(150.),
    fT0spreadExt(-1.),
    fT0fillExt(0),
    fTOFT0algorithm(1)
{
  // ctr
  fCalculated[0] = 0;
  fCalculated[1] = 0;
  fCalculated[2] = 0;
  fCalculated[3] = 0;

  fT0cur[0]=0.;
  fT0cur[1]=0.;

  if(AliPID::ParticleMass(0) == 0) new AliPID();

  if(!fPIDesd){
    fPIDesd = new AliESDpid();
    fExternalPIDFlag = kFALSE;
  }

  fNmomBins = fPIDesd->GetTOFResponse().GetNmomBins();
  SetTOFResponse();

  fT0TOF = new AliTOFT0v1(fPIDesd);

}

//____________________________________________________________________________ 
AliTOFT0maker::~AliTOFT0maker()
{
  // dtor
  delete fT0TOF;
  if (!fExternalPIDFlag) delete fPIDesd;
}
//____________________________________________________________________________ 
Double_t* AliTOFT0maker::ComputeT0TOF(AliESDEvent *esd,Double_t t0time,Double_t t0sigma){
  //
  // Remake TOF PID probabilities
  //
  Double_t t0tof[6];

  if(fKmask) ApplyMask(esd);

  Double_t t0fill = 0.;

  fPIDesd->GetTOFResponse().ResetT0info();

  /* get T0 spread from TOFcalib if available otherwise use default value */
  if (fTOFcalib && esd) {
    AliTOFRunParams *runParams = fTOFcalib->GetRunParams();
    if (runParams && runParams->GetTimestamp(0) != 0) {
      Float_t t0spread = runParams->EvalT0Spread(esd->GetTimeStamp());
      if(fT0spreadExt > 0) SetT0FillWidth(fT0spreadExt);
      else{
	SetT0FillWidth(t0spread);
	t0fill = fT0fillExt;
      }
    }
    else{
      if(fT0spreadExt > 0) SetT0FillWidth(fT0spreadExt);
      t0fill = fT0fillExt;
    }
  }
  else if(esd){
      Float_t t0spread = esd->GetSigma2DiamondZ(); // vertex pread ^2
      if(t0spread > 0) t0spread = TMath::Sqrt(t0spread)/0.0299792458;

      if(fT0spreadExt > 0) SetT0FillWidth(fT0spreadExt);
      else{
	  SetT0FillWidth(t0spread);
	  t0fill = fT0fillExt;
      }
  }

  Float_t thrGood = TMath::Max(Float_t(500.),fT0width*3);


  fT0TOF->Init(esd);
  AliTOFT0v1* t0maker = fT0TOF;
  if (fTOFT0algorithm==2) t0maker->SetOptimization(kTRUE);
  t0maker->DefineT0("all",1.5,3.0);
  t0tof[0] = t0maker->GetResult(0);
  t0tof[1] = t0maker->GetResult(1);
  t0tof[2] = t0maker->GetResult(2);
  t0tof[3] = t0maker->GetResult(3);
  t0tof[4] = t0maker->GetResult(4);
  t0tof[5] = t0maker->GetResult(5);

  Float_t lT0Current=0.;
  fT0sigma=1000;

//   Int_t nrun = esd->GetRunNumber();

  t0time += t0fill;

  Float_t sigmaFill = fT0width;

  if(sigmaFill < 20) sigmaFill = 140;

  fCalculated[0]=-1000*t0tof[0]; // best t0
  fCalculated[1]=1000*t0tof[1]; // sigma best t0
  fCalculated[2] = t0fill;    //t0 fill
  fCalculated[3] = t0tof[2];  // n TOF tracks
  fCalculated[4]=-1000*t0tof[0]; // TOF t0
  fCalculated[5]=1000*t0tof[1]; // TOF t0 sigma
  fCalculated[6]=sigmaFill; // sigma t0 fill
  fCalculated[7] = t0tof[3];  // n TOF tracks used for T0

  if(fCalculated[7] > 30) thrGood = 10000000;

  //statistics
  fCalculated[8] = t0tof[4]; // real time in s
  fCalculated[9] = t0tof[5]; // cpu time in s

  if(fCalculated[1] < sigmaFill && TMath::Abs(fCalculated[0] - t0fill) < thrGood && fCalculated[1] < fTimeResolution*1.2){
    fT0sigma=fCalculated[1];
    lT0Current=fCalculated[0];
  }
  else{
    fCalculated[4] = t0fill;
    fCalculated[5] = sigmaFill;
  }

  if(fCalculated[1] < 1 || fT0sigma > sigmaFill || fCalculated[1] > fTimeResolution* 1.2){
    fT0sigma =1000;
    fCalculated[4] = t0fill;
    fCalculated[5] = sigmaFill;
  }

  if(t0sigma < 1000){
    if(fT0sigma < 1000){
      Double_t w1 = 1./t0sigma/t0sigma;
      Double_t w2 = 1./fCalculated[1]/fCalculated[1];

      Double_t wtot = w1+w2;

      lT0Current = (w1*t0time + w2*fCalculated[0]) / wtot;
      fT0sigma = TMath::Sqrt(1./wtot);
    }
    else{
      lT0Current=t0time;
      fT0sigma=t0sigma;
    }
  }

  if(fT0sigma < sigmaFill && TMath::Abs(lT0Current - t0fill) < thrGood){
    fCalculated[1]=fT0sigma;
    fCalculated[0]=lT0Current;
  }

  if(fT0sigma >= 1000 || fNoTOFT0){
    lT0Current = t0fill;
    fT0sigma = sigmaFill;

    fCalculated[0] = t0fill;
    fCalculated[1] = sigmaFill;
  }

  // T0 pt bin
  Float_t *t0values = new Float_t[fNmomBins];
  Float_t *t0resolution = new Float_t[fNmomBins];
  if(fCalculated[7] < 100){
    for(Int_t i=0;i<fNmomBins;i++){
      t0maker->DefineT0("all",fPIDesd->GetTOFResponse().GetMinMom(i),fPIDesd->GetTOFResponse().GetMaxMom(i));
      t0tof[0] = t0maker->GetResult(0);
      t0tof[1] = t0maker->GetResult(1);
      t0tof[2] = t0maker->GetResult(2);
      t0tof[3] = t0maker->GetResult(3);

      Float_t t0bin =-1000*t0tof[0]; // best t0
      Float_t t0binRes =1000*t0tof[1]; // sigma best t0
      
      if(t0binRes < sigmaFill  && t0binRes < fTimeResolution * 1.2 && TMath::Abs(t0bin - t0fill) < thrGood){
	// Ok T0
	if(t0sigma < 1000){
	  Double_t w1 = 1./t0sigma/t0sigma;
	  Double_t w2 = 1./t0binRes/t0binRes;
	  
	  Double_t wtot = w1+w2;
	  
	  t0bin = (w1*t0time + w2*t0bin) / wtot;
	  t0binRes = TMath::Sqrt(1./wtot);
	}
      }
      else{
	t0bin = t0fill;
	t0binRes = sigmaFill;
	if(t0sigma < 1000){
	  t0bin = t0time;
	   t0binRes= t0sigma;	  
	}
      }
      t0values[i] = t0bin;
      t0resolution[i] = t0binRes;
    }
  }
  else{
    for(Int_t i=0;i<fNmomBins;i++){
      t0values[i] = lT0Current;
      t0resolution[i] = fT0sigma;
    }
  }
  for(Int_t i=0;i<fNmomBins;i++){
    fPIDesd->GetTOFResponse().SetT0bin(i,t0values[i]);
    fPIDesd->GetTOFResponse().SetT0binRes(i,t0resolution[i]);
  }
  
  delete[] t0values;
  delete[] t0resolution;

  return fCalculated;
}
//____________________________________________________________________________ 
Double_t  *AliTOFT0maker::GetT0p(Float_t p){// [0]=to -- [1] = sigma T0
  Int_t i=fPIDesd->GetTOFResponse().GetMomBin(p);
  
  fT0cur[0] = fPIDesd->GetTOFResponse().GetT0bin(i);
  fT0cur[1] = fPIDesd->GetTOFResponse().GetT0binRes(i);

  return fT0cur;
}
//____________________________________________________________________________ 
void AliTOFT0maker::SetTOFResponse(){
  fPIDesd->GetTOFResponse().SetTimeResolution(fTimeResolution);
}
//____________________________________________________________________________ 
Float_t AliTOFT0maker::GetExpectedSigma(Float_t mom, Float_t tof, Float_t mass){
  Float_t sigma = fPIDesd->GetTOFResponse().GetExpectedSigma(mom,tof,mass);

  return sigma;
}
//____________________________________________________________________________ 
void AliTOFT0maker::ApplyT0TOF(AliESDEvent *esd){
  //
  // Recalculate TOF PID probabilities
  //

// subtruct t0 for each track
   Int_t ntracks = esd->GetNumberOfTracks();
  
   while (ntracks--) {
       AliESDtrack *t=esd->GetTrack(ntracks);
    
       if ((t->GetStatus()&AliESDtrack::kTOFout)==0) continue;
    
       Double_t time=t->GetTOFsignal();
       Float_t p = t->GetP();

       Double_t *t0=GetT0p(p);
       time -= t0[0];
       t->SetTOFsignal(time);
   }

   for(Int_t i=0;i<fNmomBins;i++){
       fPIDesd->GetTOFResponse().SetT0bin(i,0.0);
   }
   
  //
}
//____________________________________________________________________________ 
void  AliTOFT0maker::LoadChannelMap(const char *filename){
  // Load the histo with the channel off map
  TFile *f= new TFile(filename);
  if(!f){
    printf("Cannot open the channel map file (%s)\n",filename);
    return;
  }
  
  fHmapChannel = (TH1F *) f->Get("hChEnabled");
  
  if(!fHmapChannel){
    printf("Cannot laod the channel map histo (from %s)\n",filename);
    return;
  }
    
}
//____________________________________________________________________________ 
void AliTOFT0maker::ApplyMask(AliESDEvent * const esd){
  // Switch off the disable channel
  if(!fHmapChannel){
    printf("Channel Map is not available\n");
    return;
  }
  
  Int_t ntracks = esd->GetNumberOfTracks();
  
  while (ntracks--) {
    AliESDtrack *t=esd->GetTrack(ntracks);    

    if ((t->GetStatus()&AliESDtrack::kTOFout)==0) continue;

    Int_t chan = t->GetTOFCalChannel();
 
    if(fHmapChannel->GetBinContent(chan) < 0.01){
      t->ResetStatus(AliESDtrack::kTOFout);
    }
  }
}

Float_t  
AliTOFT0maker::TuneForMC(AliESDEvent *esd){ // return true T0 event
  //
  // tune for MC data
  //

  Float_t TOFtimeResolutionDefault=80;

  Float_t t0 = gRandom->Gaus(0.,fT0width); 

  Float_t extraSmearing = 0;

  if(fTimeResolution > TOFtimeResolutionDefault){
    extraSmearing = TMath::Sqrt(fTimeResolution*fTimeResolution - TOFtimeResolutionDefault*TOFtimeResolutionDefault);
  }

  // subtruct t0 for each track
  Int_t ntracks = esd->GetNumberOfTracks();
  
  while (ntracks--) {
    AliESDtrack *t=esd->GetTrack(ntracks);
    
    if ((t->GetStatus()&AliESDtrack::kTOFout)==0) continue;
    
    /* check if channel is enabled */
    if (fTOFcalib){
	if(!fTOFcalib->IsChannelEnabled(t->GetTOFCalChannel())) {
	    /* reset TOF status */
	    t->ResetStatus(AliESDtrack::kTOFin);
	    t->ResetStatus(AliESDtrack::kTOFout);
	    t->ResetStatus(AliESDtrack::kTOFmismatch);
	    t->ResetStatus(AliESDtrack::kTOFpid);
	}
    }

    Double_t time=t->GetTOFsignal();

    time += t0;

    if(extraSmearing>0){
      Float_t smearing = gRandom->Gaus(0.,extraSmearing);
      time += smearing;
    }

    t->SetTOFsignal(time);
  }
  //
  return t0;
}
//_________________________________________________________________________
void     AliTOFT0maker::WriteInESD(AliESDEvent *esd){
  //
  // Write t0Gen, t0ResGen, nt0;
  //       t0resESD[0:nt0], it0ESD[0:nt0]
  // in the AliESDEvent
  //
    Int_t nMomBins = fPIDesd->GetTOFResponse().GetNmomBins();

    Int_t nt0=0;
    Float_t *t0 = new Float_t[nMomBins];
    Float_t *t0res = new Float_t[nMomBins];
    Int_t *multT0 = new Int_t[nMomBins];

    for(Int_t i=0;i<nMomBins;i++){
//	printf("START %i) %f %f\n",i,fT0event[i],fT0resolution[i]);
	multT0[i]=0;
	Bool_t kNewT0=kTRUE;
	for(Int_t j=0;j < nt0;j++){
	    if(TMath::Abs(fPIDesd->GetTOFResponse().GetT0bin(i) - t0[j])<0.1){
		kNewT0=kFALSE;
		multT0[j]++;
		j=nMomBins*10;
	    }
	}
	if(kNewT0){
	    t0[nt0]=fPIDesd->GetTOFResponse().GetT0bin(i);
	    t0res[nt0]=fPIDesd->GetTOFResponse().GetT0binRes(i);
	    nt0++;
	}
    }

    Int_t iMultT0=0,nmult=0;
    for(Int_t j=0;j < nt0;j++){ // find the most frequent
	if(multT0[j] > nmult){
	    iMultT0 = j;
	    nmult = multT0[j];
	}
    }

    Float_t *t0ESD = new Float_t[nMomBins];
    Float_t *t0resESD = new Float_t[nMomBins];
    Int_t *it0ESD = new Int_t[nMomBins];
    
    Float_t t0Gen,t0ResGen;
    t0Gen = t0[iMultT0];
    t0ResGen = t0res[iMultT0];
    nt0=0;
    //  printf("T0 to ESD\n%f %f\n",t0Gen,t0ResGen);
    for(Int_t i=0;i<nMomBins;i++){
	if(TMath::Abs(fPIDesd->GetTOFResponse().GetT0bin(i) - t0Gen)>0.1){
	    t0ESD[nt0]=fPIDesd->GetTOFResponse().GetT0bin(i);
	    t0resESD[nt0]=fPIDesd->GetTOFResponse().GetT0binRes(i);
	    it0ESD[nt0]=i;
//	    printf("%i) %f %f %i\n",nt0,t0ESD[nt0],t0resESD[nt0],it0ESD[nt0]);
	    nt0++;
	}
    }

    // Write  t0Gen,t0ResGen; nt0; t0resESD[0:nt0],it0ESD[0:nt0] in the AliESDEvent

   AliTOFHeader *tofHeader =
	new AliTOFHeader(t0Gen,t0ResGen,nt0,
			 t0ESD,t0resESD,it0ESD,fTimeResolution,fT0width);
  
    esd->SetTOFHeader(tofHeader);

    delete tofHeader;

    AliDebug(1,Form("resTOF=%f T0spread=%f t0Gen=%f t0resGen=%f",fTimeResolution,fT0width,t0Gen,t0ResGen));
    AliDebug(1,Form("%d ",nt0));
    for (Int_t ii=0; ii<nt0; ii++)
      AliDebug(1,Form("pBin=%d t0val=%f t0res=%f",it0ESD[ii],t0ESD[ii],t0resESD[ii]));
    
    delete[] t0;
    t0 = NULL;
    delete[] t0res;
    t0res = NULL;
    delete[] multT0;
    multT0 = NULL;
    delete[] t0ESD;
    t0ESD = NULL;
    delete[] t0resESD;
    t0resESD = NULL;
    delete[] it0ESD;
    it0ESD = NULL;

}
 AliTOFT0maker.cxx:1
 AliTOFT0maker.cxx:2
 AliTOFT0maker.cxx:3
 AliTOFT0maker.cxx:4
 AliTOFT0maker.cxx:5
 AliTOFT0maker.cxx:6
 AliTOFT0maker.cxx:7
 AliTOFT0maker.cxx:8
 AliTOFT0maker.cxx:9
 AliTOFT0maker.cxx:10
 AliTOFT0maker.cxx:11
 AliTOFT0maker.cxx:12
 AliTOFT0maker.cxx:13
 AliTOFT0maker.cxx:14
 AliTOFT0maker.cxx:15
 AliTOFT0maker.cxx:16
 AliTOFT0maker.cxx:17
 AliTOFT0maker.cxx:18
 AliTOFT0maker.cxx:19
 AliTOFT0maker.cxx:20
 AliTOFT0maker.cxx:21
 AliTOFT0maker.cxx:22
 AliTOFT0maker.cxx:23
 AliTOFT0maker.cxx:24
 AliTOFT0maker.cxx:25
 AliTOFT0maker.cxx:26
 AliTOFT0maker.cxx:27
 AliTOFT0maker.cxx:28
 AliTOFT0maker.cxx:29
 AliTOFT0maker.cxx:30
 AliTOFT0maker.cxx:31
 AliTOFT0maker.cxx:32
 AliTOFT0maker.cxx:33
 AliTOFT0maker.cxx:34
 AliTOFT0maker.cxx:35
 AliTOFT0maker.cxx:36
 AliTOFT0maker.cxx:37
 AliTOFT0maker.cxx:38
 AliTOFT0maker.cxx:39
 AliTOFT0maker.cxx:40
 AliTOFT0maker.cxx:41
 AliTOFT0maker.cxx:42
 AliTOFT0maker.cxx:43
 AliTOFT0maker.cxx:44
 AliTOFT0maker.cxx:45
 AliTOFT0maker.cxx:46
 AliTOFT0maker.cxx:47
 AliTOFT0maker.cxx:48
 AliTOFT0maker.cxx:49
 AliTOFT0maker.cxx:50
 AliTOFT0maker.cxx:51
 AliTOFT0maker.cxx:52
 AliTOFT0maker.cxx:53
 AliTOFT0maker.cxx:54
 AliTOFT0maker.cxx:55
 AliTOFT0maker.cxx:56
 AliTOFT0maker.cxx:57
 AliTOFT0maker.cxx:58
 AliTOFT0maker.cxx:59
 AliTOFT0maker.cxx:60
 AliTOFT0maker.cxx:61
 AliTOFT0maker.cxx:62
 AliTOFT0maker.cxx:63
 AliTOFT0maker.cxx:64
 AliTOFT0maker.cxx:65
 AliTOFT0maker.cxx:66
 AliTOFT0maker.cxx:67
 AliTOFT0maker.cxx:68
 AliTOFT0maker.cxx:69
 AliTOFT0maker.cxx:70
 AliTOFT0maker.cxx:71
 AliTOFT0maker.cxx:72
 AliTOFT0maker.cxx:73
 AliTOFT0maker.cxx:74
 AliTOFT0maker.cxx:75
 AliTOFT0maker.cxx:76
 AliTOFT0maker.cxx:77
 AliTOFT0maker.cxx:78
 AliTOFT0maker.cxx:79
 AliTOFT0maker.cxx:80
 AliTOFT0maker.cxx:81
 AliTOFT0maker.cxx:82
 AliTOFT0maker.cxx:83
 AliTOFT0maker.cxx:84
 AliTOFT0maker.cxx:85
 AliTOFT0maker.cxx:86
 AliTOFT0maker.cxx:87
 AliTOFT0maker.cxx:88
 AliTOFT0maker.cxx:89
 AliTOFT0maker.cxx:90
 AliTOFT0maker.cxx:91
 AliTOFT0maker.cxx:92
 AliTOFT0maker.cxx:93
 AliTOFT0maker.cxx:94
 AliTOFT0maker.cxx:95
 AliTOFT0maker.cxx:96
 AliTOFT0maker.cxx:97
 AliTOFT0maker.cxx:98
 AliTOFT0maker.cxx:99
 AliTOFT0maker.cxx:100
 AliTOFT0maker.cxx:101
 AliTOFT0maker.cxx:102
 AliTOFT0maker.cxx:103
 AliTOFT0maker.cxx:104
 AliTOFT0maker.cxx:105
 AliTOFT0maker.cxx:106
 AliTOFT0maker.cxx:107
 AliTOFT0maker.cxx:108
 AliTOFT0maker.cxx:109
 AliTOFT0maker.cxx:110
 AliTOFT0maker.cxx:111
 AliTOFT0maker.cxx:112
 AliTOFT0maker.cxx:113
 AliTOFT0maker.cxx:114
 AliTOFT0maker.cxx:115
 AliTOFT0maker.cxx:116
 AliTOFT0maker.cxx:117
 AliTOFT0maker.cxx:118
 AliTOFT0maker.cxx:119
 AliTOFT0maker.cxx:120
 AliTOFT0maker.cxx:121
 AliTOFT0maker.cxx:122
 AliTOFT0maker.cxx:123
 AliTOFT0maker.cxx:124
 AliTOFT0maker.cxx:125
 AliTOFT0maker.cxx:126
 AliTOFT0maker.cxx:127
 AliTOFT0maker.cxx:128
 AliTOFT0maker.cxx:129
 AliTOFT0maker.cxx:130
 AliTOFT0maker.cxx:131
 AliTOFT0maker.cxx:132
 AliTOFT0maker.cxx:133
 AliTOFT0maker.cxx:134
 AliTOFT0maker.cxx:135
 AliTOFT0maker.cxx:136
 AliTOFT0maker.cxx:137
 AliTOFT0maker.cxx:138
 AliTOFT0maker.cxx:139
 AliTOFT0maker.cxx:140
 AliTOFT0maker.cxx:141
 AliTOFT0maker.cxx:142
 AliTOFT0maker.cxx:143
 AliTOFT0maker.cxx:144
 AliTOFT0maker.cxx:145
 AliTOFT0maker.cxx:146
 AliTOFT0maker.cxx:147
 AliTOFT0maker.cxx:148
 AliTOFT0maker.cxx:149
 AliTOFT0maker.cxx:150
 AliTOFT0maker.cxx:151
 AliTOFT0maker.cxx:152
 AliTOFT0maker.cxx:153
 AliTOFT0maker.cxx:154
 AliTOFT0maker.cxx:155
 AliTOFT0maker.cxx:156
 AliTOFT0maker.cxx:157
 AliTOFT0maker.cxx:158
 AliTOFT0maker.cxx:159
 AliTOFT0maker.cxx:160
 AliTOFT0maker.cxx:161
 AliTOFT0maker.cxx:162
 AliTOFT0maker.cxx:163
 AliTOFT0maker.cxx:164
 AliTOFT0maker.cxx:165
 AliTOFT0maker.cxx:166
 AliTOFT0maker.cxx:167
 AliTOFT0maker.cxx:168
 AliTOFT0maker.cxx:169
 AliTOFT0maker.cxx:170
 AliTOFT0maker.cxx:171
 AliTOFT0maker.cxx:172
 AliTOFT0maker.cxx:173
 AliTOFT0maker.cxx:174
 AliTOFT0maker.cxx:175
 AliTOFT0maker.cxx:176
 AliTOFT0maker.cxx:177
 AliTOFT0maker.cxx:178
 AliTOFT0maker.cxx:179
 AliTOFT0maker.cxx:180
 AliTOFT0maker.cxx:181
 AliTOFT0maker.cxx:182
 AliTOFT0maker.cxx:183
 AliTOFT0maker.cxx:184
 AliTOFT0maker.cxx:185
 AliTOFT0maker.cxx:186
 AliTOFT0maker.cxx:187
 AliTOFT0maker.cxx:188
 AliTOFT0maker.cxx:189
 AliTOFT0maker.cxx:190
 AliTOFT0maker.cxx:191
 AliTOFT0maker.cxx:192
 AliTOFT0maker.cxx:193
 AliTOFT0maker.cxx:194
 AliTOFT0maker.cxx:195
 AliTOFT0maker.cxx:196
 AliTOFT0maker.cxx:197
 AliTOFT0maker.cxx:198
 AliTOFT0maker.cxx:199
 AliTOFT0maker.cxx:200
 AliTOFT0maker.cxx:201
 AliTOFT0maker.cxx:202
 AliTOFT0maker.cxx:203
 AliTOFT0maker.cxx:204
 AliTOFT0maker.cxx:205
 AliTOFT0maker.cxx:206
 AliTOFT0maker.cxx:207
 AliTOFT0maker.cxx:208
 AliTOFT0maker.cxx:209
 AliTOFT0maker.cxx:210
 AliTOFT0maker.cxx:211
 AliTOFT0maker.cxx:212
 AliTOFT0maker.cxx:213
 AliTOFT0maker.cxx:214
 AliTOFT0maker.cxx:215
 AliTOFT0maker.cxx:216
 AliTOFT0maker.cxx:217
 AliTOFT0maker.cxx:218
 AliTOFT0maker.cxx:219
 AliTOFT0maker.cxx:220
 AliTOFT0maker.cxx:221
 AliTOFT0maker.cxx:222
 AliTOFT0maker.cxx:223
 AliTOFT0maker.cxx:224
 AliTOFT0maker.cxx:225
 AliTOFT0maker.cxx:226
 AliTOFT0maker.cxx:227
 AliTOFT0maker.cxx:228
 AliTOFT0maker.cxx:229
 AliTOFT0maker.cxx:230
 AliTOFT0maker.cxx:231
 AliTOFT0maker.cxx:232
 AliTOFT0maker.cxx:233
 AliTOFT0maker.cxx:234
 AliTOFT0maker.cxx:235
 AliTOFT0maker.cxx:236
 AliTOFT0maker.cxx:237
 AliTOFT0maker.cxx:238
 AliTOFT0maker.cxx:239
 AliTOFT0maker.cxx:240
 AliTOFT0maker.cxx:241
 AliTOFT0maker.cxx:242
 AliTOFT0maker.cxx:243
 AliTOFT0maker.cxx:244
 AliTOFT0maker.cxx:245
 AliTOFT0maker.cxx:246
 AliTOFT0maker.cxx:247
 AliTOFT0maker.cxx:248
 AliTOFT0maker.cxx:249
 AliTOFT0maker.cxx:250
 AliTOFT0maker.cxx:251
 AliTOFT0maker.cxx:252
 AliTOFT0maker.cxx:253
 AliTOFT0maker.cxx:254
 AliTOFT0maker.cxx:255
 AliTOFT0maker.cxx:256
 AliTOFT0maker.cxx:257
 AliTOFT0maker.cxx:258
 AliTOFT0maker.cxx:259
 AliTOFT0maker.cxx:260
 AliTOFT0maker.cxx:261
 AliTOFT0maker.cxx:262
 AliTOFT0maker.cxx:263
 AliTOFT0maker.cxx:264
 AliTOFT0maker.cxx:265
 AliTOFT0maker.cxx:266
 AliTOFT0maker.cxx:267
 AliTOFT0maker.cxx:268
 AliTOFT0maker.cxx:269
 AliTOFT0maker.cxx:270
 AliTOFT0maker.cxx:271
 AliTOFT0maker.cxx:272
 AliTOFT0maker.cxx:273
 AliTOFT0maker.cxx:274
 AliTOFT0maker.cxx:275
 AliTOFT0maker.cxx:276
 AliTOFT0maker.cxx:277
 AliTOFT0maker.cxx:278
 AliTOFT0maker.cxx:279
 AliTOFT0maker.cxx:280
 AliTOFT0maker.cxx:281
 AliTOFT0maker.cxx:282
 AliTOFT0maker.cxx:283
 AliTOFT0maker.cxx:284
 AliTOFT0maker.cxx:285
 AliTOFT0maker.cxx:286
 AliTOFT0maker.cxx:287
 AliTOFT0maker.cxx:288
 AliTOFT0maker.cxx:289
 AliTOFT0maker.cxx:290
 AliTOFT0maker.cxx:291
 AliTOFT0maker.cxx:292
 AliTOFT0maker.cxx:293
 AliTOFT0maker.cxx:294
 AliTOFT0maker.cxx:295
 AliTOFT0maker.cxx:296
 AliTOFT0maker.cxx:297
 AliTOFT0maker.cxx:298
 AliTOFT0maker.cxx:299
 AliTOFT0maker.cxx:300
 AliTOFT0maker.cxx:301
 AliTOFT0maker.cxx:302
 AliTOFT0maker.cxx:303
 AliTOFT0maker.cxx:304
 AliTOFT0maker.cxx:305
 AliTOFT0maker.cxx:306
 AliTOFT0maker.cxx:307
 AliTOFT0maker.cxx:308
 AliTOFT0maker.cxx:309
 AliTOFT0maker.cxx:310
 AliTOFT0maker.cxx:311
 AliTOFT0maker.cxx:312
 AliTOFT0maker.cxx:313
 AliTOFT0maker.cxx:314
 AliTOFT0maker.cxx:315
 AliTOFT0maker.cxx:316
 AliTOFT0maker.cxx:317
 AliTOFT0maker.cxx:318
 AliTOFT0maker.cxx:319
 AliTOFT0maker.cxx:320
 AliTOFT0maker.cxx:321
 AliTOFT0maker.cxx:322
 AliTOFT0maker.cxx:323
 AliTOFT0maker.cxx:324
 AliTOFT0maker.cxx:325
 AliTOFT0maker.cxx:326
 AliTOFT0maker.cxx:327
 AliTOFT0maker.cxx:328
 AliTOFT0maker.cxx:329
 AliTOFT0maker.cxx:330
 AliTOFT0maker.cxx:331
 AliTOFT0maker.cxx:332
 AliTOFT0maker.cxx:333
 AliTOFT0maker.cxx:334
 AliTOFT0maker.cxx:335
 AliTOFT0maker.cxx:336
 AliTOFT0maker.cxx:337
 AliTOFT0maker.cxx:338
 AliTOFT0maker.cxx:339
 AliTOFT0maker.cxx:340
 AliTOFT0maker.cxx:341
 AliTOFT0maker.cxx:342
 AliTOFT0maker.cxx:343
 AliTOFT0maker.cxx:344
 AliTOFT0maker.cxx:345
 AliTOFT0maker.cxx:346
 AliTOFT0maker.cxx:347
 AliTOFT0maker.cxx:348
 AliTOFT0maker.cxx:349
 AliTOFT0maker.cxx:350
 AliTOFT0maker.cxx:351
 AliTOFT0maker.cxx:352
 AliTOFT0maker.cxx:353
 AliTOFT0maker.cxx:354
 AliTOFT0maker.cxx:355
 AliTOFT0maker.cxx:356
 AliTOFT0maker.cxx:357
 AliTOFT0maker.cxx:358
 AliTOFT0maker.cxx:359
 AliTOFT0maker.cxx:360
 AliTOFT0maker.cxx:361
 AliTOFT0maker.cxx:362
 AliTOFT0maker.cxx:363
 AliTOFT0maker.cxx:364
 AliTOFT0maker.cxx:365
 AliTOFT0maker.cxx:366
 AliTOFT0maker.cxx:367
 AliTOFT0maker.cxx:368
 AliTOFT0maker.cxx:369
 AliTOFT0maker.cxx:370
 AliTOFT0maker.cxx:371
 AliTOFT0maker.cxx:372
 AliTOFT0maker.cxx:373
 AliTOFT0maker.cxx:374
 AliTOFT0maker.cxx:375
 AliTOFT0maker.cxx:376
 AliTOFT0maker.cxx:377
 AliTOFT0maker.cxx:378
 AliTOFT0maker.cxx:379
 AliTOFT0maker.cxx:380
 AliTOFT0maker.cxx:381
 AliTOFT0maker.cxx:382
 AliTOFT0maker.cxx:383
 AliTOFT0maker.cxx:384
 AliTOFT0maker.cxx:385
 AliTOFT0maker.cxx:386
 AliTOFT0maker.cxx:387
 AliTOFT0maker.cxx:388
 AliTOFT0maker.cxx:389
 AliTOFT0maker.cxx:390
 AliTOFT0maker.cxx:391
 AliTOFT0maker.cxx:392
 AliTOFT0maker.cxx:393
 AliTOFT0maker.cxx:394
 AliTOFT0maker.cxx:395
 AliTOFT0maker.cxx:396
 AliTOFT0maker.cxx:397
 AliTOFT0maker.cxx:398
 AliTOFT0maker.cxx:399
 AliTOFT0maker.cxx:400
 AliTOFT0maker.cxx:401
 AliTOFT0maker.cxx:402
 AliTOFT0maker.cxx:403
 AliTOFT0maker.cxx:404
 AliTOFT0maker.cxx:405
 AliTOFT0maker.cxx:406
 AliTOFT0maker.cxx:407
 AliTOFT0maker.cxx:408
 AliTOFT0maker.cxx:409
 AliTOFT0maker.cxx:410
 AliTOFT0maker.cxx:411
 AliTOFT0maker.cxx:412
 AliTOFT0maker.cxx:413
 AliTOFT0maker.cxx:414
 AliTOFT0maker.cxx:415
 AliTOFT0maker.cxx:416
 AliTOFT0maker.cxx:417
 AliTOFT0maker.cxx:418
 AliTOFT0maker.cxx:419
 AliTOFT0maker.cxx:420
 AliTOFT0maker.cxx:421
 AliTOFT0maker.cxx:422
 AliTOFT0maker.cxx:423
 AliTOFT0maker.cxx:424
 AliTOFT0maker.cxx:425
 AliTOFT0maker.cxx:426
 AliTOFT0maker.cxx:427
 AliTOFT0maker.cxx:428
 AliTOFT0maker.cxx:429
 AliTOFT0maker.cxx:430
 AliTOFT0maker.cxx:431
 AliTOFT0maker.cxx:432
 AliTOFT0maker.cxx:433
 AliTOFT0maker.cxx:434
 AliTOFT0maker.cxx:435
 AliTOFT0maker.cxx:436
 AliTOFT0maker.cxx:437
 AliTOFT0maker.cxx:438
 AliTOFT0maker.cxx:439
 AliTOFT0maker.cxx:440
 AliTOFT0maker.cxx:441
 AliTOFT0maker.cxx:442
 AliTOFT0maker.cxx:443
 AliTOFT0maker.cxx:444
 AliTOFT0maker.cxx:445
 AliTOFT0maker.cxx:446
 AliTOFT0maker.cxx:447
 AliTOFT0maker.cxx:448
 AliTOFT0maker.cxx:449
 AliTOFT0maker.cxx:450
 AliTOFT0maker.cxx:451
 AliTOFT0maker.cxx:452
 AliTOFT0maker.cxx:453
 AliTOFT0maker.cxx:454
 AliTOFT0maker.cxx:455
 AliTOFT0maker.cxx:456
 AliTOFT0maker.cxx:457
 AliTOFT0maker.cxx:458
 AliTOFT0maker.cxx:459
 AliTOFT0maker.cxx:460
 AliTOFT0maker.cxx:461
 AliTOFT0maker.cxx:462
 AliTOFT0maker.cxx:463
 AliTOFT0maker.cxx:464
 AliTOFT0maker.cxx:465
 AliTOFT0maker.cxx:466
 AliTOFT0maker.cxx:467
 AliTOFT0maker.cxx:468
 AliTOFT0maker.cxx:469
 AliTOFT0maker.cxx:470
 AliTOFT0maker.cxx:471
 AliTOFT0maker.cxx:472
 AliTOFT0maker.cxx:473
 AliTOFT0maker.cxx:474
 AliTOFT0maker.cxx:475
 AliTOFT0maker.cxx:476
 AliTOFT0maker.cxx:477
 AliTOFT0maker.cxx:478
 AliTOFT0maker.cxx:479
 AliTOFT0maker.cxx:480
 AliTOFT0maker.cxx:481
 AliTOFT0maker.cxx:482
 AliTOFT0maker.cxx:483
 AliTOFT0maker.cxx:484
 AliTOFT0maker.cxx:485
 AliTOFT0maker.cxx:486
 AliTOFT0maker.cxx:487
 AliTOFT0maker.cxx:488
 AliTOFT0maker.cxx:489
 AliTOFT0maker.cxx:490
 AliTOFT0maker.cxx:491
 AliTOFT0maker.cxx:492
 AliTOFT0maker.cxx:493
 AliTOFT0maker.cxx:494
 AliTOFT0maker.cxx:495
 AliTOFT0maker.cxx:496
 AliTOFT0maker.cxx:497
 AliTOFT0maker.cxx:498
 AliTOFT0maker.cxx:499
 AliTOFT0maker.cxx:500
 AliTOFT0maker.cxx:501
 AliTOFT0maker.cxx:502
 AliTOFT0maker.cxx:503
 AliTOFT0maker.cxx:504
 AliTOFT0maker.cxx:505
 AliTOFT0maker.cxx:506
 AliTOFT0maker.cxx:507
 AliTOFT0maker.cxx:508
 AliTOFT0maker.cxx:509
 AliTOFT0maker.cxx:510
 AliTOFT0maker.cxx:511
 AliTOFT0maker.cxx:512
 AliTOFT0maker.cxx:513
 AliTOFT0maker.cxx:514
 AliTOFT0maker.cxx:515
 AliTOFT0maker.cxx:516
 AliTOFT0maker.cxx:517
 AliTOFT0maker.cxx:518
 AliTOFT0maker.cxx:519
 AliTOFT0maker.cxx:520
 AliTOFT0maker.cxx:521
 AliTOFT0maker.cxx:522
 AliTOFT0maker.cxx:523
 AliTOFT0maker.cxx:524
 AliTOFT0maker.cxx:525
 AliTOFT0maker.cxx:526
 AliTOFT0maker.cxx:527
 AliTOFT0maker.cxx:528
 AliTOFT0maker.cxx:529
 AliTOFT0maker.cxx:530
 AliTOFT0maker.cxx:531
 AliTOFT0maker.cxx:532
 AliTOFT0maker.cxx:533
 AliTOFT0maker.cxx:534
 AliTOFT0maker.cxx:535
 AliTOFT0maker.cxx:536
 AliTOFT0maker.cxx:537
 AliTOFT0maker.cxx:538
 AliTOFT0maker.cxx:539
 AliTOFT0maker.cxx:540
 AliTOFT0maker.cxx:541
 AliTOFT0maker.cxx:542
 AliTOFT0maker.cxx:543
 AliTOFT0maker.cxx:544
 AliTOFT0maker.cxx:545
 AliTOFT0maker.cxx:546
 AliTOFT0maker.cxx:547