ROOT logo
#include "AliHMPIDTracker.h"     //class header
#include "AliHMPIDtrack.h"       //class header
#include "AliHMPIDCluster.h"     //GetTrackPoint(),PropagateBack() 
#include "AliHMPIDParam.h"       //GetTrackPoint(),PropagateBack()
#include "AliHMPIDPid.h"         //Recon(),reconHTA()
#include "AliHMPIDRecon.h"       //Recon()
#include "AliHMPIDRecoParamV1.h"   //Recon()
#include "AliHMPIDReconstructor.h"//Recon()
#include "AliHMPIDReconHTA.h"    //ReconHTA()
#include <AliLog.h>              //Recon()  
#include <AliESDEvent.h>         //PropagateBack(),Recon()  
#include <AliESDtrack.h>         //Intersect() 
#include <AliTracker.h> 
#include <AliRun.h>              //GetTrackPoint(),PropagateBack()  
#include <AliTrackPointArray.h>  //GetTrackPoint()
#include <AliAlignObj.h>         //GetTrackPoint()
#include <AliCDBManager.h>       //PropageteBack()
#include <AliCDBEntry.h>         //PropageteBack()
#include "TTreeStream.h"         // debug streamer
//
// HMPID base class fo tracking
//.
//.
//.
ClassImp(AliHMPIDTracker)
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AliHMPIDTracker::AliHMPIDTracker():
  AliTracker(),
  fClu(new TObjArray(AliHMPIDParam::kMaxCh+1)),
  fDebugStreamer(0)
{
// ctor. Create TObjArray of TClonesArray of AliHMPIDCluster  
// 
//  
  fClu->SetOwner(kTRUE);
  for(int i=AliHMPIDParam::kMinCh;i<=AliHMPIDParam::kMaxCh;i++) fClu->AddAt(new TClonesArray("AliHMPIDCluster"),i);
  fDebugStreamer = new TTreeSRedirector("HMPIDdebug.root");

}//ctor


