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$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Time Of Flight                                                           //
//  This class contains the basic functions for the Time Of Flight           //
//  detector. Functions specific to one particular geometry are              //
//  contained in the derived classes                                         //
//                                                                           //
//  VERSIONE WITH 5 SYMMETRIC MODULES ALONG Z AXIS                           //
//  ============================================================             //
//                                                                           //
//  VERSION WITH HOLES FOR PHOS AND TRD IN SPACEFRAME WITH HOLES             //
//                                                                           //
//  Volume sensibile : FPAD                                                  //
//                                                                           //
//                                                                           //
//                                                                           //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
// Begin_Html
/*
<img src="picts/AliTOFClass.gif">
*/
//End_Html

#include <TClonesArray.h>
#include <TFile.h>
#include <TFolder.h>
#include <TROOT.h>
#include <TTree.h>
#include <TVirtualMC.h>
#include <TStopwatch.h>

#include "AliConst.h"
#include "AliLoader.h"
#include "AliLog.h"
#include "AliMC.h"
#include "AliRun.h"
#include "AliDAQ.h"
#include "AliRawReader.h"

//#include "AliTOFDDLRawData.h"
#include "AliTOFDigitizer.h"
#include "AliTOFdigit.h"
#include "AliTOFhitT0.h"
#include "AliTOFhit.h"
#include "AliTOFGeometry.h"
#include "AliTOFSDigitizer.h"
#include "AliTOFSDigit.h"
#include "AliTOF.h"
#include "AliTOFrawData.h"
#include "AliTOFRawStream.h"

class AliTOFcluster;

// extern TROOT *gROOT;
// extern TVirtualMC *TVirtualMC::GetMC();

// extern AliRun *gAlice;

ClassImp(AliTOF)

//_____________________________________________________________________________
AliTOF::AliTOF():
  fFGeom(0x0),
  fSDigits(0x0),
  fNSDigits(0),
  fReconParticles(0x0),
  fIdSens(-1),
  fTZero(kFALSE),
  fTOFHoles(kTRUE),
  fTOFGeometry(0x0),
  fTOFRawWriter(AliTOFDDLRawData())
{
  //
  // Default constructor
  //

  //by default all sectors switched on
  for (Int_t ii=0; ii<18; ii++) fTOFSectors[ii]=0;

  fDigits = 0;
  fIshunt   = 0;
  fName = "TOF";

}
 
//_____________________________________________________________________________
AliTOF::AliTOF(const char *name, const char *title, Option_t *option)
       : 
  AliDetector(name,title),
  fFGeom(0x0),
  fSDigits(0x0),
  fNSDigits(0),
  fReconParticles(0x0),
  fIdSens(-1),
  fTZero(kFALSE),
  fTOFHoles(kTRUE),
  fTOFGeometry(0x0),
  fTOFRawWriter(AliTOFDDLRawData())
{
  //
  // AliTOF standard constructor
  // 
  // Here are fixed some important parameters
  //

  // Initialization of hits, sdigits and digits array
  // added option for time zero analysis
  //skowron
  fTOFGeometry = new AliTOFGeometry();

  //by default all sectors switched on
  for (Int_t ii=0; ii<18; ii++) fTOFSectors[ii]=0;

  if (strstr(option,"tzero")){
    fHits   = new TClonesArray("AliTOFhitT0",  1000);
    fTZero = kTRUE;
    //    AliWarning("tzero option requires AliTOFv4T0/AliTOFv5T0 as TOF version (check Your Config.C)");
  }else{
    fHits   = new TClonesArray("AliTOFhit",  1000);
    fTZero = kFALSE;
  }
  if (gAlice==0) {
     AliFatal("gAlice==0 !");
  }

  AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();

  if (mcApplication->GetHitLists())
     mcApplication->AddHitList(fHits);
  else AliError("gAlice->GetHitLists()==0");

  fIshunt  = 0;
  fSDigits = new TClonesArray("AliTOFSDigit", 1000);
  fDigits  = new TClonesArray("AliTOFdigit",  1000);

  //
  // Digitization parameters
  //
  // (Transfer Functions to be inserted here)
  //
  //PH  SetMarkerColor(7);
  //PH  SetMarkerStyle(2);
  //PH  SetMarkerSize(0.4);

// Strip Parameters
  //fGapA    =   4.; //cm  Gap beetween tilted strip in A-type plate
  //fGapB    =   6.; //cm  Gap beetween tilted strip in B-type plate

  // Physical performances
  //fTimeRes = 100.;//ps
  //fChrgRes = 100.;//pC

}

//____________________________________________________________________________
void AliTOF::SetTOFSectors(Int_t * const sectors)
{
  // Setter for partial/full TOF configuration

  for(Int_t isec=0;isec<18;isec++){
    fTOFSectors[isec]=sectors[isec];
  }
}
//____________________________________________________________________________
void AliTOF::GetTOFSectors(Int_t *sectors) const
{
  // Getter for partial/full TOF configuration

  for(Int_t isec=0;isec<18;isec++){
    sectors[isec]=fTOFSectors[isec];
  }
}

//_____________________________________________________________________________
void AliTOF::CreateTOFFolders()
{
  // create the ALICE TFolder
  // create the ALICE main TFolder
  // to be done by AliRun

  TFolder * alice = new TFolder();
  alice->SetNameTitle("FPAlice", "Alice Folder") ;
  gROOT->GetListOfBrowsables()->Add(alice) ;

  TFolder * aliceF  = alice->AddFolder("folders", "Alice memory Folder") ;
  //  make it the owner of the objects that it contains
  aliceF->SetOwner() ;
  // geometry folder
  TFolder * geomF = aliceF->AddFolder("Geometry", "Geometry objects") ;
 
  // creates the TOF geometry  folder
  geomF->AddFolder("TOF", "Geometry for TOF") ;
}

