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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// AliHMPIDReconHTA                                                         //
//                                                                      //
// HMPID class to perfom pattern recognition based on Hough transfrom    //
// for single chamber                                                   //
//////////////////////////////////////////////////////////////////////////

#include "AliHMPIDReconHTA.h"//class header
#include "AliHMPIDCluster.h" //CkovHiddenTrk()
#include "AliHMPIDRecon.h"   //FunMinPhot()
#include <TFile.h>           //Database()
#include <TMinuit.h>         //FitFree()
#include <TClonesArray.h>    //CkovHiddenTrk()
#include <AliESDtrack.h>     //CkovHiddenTrk()
#include <TH2F.h>            //InitDatabase()
#include <TGraph.h>          //ShapeModel()
#include <TSpline.h>         //ShapeModel()
#include <TCanvas.h>         //ShapeModel()
#include "TStopwatch.h"      //

Int_t AliHMPIDReconHTA::fgDB[500][150]={{75000*0}};
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AliHMPIDReconHTA::AliHMPIDReconHTA():
  TNamed("RichRec","RichPat"),
  fMipX(-999),
  fMipY(-999),
  fMipQ(-999),
  fRadX(-999),
  fRadY(-999),
  fIdxMip(0),
  fNClu(0),
  fXClu(0),
  fYClu(0),
  fPhiPhot(0),
  fThetaPhot(0),
  fClCk(0),
  fThTrkIn(-999),
  fPhTrkIn(-999),
  fThTrkFit(-999),
  fPhTrkFit(-999),
  fCkovFit(-999),
  fNCluFit(0),
  fCkovSig2(0),
  fFitStatus(0),
  fParam(AliHMPIDParam::Instance())
{
//..
//hidden algorithm
//..
  fParam->SetRefIdx(fParam->MeanIdxRad()); // initialization of ref index to a default one
  InitDatabase();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AliHMPIDReconHTA::~AliHMPIDReconHTA()
{
  DeleteVars();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void AliHMPIDReconHTA::InitVars(Int_t n)
{
//..
//Init some variables
//..
  fXClu = new Double_t[n];
  fYClu = new Double_t[n];
  fPhiPhot = new Double_t[n];
  fThetaPhot = new Double_t[n];
  fClCk = new Bool_t[n];
  for(Int_t i=0;i<n;i++) fClCk[i] = kTRUE;
//
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void AliHMPIDReconHTA::DeleteVars()const
{
//..
//Delete variables
//..
  if(fXClu) delete [] fXClu;
  if(fYClu) delete [] fYClu;
  if(fPhiPhot) delete [] fPhiPhot;
  if(fThetaPhot) delete [] fThetaPhot;
  if(fClCk) delete [] fClCk;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::CkovHiddenTrk(AliESDtrack *pTrk,TClonesArray *pCluLst,Int_t index, Double_t nmean)
{
// Pattern recognition method without any infos from tracking:HTA (Hidden Track Algorithm)...
// The method finds in the chmuber the cluster with the highest charge
// compatibile with a MIP, then the strategy is applied
// Arguments:  pTrk     - pointer to ESD track
//             pCluLs   - list of clusters for a given chamber 
//             pNmean   - pointer to ref. index
//             pQthre   - pointer to qthre
//   Returns:           - 0=ok,1=not fitted 
  
  AliHMPIDParam *pParam = AliHMPIDParam::Instance(); 

  if(!CluPreFilter(pCluLst)) return kFALSE;

  Int_t nCh=0;
  Int_t sizeClu=0;
  
  fNClu = pCluLst->GetEntriesFast();
    
  for (Int_t iClu=0;iClu<fNClu;iClu++){                                                       //clusters loop
    AliHMPIDCluster *pClu=(AliHMPIDCluster*)pCluLst->UncheckedAt(iClu);                       //get pointer to current cluster    
    fXClu[iClu] = pClu->X();fYClu[iClu] = pClu->Y();                                          //store x,y for fitting procedure
    fClCk[iClu] = kTRUE;                                                                      //all cluster are accepted at this stage to be reconstructed
    
    if(iClu == index) {

      fMipX = pClu->X();
      fMipY = pClu->Y();
      fMipQ = pClu->Q();
      sizeClu = pClu->Size();
      nCh = pClu->Ch();
      fClCk[index] = kFALSE;
      fIdxMip = index;
      AliDebug(1,Form(" MIP n. %i x %f y %f Q %f",iClu,pClu->X(),pClu->Y(),pClu->Q()));
    }
  }//clusters loop
  
  pParam->SetRefIdx(nmean);
  
  //
  Float_t xra,yra,th,ph; pTrk->GetHMPIDtrk(xra,yra,th,ph);
  AliDebug(1,Form(" simulated phiTRK %6.2f thetaTRK %6.2f",ph*TMath::RadToDeg(),th*TMath::RadToDeg()));
  //
  
  if(!DoRecHiddenTrk()) {
    pTrk->SetHMPIDsignal(pParam->kNoPhotAccept);
    return kFALSE;
  }                                                                           //Do track and ring reconstruction,if problems returns 1
  AliDebug(1,Form("    fitted phi %6.2f ",fPhTrkFit*TMath::RadToDeg()));
  
  pTrk->SetHMPIDtrk(fRadX,fRadY,fThTrkFit,fPhTrkFit);                                        //store track intersection info
  pTrk->SetHMPIDmip(fMipX,fMipY,(Int_t)fMipQ,NCluFit());                                     //store mip info + n. phots of the ring 
  pTrk->SetHMPIDcluIdx(nCh,fIdxMip+1000*sizeClu);                                            //set cham number, index of cluster + cluster size
  pTrk->SetHMPIDsignal(fCkovFit);                                                            //find best Theta ckov for ring i.e. track
  pTrk->SetHMPIDchi2(fCkovSig2);                                                             //errors squared
  AliDebug(1,Form(" n clusters tot %i fitted to ring %i",fNClu,NCluFit()));
  for(Int_t i=0;i<fNClu;i++) {
    AliDebug(1,Form(" n.%3i  ThetaCer %8.3f PhiCer %8.3f check %i",i,fThetaPhot[i],fPhiPhot[i],fClCk[i]));
  }
  AliDebug(1,Form("CkovHiddenTrk: thetaC %f th %f ph %f",fCkovFit,fThTrkFit*TMath::RadToDeg(),fPhTrkFit*TMath::RadToDeg()));
  
  return kTRUE;
  
}//CkovHiddenTrk()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::DoRecHiddenTrk()
{
// Pattern recognition method without any infos from tracking...
// First a preclustering filter to avoid part of the noise
// Then only ellipsed-rings are fitted (no possibility, 
// for the moment, to reconstruct very inclined tracks)
// Finally a fitting with (th,ph) free, starting by very close values
// previously evaluated.
// Arguments:   none
//   Returns:   none
  Double_t thTrkRec,phiTrkRec,thetaCRec;
  
  if(!FindShape(thTrkRec,phiTrkRec,thetaCRec)) {
    AliDebug(1,Form(" FindShape failed...!"));
    return kFALSE;
  }
  AliDebug(1,Form(" FindShape accepted...!"));

  if(!FitRing(thTrkRec,phiTrkRec)) {
    AliDebug(1,Form(" FitRing failed...!"));
    return kFALSE;
  }
  AliDebug(1,Form(" FitRing accepted...!"));
  
  if(!UniformDistrib()) {
    AliDebug(1,Form(" UniformDistrib failed...!"));
    return kFALSE;
  }
  AliDebug(1,Form(" UniformDistrib accepted...!"));

  return kTRUE;
}//DoRecHiddenTrk()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::CluPreFilter(TClonesArray *pCluLst)
{
// Pre-filter of bkg clusters
// Arguments:    pSluLst  -  List of the clusters for a given chamber
//   Returns:    status   -  TRUE if filtering leaves enough photons, FALSE if not
//
  Int_t nClusTot = pCluLst->GetEntriesFast();
  if(nClusTot<4||nClusTot>100) {
    return kFALSE; 
  } else { 
    InitVars(nClusTot);
    return kTRUE;
  }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::FindShape(Double_t &thTrkRec,Double_t &phiTrkRec,Double_t &thetaCRec)
{
// Finds the estimates for phi and theta of the track and the ThetaCerenkov
// by using a database of the shapes of the rings
// Arguments:   none  
//   Returns:   thTrkRec  - estimate of theta track
//              phiTrkRec - estimate of phi   track
//              thetaCRec - estimate of ThetaCerenkov
//              status    - TRUE if a good solution is found, FALSE if not

  Double_t phiphot[1000];  
  Double_t    dist[1000];  
  Int_t     indphi[1000];  

  Bool_t status;
    
  if(fNClu>1000) return kFALSE;  // too many clusters....
  
// Sort in phi angle...
  for(Int_t i=0;i<fNClu;i++) {
    if(!fClCk[i]) {
      AliDebug(1,Form(" n.%3i  xMIP    %8.3f yMIP %8.3f check %i",i,fMipX,fMipY,fClCk[i]));
      phiphot[i] = 999.;
      dist[i]    = 999.;
      continue;
    }
    phiphot[i] = (TMath::ATan2(fMipY-fYClu[i],fMipX-fXClu[i])+TMath::Pi())*TMath::RadToDeg();
    dist[i]=TMath::Sqrt((fMipX-fXClu[i])*(fMipX-fXClu[i])+(fMipY-fYClu[i])*(fMipY-fYClu[i]));
    AliDebug(1,Form(" n.%3i  phiphot %8.3f dist %8.3f check %i",i,phiphot[i],dist[i],fClCk[i]));
  }
  
  TMath::Sort(fNClu,phiphot,indphi,kFALSE);
  
// Purify with a truncated mean;
  Int_t np=0;
  Double_t dMean  = 0;
  Double_t dMean2 = 0;
  for(Int_t i=0;i<fNClu;i++) {
    if(!fClCk[indphi[i]]) continue;                                                  // Check if a good photon candidate or not
    dMean +=dist[indphi[i]];
    dMean2+=dist[indphi[i]]*dist[indphi[i]];
    np++;
  }
 
  if(np>0){    
   dMean  /=(Double_t)np;
   dMean2 /=(Double_t)np;}
  Double_t rms = TMath::Sqrt(dMean2 - dMean*dMean);
  
  for(Int_t i=0;i<fNClu;i++) {
    if(!fClCk[indphi[i]]) continue;                                                  // Check if a good photon candidate or not
    if(TMath::Abs(dMean-dist[indphi[i]]) > 1.5*rms) {
      fClCk[indphi[i]] = kFALSE;
      continue;
    }
  }

  AliDebug(1,"Purification of photons...");
//
//  purify vectors for good photon candidates
//
  Int_t npeff=0;
  Double_t *phiphotP = new Double_t[fNClu+1];  
  Double_t *distP    = new Double_t[fNClu+1];  
  for(Int_t i=0;i<fNClu;i++) {
    AliDebug(1,Form(" n. %3i phiphot %8.3f dist %8.3f check %i",i,phiphot[indphi[i]],dist[indphi[i]],fClCk[indphi[i]]));
    if(!fClCk[indphi[i]]) continue;                                                  // Check if a good photon candidate or not
    phiphotP[npeff] = phiphot[indphi[i]];
    distP[npeff]    = dist[indphi[i]];
    npeff++;
  }
  
  if(npeff<3) {
    AliDebug(1,Form("FindShape failed: no enough photons = %i...",npeff));
    delete [] phiphotP;
    delete [] distP;
    return kFALSE;
  }

  Double_t xA,xB;
  status = kFALSE;
  
  if(!ShapeModel(npeff,phiphotP,distP,xA,xB,phiTrkRec)) {AliDebug(1,Form("ShapeModel failed            ")); return kFALSE;}
   
//  if(xA > 50 || xB > 15)                                {AliDebug(1,Form("xA and xB failed out of range")); return kFALSE;}

  Int_t binxDB,binyDB;
  Int_t compactDB=-1;
  
  if(xA > xB)  {                                        //geometrically not possible, try to recover on a mean values...

    FindBinDB(xA,xA,binxDB,binyDB);
    if(binxDB<0 || binyDB<0)                              {AliDebug(1,Form("bin < 0 ! failed             ")); return kFALSE;}
    Int_t compactDB1 = CompactDB(binxDB,binyDB);
    FindBinDB(xB,xB,binxDB,binyDB);
    if(binxDB<0 || binyDB<0)                              {AliDebug(1,Form("bin < 0 ! failed             ")); return kFALSE;}
    Int_t compactDB2 = CompactDB(binxDB,binyDB);
    Double_t thetaCRec1 =  (Double_t)(compactDB1%1000);
    Double_t thetaCRec2 =  (Double_t)(compactDB2%1000);
    Double_t thTrkRec1  =  (Double_t)(compactDB1/1000);
    Double_t thTrkRec2  =  (Double_t)(compactDB2/1000);
    thetaCRec = 0.5*(thetaCRec1+thetaCRec2);
    thTrkRec  = 0.5*( thTrkRec1+ thTrkRec2);
    
  } else {
      
    FindBinDB(xA,xB,binxDB,binyDB);
    if(binxDB<0 || binyDB<0) {AliDebug(1,Form("bin < 0 ! failed             ")); return kFALSE;}

    compactDB = CompactDB(binxDB,binyDB);

    if(compactDB<0)                                       {AliDebug(1,Form("compact< 0! failed           ")); return kFALSE;} 
    //
    //
    thetaCRec =  (Double_t)(compactDB%1000);
    thTrkRec  =  (Double_t)(compactDB/1000);

  }

  AliDebug(1,Form(" CompactDB %i thTrkRec %8.3f thetaCRec %8.3f ",compactDB,thTrkRec,thetaCRec));
    
  phiTrkRec *= TMath::DegToRad();
  thTrkRec  *= TMath::DegToRad(); 
  thetaCRec *= TMath::DegToRad();

  status = kTRUE;

  delete [] phiphotP;
  delete [] distP;
  
  return status;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::ShapeModel(Int_t np,Double_t *phiphot,Double_t *dist,Double_t &xA,Double_t &xB,Double_t &phiStart)
{
// Find a Spline curve to define dist. vs. phi angle
// in order to estimate the phi of the track
// Arguments:   np     - # points corresponding to # photon candidates
//             dist    - distance of each photon from MIP
//             phiphot - phi of the photon in the DRS
//   Returns:  xA      - min. distance from MIP
//             xB      - dist. from mip perpedicular to the major axis 
//             phiStart- estimate of the track phi

  TGraph *phigr = new TGraph(np,phiphot,dist);
  phiStart = FindSimmPhi();   
  
  Double_t phiStart1 = phiStart;
  if(phiStart1 > 360) phiStart1 -= 360;
  Double_t phiStart2 = phiStart+90;
  if(phiStart2 > 360) phiStart2 -= 360;
  xA = phigr->Eval(phiStart1);
  xB = phigr->Eval(phiStart2);
  //---
  AliDebug(1,Form("phiStart %f phiStart1 %f phiStart2 %f ",phiStart,phiStart1,phiStart2));
  AliDebug(1,Form("xA  %f xB  %f",xA,xB));

  phiStart += 180;  
  if(phiStart>360) phiStart-=360;
  
  return kTRUE;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Double_t AliHMPIDReconHTA::VertParab(Double_t x1,Double_t y1,Double_t x2, Double_t y2, Double_t x3, Double_t y3)const
{
// It uses parabola from 3 points to evaluate the x-coord of the parab 
// Arguments:    xi,yi - points
//   Returns:    x-coord of the vertex 
  
  Double_t a = ((x1-x3)*(y1-y2)-(x1-x2)*(y1-y3))/((x1*x1-x2*x2)*(x1-x3)-(x1*x1-x3*x3)*(x1-x2));
  Double_t b = (y1-y2 - a*(x1*x1-x2*x2))/(x1-x2);
//  Double_t c = y1 - a*x1*x1-b*x1;
  return -0.5*b/a;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::FitRing(Double_t thTrkRec,Double_t phiTrkRec)
{
  Double_t th = thTrkRec;
  Double_t ph = phiTrkRec;
  
  FitFree(th,ph);
  while(FitStatus()) {
    th = fThTrkFit;
    ph = fPhTrkFit;
    FitFree(th,ph);
  }
  return kTRUE;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::FitFree(Double_t thTrkRec,Double_t phiTrkRec)
{
// Fit performed by minimizing RMS/sqrt(n) of the
// photons reconstructed. First phi is fixed and theta
// is fouond, then (th,ph) of the track
// as free parameters
// Arguments:    PhiRec phi of the track
//   Returns:    none
  
  TMinuit *pMinuit = new TMinuit(2);
  pMinuit->mncler();
  gMinuit->SetObjectFit((TObject*)this);  gMinuit->SetFCN(AliHMPIDReconHTA::FunMinPhot);  //set fit function
  Double_t aArg=-1,parStep,parLow,parHigh;     Int_t iErrFlg;                 //tmp vars for TMinuit
  Double_t d1,d2,d3;
  TString sName;
  Double_t th,ph;
  
  pMinuit->mnexcm("SET PRI",&aArg,1,iErrFlg);                                          //suspend all printout from TMinuit
  pMinuit->mnexcm("SET NOW",&aArg,0,iErrFlg);

  if(thTrkRec==0) thTrkRec = 3.*TMath::DegToRad();    // not to start from the edge...
  
  AliDebug(1,Form(" Minimization STARTED with phiTRK %6.2f thetaTRK %6.2f",phiTrkRec,thTrkRec));

  pMinuit->mnparm(0," thTrk  ",thTrkRec ,parStep=0.01,parLow=0,parHigh=TMath::PiOver4(),iErrFlg);
  pMinuit->mnparm(1," phiTrk ",phiTrkRec,parStep=0.01,parLow=0,parHigh=TMath::TwoPi(),iErrFlg);
  
  pMinuit->FixParameter(1);
  pMinuit->mnexcm("SIMPLEX" ,&aArg,0,iErrFlg);   
  pMinuit->mnexcm("MIGRAD"  ,&aArg,0,iErrFlg);
  pMinuit->Release(1);  
  pMinuit->mnexcm("MIGRAD"  ,&aArg,0,iErrFlg);
  
  pMinuit->mnpout(0,sName,th,d1,d2,d3,iErrFlg);
  pMinuit->mnpout(1,sName,ph,d1,d2,d3,iErrFlg);   
  
  Double_t f,par[2];
  Double_t *grad=0x0;
  par[0] = th;par[1] = ph;
  pMinuit->Eval(2,grad,f,par,3);

  SetTrkFit(th,ph);
  return kTRUE;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void AliHMPIDReconHTA::FunMinPhot(Int_t &/* */,Double_t* /* */,Double_t &f,Double_t *par,Int_t iflag)
{
// Minimization function to find best track and thetaC parameters
// Arguments:    f = function value to minimize
//             par = list of parameter to find
//           iflag = flag status. See Minuit instructions
//   Returns:    none
//
// Note: it is necessary to call an instance of AlihMPIDParam. Not possible to use fParam
// because of the static instantiation of the function in Minuit
  
  AliHMPIDParam *pParam=AliHMPIDParam::Instance();
  AliHMPIDReconHTA *pRecHTA=(AliHMPIDReconHTA*)gMinuit->GetObjectFit();
  AliHMPIDRecon pRec;
  Double_t sizeCh = 0.5*pParam->RadThick()+pParam->WinThick()+pParam->GapThick();
  Double_t thTrk = par[0]; 
  Double_t phTrk = par[1];
  Double_t xrad = pRecHTA->MipX() - sizeCh*TMath::Tan(thTrk)*TMath::Cos(phTrk);
  Double_t yrad = pRecHTA->MipY() - sizeCh*TMath::Tan(thTrk)*TMath::Sin(phTrk);
  pRecHTA->SetRadXY(xrad,yrad);
  pRec.SetTrack(xrad,yrad,thTrk,phTrk);

  Double_t meanCkov =0;
  Double_t meanCkov2=0;
  Double_t thetaCer,phiCer;
  Int_t nClAcc = 0;
  Int_t nClTot=pRecHTA->NClu();

  for(Int_t i=0;i<nClTot;i++) {
    
    if(pRecHTA->IdxMip() == i) {
      pRecHTA->SetPhotAngles(i,999.,999.);
      continue;
    }
    
    if(!(pRecHTA->ClCk(i))) continue;
    
    Bool_t status = pRec.FindPhotCkov(pRecHTA->XClu(i),pRecHTA->YClu(i),thetaCer,phiCer);
    if(!status) {
      pRecHTA->SetPhotAngles(i,999.,999.);
      continue;
    }
    pRecHTA->SetPhotAngles(i,thetaCer,phiCer);
    meanCkov  += thetaCer;
    meanCkov2 += thetaCer*thetaCer;
    nClAcc++;
  }
  
  if(nClAcc==0) {f=999;return;}
  meanCkov  /=(Double_t)nClAcc;
  meanCkov2 /=(Double_t)nClAcc;
  Double_t rms = TMath::Sqrt(TMath::Abs(meanCkov2 - meanCkov*meanCkov));
  f = rms/TMath::Sqrt((Double_t)nClAcc);
  
  if(iflag==3) {
    Int_t nClAccStep1 = nClAcc;
    nClAcc = 0;
    Double_t meanCkov1=0;
    Double_t meanCkov3=0;
    for(Int_t i=0;i<nClTot;i++) {
      
      if(!(pRecHTA->ClCk(i))) continue;
      thetaCer = pRecHTA->PhotTheta(i);
      if(TMath::Abs(thetaCer-meanCkov)<2*rms) {
        meanCkov1 += thetaCer;
        meanCkov3 += thetaCer*thetaCer;
        nClAcc++;
      } else pRecHTA->SetClCk(i,kFALSE);
    }
    
    if(nClAcc<3) {
      pRecHTA->SetFitStatus(kFALSE);
      pRecHTA->SetCkovFit(meanCkov);
      pRecHTA->SetCkovSig2(rms*rms);
      pRecHTA->SetNCluFit(nClAccStep1);
      return;
    }
      
    meanCkov1/=nClAcc;
    Double_t rms2 = (meanCkov3 - meanCkov*meanCkov*nClAcc)/nClAcc;
    
    // get a logger instance
    // what for??
    //AliLog::GetRootLogger();

    if(nClAcc!=nClAccStep1) pRecHTA->SetFitStatus(kTRUE); else pRecHTA->SetFitStatus(kFALSE);
    
    pRecHTA->SetCkovFit(meanCkov1);
    pRecHTA->SetCkovSig2(rms2);
    pRecHTA->SetNCluFit(nClAcc);
  }
}//FunMinPhot()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void AliHMPIDReconHTA::InitDatabase()
{
// Construction a database of ring shapes on fly
//   Arguments: none
//   Returns  : none
//  N.B. fgDB is the distance with x-min from MIP
//                                 y-dist from the ring of the MIP perpendicular to major axis
//        The content is the packed info of track theta and thetaC in degrees
//                        thetaC+1000*thTrk
//
//  TFile *pout = new TFile("./database.root","recreate");

  static Bool_t isDone = kFALSE;
  
  TStopwatch timer;
  
  if(isDone) {
   return;
  }
  
  if(!isDone) {
    timer.Start();
  }
 
  AliInfo(Form("database HTA is being built.Please, wait..."));
//  
  Double_t x[3]={0,0,0},y[3];

  AliHMPIDRecon rec;

  if(!fParam) fParam=AliHMPIDParam::Instance();
  Double_t thetaMax = TMath::ACos(1./fParam->MeanIdxRad());
  Double_t thTrkMax = 1./TMath::ASin(fParam->MeanIdxRad());    

  Int_t nstepx = 1000;
  Int_t nstepy = 1000;

  //
  Double_t xrad = 0;
  Double_t yrad = 0;
  Double_t phTrk = 0;

  for(Int_t i=0;i<nstepx;i++) {     //loop on thetaC
    for(Int_t j=0;j<nstepy;j++) {   //loop on theta particle
      Double_t thetaC = thetaMax/nstepx*((Double_t)i+0.5);
      Double_t thTrk  = thTrkMax/nstepy*((Double_t)j+0.5);
      //
      //mip position
      //
      Double_t sizeCh = 0.5*fParam->RadThick()+fParam->WinThick()+fParam->GapThick();
      Double_t xmip = xrad + sizeCh*TMath::Tan(thTrk)*TMath::Cos(phTrk);
      Double_t ymip = yrad + sizeCh*TMath::Tan(thTrk)*TMath::Sin(phTrk);

      Double_t dist2;
      //
      //first point at phi=0
      //
      rec.SetTrack(xrad,yrad,thTrk,phTrk);
      TVector2 pos;
      pos=rec.TracePhot(thetaC,0);

      /*if(pos.X()==-999) {
        dist1 = 0;            //open ring...only the distance btw mip and point at 180 will be considered
      } else {
        x[0] = pos.X(); y[0] = pos.Y();
        dist1   = TMath::Sqrt((x[0]-xmip)*(x[0]-xmip)+(y[0]-ymip)*(y[0]-ymip));
      }*/
      
      if(pos.X()!=-999) {x[0] = pos.X(); y[0] = pos.Y();}
      
      //
      //second point at phi=180
      //
      rec.SetTrack(xrad,yrad,thTrk,phTrk);
      pos=rec.TracePhot(thetaC,TMath::Pi());

      if(pos.X()==-999) {AliDebug(1,Form("it should not happens!Bye"));return;}
      x[1] = pos.X(); y[1] = pos.Y();
      if((x[1]-xmip)*(x[0]-xmip)>0) continue; // to avoid circles out mips (for very low ThetaC)
      dist2   = TMath::Sqrt((x[1]-xmip)*(x[1]-xmip)+(y[1]-ymip)*(y[1]-ymip));

//      Double_t distA = dist1+dist2;
      Double_t distA = dist2;     // only the minimum: problem of acceptance
      //
      //second point at phi=90
      //
      rec.SetTrack(xrad,yrad,thTrk,phTrk);
      pos=rec.TracePhot(thetaC,TMath::PiOver2());

      if(pos.X()==-999) continue;
      x[2] = pos.X(); y[2] = pos.Y();
      Double_t distB   = TMath::Sqrt((x[2]-xmip)*(x[2]-xmip)+(y[2]-ymip)*(y[2]-ymip));
// compact the infos...      
      Int_t compact = (Int_t)(thetaC*TMath::RadToDeg())+1000*(Int_t)(thTrk*TMath::RadToDeg());
      Int_t binxDB,binyDB;
      FindBinDB(distA,distB,binxDB,binyDB);
      if(fgDB[binxDB][binyDB]==0) fgDB[binxDB][binyDB] = compact;
    }
  }

  FillZeroChan();

  if(!isDone) {
    timer.Stop();
    Double_t nSecs = timer.CpuTime();  
    AliInfo(Form("database HTA successfully open in %3.1f sec.(CPU). Reconstruction is started.",nSecs));
    isDone = kTRUE;
  }
  
//  pout->Write();
//  pout->Close();
  
}//InitDatabase()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void AliHMPIDReconHTA::FillZeroChan()const
{
  //If fills eventually channel without entries
  //inthe histo "database" jyst interpolating the neighboring cells
  // Arguments: histogram pointer of the database
  //   Returns: none
  //
  const Int_t nxDB = 500;
  const Int_t nyDB = 150;

  for(Int_t i = 0;i<nxDB;i++) {
    for(Int_t j = 0;j<nyDB;j++) {
      if(fgDB[i][j] == 0) {
        fgDB[i][j] = -1;
        Int_t nXmin = i-1; Int_t nXmax=i+1;
        Int_t nYmin = j-1; Int_t nYmax=j+1;
        Int_t nc = 0;
        Double_t meanC =0;
        Double_t meanTrk =0;
        for(Int_t ix=nXmin;ix<=nXmax;ix++) {
          if(ix<0||ix>=nxDB) continue;
          for(Int_t iy=nYmin;iy<=nYmax;iy++) {
            if(iy<0||iy>=nyDB) continue;
            meanC  +=  (Int_t)(fgDB[ix][iy]%1000);
            meanTrk+=  (Int_t)(fgDB[ix][iy]/1000);
            nc++;
          }
          meanC/=nc; meanTrk/=nc;
          Int_t compact = (Int_t)meanC+1000*(Int_t)meanTrk;
          if(compact>0)fgDB[i][j] = compact;
        }
      }
    }
  }
}//FillZeroChan()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Int_t AliHMPIDReconHTA::r2(Double_t *coef, Double_t &x1, Double_t &x2)
{
  //2nd deg. equation
  //solution
  // Arguments: coef 2 1 0: ax^2+bx+c=0
  //   Returns: n. of solutions
  //            x1= 1st sol
  //            x2= 2nd sol
  Double_t a,b,c;
  a = coef[2];
  b = coef[1];
  c = coef[0];
  Double_t delta = b*b-4*a*c;
  if(delta<0) {return 0;}
  if(delta==0) {
    x1=x2=-b/(2*a);
    return 1;
  }
  if(a==0) {
    x1 = -c/b;
    return 1;
  }
  // delta>0
  x1 = (-b+TMath::Sqrt(delta))/(2*a);
  x2 = (-b-TMath::Sqrt(delta))/(2*a);
  return 2;
}//r2()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Double_t AliHMPIDReconHTA::FindSimmPhi() 
{     
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Reconstruction of phiTRK angle with two methods (in switching)
// 
// - least square method (for closed rings)
// - by minimum distance mip-photon (for open rings)
  
  Float_t coeff1ord=0;     Float_t coeff2ord=0;     Float_t coeff0ord=0;  
  Float_t xrotsumm =0;     Float_t yrotsumm =0;     Float_t xx =0;           
  Float_t yy =0;           Float_t xy =0;
  Double_t xmin=0;
  Double_t ymin=0;

  Int_t np=0;    
    
  Double_t distMin = 999.;
  
  for(Int_t i=0;i<fNClu;i++) {
    if(!fClCk[i]) continue;
    np++;
    xrotsumm+=fXClu[i];         // summ xi
    yrotsumm+=fYClu[i];         // summ yi
    xx+=fXClu[i]*fXClu[i];      // summ xixi     
    yy+=fYClu[i]*fYClu[i];      // summ yiyi
    xy+=fXClu[i]*fYClu[i];      // summ yixi     
    Double_t dist2= (fXClu[i]-fMipX)*(fXClu[i]-fMipX)+(fYClu[i]-fMipY)*(fYClu[i]-fMipY);
    if(dist2<distMin) {
      distMin = dist2;
      xmin = fXClu[i];
      ymin = fYClu[i];
    }
  }

  Double_t AngM = TMath::ATan2(ymin-fMipY,(xmin-fMipX))*TMath::RadToDeg();
  if (AngM<0) AngM+=360;
  
  AliDebug(1,Form(" Simple angle prediction with MIN phi = %f",AngM));
  
  //_____calc. met min quadr using effective distance _________________________________________________
  
  if(np>0){ 
    coeff2ord = xy-xrotsumm*yrotsumm/np;    
    coeff1ord = yrotsumm*yrotsumm/np - xrotsumm*xrotsumm/np - yy + xx;
  }
  coeff0ord = -coeff2ord;
  
  AliDebug(1,Form(" a = %f b = %f c = %f",coeff2ord,coeff1ord,coeff0ord));
  
  Double_t m1=0, m2=0;  Double_t n1=0, n2=0;
                            // c           // b         // a
  Double_t coeff[3]={coeff0ord,coeff1ord,coeff2ord};    
  
  r2(coeff,m1,m2);
  
  if(np>0){ 
    n1=(yrotsumm-m1*xrotsumm)/np;                         
    n2=(yrotsumm-m2*xrotsumm)/np;}
  // 2 solutions.................
  
  // negative angles solved...
  
  Double_t d1 =(1/(m1*m1+1))*(yy+m1*m1*xx+np*n1*n1-2*m1*xy-2*n1*yrotsumm+2*m1*n1*xrotsumm);
  Double_t d2 =(1/(m2*m2+1))*(yy+m2*m2*xx+np*n2*n2-2*m2*xy-2*n2*yrotsumm+2*m2*n2*xrotsumm);

  AliDebug(1,Form(" predicted distance d1 %f for angle %6.2f d2 %f for angle %6.2f",d1,TMath::ATan(m1)*TMath::RadToDeg(),
                                                                                    d2,TMath::ATan(m2)*TMath::RadToDeg()));
  Double_t mMin;
  if(d1 > d2) mMin = m2; else mMin = m1;
  
  Double_t phiTrk=0;
  // 
  if(ymin <  fMipY && xmin >  fMipX)  {phiTrk  =  TMath::ATan(mMin)*TMath::RadToDeg()+180;}
  if(ymin >  fMipY && xmin <  fMipX)  {phiTrk  =  TMath::ATan(mMin)*TMath::RadToDeg()+360;}
  if(ymin >  fMipY && xmin >  fMipX)  {phiTrk  =  TMath::ATan(mMin)*TMath::RadToDeg()+180;}
  if(ymin <  fMipY && xmin <  fMipX)  {phiTrk  =  TMath::ATan(mMin)*TMath::RadToDeg();}
  if(ymin == fMipY && xmin >  fMipX)  {phiTrk  =  TMath::ATan(mMin)*TMath::RadToDeg()+180;}
  if(ymin == fMipY && xmin <  fMipX)  {phiTrk  =  TMath::ATan(mMin)*TMath::RadToDeg();}
  if(ymin <  fMipY && xmin == fMipX)  {phiTrk  =   90;}
  if(ymin >  fMipY && xmin == fMipX)  {phiTrk  =  270;}
  
  //  ------------------------- choose the best-----------------------
  
  
  if( AngM-40 <=  phiTrk  &&  AngM+40 >= phiTrk)   return phiTrk;  else return AngM;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void AliHMPIDReconHTA::FindBinDB(Double_t x,Double_t y,Int_t &binX,Int_t &binY)
{
  const Int_t nxDB = 500;
  const Int_t nyDB = 150;
  const Double_t xlowDB =  0;   
  const Double_t xhigDB = 50;   
  const Double_t ylowDB =  0;
  const Double_t yhigDB = 30;

  binX = -1;
  binY = -1;
  if(x<xlowDB && x>xhigDB &&
     y<ylowDB && y>yhigDB)    return;
  binX = Int_t((x-xlowDB)/(xhigDB-xlowDB)*nxDB);
  binY = Int_t((y-ylowDB)/(yhigDB-ylowDB)*nyDB);
  if(binX>=nxDB || binY>=nyDB) {
    binX = -1;
    binY = -1;
  }
  
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bool_t AliHMPIDReconHTA::UniformDistrib() 
{
  AliHMPIDParam *pParam=AliHMPIDParam::Instance();
  AliHMPIDRecon pRec;

  Double_t sizeCh = 0.5*pParam->RadThick()+pParam->WinThick()+pParam->GapThick();
  Double_t xrad = MipX() - sizeCh*TMath::Tan(fThTrkFit)*TMath::Cos(fPhTrkFit);
  Double_t yrad = MipY() - sizeCh*TMath::Tan(fThTrkFit)*TMath::Sin(fPhTrkFit);
  
  pRec.SetTrack(xrad,yrad,fThTrkFit,fPhTrkFit);
    
  Int_t npeff=0;
  Int_t nPhotPerBin = 4;
  for(Int_t i=0;i<fNClu;i++) {  
    if(!ClCk(i)) continue;
    npeff++;
  }
  
  Int_t nPhiBins = npeff/nPhotPerBin+1;
  if(nPhiBins<=1) nPhiBins = 2;

  Double_t *iPhiBin;
  iPhiBin = new Double_t[nPhiBins];
  
  for(Int_t i=0;i<nPhiBins;i++) iPhiBin[i] =0;

  for(Int_t i=0;i<fNClu;i++) { 
    if(!ClCk(i)) continue;
    Double_t phiCer = PhotPhi(i);
    
    Double_t PhiProva = phiCer*TMath::RadToDeg();
    if(PhiProva<0) PhiProva+= 360;
    Int_t index = (Int_t)((Float_t)nPhiBins*PhiProva/360.);
    iPhiBin[index]++;
   }

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