AliHMPIDTracker::~AliHMPIDTracker(){
  //
  // destructor
  // 
  delete fClu;
  if (fDebugStreamer) delete fDebugStreamer;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++    
Bool_t AliHMPIDTracker::GetTrackPoint(Int_t idx, AliTrackPoint& point) const
{
// Interface callback methode invoked from AliReconstruction::WriteAlignmentData() to get position of MIP cluster in MARS associated to a current track.
// MIP cluster is reffered by index which is stored in AliESDtrack  ???????
// Arguments: idx- cluster index which is stored by HMPID in AliESDtrack
//            point- reference to the object where to store the point     
//   Returns: status of operation  if FALSE then AliReconstruction::WriteAlignmentData() do not store this point to array of points for current track. 
  if(idx<0) return kFALSE; //no MIP cluster assigned to this track in PropagateBack()
  Int_t iCham=idx/1000000; Int_t iClu=idx%1000000;
  iClu = iClu%1000; //GetHMPIDcluIdx -> 1e+6*ch + 1e+3*clusize + cluIdx;
  point.SetVolumeID(AliGeomManager::LayerToVolUID(AliGeomManager::kHMPID,iCham));//layer and chamber number
  TClonesArray *pArr=(TClonesArray*)(*fClu)[iCham];
  if(!pArr) return kFALSE;
  AliHMPIDCluster *pClu=(AliHMPIDCluster*)pArr->UncheckedAt(iClu);//get pointer to cluster
  if(!pClu) return kFALSE;
  Float_t xyz[3];
  pClu->GetGlobalXYZ(xyz);
  Float_t cov[6];
  pClu->GetGlobalCov(cov);
  point.SetXYZ(xyz,cov);
  return kTRUE;
}//GetTrackPoint()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDTracker::IntTrkCha(AliESDtrack *pTrk,Float_t &xPc,Float_t &yPc,Float_t &xRa,Float_t &yRa,Float_t &theta,Float_t &phi)
{
// Static method to find intersection in between given track and HMPID chambers
// Arguments: pTrk- ESD track; xPc,yPc- track intersection with PC in LORS [cm]
//   Returns: intersected chamber ID or -1
  AliHMPIDtrack *hmpTrk = new AliHMPIDtrack(*pTrk);                                             //create a hmpid track to be used for propagation and matching 
  for(Int_t i=AliHMPIDParam::kMinCh;i<=AliHMPIDParam::kMaxCh;i++){                              //chambers loop
    Int_t chInt = IntTrkCha(i,hmpTrk,xPc,yPc,xRa,yRa,theta,phi);
    if(chInt>=0) {delete hmpTrk;hmpTrk=0x0;return chInt;}
  }                                                                                             //chambers loop
  delete hmpTrk; hmpTrk=0x0;
  return -1;                                                                                    //no intersection with HMPID chambers
}//IntTrkCha()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDTracker::IntTrkCha(Int_t ch,AliHMPIDtrack *pTrk,Float_t &xPc,Float_t &yPc,Float_t &xRa,Float_t &yRa,Float_t &theta,Float_t &phi)
{
// Static method to find intersection in between given track and HMPID chambers
// Arguments: pTrk- HMPID track; xPc,yPc- track intersection with PC in LORS [cm]
//   Returns: intersected chamber ID or -1
    AliHMPIDParam *pParam=AliHMPIDParam::Instance();
    Double_t p1[3],n1[3]; 
    pParam->Norm(ch,n1); 
    pParam->Point(ch,p1,AliHMPIDParam::kRad);                                                    //point & norm  for middle of radiator plane
    Double_t p2[3],n2[3]; 
    pParam->Norm(ch,n2);
    pParam->Point(ch,p2,AliHMPIDParam::kPc);                                                     //point & norm  for entrance to PC plane
    if(pTrk->Intersect(p1,n1)==kFALSE) return -1;                                                //try to intersect track with the middle of radiator
    if(pTrk->Intersect(p2,n2)==kFALSE) return -1;   
    pParam->Mars2LorsVec(ch,n1,theta,phi);                                                       //track angles at RAD
    pParam->Mars2Lors   (ch,p1,xRa,yRa);                                                         //TRKxRAD position
    pParam->Mars2Lors   (ch,p2,xPc,yPc);                                                         //TRKxPC position
    if(AliHMPIDParam::IsInside(xPc,yPc,pParam->DistCut())==kTRUE) return ch;                     //return intersected chamber  
  return -1;                                                                                     //no intersection with HMPID chambers
}//IntTrkCha()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDTracker::LoadClusters(TTree *pCluTree)
{
// Interface callback methode invoked from AliReconstruction::RunTracking() to load HMPID clusters before PropagateBack() gets control. Done once per event.
// Arguments: pCluTree- pointer to clusters tree got by AliHMPIDLoader::LoadRecPoints("read") then AliHMPIDLoader::TreeR()
//   Returns: error code (currently ignored in AliReconstruction::RunTraking())    
  for(int i=AliHMPIDParam::kMinCh;i<=AliHMPIDParam::kMaxCh;i++) pCluTree->SetBranchAddress(Form("HMPID%d",i),&((*fClu)[i]));
  pCluTree->GetEntry(0);
  return 0;  
}//LoadClusters()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDTracker::PropagateBack(AliESDEvent *pEsd)
{
// Interface pure virtual in AliTracker. Invoked from AliReconstruction::RunTracking() after invocation of AliTracker::LoadClusters() once per event
// Agruments: pEsd - pointer to ESD
//   Returns: error code    
  AliCDBEntry *pNmeanEnt =AliCDBManager::Instance()->Get("HMPID/Calib/Nmean"); //contains TObjArray of 42 TF1 + 1 EPhotMean
  AliCDBEntry *pQthreEnt =AliCDBManager::Instance()->Get("HMPID/Calib/Qthre"); //contains TObjArray of 42 (7ch * 6sec) TF1
  if(!pNmeanEnt) AliError("No Nmean C6F14 ");
  if(!pQthreEnt) AliError("No Qthre");
    
  return Recon(pEsd,fClu,(TObjArray*)pNmeanEnt->GetObject(),(TObjArray*)pQthreEnt->GetObject());  
}//PropagateBack()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDTracker::Recon(AliESDEvent *pEsd,TObjArray *pClus,TObjArray *pNmean, TObjArray *pQthre)
{
// Static method to reconstruct the Cherenkov angle for all valid tracks of a given event.
// Arguments: pEsd- pointer ESD; pClu- pointer to clusters for all chambers; pNmean - pointer to all function Nmean=f(time)
// Returns: error code, 0 if no errors   
//
// Algortihm: Loop over tracks
//
// 1. Find the closest MIP cluster using fast tracks extrapolation method
// 2. Propagate track to the MIP cluster using the STEER method
// 3. Update the track information with MIP cluster (Improved angular and position resolution - to be used for Cherenkov angle calculation)
// 4. Propagate back the constrained track to the radiator radius ( not exact yet)
// 5. Propagation in the last 10 cm with the fast method 
// 6. Set ESDtrack information
// 7. Calculate the Cherenkov angle

  const Double_t kMaxSnp=0.9;   //maximal snp for prolongation
  const Double_t kdRadiator=10; // distance between radiator and the plane
  AliHMPIDRecon recon;                                                                           //instance of reconstruction class, nothing important in ctor
  AliHMPIDParam *pParam = AliHMPIDParam::Instance();                                             //Instance of AliHMPIDParam
  Float_t xPc,yPc,xRa,yRa,theta,phi;
  
  Double_t cluLORS[2]={0};
  Int_t nMipClusTot=0;
  
  Double_t qthre = 0;   Double_t nmean=0; Int_t hvsec=0;
//  Int_t nClusCh[AliHMPIDParam::kMaxCh+1];

  Bool_t tsRight = kTRUE;
  
  UInt_t tsmin = (UInt_t)((TF1*)pQthre->At(0))->GetXmin();                                        //
  UInt_t tsmax = (UInt_t)((TF1*)pQthre->At(0))->GetXmax();                                        //
  UInt_t ts = pEsd->GetTimeStamp();
  
  if(ts<tsmin || ts>tsmax) {
    AliWarning(Form(" in HMPID time stamp out of range!!! Please check!!! ts = %i",ts));
    tsRight = kFALSE;
  }
   
  for(Int_t iTrk=0;iTrk<pEsd->GetNumberOfTracks();iTrk++){                                        //loop on the ESD tracks in the event
           
    //    Double_t bestChi2=99999;chi2=99999;                                                     //init. track matching params
//    Double_t dmin=999999,bz=0,distCut=1,distParams[5]={1};
    Double_t dmin=999999,distCut=1,distParams[5]={1};

    Bool_t isOkDcut=kFALSE;
    Bool_t isOkQcut=kFALSE;
    Bool_t isMatched=kFALSE;
    
    AliHMPIDCluster *bestHmpCluster=0x0;                                                          //the best matching cluster
    AliESDtrack *pTrk = pEsd->GetTrack(iTrk);                                                     //get reconstructed track   
    
    if(!pTrk->IsOn(AliESDtrack::kTPCout)) continue;
 
    if(pTrk->IsOn(AliESDtrack::kTPCrefit)) continue;
    AliESDfriendTrack *ftrack= (AliESDfriendTrack *)pTrk->GetFriendTrack();
    if (!ftrack) continue; 
    if (!ftrack->GetTPCOut()) continue;
    AliHMPIDtrack *hmpTrk = new AliHMPIDtrack(*pTrk);                                             //create a hmpid track to be used for propagation and matching 
    AliHMPIDtrack *hmpTrkConstrained = 0;                                                         //create a hmpid track to be used for propagation and matching 
    hmpTrk->Set(ftrack->GetTPCOut()->GetX(), ftrack->GetTPCOut()->GetAlpha(),ftrack->GetTPCOut()->GetParameter(), ftrack->GetTPCOut()->GetCovariance());
    //
    //bz=AliTracker::GetBz();
          
    //initial flags for HMPID ESD infos    
    pTrk->SetHMPIDtrk(0,0,0,0);                                                                //no intersection found
    pTrk->SetHMPIDmip(0,0,0,0);                                                                //store mip info in any case 
    pTrk->SetHMPIDcluIdx(99,99999);                                                            //chamber not found, mip not yet considered
    pTrk->SetHMPIDsignal(AliHMPIDRecon::kNotPerformed);                                        //ring reconstruction not yet performed
    
    Int_t ipCh=IntTrkCha(pTrk,xPc,yPc,xRa,yRa,theta,phi);                                        //find the intersected chamber for this track 
    if(ipCh<0) {delete hmpTrk;hmpTrk=0x0;continue;}                                                                         //no intersection at all, go after next track

    pTrk->SetHMPIDtrk(xPc,yPc,theta,phi);                                                        //store initial infos
    pTrk->SetHMPIDcluIdx(ipCh,9999);                                                             //set chamber, index of cluster + cluster size
    
    // track intersects the chamber ipCh: find the MIP          
    
    TClonesArray *pMipCluLst=(TClonesArray *)pClus->At(ipCh);                                   //get the list of clusters
    nMipClusTot = pMipCluLst->GetEntries();                                                     //total number of clusters in the given chamber
   // nClusCh[ipCh] = nMipClusTot;
    
    if(nMipClusTot==0) {delete hmpTrk;hmpTrk=0x0;continue;}                                                                         
    
    Int_t index=-1;                                                                               //index of the "best" matching cluster
    //
    // 1. Find the closest MIP cluster using fast tracks extrapolation method
    //
    for (Int_t iClu=0; iClu<nMipClusTot;iClu++) {                                                 //clusters loop
      
      AliHMPIDCluster *pClu=(AliHMPIDCluster*)pMipCluLst->UncheckedAt(iClu);                      //get the cluster
      // evaluate qThre
      if(tsRight){
	if(pQthre->GetEntriesFast()==pParam->kMaxCh+1) {
	  qthre=((TF1*)pQthre->At(pClu->Ch()))->Eval(ts);                                          //
	} else {                                                                                   // in the past just 1 qthre
	  hvsec = pParam->InHVSector(pClu->Y());                                                   //  per chamber
	  if(hvsec>=0) qthre=((TF1*)pQthre->At(6*ipCh+hvsec))->Eval(ts);                                     //
        } 
      } else qthre = pParam->QCut();
      
      //      
      if(pClu->Q()<qthre) continue;                                                                      //charge compartible with MIP clusters      
      isOkQcut = kTRUE;
      //
      cluLORS[0]=pClu->X(); cluLORS[1]=pClu->Y();                                                        //get the LORS coordinates of the cluster
      Double_t dist = TMath::Sqrt((xPc-cluLORS[0])*(xPc-cluLORS[0])+(yPc-cluLORS[1])*(yPc-cluLORS[1]));
      
      if(dist<dmin) {
        dmin = dist;
        index=iClu;
        bestHmpCluster=pClu;
      }
    } // clusters loop

    // moved down
    /*if(!isOkQcut) {
      pTrk->SetHMPIDsignal(pParam->kMipQdcCut);
      delete hmpTrk;hmpTrk=0x0; continue;                                                                     
    }*/
    
    //
    // 2. Propagate track to the MIP cluster using the STEER method
    //
        
    if(!bestHmpCluster) {delete hmpTrk;hmpTrk=0x0; delete hmpTrkConstrained;hmpTrkConstrained=0x0;  continue;}     
        
    TVector3 vG = pParam->Lors2Mars(ipCh,bestHmpCluster->X(),bestHmpCluster->Y());    
    Double_t gx = vG[0];
    Double_t gy = vG[1];
    Double_t gz = vG[2];
    Double_t alpha=TMath::ATan2(gy,gx);
    Double_t radiusH=TMath::Sqrt(gy*gy+gx*gx);
    if (!(hmpTrk->Rotate(alpha,kTRUE))) continue;
    if(!AliTrackerBase::PropagateTrackToBxByBz(hmpTrk,radiusH,pTrk->GetMass(),1,kFALSE,kMaxSnp,-1)) {delete hmpTrk;hmpTrk=0x0; delete hmpTrkConstrained;hmpTrkConstrained=0x0; continue;}    
    //
    // 3. Update the track with MIP cluster (Improved angular and position resolution - to be used for Cherenkov angle calculation)
    //
    AliExternalTrackParam trackC(*hmpTrk);
    Double_t posC[2]={0,gz};
    Double_t covC[3]={0.1*0.1, 0, 0.1*0.1};
    trackC.Update(posC,covC);
    //
    // 4. Propagate back the constrained track to the radiator radius ( not exact yet)
    //
    hmpTrkConstrained = new AliHMPIDtrack(*pTrk);
    hmpTrkConstrained->Set(trackC.GetX(), trackC.GetAlpha(),trackC.GetParameter(), trackC.GetCovariance());
    if(!AliTrackerBase::PropagateTrackToBxByBz(hmpTrkConstrained,radiusH-kdRadiator,pTrk->GetMass(),1,kFALSE,kMaxSnp,1)) {delete hmpTrk;hmpTrk=0x0; delete hmpTrkConstrained;hmpTrkConstrained=0x0;continue;}
    //
    // 5. Propagation in the last 10 cm with the fast method 
    //
    Float_t xPc0=0, yPc0=0;
    
    IntTrkCha(ipCh, hmpTrk, xPc0,yPc0,xRa,yRa,theta,phi);  
    IntTrkCha(ipCh, hmpTrkConstrained, xPc,yPc,xRa,yRa,theta,phi);  
    //
    // 6. Set ESDtrack information
    //
    Int_t cluSiz = bestHmpCluster->Size();
    pTrk->SetHMPIDmip(bestHmpCluster->X(),bestHmpCluster->Y(),(Int_t)bestHmpCluster->Q(),0);  //store mip info in any case 
    pTrk->SetHMPIDcluIdx(ipCh,index+1000*cluSiz);                                             //set chamber, index of cluster + cluster size    
    pTrk->SetHMPIDtrk(xPc0,yPc0,theta,phi);
    //
    //
    // Dump debug info if specified
    // 
    if (AliHMPIDReconstructor::StreamLevel()>0) {	
      AliExternalTrackParam * trackTPC=new AliExternalTrackParam(*(ftrack->GetTPCOut()));
      AliExternalTrackParam * trackCurrent=new AliExternalTrackParam(*pTrk);      
      if(!trackTPC->Rotate(alpha)) continue;
      if(!trackCurrent->Rotate(alpha)) continue;      
      Bool_t statusTPC= AliTracker::PropagateTrackToBxByBz(trackTPC,radiusH,pTrk->GetMass(),1,kFALSE,kMaxSnp,-1);      
      Bool_t statusCurrent=AliTracker::PropagateTrackToBxByBz(trackCurrent,radiusH,pTrk->GetMass(),1,kFALSE,kMaxSnp,-1);  
      AliExternalTrackParam * trackTPCNB=new AliExternalTrackParam(*(ftrack->GetTPCOut()));
      if(!trackTPCNB->Rotate(alpha)) continue;
      Bool_t statusTPCNB=kTRUE;
      Double_t bfield[3]={0,0,0};
      for (Double_t radius=trackTPCNB->GetX(); radius<radiusH; radius+=1){
	Double_t xyz[3];
	trackTPCNB->GetXYZ(xyz);
	GetBxByBz(xyz,bfield);
	statusTPCNB&=trackTPCNB->PropagateToBxByBz(radius,bfield);
      }
      statusTPCNB&=trackTPCNB->PropagateToBxByBz(radiusH,bfield);
      //        
      Double_t tanAlpha=TMath::Tan(TMath::ASin(trackTPC->GetSnp()));
      Double_t deltaC= trackTPC->GetC(AliTrackerBase::GetBz())-ftrack->GetTPCOut()->GetC(AliTrackerBase::GetBz());    
      //
      AliExternalTrackParam * trackTPCConstrained= new AliExternalTrackParam(*trackTPC);
      Double_t pos[2]={0,gz};
      Double_t cov[3]={0.1*0.1, 0, 0.1*0.1};
      Double_t chi2C =  trackTPCConstrained->GetPredictedChi2(pos,cov);
      trackTPCConstrained->Update(pos,cov);
      (*fDebugStreamer)<<"track"<<
	"rH="<<radiusH<<                      // radius of cluster
	"angle="<<tanAlpha<<                  // tan of the local inlination angle
	"dC="<<deltaC<<                       // delta of the curvature
	"trackTPC.="<<trackTPC<<              // TPC outer param extrapolated to the HMPID
	"trackTPCNB.="<<trackTPCNB<<          // TPC track prpagated with material budget correction
	"chi2C="<<chi2C<<
	"trackTPCC.="<<trackTPCConstrained<<  // TPC outer param extrapolated to the HMPID constrained
	"trackCurrent.="<<trackCurrent<<      // current track extrapolated to the HMPID
	"sTPC="<<statusTPC<<                  // status for the current TPC  track
	"sCurrent="<<statusCurrent<<          // status for the current global track
	"cl.="<<bestHmpCluster<<              // HMPID cluster
	//
	"t.="<<pTrk<<                        // curent esd track
	"ft.="<<ftrack<<                     // friend track
	"hmpTrk.="<<hmpTrk<<                 // hmpid tracks as used in the following code
	"hmpTrkC.="<<hmpTrkConstrained<<     // constrained hmpid tracks as used in the following code
	"gx="<<gx<<                          // global cluster position X
	"gy="<<gy<<                          // Y
	"gz="<<gz<<                          // Z
	"\n";
    }                 
    //
    //
    //    
    if(!isOkQcut) {
      pTrk->SetHMPIDsignal(pParam->kMipQdcCut);
      delete hmpTrk;hmpTrk=0x0; 
      delete hmpTrkConstrained;hmpTrkConstrained=0x0; 
      continue;                                                                     
    }        
    
    if(AliHMPIDReconstructor::GetRecoParam())                                                 //retrieve distance cut
    {
      if(AliHMPIDReconstructor::GetRecoParam()->IsFixedDistCut()==kTRUE)                      //distance cut is fixed number
      { 
        distCut=AliHMPIDReconstructor::GetRecoParam()->GetHmpTrackMatchingDist();
      }
      else 
      {
        for(Int_t ipar=0;ipar<5;ipar++) distParams[ipar]=AliHMPIDReconstructor::GetRecoParam()->GetHmpTrackMatchingDistParam(ipar);      //prevision: distance cut is function of momentum
        distCut=distParams[0]+distParams[1]*TMath::Power(distParams[2]*pTrk->GetP(),distParams[3]); //prevision: change functional form to be more precise
      }
    }
    else {distCut=pParam->DistCut();}
     
    //dmin recalculated
    
    dmin = TMath::Sqrt((xPc0-bestHmpCluster->X())*(xPc0-bestHmpCluster->X())+(yPc0-bestHmpCluster->Y())*(yPc0-bestHmpCluster->Y()));
             
    if(dmin < distCut) {
      isOkDcut = kTRUE;
    }   
    //isOkDcut = kTRUE; // switch OFF cut
    
    if(!isOkDcut) {
      pTrk->SetHMPIDsignal(pParam->kMipDistCut);                                                //closest cluster with enough charge is still too far from intersection
    }
    
    if(isOkQcut*isOkDcut) isMatched = kTRUE;                                                    // MIP-Track matched !!    
    
    if(!isMatched) {delete hmpTrk;hmpTrk=0x0;delete hmpTrkConstrained;hmpTrkConstrained=0x0;continue;}                                           // If matched continue...

    Bool_t isOk = kTRUE; 
    if(!isOk) {delete hmpTrk;hmpTrk=0x0; delete hmpTrkConstrained;hmpTrkConstrained=0x0; continue;}
    pTrk->SetOuterHmpParam(hmpTrkConstrained,AliESDtrack::kHMPIDout);                 

    FillResiduals(hmpTrk,bestHmpCluster,kFALSE);
 
    Int_t iRad = pParam->Radiator(yRa);                                                          //evaluate the radiator involved
    
    //evaluate nMean
    if(tsRight){
     if(pNmean->GetEntries()==21) {                                                              //for backward compatibility
       nmean=((TF1*)pNmean->At(3*ipCh))->Eval(ts);                                               //C6F14 Nmean for this chamber
     } else {
       if(iRad < 0) {
	nmean = -1;
       } else {
       Double_t tLow  = ((TF1*)pNmean->At(6*ipCh+2*iRad  ))->Eval(ts);                           //C6F14 low  temp for this chamber
       Double_t tHigh = ((TF1*)pNmean->At(6*ipCh+2*iRad+1))->Eval(ts);                           //C6F14 high temp for this chamber
       Double_t tExp  = pParam->FindTemp(tLow,tHigh,yRa);                                        //estimated temp for that chamber at that y
       nmean = pParam->NIdxRad(AliHMPIDParam::Instance()->GetEPhotMean(),tExp);                  //mean ref idx @ a given temp
       }
       if(nmean < 0){                                                                            //track didn' t pass through the radiator
         pTrk->SetHMPIDsignal(AliHMPIDRecon::kNoRad);                                           //set the appropriate flag
         pTrk->SetHMPIDcluIdx(ipCh,index+1000*cluSiz);                                          //set index of cluster
         delete hmpTrk;hmpTrk=0x0; 
         delete hmpTrkConstrained;hmpTrkConstrained=0x0; 
         continue;
        }
     }
    } else nmean = pParam->MeanIdxRad();    
    //
    // 7. Calculate the Cherenkov angle
    //
    recon.SetImpPC(xPc0,yPc0);                                                                     //store track impact to PC           
    recon.CkovAngle(pTrk,(TClonesArray *)pClus->At(ipCh),index,nmean,xRa,yRa);                   //search for Cerenkov angle of this track
    
    Double_t thetaCkov = pTrk->GetHMPIDsignal();
    
    if (AliHMPIDReconstructor::StreamLevel()>0) {	
      AliExternalTrackParam * trackTPC=new AliExternalTrackParam(*(ftrack->GetTPCOut()));
      AliExternalTrackParam * trackCurrent=new AliExternalTrackParam(*pTrk);      
      if(!trackTPC->Rotate(alpha)) continue;
      if(!trackCurrent->Rotate(alpha)) continue;      
      Bool_t statusTPC= AliTracker::PropagateTrackToBxByBz(trackTPC,radiusH,pTrk->GetMass(),1,kFALSE,kMaxSnp,-1);      
      Bool_t statusCurrent=AliTracker::PropagateTrackToBxByBz(trackCurrent,radiusH,pTrk->GetMass(),1,kFALSE,kMaxSnp,-1);    
      Double_t tanAlpha=TMath::Tan(TMath::ASin(trackTPC->GetSnp()));
      Double_t deltaC= trackTPC->GetC(AliTrackerBase::GetBz())-ftrack->GetTPCOut()->GetC(AliTrackerBase::GetBz());    
      //
      AliExternalTrackParam * trackTPCNB=new AliExternalTrackParam(*(ftrack->GetTPCOut()));
      if(!trackTPCNB->Rotate(alpha)) continue;
      Bool_t statusTPCNB=kTRUE;
      Double_t bfield[3]={0,0,0};
      for (Double_t radius=trackTPCNB->GetX(); radius<radiusH; radius+=1){
	Double_t xyz[3];
	trackTPCNB->GetXYZ(xyz);
	GetBxByBz(xyz,bfield);
	statusTPCNB&=trackTPCNB->PropagateToBxByBz(radius,bfield);
      }
      statusTPCNB&=trackTPCNB->PropagateToBxByBz(radiusH,bfield);

      AliExternalTrackParam * trackTPCConstrained= new AliExternalTrackParam(*trackTPC);
      Double_t pos[2]={0,gz};
      Double_t cov[3]={0.1*0.1, 0, 0.1*0.1};
      Double_t chi2C =  trackTPCConstrained->GetPredictedChi2(pos,cov);
      trackTPCConstrained->Update(pos,cov);
      (*fDebugStreamer)<<"track2"<<
	"rH="<<radiusH<<                      // radius of cluster
	"angle="<<tanAlpha<<                  // tan of the local inlination angle
	"dC="<<deltaC<<                       // delta of the curvature
	"trackTPC.="<<trackTPC<<              // TPC outer param extrapolated to the HMPID
	"trackTPCNB.="<<trackTPCNB<<          // TPC outer param extrapolated to the HMPID
	"chi2C="<<chi2C<<
	"trackTPCC.="<<trackTPCConstrained<<  // TPC outer param extrapolated to the HMPID constrained
	"trackCurrent.="<<trackCurrent<<      // current track extrapolated to the HMPID
	"sTPC="<<statusTPC<<                  // status for the current TPC  track
	"sCurrent="<<statusCurrent<<          // status for the current global track
	"cl.="<<bestHmpCluster<<              // HMPID cluster
	//
	"t.="<<pTrk<<                         // curent esd track
	"ft.="<<ftrack<<                      // friend track
	"hmpTrk.="<<hmpTrk<<                  // hmpid tracks as used in the following code
	"hmpTrkC.="<<hmpTrkConstrained<<      // constrained hmpid tracks as used in the following code
	"gx="<<gx<<                           // global cluster position X
	"gy="<<gy<<                           // Y
	"gz="<<gz<<                           // Z
        "thetaCkov="<<thetaCkov<<             // Cherenkov angle
	"\n";
    } 
                
    if(pTrk->GetHMPIDsignal()<0) {
      delete hmpTrk;hmpTrk=0x0;
      delete hmpTrkConstrained; hmpTrkConstrained=0x0;
      continue;}
        
    AliHMPIDPid pID;
    Double_t prob[5];
    pID.FindPid(pTrk,nmean,5,prob);
    pTrk->SetHMPIDpid(prob);
    delete hmpTrk; hmpTrk=0x0;
    delete hmpTrkConstrained; hmpTrkConstrained=0x0;
  }//iTrk

  return 0; // error code: 0=no error;
}//Recon()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDTracker::ReconFromKin(AliESDEvent *pEsd,TObjArray *pClus,TObjArray *pNmean, TObjArray *pQthre)
{
// Static method to reconstruct Theta Ckov for all valid tracks of a given event.
// Arguments: pEsd- pointer ESD; pClu- pointer to clusters for all chambers; pNmean - pointer to all function Nmean=f(time)
//   Returns: error code, 0 if no errors   
  
  AliHMPIDRecon recon;                                                                           //instance of reconstruction class, nothing important in ctor
  AliHMPIDParam *pParam = AliHMPIDParam::Instance();                                             //Instance of AliHMPIDParam
  Float_t xPc,yPc,xRa,yRa,theta,phi;
  Double_t cluLORS[2]={0};
  Int_t nMipClusTot=0;
  Double_t qthre = 0;   Double_t nmean=0; Int_t hvsec=0;
  //Int_t nClusCh[AliHMPIDParam::kMaxCh+1];

  Bool_t tsRight = kTRUE;
  
  UInt_t tsmin = (UInt_t)((TF1*)pQthre->At(0))->GetXmin();                                        //
  UInt_t tsmax = (UInt_t)((TF1*)pQthre->At(0))->GetXmax();                                        //
  UInt_t ts = pEsd->GetTimeStamp();
  
  if(ts<tsmin || ts>tsmax) {
    AliWarning(Form(" in HMPID time stamp out of range!!! Please check!!! ts = %i",ts));
    tsRight = kFALSE;
  }
   
  for(Int_t iTrk=0;iTrk<pEsd->GetNumberOfTracks();iTrk++){                                        //loop on the ESD tracks in the event
           
    Double_t dmin=999999,distCut=1,distParams[5]={1};

    Bool_t isOkDcut=kFALSE;
    Bool_t isOkQcut=kFALSE;
    Bool_t isMatched=kFALSE;
    
    AliHMPIDCluster *bestHmpCluster=0x0;                                                          //the best matching cluster
    AliESDtrack *pTrk = pEsd->GetTrack(iTrk);                                                     //get reconstructed track   
    
    AliHMPIDtrack *hmpTrk = new AliHMPIDtrack(*pTrk);                                             //create a hmpid track to be used for propagation and matching 
   // bz=AliTracker::GetBz();  
//initial flags for HMPID ESD infos    
    pTrk->SetHMPIDtrk(0,0,0,0);                                                                //no intersection found
    pTrk->SetHMPIDmip(0,0,0,0);                                                                //store mip info in any case 
    pTrk->SetHMPIDcluIdx(99,99999);                                                            //chamber not found, mip not yet considered
    pTrk->SetHMPIDsignal(AliHMPIDRecon::kNotPerformed);                                        //ring reconstruction not yet performed
    
    Int_t ipCh=IntTrkCha(pTrk,xPc,yPc,xRa,yRa,theta,phi);                                        //find the intersected chamber for this track 
    if(ipCh<0) {delete hmpTrk;hmpTrk=0x0;continue;}                                                                         //no intersection at all, go after next track

    pTrk->SetHMPIDtrk(xPc,yPc,theta,phi);                                                        //store initial infos
    pTrk->SetHMPIDcluIdx(ipCh,9999);                                                             //set chamber, index of cluster + cluster size
    
// track intersects the chamber ipCh: find the MIP          
    
    TClonesArray *pMipCluLst=(TClonesArray *)pClus->At(ipCh);                                   //get the list of clusters
    nMipClusTot = pMipCluLst->GetEntries();                                                     //total number of clusters in the given chamber
   // nClusCh[ipCh] = nMipClusTot;
    
    if(nMipClusTot==0) {delete hmpTrk;hmpTrk=0x0;continue;}                                                                         
    
    Int_t index=-1;                                                                             //index of the "best" matching cluster
    
    for (Int_t iClu=0; iClu<nMipClusTot;iClu++) {                                               //clusters loop
      
      AliHMPIDCluster *pClu=(AliHMPIDCluster*)pMipCluLst->UncheckedAt(iClu);                    //get the cluster
// evaluate qThre
      if(tsRight){
       if(pQthre->GetEntriesFast()==pParam->kMaxCh+1) {
         qthre=((TF1*)pQthre->At(pClu->Ch()))->Eval(ts);                                         //
       } else {                                                                                  // in the past just 1 qthre
         hvsec = pParam->InHVSector(pClu->Y());                                                  //  per chamber
         if(hvsec>=0) qthre=((TF1*)pQthre->At(6*ipCh+hvsec))->Eval(ts);                                     //
        } 
      } else qthre = pParam->QCut();
            
//      
      if(pClu->Q()<qthre) continue;                                                                      //charge compartible with MIP clusters      
      isOkQcut = kTRUE;
//
      cluLORS[0]=pClu->X(); cluLORS[1]=pClu->Y();                                            //get the LORS coordinates of the cluster
      Double_t dist = TMath::Sqrt((xPc-cluLORS[0])*(xPc-cluLORS[0])+(yPc-cluLORS[1])*(yPc-cluLORS[1]));
      
      if(dist<dmin) {
        dmin = dist;
        index=iClu;
        bestHmpCluster=pClu;
      }
    } // clusters loop

    if(!isOkQcut) {
      pTrk->SetHMPIDsignal(pParam->kMipQdcCut);
      delete hmpTrk;hmpTrk=0x0; continue;                                                                     
    }

    Double_t radius = (pParam->Lors2Mars(ipCh,pParam->SizeAllX()/2,pParam->SizeAllY()/2)).Mag(); 
    
    if(!AliTracker::PropagateTrackToBxByBz(hmpTrk,radius,pTrk->GetMass(),1,kFALSE)) {delete hmpTrk;hmpTrk=0x0;continue;}
              
    if(!hmpTrk->PropagateTo(bestHmpCluster)) {delete hmpTrk;hmpTrk=0x0;continue;}

    Int_t cluSiz = bestHmpCluster->Size();
    pTrk->SetHMPIDmip(bestHmpCluster->X(),bestHmpCluster->Y(),(Int_t)bestHmpCluster->Q(),0);  //store mip info in any case 
    pTrk->SetHMPIDcluIdx(ipCh,index+1000*cluSiz);                                             //set chamber, index of cluster + cluster size

    if(AliHMPIDReconstructor::GetRecoParam())                                                 //retrieve distance cut
    {
      if(AliHMPIDReconstructor::GetRecoParam()->IsFixedDistCut()==kTRUE)                      //distance cut is fixed number
      { 
        distCut=AliHMPIDReconstructor::GetRecoParam()->GetHmpTrackMatchingDist();
      }
      else 
      {
        for(Int_t ipar=0;ipar<5;ipar++) distParams[ipar]=AliHMPIDReconstructor::GetRecoParam()->GetHmpTrackMatchingDistParam(ipar);      //prevision: distance cut is function of momentum
        distCut=distParams[0]+distParams[1]*TMath::Power(distParams[2]*pTrk->GetP(),distParams[3]); //prevision: change functional form to be more precise
      }
    }
    else {distCut=pParam->DistCut();}
      
    if(dmin < distCut) {
      isOkDcut = kTRUE;
    }   
    
    if(!isOkDcut) {
      pTrk->SetHMPIDsignal(pParam->kMipDistCut);                                                //closest cluster with enough charge is still too far from intersection
    }
    
    if(isOkQcut*isOkDcut) isMatched = kTRUE;                                                    // MIP-Track matched !!    
    
    if(!isMatched) {delete hmpTrk;hmpTrk=0x0;continue;}                                           // If matched continue...

    Bool_t isOk = hmpTrk->Update(bestHmpCluster,0.1,0);
    if(!isOk) {delete hmpTrk;hmpTrk=0x0;continue;}
    pTrk->SetOuterHmpParam(hmpTrk,AliESDtrack::kHMPIDout);                 

    FillResiduals(hmpTrk,bestHmpCluster,kFALSE);
 
    Int_t iRad     = pParam->Radiator(yRa);                                                      //evaluate the radiator involved
    
    //evaluate nMean
    if(tsRight){
     if(pNmean->GetEntries()==21) {                                                              //for backward compatibility
       nmean=((TF1*)pNmean->At(3*ipCh))->Eval(ts);                                               //C6F14 Nmean for this chamber
     } else {
       if(iRad < 0) {
	nmean = -1;
       } else {
       Double_t tLow  = ((TF1*)pNmean->At(6*ipCh+2*iRad  ))->Eval(ts);                           //C6F14 low  temp for this chamber
       Double_t tHigh = ((TF1*)pNmean->At(6*ipCh+2*iRad+1))->Eval(ts);                           //C6F14 high temp for this chamber
       Double_t tExp  = pParam->FindTemp(tLow,tHigh,yRa);                                        //estimated temp for that chamber at that y
       nmean = pParam->NIdxRad(AliHMPIDParam::Instance()->GetEPhotMean(),tExp);                  //mean ref idx @ a given temp
       }
       if(nmean < 0){                                                                            //track didn' t pass through the radiator
         pTrk->SetHMPIDsignal(AliHMPIDRecon::kNoRad);                                           //set the appropriate flag
         pTrk->SetHMPIDcluIdx(ipCh,index+1000*cluSiz);                                          //set index of cluster
         delete hmpTrk;hmpTrk=0x0; 
         continue;
        }
      }
    } else nmean = pParam->MeanIdxRad();
    
    //
    recon.SetImpPC(xPc,yPc);                                                                     //store track impact to PC
    recon.CkovAngle(pTrk,(TClonesArray *)pClus->At(ipCh),index,nmean,xRa,yRa);                   //search for Cerenkov angle of this track

    if(pTrk->GetHMPIDsignal()<0) {delete hmpTrk;hmpTrk=0x0;continue;}
        
    AliHMPIDPid pID;
    Double_t prob[5];
    pID.FindPid(pTrk,nmean,5,prob);
  //  Printf("Tracker RefIndex = %f, chmaber = %i, prob1 = %f, prob2 = %f, prob3 = %f, prob4 = %f, prob5 = %f", nmean,ipCh,prob[0],prob[1],prob[2],prob[3],prob[4]);
    pTrk->SetHMPIDpid(prob);
    delete hmpTrk;hmpTrk=0x0;
  }//iTrk

  return 0; // error code: 0=no error;
}//ReconFromKin()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDTracker::ReconHiddenTrk(AliESDEvent *pEsd,TObjArray *pClus,TObjArray *pNmean, TObjArray *pQthre)
{
// Static method to reconstruct Theta Ckov for all valid tracks of a given event.
// Arguments: pEsd- pointer ESD; pClu- pointer to clusters for all chambers; pNmean - pointer to all function Nmean=f(time), pQthre - pointer to all function Qthre=f(time)
//   Returns: error code, 0 if no errors
  
  AliHMPIDReconHTA reconHTA;                                                                     //instance of reconstruction class, nothing important in ctor
  
  AliHMPIDParam *pParam = AliHMPIDParam::Instance();                                             //Instance of AliHMPIDParam
 
  Bool_t tsRight = kTRUE;
 
  UInt_t tsmin = (UInt_t)((TF1*)pQthre->At(0))->GetXmin();                                        //
  UInt_t tsmax = (UInt_t)((TF1*)pQthre->At(0))->GetXmax();                                        //
  UInt_t ts = pEsd->GetTimeStamp();

  if(ts<tsmin || ts>tsmax) {
    AliWarning(Form(" in HMPID time stamp out of range!!! Please check!!! ts = %i",ts));
    tsRight = kFALSE;
  }
   
  for(Int_t iTrk=0;iTrk<pEsd->GetNumberOfTracks();iTrk++){                                        //loop on the ESD tracks in the event
    
    AliESDtrack *pTrk = pEsd->GetTrack(iTrk);                                                     //here it is simulated or just empty track
    Int_t ipCh;
    ipCh = pTrk->GetHMPIDcluIdx();ipCh/=1000000;
    if(ipCh<0) continue;

    TClonesArray *pMipCluLst=(TClonesArray *)pClus->At(ipCh);                                   //get the list of clusters
    Int_t nMipClusTot = pMipCluLst->GetEntries();                                               //total number of clusters in the given chamber
    
    Double_t qMip=-1;
    Int_t chMip=-1;    
    Double_t xMip = 0;
    Double_t yMip = 0;
    Int_t indMip  = 0;
    Int_t cluMipSiz = 0;

    for (Int_t iClu=0; iClu<nMipClusTot;iClu++) {                                               //clusters loop
      
      AliHMPIDCluster *pClu=(AliHMPIDCluster*)pMipCluLst->UncheckedAt(iClu);                    //get the cluster
      Double_t qClus = pClu->Q();
      if(qClus>qMip) {
        qMip  = qClus;
        chMip = pClu->Ch();
        xMip = pClu->X();
        yMip = pClu->Y();
        indMip = iClu;
        cluMipSiz = pClu->Size();
      }
    }//clus loop

    if(chMip<0) return 1;    
    
    Int_t hvsec;
    Double_t qthre=0;
    
// evaluate qThre
    if(tsRight){
    if(pQthre->GetEntriesFast()==pParam->kMaxCh+1) {                                              // just for backward compatibility
      qthre=((TF1*)pQthre->At(chMip))->Eval(ts);                                                  //
    } else {                                                                                      // in the past just 1 qthre
      hvsec = pParam->InHVSector(yMip);                                                           //  per chamber
      if(hvsec>=0) qthre=((TF1*)pQthre->At(6*chMip+hvsec))->Eval(ts);                             //
    } 
   } else qthre = pParam->QCut();
//
    if(qMip<qthre) {
      pTrk->SetHMPIDmip(xMip,yMip,(Int_t)qMip,0);                                                 //store mip info in any case 
      pTrk->SetHMPIDcluIdx(chMip,indMip+1000*cluMipSiz);                                                          
      pTrk->SetHMPIDsignal(pParam->kMipQdcCut);
      return 1;                                                                                   //charge compatible with MIP clusters      
    }
      
    pTrk->SetHMPIDmip(xMip,yMip,(Int_t)qMip,0);                                                   //store mip info in any case 
    pTrk->SetHMPIDcluIdx(chMip,indMip+1000*cluMipSiz);                                                          

    Double_t yRa = yMip;                                                                        //just an approx...
    Double_t nmean;

    Int_t iRad     = pParam->Radiator(yRa);                                                   //evaluate the radiator involved
    
    //evaluate nMean
    if(tsRight){
    if(pNmean->GetEntries()==21) {                                                              //for backward compatibility
      nmean=((TF1*)pNmean->At(3*chMip))->Eval(ts);                                              //C6F14 Nmean for this chamber
    } else {
      if(iRad < 0) {
	nmean = -1;
      } else {
      Double_t tLow  = ((TF1*)pNmean->At(6*chMip+2*iRad  ))->Eval(ts);                          //C6F14 low  temp for this chamber
      Double_t tHigh = ((TF1*)pNmean->At(6*chMip+2*iRad+1))->Eval(ts);                          //C6F14 high temp for this chamber
      Double_t tExp  = pParam->FindTemp(tLow,tHigh,yRa);                                        //estimated temp for that chamber at that y
      nmean = pParam->NIdxRad(AliHMPIDParam::Instance()->GetEPhotMean(),tExp);                  //mean ref idx @ a given temp
      }
      if(nmean < 0){                                                                            //track didn' t pass through the radiator
         pTrk->SetHMPIDsignal(AliHMPIDRecon::kNoRad);                                           //set the appropriate flag
         return 1;
        }
      } 
    } else nmean = pParam->MeanIdxRad();
    //
    if(!reconHTA.CkovHiddenTrk(pTrk,(TClonesArray *)pClus->At(ipCh),indMip,nmean)) {                 //search for track parameters and Cerenkov angle of this track
      AliHMPIDPid pID;
      Double_t prob[5];
      pID.FindPid(pTrk,nmean,5,prob);
      pTrk->SetHMPIDpid(prob);
    }
//      Printf(" Prob e- %6.2f mu %6.2f pi %6.2f k %6.2f p %6.2f",prob[0]*100,prob[1]*100,prob[2]*100,prob[3]*100,prob[4]*100);
  }//iTrk

  return 0; // error code: 0=no error;

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