//_____________________________________________________________________________
AliTOF::~AliTOF()
{
  // dtor:
  // it remove also the alice folder 
  /* PH Temporarily commented because of problems
  TFolder * alice = (TFolder*)gROOT->GetListOfBrowsables()->FindObject("FPAlice") ;
  delete alice;
  alice = 0;
  */
  if (fHits)
    {
      fHits->Delete ();
      delete fHits;
      fHits = 0;
    }
  if (fDigits)
    {
      fDigits->Delete ();
      delete fDigits;
      fDigits = 0;
    }
  if (fSDigits)
    {
      fSDigits->Delete();
      delete fSDigits;
      fSDigits = 0;
    }

  if (fReconParticles)
    {
      fReconParticles->Delete ();
      delete fReconParticles;
      fReconParticles = 0;
    }

}

//_____________________________________________________________________________
void AliTOF::AddHit(Int_t track, Int_t *vol, Float_t *hits)
{
  //
  // Add a TOF hit
  // new with placement used
  //
  TClonesArray &lhits = *fHits;
  new(lhits[fNhits++]) AliTOFhit(fIshunt, track, vol, hits);
}

//_____________________________________________________________________________
void AliTOF::AddT0Hit(Int_t track, Int_t *vol, Float_t *hits)
{
  //
  // Add a TOF hit
  // new with placement used
  //
  TClonesArray &lhits = *fHits;
  new(lhits[fNhits++]) AliTOFhitT0(fIshunt, track, vol, hits);
}

//_____________________________________________________________________________
void AliTOF::AddDigit(Int_t *tracks, Int_t *vol, Int_t *digits)
{
  //
  // Add a TOF digit
  // new with placement used
  //
  TClonesArray &ldigits = *fDigits;
  new (ldigits[fNdigits++]) AliTOFdigit(tracks, vol, digits);
}

//_____________________________________________________________________________
void AliTOF::AddSDigit(Int_t tracknum, Int_t *vol, Int_t *digits)
{
     
//
// Add a TOF sdigit
//
        
  TClonesArray &lSDigits = *fSDigits;   
  new(lSDigits[fNSDigits++]) AliTOFSDigit(tracknum, vol, digits);
}

//_____________________________________________________________________________
void AliTOF::SetTreeAddress ()
{
  // Set branch address for the Hits and Digits Tree.
  
  if (fLoader->TreeH())
   {
     if (fHits == 0x0)
      {
        if (fTZero) fHits   = new TClonesArray("AliTOFhitT0", 1000);
        else fHits   = new TClonesArray("AliTOFhit", 1000);
      }
   }
  AliDetector::SetTreeAddress ();

  TBranch *branch;

  if (fLoader->TreeS () )
    {
      branch = fLoader->TreeS ()->GetBranch ("TOF");
      if (branch) {
        if (fSDigits == 0x0) fSDigits = new TClonesArray("AliTOFSDigit",  1000);
        branch->SetAddress (&fSDigits);
      }
    }

  if (fLoader->TreeR() ) 
    {
      branch = fLoader->TreeR()->GetBranch("TOF"); 
      if (branch) 
       {
	 if (fReconParticles == 0x0) fReconParticles = new TClonesArray("AliTOFcluster",  1000);
         branch->SetAddress(&fReconParticles);
       }
    }

  /*
  if (fLoader->TreeR() && fReconParticles) //I do not know where this array is created - skowron
    {
      branch = fLoader->TreeR()->GetBranch("TOF"); 
      if (branch) 
       {
         branch->SetAddress(&fReconParticles) ;
       }
    }
  */
}

//_____________________________________________________________________________
void AliTOF::CreateGeometry()
{
  //
  // Common geometry code 
  //
  //Begin_Html
  /*
    <img src="picts/AliTOFv23.gif">
  */
  //End_Html
  //

  Float_t xTof, yTof;

  if (IsVersion()==8) {

    xTof = 124.5;//fTOFGeometry->StripLength()+2.*(0.3+0.03); // cm,  x-dimension of FTOA volume
    yTof = fTOFGeometry->Rmax()-fTOFGeometry->Rmin(); // cm,  y-dimension of FTOA volume
    Float_t zTof = fTOFGeometry->ZlenA();             // cm,  z-dimension of FTOA volume
    
    //  TOF module internal definitions
    TOFpc(xTof, yTof, zTof);

  } else if (IsVersion()==7) {

    xTof = 124.5;//fTOFGeometry->StripLength()+2.*(0.3+0.03); // cm,  x-dimension of FTOA volume
    yTof = fTOFGeometry->Rmax()-fTOFGeometry->Rmin(); // cm,  y-dimension of FTOA volume
    Float_t zTof = fTOFGeometry->ZlenA();             // cm,  z-dimension of FTOA volume
    
    //  TOF module internal definitions
    TOFpc(xTof, yTof, zTof, fTOFGeometry->ZlenB());

  } else {

    Float_t wall = 4.;//cm // frame inbetween TOF modules

    // Sizes of TOF module with its support etc..
    xTof = 2.*(fTOFGeometry->Rmin()*TMath::Tan(10.*kDegrad)-wall/2.-0.5);
    yTof = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();

    //  TOF module internal definitions 
    TOFpc(xTof, yTof, fTOFGeometry->ZlenC(), fTOFGeometry->ZlenB(), fTOFGeometry->ZlenA(), fTOFGeometry->MaxhZtof());
  }

}


//___________________________________________
void AliTOF::ResetHits ()
{
  // Reset number of clusters and the cluster array for this detector
  AliDetector::ResetHits ();
}

//____________________________________________
void AliTOF::ResetDigits ()
{
  //
  // Reset number of digits and the digits array for this detector
  AliDetector::ResetDigits ();
  //
} 
//____________________________________________
void AliTOF::ResetSDigits ()
{
  //
  // Reset number of sdigits and the sdigits array for this detector
  fNSDigits = 0;
  //fSDigits = 0x0;
  //
} 
//_____________________________________________________________________________
void AliTOF::Init()
{
  //
  // Initialise TOF detector after it has been built
  //
  // Set id of TOF sensitive volume
  if (IsVersion() !=0) fIdSens=TVirtualMC::GetMC()->VolId("FPAD");

  /*
  // Save the geometry
  TDirectory* saveDir = gDirectory;
  AliRunLoader::Instance()->CdGAFile();
  fTOFGeometry->Write("TOFGeometry");
  saveDir->cd();
  */
}

//____________________________________________________________________________
void AliTOF::MakeBranch(Option_t* option)
{
 //
 // Initializes the Branches of the TOF inside the 
 // trees written for each event. 
 // AliDetector::MakeBranch initializes just the 
 // Branch inside TreeH. Here we add the branches in 
 // TreeD, TreeS and TreeR.
 //
  const char *oH = strstr(option,"H");
  if (fLoader->TreeH() && oH)
   {
     if (fHits == 0x0)
      {
        if (fTZero) fHits   = new TClonesArray("AliTOFhitT0", 1000);
        else fHits   = new TClonesArray("AliTOFhit", 1000);
      }
   }
  
  AliDetector::MakeBranch(option);

  Int_t buffersize = 4000;
  const Int_t kSize=10;
  Char_t branchname[kSize];
  snprintf(branchname,kSize,"%s",GetName());
  
  const char *oD = strstr(option,"D");
  const char *oS = strstr(option,"S");
  const char *oR = strstr(option,"R");

  if (fLoader->TreeD() && oD){
    if (fDigits == 0x0) fDigits = new TClonesArray("AliTOFdigit",  1000); 
    MakeBranchInTree(fLoader->TreeD(), branchname, &fDigits,buffersize, 0) ;
  }

  if (fLoader->TreeS() && oS){
    if (fSDigits == 0x0) fSDigits = new TClonesArray("AliTOFSDigit",  1000);
    MakeBranchInTree(fLoader->TreeS(), branchname, &fSDigits,buffersize, 0) ;
  }

  if (fLoader->TreeR() && oR){
    if (fReconParticles == 0x0) fReconParticles = new TClonesArray("AliTOFcluster",  1000);
    MakeBranchInTree(fLoader->TreeR(), branchname, &fReconParticles,buffersize, 0) ;
  }

  /*
  if (fReconParticles && fLoader->TreeR() && oR){
    MakeBranchInTree(fLoader->TreeR(), branchname, &fReconParticles,buffersize, 0) ;
  }
  */
}

//____________________________________________________________________________
void AliTOF::Makehits(Bool_t hits) 
{
// default argument used, see AliTOF.h
// Enable/Disable the writing of the TOF-hits branch 
// on TreeH
// by default :  enabled for TOFv1, v2, v3, v4, v5
//              disabled for TOFv0
// 
   if (hits &&  (IsVersion()!=0))
      fIdSens = TVirtualMC::GetMC()->VolId("FPAD");
   else
      AliInfo("Option for writing the TOF-hits branch on TreeH: disabled");
}

//____________________________________________________________________________
void AliTOF::FinishEvent()
{
// do nothing
}

//____________________________________________________________________________
void AliTOF::Hits2SDigits()
{
//
// Use the TOF SDigitizer to make TOF SDigits
//

//  AliInfo("Start...");
  
  AliRunLoader * rl = fLoader->GetRunLoader();
  AliDebug(2,"Initialized runLoader");
  AliTOFSDigitizer sd((rl->GetFileName()).Data());
  AliDebug(2,"Initialized TOF sdigitizer");
  //ToAliDebug(1, sd.Print(""));
  //AliInfo("ToAliDebug");

  //sd.Digitize("all") ;
  sd.Digitize("partial") ;

  AliDebug(2,"I am sorting from AliTOF class");

}

//____________________________________________________________________________
void AliTOF::Hits2SDigits(Int_t evNumber1, Int_t evNumber2)
{
//
// Use the TOF SDigitizer to make TOF SDigits
//

  if ((evNumber2-evNumber1)==1) 
    AliDebug(1, Form("I am making sdigits for the %dth event", evNumber1));
  if ((evNumber2-evNumber1)>1)
    AliDebug(1, Form("I am making sdigits for the events from the %dth to the %dth", evNumber1, evNumber2-1));
 
  AliRunLoader * rl = fLoader->GetRunLoader();
  AliTOFSDigitizer sd((rl->GetFileName()).Data(),evNumber1,evNumber2) ;
  ToAliDebug(1, sd.Print(""));

  sd.Digitize("") ;

}

//___________________________________________________________________________
AliDigitizer* AliTOF::CreateDigitizer(AliDigitizationInput* digInput) const
{
  AliDebug(2,"I am creating the TOF digitizer");
  return new AliTOFDigitizer(digInput);
}

//___________________________________________________________________________
Bool_t AliTOF::CheckOverlap(const Int_t * const vol,
			    Int_t* digit,Int_t Track)
{
//
// Checks if 2 or more hits belong to the same pad.
// In this case the data assigned to the digit object
// are the ones of the first hit in order of Time.
// 2 hits from the same track on the same pad are collected.
// Called only by Hits2SDigits.
// This procedure has to be optimized in the next TOF release.
//

  Bool_t overlap = kFALSE;
  Int_t  vol2[5];

  for (Int_t ndig=0; ndig<fSDigits->GetEntries(); ndig++){
    AliTOFdigit* currentDigit = (AliTOFdigit*)(fSDigits->UncheckedAt(ndig));
    currentDigit->GetLocation(vol2);
    Bool_t idem= kTRUE;
    // check on digit volume
    for (Int_t i=0;i<=4;i++){
      if (!idem) break;
      if (vol[i]!=vol2[i]) idem=kFALSE;}

    if (idem){  // same pad fired
      Int_t tdc2 = digit[0];
      Int_t tdc1 = currentDigit->GetTdc();

      // we separate two digits on the same pad if
      // they are separated in time by at least 25 ns
      // remember that tdc time is given in ps

      if (TMath::Abs(tdc1-tdc2)<25000){
	// in case of overlap we take the earliest
	if (tdc1>tdc2){
	  currentDigit->SetTdc(tdc2); 
	  currentDigit->SetAdc(digit[1]);
	}
	else {
	  currentDigit->SetTdc(tdc1);
	  currentDigit->SetAdc(digit[1]);
	}
	currentDigit->AddTrack(Track); // add track number in the track array
	overlap = kTRUE;
	return overlap;
      } else 
	overlap= kFALSE;

    } // close if (idem) -> two digits on the same TOF pad

  } // end loop on existing sdigits

  return overlap;
}
//____________________________________________________________________________
void AliTOF::Digits2Raw()
{
//
// Starting from the TOF digits, writes the Raw Data objects
//

  TStopwatch stopwatch;
  stopwatch.Start();

  fLoader->LoadDigits();

  TTree* digits = fLoader->TreeD();
  if (!digits) {
    AliError("no digits tree");
    return;
  }
  
  //AliTOFDDLRawData rawWriter;
  fTOFRawWriter.Clear();
  fTOFRawWriter.SetVerbose(0);
  if (fTOFRawWriter.GetPackedAcquisitionMode()) {
    if(fTOFRawWriter.GetMatchingWindow()>8192)
      AliWarning(Form("You are running in packing mode and the matching window is %.2f ns, i.e. greater than 199.8848 ns",
		      fTOFRawWriter.GetMatchingWindow()*AliTOFGeometry::TdcBinWidth()*1.e-03));
  }
  
  AliDebug(1,"Formatting raw data for TOF");
  digits->GetEvent(0);
  fTOFRawWriter.RawDataTOF(digits->GetBranch("TOF"));  

  fLoader->UnloadDigits();
  
  AliDebug(1, Form("Execution time to write TOF raw data : R:%.2fs C:%.2fs",
		   stopwatch.RealTime(),stopwatch.CpuTime()));

}

//____________________________________________________________________________
void AliTOF::RecreateSDigitsArray() {
//
// delete TClonesArray fSDigits and create it again
//  needed for backward compatability with PPR test production
//
  fSDigits->Clear();
}
//____________________________________________________________________________
void AliTOF::CreateSDigitsArray() {
//
// create TClonesArray fSDigits
//  needed for backward compatability with PPR test production
//
  fSDigits       = new TClonesArray("AliTOFSDigit",  1000);
}
//____________________________________________________________________________
Bool_t AliTOF::Raw2SDigits(AliRawReader* rawReader)
{
  //
  // Converts raw data to sdigits for TOF
  //

  TStopwatch stopwatch;
  stopwatch.Start();

  if(!GetLoader()->TreeS()) {MakeTree("S");  MakeBranch("S");}
  //TClonesArray &aSDigits = *fSDigits;

  AliTOFRawStream tofRawStream = AliTOFRawStream();
  tofRawStream.Raw2SDigits(rawReader, fSDigits);

  GetLoader()->TreeS()->Fill(); GetLoader()->WriteSDigits("OVERWRITE");//write out sdigits
  Int_t nSDigits = fSDigits->GetEntries();

  ResetSDigits();

  AliDebug(1, Form("Got %d TOF sdigits", nSDigits));
  AliDebug(1, Form("Execution time to read TOF raw data and fill TOF sdigit tree : R:%.2fs C:%.2fs",
		   stopwatch.RealTime(),stopwatch.CpuTime()));

  return kTRUE;

}

//____________________________________________________________________________
void AliTOF::Raw2Digits(AliRawReader* rawReader)
{
  //
  // Converts raw data to digits for TOF
  //

  TStopwatch stopwatch;
  stopwatch.Start();

  if(!GetLoader()->TreeD()) {MakeTree("D");  MakeBranch("D");}
  //TClonesArray &aDigits = *fDigits;

  AliTOFRawStream tofRawStream = AliTOFRawStream();
  tofRawStream.Raw2Digits(rawReader, fDigits);

  GetLoader()->TreeD()->Fill(); GetLoader()->WriteDigits("OVERWRITE");//write out digits
  Int_t nDigits = fDigits->GetEntries();

  ResetDigits();

  AliDebug(1, Form("Got %d TOF digits", nDigits));
  AliDebug(1, Form("Execution time to read TOF raw data and fill TOF digit tree : R:%.2fs C:%.2fs",
		   stopwatch.RealTime(),stopwatch.CpuTime()));

}
 AliTOF.cxx:1
 AliTOF.cxx:2
 AliTOF.cxx:3
 AliTOF.cxx:4
 AliTOF.cxx:5
 AliTOF.cxx:6
 AliTOF.cxx:7
 AliTOF.cxx:8
 AliTOF.cxx:9
 AliTOF.cxx:10
 AliTOF.cxx:11
 AliTOF.cxx:12
 AliTOF.cxx:13
 AliTOF.cxx:14
 AliTOF.cxx:15
 AliTOF.cxx:16
 AliTOF.cxx:17
 AliTOF.cxx:18
 AliTOF.cxx:19
 AliTOF.cxx:20
 AliTOF.cxx:21
 AliTOF.cxx:22
 AliTOF.cxx:23
 AliTOF.cxx:24
 AliTOF.cxx:25
 AliTOF.cxx:26
 AliTOF.cxx:27
 AliTOF.cxx:28
 AliTOF.cxx:29
 AliTOF.cxx:30
 AliTOF.cxx:31
 AliTOF.cxx:32
 AliTOF.cxx:33
 AliTOF.cxx:34
 AliTOF.cxx:35
 AliTOF.cxx:36
 AliTOF.cxx:37
 AliTOF.cxx:38
 AliTOF.cxx:39
 AliTOF.cxx:40
 AliTOF.cxx:41
 AliTOF.cxx:42
 AliTOF.cxx:43
 AliTOF.cxx:44
 AliTOF.cxx:45
 AliTOF.cxx:46
 AliTOF.cxx:47
 AliTOF.cxx:48
 AliTOF.cxx:49
 AliTOF.cxx:50
 AliTOF.cxx:51
 AliTOF.cxx:52
 AliTOF.cxx:53
 AliTOF.cxx:54
 AliTOF.cxx:55
 AliTOF.cxx:56
 AliTOF.cxx:57
 AliTOF.cxx:58
 AliTOF.cxx:59
 AliTOF.cxx:60
 AliTOF.cxx:61
 AliTOF.cxx:62
 AliTOF.cxx:63
 AliTOF.cxx:64
 AliTOF.cxx:65
 AliTOF.cxx:66
 AliTOF.cxx:67
 AliTOF.cxx:68
 AliTOF.cxx:69
 AliTOF.cxx:70
 AliTOF.cxx:71
 AliTOF.cxx:72
 AliTOF.cxx:73
 AliTOF.cxx:74
 AliTOF.cxx:75
 AliTOF.cxx:76
 AliTOF.cxx:77
 AliTOF.cxx:78
 AliTOF.cxx:79
 AliTOF.cxx:80
 AliTOF.cxx:81
 AliTOF.cxx:82
 AliTOF.cxx:83
 AliTOF.cxx:84
 AliTOF.cxx:85
 AliTOF.cxx:86
 AliTOF.cxx:87
 AliTOF.cxx:88
 AliTOF.cxx:89
 AliTOF.cxx:90
 AliTOF.cxx:91
 AliTOF.cxx:92
 AliTOF.cxx:93
 AliTOF.cxx:94
 AliTOF.cxx:95
 AliTOF.cxx:96
 AliTOF.cxx:97
 AliTOF.cxx:98
 AliTOF.cxx:99
 AliTOF.cxx:100
 AliTOF.cxx:101
 AliTOF.cxx:102
 AliTOF.cxx:103
 AliTOF.cxx:104
 AliTOF.cxx:105
 AliTOF.cxx:106
 AliTOF.cxx:107
 AliTOF.cxx:108
 AliTOF.cxx:109
 AliTOF.cxx:110
 AliTOF.cxx:111
 AliTOF.cxx:112
 AliTOF.cxx:113
 AliTOF.cxx:114
 AliTOF.cxx:115
 AliTOF.cxx:116
 AliTOF.cxx:117
 AliTOF.cxx:118
 AliTOF.cxx:119
 AliTOF.cxx:120
 AliTOF.cxx:121
 AliTOF.cxx:122
 AliTOF.cxx:123
 AliTOF.cxx:124
 AliTOF.cxx:125
 AliTOF.cxx:126
 AliTOF.cxx:127
 AliTOF.cxx:128
 AliTOF.cxx:129
 AliTOF.cxx:130
 AliTOF.cxx:131
 AliTOF.cxx:132
 AliTOF.cxx:133
 AliTOF.cxx:134
 AliTOF.cxx:135
 AliTOF.cxx:136
 AliTOF.cxx:137
 AliTOF.cxx:138
 AliTOF.cxx:139
 AliTOF.cxx:140
 AliTOF.cxx:141
 AliTOF.cxx:142
 AliTOF.cxx:143
 AliTOF.cxx:144
 AliTOF.cxx:145
 AliTOF.cxx:146
 AliTOF.cxx:147
 AliTOF.cxx:148
 AliTOF.cxx:149
 AliTOF.cxx:150
 AliTOF.cxx:151
 AliTOF.cxx:152
 AliTOF.cxx:153
 AliTOF.cxx:154
 AliTOF.cxx:155
 AliTOF.cxx:156
 AliTOF.cxx:157
 AliTOF.cxx:158
 AliTOF.cxx:159
 AliTOF.cxx:160
 AliTOF.cxx:161
 AliTOF.cxx:162
 AliTOF.cxx:163
 AliTOF.cxx:164
 AliTOF.cxx:165
 AliTOF.cxx:166
 AliTOF.cxx:167
 AliTOF.cxx:168
 AliTOF.cxx:169
 AliTOF.cxx:170
 AliTOF.cxx:171
 AliTOF.cxx:172
 AliTOF.cxx:173
 AliTOF.cxx:174
 AliTOF.cxx:175
 AliTOF.cxx:176
 AliTOF.cxx:177
 AliTOF.cxx:178
 AliTOF.cxx:179
 AliTOF.cxx:180
 AliTOF.cxx:181
 AliTOF.cxx:182
 AliTOF.cxx:183
 AliTOF.cxx:184
 AliTOF.cxx:185
 AliTOF.cxx:186
 AliTOF.cxx:187
 AliTOF.cxx:188
 AliTOF.cxx:189
 AliTOF.cxx:190
 AliTOF.cxx:191
 AliTOF.cxx:192
 AliTOF.cxx:193
 AliTOF.cxx:194
 AliTOF.cxx:195
 AliTOF.cxx:196
 AliTOF.cxx:197
 AliTOF.cxx:198
 AliTOF.cxx:199
 AliTOF.cxx:200
 AliTOF.cxx:201
 AliTOF.cxx:202
 AliTOF.cxx:203
 AliTOF.cxx:204
 AliTOF.cxx:205
 AliTOF.cxx:206
 AliTOF.cxx:207
 AliTOF.cxx:208
 AliTOF.cxx:209
 AliTOF.cxx:210
 AliTOF.cxx:211
 AliTOF.cxx:212
 AliTOF.cxx:213
 AliTOF.cxx:214
 AliTOF.cxx:215
 AliTOF.cxx:216
 AliTOF.cxx:217
 AliTOF.cxx:218
 AliTOF.cxx:219
 AliTOF.cxx:220
 AliTOF.cxx:221
 AliTOF.cxx:222
 AliTOF.cxx:223
 AliTOF.cxx:224
 AliTOF.cxx:225
 AliTOF.cxx:226
 AliTOF.cxx:227
 AliTOF.cxx:228
 AliTOF.cxx:229
 AliTOF.cxx:230
 AliTOF.cxx:231
 AliTOF.cxx:232
 AliTOF.cxx:233
 AliTOF.cxx:234
 AliTOF.cxx:235
 AliTOF.cxx:236
 AliTOF.cxx:237
 AliTOF.cxx:238
 AliTOF.cxx:239
 AliTOF.cxx:240
 AliTOF.cxx:241
 AliTOF.cxx:242
 AliTOF.cxx:243
 AliTOF.cxx:244
 AliTOF.cxx:245
 AliTOF.cxx:246
 AliTOF.cxx:247
 AliTOF.cxx:248
 AliTOF.cxx:249
 AliTOF.cxx:250
 AliTOF.cxx:251
 AliTOF.cxx:252
 AliTOF.cxx:253
 AliTOF.cxx:254
 AliTOF.cxx:255
 AliTOF.cxx:256
 AliTOF.cxx:257
 AliTOF.cxx:258
 AliTOF.cxx:259
 AliTOF.cxx:260
 AliTOF.cxx:261
 AliTOF.cxx:262
 AliTOF.cxx:263
 AliTOF.cxx:264
 AliTOF.cxx:265
 AliTOF.cxx:266
 AliTOF.cxx:267
 AliTOF.cxx:268
 AliTOF.cxx:269
 AliTOF.cxx:270
 AliTOF.cxx:271
 AliTOF.cxx:272
 AliTOF.cxx:273
 AliTOF.cxx:274
 AliTOF.cxx:275
 AliTOF.cxx:276
 AliTOF.cxx:277
 AliTOF.cxx:278
 AliTOF.cxx:279
 AliTOF.cxx:280
 AliTOF.cxx:281
 AliTOF.cxx:282
 AliTOF.cxx:283
 AliTOF.cxx:284
 AliTOF.cxx:285
 AliTOF.cxx:286
 AliTOF.cxx:287
 AliTOF.cxx:288
 AliTOF.cxx:289
 AliTOF.cxx:290
 AliTOF.cxx:291
 AliTOF.cxx:292
 AliTOF.cxx:293
 AliTOF.cxx:294
 AliTOF.cxx:295
 AliTOF.cxx:296
 AliTOF.cxx:297
 AliTOF.cxx:298
 AliTOF.cxx:299
 AliTOF.cxx:300
 AliTOF.cxx:301
 AliTOF.cxx:302
 AliTOF.cxx:303
 AliTOF.cxx:304
 AliTOF.cxx:305
 AliTOF.cxx:306
 AliTOF.cxx:307
 AliTOF.cxx:308
 AliTOF.cxx:309
 AliTOF.cxx:310
 AliTOF.cxx:311
 AliTOF.cxx:312
 AliTOF.cxx:313
 AliTOF.cxx:314
 AliTOF.cxx:315
 AliTOF.cxx:316
 AliTOF.cxx:317
 AliTOF.cxx:318
 AliTOF.cxx:319
 AliTOF.cxx:320
 AliTOF.cxx:321
 AliTOF.cxx:322
 AliTOF.cxx:323
 AliTOF.cxx:324
 AliTOF.cxx:325
 AliTOF.cxx:326
 AliTOF.cxx:327
 AliTOF.cxx:328
 AliTOF.cxx:329
 AliTOF.cxx:330
 AliTOF.cxx:331
 AliTOF.cxx:332
 AliTOF.cxx:333
 AliTOF.cxx:334
 AliTOF.cxx:335
 AliTOF.cxx:336
 AliTOF.cxx:337
 AliTOF.cxx:338
 AliTOF.cxx:339
 AliTOF.cxx:340
 AliTOF.cxx:341
 AliTOF.cxx:342
 AliTOF.cxx:343
 AliTOF.cxx:344
 AliTOF.cxx:345
 AliTOF.cxx:346
 AliTOF.cxx:347
 AliTOF.cxx:348
 AliTOF.cxx:349
 AliTOF.cxx:350
 AliTOF.cxx:351
 AliTOF.cxx:352
 AliTOF.cxx:353
 AliTOF.cxx:354
 AliTOF.cxx:355
 AliTOF.cxx:356
 AliTOF.cxx:357
 AliTOF.cxx:358
 AliTOF.cxx:359
 AliTOF.cxx:360
 AliTOF.cxx:361
 AliTOF.cxx:362
 AliTOF.cxx:363
 AliTOF.cxx:364
 AliTOF.cxx:365
 AliTOF.cxx:366
 AliTOF.cxx:367
 AliTOF.cxx:368
 AliTOF.cxx:369
 AliTOF.cxx:370
 AliTOF.cxx:371
 AliTOF.cxx:372
 AliTOF.cxx:373
 AliTOF.cxx:374
 AliTOF.cxx:375
 AliTOF.cxx:376
 AliTOF.cxx:377
 AliTOF.cxx:378
 AliTOF.cxx:379
 AliTOF.cxx:380
 AliTOF.cxx:381
 AliTOF.cxx:382
 AliTOF.cxx:383
 AliTOF.cxx:384
 AliTOF.cxx:385
 AliTOF.cxx:386
 AliTOF.cxx:387
 AliTOF.cxx:388
 AliTOF.cxx:389
 AliTOF.cxx:390
 AliTOF.cxx:391
 AliTOF.cxx:392
 AliTOF.cxx:393
 AliTOF.cxx:394
 AliTOF.cxx:395
 AliTOF.cxx:396
 AliTOF.cxx:397
 AliTOF.cxx:398
 AliTOF.cxx:399
 AliTOF.cxx:400
 AliTOF.cxx:401
 AliTOF.cxx:402
 AliTOF.cxx:403
 AliTOF.cxx:404
 AliTOF.cxx:405
 AliTOF.cxx:406
 AliTOF.cxx:407
 AliTOF.cxx:408
 AliTOF.cxx:409
 AliTOF.cxx:410
 AliTOF.cxx:411
 AliTOF.cxx:412
 AliTOF.cxx:413
 AliTOF.cxx:414
 AliTOF.cxx:415
 AliTOF.cxx:416
 AliTOF.cxx:417
 AliTOF.cxx:418
 AliTOF.cxx:419
 AliTOF.cxx:420
 AliTOF.cxx:421
 AliTOF.cxx:422
 AliTOF.cxx:423
 AliTOF.cxx:424
 AliTOF.cxx:425
 AliTOF.cxx:426
 AliTOF.cxx:427
 AliTOF.cxx:428
 AliTOF.cxx:429
 AliTOF.cxx:430
 AliTOF.cxx:431
 AliTOF.cxx:432
 AliTOF.cxx:433
 AliTOF.cxx:434
 AliTOF.cxx:435
 AliTOF.cxx:436
 AliTOF.cxx:437
 AliTOF.cxx:438
 AliTOF.cxx:439
 AliTOF.cxx:440
 AliTOF.cxx:441
 AliTOF.cxx:442
 AliTOF.cxx:443
 AliTOF.cxx:444
 AliTOF.cxx:445
 AliTOF.cxx:446
 AliTOF.cxx:447
 AliTOF.cxx:448
 AliTOF.cxx:449
 AliTOF.cxx:450
 AliTOF.cxx:451
 AliTOF.cxx:452
 AliTOF.cxx:453
 AliTOF.cxx:454
 AliTOF.cxx:455
 AliTOF.cxx:456
 AliTOF.cxx:457
 AliTOF.cxx:458
 AliTOF.cxx:459
 AliTOF.cxx:460
 AliTOF.cxx:461
 AliTOF.cxx:462
 AliTOF.cxx:463
 AliTOF.cxx:464
 AliTOF.cxx:465
 AliTOF.cxx:466
 AliTOF.cxx:467
 AliTOF.cxx:468
 AliTOF.cxx:469
 AliTOF.cxx:470
 AliTOF.cxx:471
 AliTOF.cxx:472
 AliTOF.cxx:473
 AliTOF.cxx:474
 AliTOF.cxx:475
 AliTOF.cxx:476
 AliTOF.cxx:477
 AliTOF.cxx:478
 AliTOF.cxx:479
 AliTOF.cxx:480
 AliTOF.cxx:481
 AliTOF.cxx:482
 AliTOF.cxx:483
 AliTOF.cxx:484
 AliTOF.cxx:485
 AliTOF.cxx:486
 AliTOF.cxx:487
 AliTOF.cxx:488
 AliTOF.cxx:489
 AliTOF.cxx:490
 AliTOF.cxx:491
 AliTOF.cxx:492
 AliTOF.cxx:493
 AliTOF.cxx:494
 AliTOF.cxx:495
 AliTOF.cxx:496
 AliTOF.cxx:497
 AliTOF.cxx:498
 AliTOF.cxx:499
 AliTOF.cxx:500
 AliTOF.cxx:501
 AliTOF.cxx:502
 AliTOF.cxx:503
 AliTOF.cxx:504
 AliTOF.cxx:505
 AliTOF.cxx:506
 AliTOF.cxx:507
 AliTOF.cxx:508
 AliTOF.cxx:509
 AliTOF.cxx:510
 AliTOF.cxx:511
 AliTOF.cxx:512
 AliTOF.cxx:513
 AliTOF.cxx:514
 AliTOF.cxx:515
 AliTOF.cxx:516
 AliTOF.cxx:517
 AliTOF.cxx:518
 AliTOF.cxx:519
 AliTOF.cxx:520
 AliTOF.cxx:521
 AliTOF.cxx:522
 AliTOF.cxx:523
 AliTOF.cxx:524
 AliTOF.cxx:525
 AliTOF.cxx:526
 AliTOF.cxx:527
 AliTOF.cxx:528
 AliTOF.cxx:529
 AliTOF.cxx:530
 AliTOF.cxx:531
 AliTOF.cxx:532
 AliTOF.cxx:533
 AliTOF.cxx:534
 AliTOF.cxx:535
 AliTOF.cxx:536
 AliTOF.cxx:537
 AliTOF.cxx:538
 AliTOF.cxx:539
 AliTOF.cxx:540
 AliTOF.cxx:541
 AliTOF.cxx:542
 AliTOF.cxx:543
 AliTOF.cxx:544
 AliTOF.cxx:545
 AliTOF.cxx:546
 AliTOF.cxx:547
 AliTOF.cxx:548
 AliTOF.cxx:549
 AliTOF.cxx:550
 AliTOF.cxx:551
 AliTOF.cxx:552
 AliTOF.cxx:553
 AliTOF.cxx:554
 AliTOF.cxx:555
 AliTOF.cxx:556
 AliTOF.cxx:557
 AliTOF.cxx:558
 AliTOF.cxx:559
 AliTOF.cxx:560
 AliTOF.cxx:561
 AliTOF.cxx:562
 AliTOF.cxx:563
 AliTOF.cxx:564
 AliTOF.cxx:565
 AliTOF.cxx:566
 AliTOF.cxx:567
 AliTOF.cxx:568
 AliTOF.cxx:569
 AliTOF.cxx:570
 AliTOF.cxx:571
 AliTOF.cxx:572
 AliTOF.cxx:573
 AliTOF.cxx:574
 AliTOF.cxx:575
 AliTOF.cxx:576
 AliTOF.cxx:577
 AliTOF.cxx:578
 AliTOF.cxx:579
 AliTOF.cxx:580
 AliTOF.cxx:581
 AliTOF.cxx:582
 AliTOF.cxx:583
 AliTOF.cxx:584
 AliTOF.cxx:585
 AliTOF.cxx:586
 AliTOF.cxx:587
 AliTOF.cxx:588
 AliTOF.cxx:589
 AliTOF.cxx:590
 AliTOF.cxx:591
 AliTOF.cxx:592
 AliTOF.cxx:593
 AliTOF.cxx:594
 AliTOF.cxx:595
 AliTOF.cxx:596
 AliTOF.cxx:597
 AliTOF.cxx:598
 AliTOF.cxx:599
 AliTOF.cxx:600
 AliTOF.cxx:601
 AliTOF.cxx:602
 AliTOF.cxx:603
 AliTOF.cxx:604
 AliTOF.cxx:605
 AliTOF.cxx:606
 AliTOF.cxx:607
 AliTOF.cxx:608
 AliTOF.cxx:609
 AliTOF.cxx:610
 AliTOF.cxx:611
 AliTOF.cxx:612
 AliTOF.cxx:613
 AliTOF.cxx:614
 AliTOF.cxx:615
 AliTOF.cxx:616
 AliTOF.cxx:617
 AliTOF.cxx:618
 AliTOF.cxx:619
 AliTOF.cxx:620
 AliTOF.cxx:621
 AliTOF.cxx:622
 AliTOF.cxx:623
 AliTOF.cxx:624
 AliTOF.cxx:625
 AliTOF.cxx:626
 AliTOF.cxx:627
 AliTOF.cxx:628
 AliTOF.cxx:629
 AliTOF.cxx:630
 AliTOF.cxx:631
 AliTOF.cxx:632
 AliTOF.cxx:633
 AliTOF.cxx:634
 AliTOF.cxx:635
 AliTOF.cxx:636
 AliTOF.cxx:637
 AliTOF.cxx:638
 AliTOF.cxx:639
 AliTOF.cxx:640
 AliTOF.cxx:641
 AliTOF.cxx:642
 AliTOF.cxx:643
 AliTOF.cxx:644
 AliTOF.cxx:645
 AliTOF.cxx:646
 AliTOF.cxx:647
 AliTOF.cxx:648
 AliTOF.cxx:649
 AliTOF.cxx:650
 AliTOF.cxx:651
 AliTOF.cxx:652
 AliTOF.cxx:653
 AliTOF.cxx:654
 AliTOF.cxx:655
 AliTOF.cxx:656
 AliTOF.cxx:657
 AliTOF.cxx:658
 AliTOF.cxx:659
 AliTOF.cxx:660
 AliTOF.cxx:661
 AliTOF.cxx:662
 AliTOF.cxx:663
 AliTOF.cxx:664
 AliTOF.cxx:665
 AliTOF.cxx:666
 AliTOF.cxx:667
 AliTOF.cxx:668
 AliTOF.cxx:669
 AliTOF.cxx:670
 AliTOF.cxx:671
 AliTOF.cxx:672
 AliTOF.cxx:673
 AliTOF.cxx:674
 AliTOF.cxx:675
 AliTOF.cxx:676
 AliTOF.cxx:677
 AliTOF.cxx:678
 AliTOF.cxx:679
 AliTOF.cxx:680
 AliTOF.cxx:681
 AliTOF.cxx:682
 AliTOF.cxx:683
 AliTOF.cxx:684
 AliTOF.cxx:685
 AliTOF.cxx:686
 AliTOF.cxx:687
 AliTOF.cxx:688
 AliTOF.cxx:689
 AliTOF.cxx:690
 AliTOF.cxx:691
 AliTOF.cxx:692
 AliTOF.cxx:693
 AliTOF.cxx:694
 AliTOF.cxx:695
 AliTOF.cxx:696
 AliTOF.cxx:697
 AliTOF.cxx:698
 AliTOF.cxx:699
 AliTOF.cxx:700
 AliTOF.cxx:701
 AliTOF.cxx:702
 AliTOF.cxx:703
 AliTOF.cxx:704
 AliTOF.cxx:705
 AliTOF.cxx:706
 AliTOF.cxx:707
 AliTOF.cxx:708
 AliTOF.cxx:709
 AliTOF.cxx:710
 AliTOF.cxx:711
 AliTOF.cxx:712
 AliTOF.cxx:713
 AliTOF.cxx:714
 AliTOF.cxx:715
 AliTOF.cxx:716
 AliTOF.cxx:717
 AliTOF.cxx:718
 AliTOF.cxx:719
 AliTOF.cxx:720