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

//====================================================================================================================================================
//
//      Support class for various common operation on MFT objects
//
//      Contact author: antonio.uras@cern.ch
//
//====================================================================================================================================================

#include "AliMUONTrackParam.h"
#include "AliMUONTrackExtrap.h"
#include "AliAODTrack.h"
#include "AliAODDimuon.h"
#include "TLorentzVector.h"
#include "AliMFTConstants.h"
#include "TDatabasePDG.h"
#include "TMath.h"
#include "AliLog.h"
#include "TObjArray.h"
#include "TDecompLU.h"

#include "AliMFTAnalysisTools.h"

ClassImp(AliMFTAnalysisTools)

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::ExtrapAODMuonToZ(AliAODTrack *muon, Double_t z, Double_t xy[2]) {

  if (!(muon->PzAtDCA()!=0)) return kFALSE;

  AliMUONTrackParam *param = new AliMUONTrackParam();

  param -> SetNonBendingCoor(muon->XAtDCA());
  param -> SetBendingCoor(muon->YAtDCA());
  param -> SetZ(AliMFTConstants::fZEvalKinem);
  param -> SetNonBendingSlope(muon->PxAtDCA()/muon->PzAtDCA());
  param -> SetBendingSlope(muon->PyAtDCA()/muon->PzAtDCA());
  param -> SetInverseBendingMomentum( muon->Charge() * (1./muon->PzAtDCA()) / (TMath::Sqrt(1+TMath::Power(muon->PyAtDCA()/muon->PzAtDCA(),2))) );

  AliMUONTrackExtrap::ExtrapToZ(param, z);
  xy[0] = param->GetNonBendingCoor();
  xy[1] = param->GetBendingCoor();

  delete param;

  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::ExtrapAODMuonToZ(AliAODTrack *muon, Double_t z, Double_t xy[2], TLorentzVector &kinem) {

  if (!(muon->PzAtDCA()!=0)) return kFALSE;

  AliMUONTrackParam *param = new AliMUONTrackParam();

  param -> SetNonBendingCoor(muon->XAtDCA());
  param -> SetBendingCoor(muon->YAtDCA());
  param -> SetZ(AliMFTConstants::fZEvalKinem);
  param -> SetNonBendingSlope(muon->PxAtDCA()/muon->PzAtDCA());
  param -> SetBendingSlope(muon->PyAtDCA()/muon->PzAtDCA());
  param -> SetInverseBendingMomentum( muon->Charge() * (1./muon->PzAtDCA()) / (TMath::Sqrt(1+TMath::Power(muon->PyAtDCA()/muon->PzAtDCA(),2))) );

  AliMUONTrackExtrap::ExtrapToZ(param, z);
  xy[0] = param->GetNonBendingCoor();
  xy[1] = param->GetBendingCoor();

  Double_t massMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
  Double_t energy = TMath::Sqrt(massMu*massMu + param->Px()*param->Px() + param->Py()*param->Py() + param->Pz()*param->Pz());
  
  kinem.SetPxPyPzE(param->Px(), param->Py(), param->Pz(), energy);

  delete param;

  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::ExtrapAODMuonToZ(AliAODTrack *muon, Double_t z, Double_t xy[2], TLorentzVector &kinem, TMatrixD &cov) {

  // Extrapolate muon to a given z providing the corresponding (x,y) position and updating kinematics and covariance matrix

  if (!(muon->PzAtDCA()!=0)) return kFALSE;

  AliMUONTrackParam *param = new AliMUONTrackParam();

  param -> SetNonBendingCoor(muon->XAtDCA());
  param -> SetBendingCoor(muon->YAtDCA());
  param -> SetZ(AliMFTConstants::fZEvalKinem);
  param -> SetNonBendingSlope(muon->PxAtDCA()/muon->PzAtDCA());
  param -> SetBendingSlope(muon->PyAtDCA()/muon->PzAtDCA());
  param -> SetInverseBendingMomentum( muon->Charge() * (1./muon->PzAtDCA()) / (TMath::Sqrt(1+TMath::Power(muon->PyAtDCA()/muon->PzAtDCA(),2))) );

  param -> SetCovariances(ConvertCovMatrixAOD2MUON(muon));

  AliMUONTrackExtrap::ExtrapToZCov(param, z);
  xy[0] = param->GetNonBendingCoor();
  xy[1] = param->GetBendingCoor();

  Double_t massMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
  Double_t energy = TMath::Sqrt(massMu*massMu + param->Px()*param->Px() + param->Py()*param->Py() + param->Pz()*param->Pz());
  
  kinem.SetPxPyPzE(param->Px(), param->Py(), param->Pz(), energy);

  cov = param->GetCovariances();

  delete param;

  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::ExtrapAODMuonToXY(AliAODTrack *muon, Double_t xy[2], Double_t &zFinal, TLorentzVector &kinem, TMatrixD &cov) {

  // Find the point of closest approach between the muon and the direction parallel to the z-axis defined by the given (x,y)
  // Provide the z of the above point as weel as the updated kinematics and covariance matrix

  // We look for the above-defined PCA

  AliMUONTrackParam *param = new AliMUONTrackParam();
  param -> SetNonBendingCoor(muon->XAtDCA());
  param -> SetBendingCoor(muon->YAtDCA());
  param -> SetZ(AliMFTConstants::fZEvalKinem);
  param -> SetNonBendingSlope(muon->PxAtDCA()/muon->PzAtDCA());
  param -> SetBendingSlope(muon->PyAtDCA()/muon->PzAtDCA());
  param -> SetInverseBendingMomentum( muon->Charge() * (1./muon->PzAtDCA()) / (TMath::Sqrt(1+TMath::Power(muon->PyAtDCA()/muon->PzAtDCA(),2))) );
  
  // here we want to understand in which direction we have to search the minimum...
  
  Double_t step = 1.;  // initial step, in cm
  Double_t startPoint = 0.;
  
  Double_t r[3]={0}, z[3]={startPoint-step, startPoint, startPoint+step};
  
  TVector3 **points = new TVector3*[2];     // points[0] for the muon, points[1] for the direction parallel to the z-axis defined by the given (x,y)
  
  for (Int_t i=0; i<3; i++) {
    AliMUONTrackExtrap::ExtrapToZ(param, z[i]);
    points[0] = new TVector3(param->GetNonBendingCoor(),param->GetBendingCoor(),z[i]);
    points[1] = new TVector3(xy[0],xy[1],z[i]);
    r[i] = GetDistanceBetweenPoints(points,2);
    for (Int_t iMu=0; iMu<2; iMu++) delete points[iMu];
  }
  
  Int_t researchDirection = 0;
  
  if      (r[0]>r[1] && r[1]>r[2]) researchDirection = +1;   // towards z positive
  else if (r[0]<r[1] && r[1]<r[2]) researchDirection = -1;   // towards z negative
  else if (r[0]<r[1] && r[1]>r[2]) {
    printf("E-AliMFTAnalysisTools::ExtrapAODMuonToXY: Point of closest approach cannot be found (no minima)\n");
    delete param;
    delete points;
    return kFALSE;
  }
  
  while (TMath::Abs(researchDirection)>0.5) {
      
    if (researchDirection>0) {
      z[0] = z[1];
      z[1] = z[2];
      z[2] = z[1]+researchDirection*step;
    }
    else {
      z[2] = z[1];
      z[1] = z[0];
      z[0] = z[1]+researchDirection*step;
    }
    if (TMath::Abs(z[0])>900.) {
      printf("E-AliMFTAnalysisTools::ExtrapAODMuonToXY: Point of closest approach cannot be found (no minima in the fiducial region)\n");
      delete param;
      delete points;
      return kFALSE;
    }
    
    for (Int_t i=0; i<3; i++) {
      AliMUONTrackExtrap::ExtrapToZ(param, z[i]);
      points[0] = new TVector3(param->GetNonBendingCoor(),param->GetBendingCoor(),z[i]);
      points[1] = new TVector3(xy[0],xy[1],z[i]);
      r[i] = GetDistanceBetweenPoints(points,2);
      for (Int_t iMu=0; iMu<2; iMu++) delete points[iMu];
    }

    researchDirection=0;
    if      (r[0]>r[1] && r[1]>r[2]) researchDirection = +1;   // towards z positive
    else if (r[0]<r[1] && r[1]<r[2]) researchDirection = -1;   // towards z negative
    
  }
  
  // now we now that the minimum is between z[0] and z[2] and we search for it
  
  step *= 0.5;
  while (step>AliMFTConstants::fPrecisionPointOfClosestApproach) {
    z[0] = z[1]-step;
    z[2] = z[1]+step;
    for (Int_t i=0; i<3; i++) {
      AliMUONTrackExtrap::ExtrapToZ(param, z[i]);
      points[0] = new TVector3(param->GetNonBendingCoor(),param->GetBendingCoor(),z[i]);
      points[1] = new TVector3(xy[0],xy[1],z[i]);
      r[i] = GetDistanceBetweenPoints(points,2);
      for (Int_t iMu=0; iMu<2; iMu++) delete points[iMu];
    }
    if      (r[0]<r[1]) z[1] = z[0];
    else if (r[2]<r[1]) z[1] = z[2];
    else step *= 0.5;
  }
  
  zFinal = z[1];

  Double_t xyMuon[2] = {0};
  ExtrapAODMuonToZ(muon, zFinal, xyMuon, kinem, cov);

  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::GetAODMuonOffset(AliAODTrack *muon, Double_t xv, Double_t yv, Double_t zv, Double_t &offset) {

  Double_t xy[2] = {0};
  ExtrapAODMuonToZ(muon, zv, xy);
  
  offset = TMath::Sqrt((xv-xy[0])*(xv-xy[0]) + (yv-xy[1])*(yv-xy[1]));

  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::GetAODMuonOffsetZ(AliAODTrack *muon, Double_t xv, Double_t yv, Double_t zv, Double_t &offset) {

  Double_t xy[2] = {xv, yv};
  Double_t zFinal = 0;
  TLorentzVector kinem(0,0,0,0);
  TMatrixD cov(5,5);

  ExtrapAODMuonToXY(muon, xy, zFinal, kinem, cov);

  offset = TMath::Abs(zFinal - zv);

  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::GetAODMuonWeightedOffset(AliAODTrack *muon, Double_t xv, Double_t yv, Double_t zv, Double_t &offset) {

  Double_t xy[2] = {0};
  TLorentzVector kinem(0,0,0,0);
  TMatrixD cov(5,5);

  ExtrapAODMuonToZ(muon, zv, xy, kinem, cov);

  TMatrixD covCoordinates(2,2);
  covCoordinates(0,0) = cov(0,0);
  covCoordinates(0,1) = cov(0,2);
  covCoordinates(1,0) = cov(2,0);
  covCoordinates(1,1) = cov(2,2);
  
  if (covCoordinates.Determinant() < covCoordinates.GetTol()) return kFALSE;

  if (TDecompLU::InvertLU(covCoordinates,covCoordinates.GetTol(),0)) {

    TMatrixD covCoordinatesInverse = covCoordinates;
    Double_t dX = xy[0] - xv;
    Double_t dY = xy[1] - yv;
    
    offset = TMath::Sqrt(0.5*(dX*dX*covCoordinatesInverse(0,0) +
			      dY*dY*covCoordinatesInverse(1,1) +
			      2.*dX*dY*covCoordinatesInverse(0,1)));
    
    return kTRUE;

  }
  
  return kFALSE;

}

//====================================================================================================================================================

Double_t AliMFTAnalysisTools::GetPseudoProperDecayTimeXY(Double_t xVtx,  Double_t yVtx, 
							 Double_t xDimu, Double_t yDimu, 
							 Double_t mDimu, Double_t ptDimu) {
  
  // pseudo-proper decay time of a particle produced in the primary vertex and decaying into a dimuon (+ X)
  // evaluated using the transverse degree of freedom of the decay topology 

  if (ptDimu != 0) {
    Double_t decayLengthXY = TMath::Sqrt((xVtx-xDimu)*(xVtx-xDimu)+(yVtx-yDimu)*(yVtx-yDimu));
    return (decayLengthXY * mDimu/ptDimu)/TMath::Ccgs()*1E12;   // in ps
  }
  
  return -99999999;
  
}

//====================================================================================================================================================

Double_t AliMFTAnalysisTools::GetPseudoProperDecayTimeZ(Double_t zVtx, 
							Double_t zDimu, 
							Double_t mDimu, Double_t pzDimu) {

  // pseudo-proper decay time of a particle produced in the primary vertex and decaying into a dimuon (+ X)
  // evaluated using the longitudinal degree of freedom of the decay topology 

  if (pzDimu != 0) {
    Double_t decayLengthZ = zDimu - zVtx;
    return (decayLengthZ * mDimu/pzDimu)/TMath::Ccgs()*1E12;  // in ps
  }

  return -99999999;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::CalculatePCA(AliAODDimuon *dimuon, Double_t *pca, Double_t &pcaQuality, TLorentzVector &kinem) {

  TObjArray *muons = new TObjArray();
  muons -> Add(dimuon->GetMu(0));
  muons -> Add(dimuon->GetMu(1));
  
  Bool_t result = CalculatePCA(muons, pca, pcaQuality, kinem);
  delete muons;
  return result;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double_t &pcaQuality, TLorentzVector &kinem) {
  
  const Int_t nMuons = muons->GetEntriesFast();
  if (nMuons<2 || nMuons>AliMFTConstants::fNMaxMuonsForPCA) {
    printf("W-AliMFTAnalysisTools::CalculatePCA: number of muons not valid\n");
    return kFALSE;
  }

  Double_t fXPointOfClosestApproach=0, fYPointOfClosestApproach=0, fZPointOfClosestApproach=0;

  AliAODTrack *muon[AliMFTConstants::fNMaxMuonsForPCA]        = {0};
  AliMUONTrackParam *param[AliMFTConstants::fNMaxMuonsForPCA] = {0};

  // Finding AliMUONTrackParam objects for each muon
  
  for (Int_t iMu=0; iMu<nMuons; iMu++) {
    muon[iMu] = (AliAODTrack*) muons->At(iMu);
    if (TMath::Abs(muon[iMu]->PzAtDCA())<1.e-6) {
      for(Int_t i=0;i<iMu;i++) delete param[i];
      return kFALSE;
    }
    param[iMu] = new AliMUONTrackParam();
    param[iMu] -> SetNonBendingCoor(muon[iMu]->XAtDCA());
    param[iMu] -> SetBendingCoor(muon[iMu]->YAtDCA());
    param[iMu] -> SetZ(AliMFTConstants::fZEvalKinem);
    param[iMu] -> SetNonBendingSlope(muon[iMu]->PxAtDCA()/muon[iMu]->PzAtDCA());
    param[iMu] -> SetBendingSlope(muon[iMu]->PyAtDCA()/muon[iMu]->PzAtDCA());
    param[iMu] -> SetInverseBendingMomentum( muon[iMu]->Charge() * (1./muon[iMu]->PzAtDCA()) / (TMath::Sqrt(1+TMath::Power(muon[iMu]->PyAtDCA()/muon[iMu]->PzAtDCA(),2))) );
  }
  
  // here we want to understand in which direction we have to search the minimum...
  
  Double_t step = 1.;  // initial step, in cm
  Double_t startPoint = 0.;
  
  Double_t r[3]={0}, z[3]={startPoint-step, startPoint, startPoint+step};
  
  TVector3 **points = new TVector3*[AliMFTConstants::fNMaxMuonsForPCA];
  
  for (Int_t i=0; i<3; i++) {
    for (Int_t iMu=0; iMu<nMuons; iMu++) {
      // if (TMath::Abs(param[iMu]->GetInverseBendingMomentum())<1.) {
      // 	printf("W-AliMFTAnalysisTools::CalculatePCA: Evoiding floating point exception in PCA finding\n");
      // 	return kFALSE;
      // }
      AliMUONTrackExtrap::ExtrapToZ(param[iMu], z[i]);
      points[iMu] = new TVector3(param[iMu]->GetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]);
    }
    r[i] = GetDistanceBetweenPoints(points,nMuons);
    for (Int_t iMu=0; iMu<nMuons; iMu++) delete points[iMu]; 
  }
  
  Int_t researchDirection = 0;
  
  if      (r[0]>r[1] && r[1]>r[2]) researchDirection = +1;   // towards z positive
  else if (r[0]<r[1] && r[1]<r[2]) researchDirection = -1;   // towards z negative
  else if (r[0]<r[1] && r[1]>r[2]) {
    printf("E-AliMFTAnalysisTools::CalculatePCA: Point of closest approach cannot be found for dimuon (no minima)\n");
    for (Int_t iMu=0;iMu<nMuons;iMu++) delete param[iMu];
    delete points;
    return kFALSE;
  }	
  
  while (TMath::Abs(researchDirection)>0.5) {
      
    if (researchDirection>0) {
      z[0] = z[1];
      z[1] = z[2];
      z[2] = z[1]+researchDirection*step;
    }
    else {
      z[2] = z[1];
      z[1] = z[0];
      z[0] = z[1]+researchDirection*step;
    }
    if (TMath::Abs(z[0])>900.) {
      printf("E-AliMFTAnalysisTools::CalculatePCA: Point of closest approach cannot be found for dimuon (no minima in the fiducial region)\n");
      for (Int_t iMu=0;iMu<nMuons;iMu++) delete param[iMu];
      delete points;
      return kFALSE;
    }
    
    for (Int_t i=0; i<3; i++) {
      for (Int_t iMu=0; iMu<nMuons; iMu++) {
	AliMUONTrackExtrap::ExtrapToZ(param[iMu], z[i]);
	points[iMu] = new TVector3(param[iMu]->GetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]);
      }      
      r[i] = GetDistanceBetweenPoints(points,nMuons);
      for (Int_t iMu=0;iMu<nMuons;iMu++) delete points[iMu];
    }
    researchDirection=0;
    if      (r[0]>r[1] && r[1]>r[2]) researchDirection = +1;   // towards z positive
    else if (r[0]<r[1] && r[1]<r[2]) researchDirection = -1;   // towards z negative
    
  }
  
  // now we now that the minimum is between z[0] and z[2] and we search for it
  
  Int_t nSteps = 0;

  step *= 0.5;
  while (step>AliMFTConstants::fPrecisionPointOfClosestApproach) {
    z[0] = z[1]-step;
    z[2] = z[1]+step;
    for (Int_t i=0; i<3; i++) {
      for (Int_t iMu=0; iMu<nMuons; iMu++) {
	AliMUONTrackExtrap::ExtrapToZ(param[iMu], z[i]);
	points[iMu] = new TVector3(param[iMu]->GetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]);
      }      
      r[i] = GetDistanceBetweenPoints(points,nMuons);
      for (Int_t iMu=0;iMu<nMuons;iMu++) delete points[iMu];
    }
    //    printf("Step #%d : %f  %f  %f\n",nSteps,r[0],r[1],r[2]);
    if      (r[0]<r[1]) z[1] = z[0];
    else if (r[2]<r[1]) z[1] = z[2];
    else step *= 0.5;
    nSteps++;
  }

  // if (TMath::Abs(z[1]-1.)<0.1) {
  //   printf("Minimum found in %f in %d steps. Step = %f. p1->X() = %f, p2->X() = %f, p1->Y() = %f, p2->Y() = %f\n",
  // 	   z[1], nSteps, step, points[0]->X(), points[1]->X(), points[0]->Y(), points[1]->Y());
  //   printf("m1->X() = %f, m2->X() = %f, m1->Y() = %f, m2->Y() = %f\n",
  // 	   muon[0]->XAtDCA(),muon[1]->XAtDCA(), muon[0]->YAtDCA(),muon[1]->YAtDCA());
  // }

  // Once z of minimum is found, we evaluate the x and y coordinates by averaging over the contributing tracks
  
  fZPointOfClosestApproach = z[1];
  fXPointOfClosestApproach = 0.;
  fYPointOfClosestApproach = 0.;
  for (Int_t iMu=0; iMu<nMuons; iMu++) {
    AliMUONTrackExtrap::ExtrapToZ(param[iMu], fZPointOfClosestApproach);
    fXPointOfClosestApproach += param[iMu]->GetNonBendingCoor();
    fYPointOfClosestApproach += param[iMu]->GetBendingCoor();
  }
  fXPointOfClosestApproach /= Double_t(nMuons);
  fYPointOfClosestApproach /= Double_t(nMuons);
  
  pca[0] = fXPointOfClosestApproach;
  pca[1] = fYPointOfClosestApproach;
  pca[2] = fZPointOfClosestApproach;
  
  // Evaluating the kinematics of the N-muon
  
  Double_t pTot[3] = {0};
  Double_t ene = 0.;
  Double_t massMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
  for (Int_t iMu=0; iMu<nMuons; iMu++) {
    pTot[0] += param[iMu]->Px();
    pTot[1] += param[iMu]->Py();
    pTot[2] += param[iMu]->Pz();
    ene += TMath::Sqrt(massMu*massMu + param[iMu]->Px()*param[iMu]->Px() + param[iMu]->Py()*param[iMu]->Py() + param[iMu]->Pz()*param[iMu]->Pz());
  }
  
  kinem.SetPxPyPzE(pTot[0], pTot[1], pTot[2], ene);
  
  // Evaluating the PCA quality of the N-muon
  
  Double_t sum=0.,squareSum=0.;
  for (Int_t iMu=0; iMu<nMuons; iMu++) {
    Double_t wOffset = 0;
    if (!GetAODMuonWeightedOffset(muon[iMu],fXPointOfClosestApproach, fYPointOfClosestApproach, fZPointOfClosestApproach, wOffset)) {
      for(Int_t jMu=0;jMu<nMuons;jMu++) delete param[jMu];
      delete points;
      return kFALSE;
    }
    Double_t f = TMath::Exp(-0.5 * wOffset);
    sum += f;
    squareSum += f*f;
  }
  if (sum > 0.) pcaQuality =  (sum-squareSum/sum) / (nMuons-1);
  else pcaQuality = 0.;
  
  for(Int_t iMu=0;iMu<nMuons;iMu++) delete param[iMu];
  delete points;
  return kTRUE;
  
}

//=========================================================================================================================

Double_t AliMFTAnalysisTools::GetDistanceBetweenPoints(TVector3 **points, Int_t nPoints) {
  
  if (nPoints>AliMFTConstants::fNMaxMuonsForPCA) {
    printf("W-AliMFTAnalysisTools::GetDistanceBetweenPoints: number of points not valid\n");
    return 1.e9;
  }
  
  if (nPoints<2) return 0.;
  if (nPoints<3) return TMath::Sqrt( (points[0]->X()-points[1]->X()) * (points[0]->X()-points[1]->X()) +
				     (points[0]->Y()-points[1]->Y()) * (points[0]->Y()-points[1]->Y()) );
  //				     (points[0]->Z()-points[1]->Z()) * (points[0]->Z()-points[1]->Z()) );

  const Int_t nEdgesMax = ((AliMFTConstants::fNMaxMuonsForPCA) * (AliMFTConstants::fNMaxMuonsForPCA - 1)) / 2;
  
  Int_t startID[nEdgesMax]       = {0};
  Int_t stopID[nEdgesMax]        = {0};
  Double_t edgeLength[nEdgesMax] = {0};

  Bool_t pointStatus[AliMFTConstants::fNMaxMuonsForPCA] = {0};
  
  Int_t nEdges=0;
  for (Int_t i=0; i<nPoints-1; i++) {
    for (Int_t j=i+1; j<nPoints; j++) {
      edgeLength[nEdges] = TMath::Sqrt( (points[i]->X()-points[j]->X()) * (points[i]->X()-points[j]->X()) +
                                        (points[i]->Y()-points[j]->Y()) * (points[i]->Y()-points[j]->Y()) +
                                        (points[i]->Z()-points[j]->Z()) * (points[i]->Z()-points[j]->Z()) );
      stopID[nEdges]  = i;
      startID[nEdges] = j;
      nEdges++;
    }
  }
 
  // Order Edges

  Double_t min = 0;
  Int_t   iMin = 0;

  for (Int_t iEdge=0; iEdge<nEdges-1; iEdge++) {
    min  = edgeLength[iEdge];
    iMin = iEdge;
    for (Int_t j=iEdge+1; j<nEdges; j++) {
      if (edgeLength[j]<min) {
        min  = edgeLength[j];
        iMin = j;
      }
    }
    
    if (iMin != iEdge) {

      Double_t edgeLengthMin = edgeLength[iMin];
      Int_t startIDmin = startID[iMin];
      Int_t stopIDmin  = stopID[iMin];
      
      edgeLength[iMin] = edgeLength[iEdge];
      startID[iMin]    = startID[iEdge];
      stopID[iMin]     = stopID[iEdge];

      edgeLength[iEdge] = edgeLengthMin;
      startID[iEdge]    = startIDmin;
      stopID[iEdge]     = stopIDmin;

    }
    
  }
  
  // Connect

  Double_t length = 0.;
  for (Int_t i=0; i<nEdges; i++) {
    if (!(pointStatus[startID[i]] && pointStatus[stopID[i]])) {
      pointStatus[startID[i]] = kTRUE;
      pointStatus[stopID[i]]  = kTRUE;
      length += edgeLength[i];
    }
  }
  
  return length;
  
}

//====================================================================================================================================================

void AliMFTAnalysisTools::ConvertCovMatrixMUON2AOD(const TMatrixD& covMUON, Double_t covAOD[21]) {

  // Converts the cov matrix from the MUON format (TMatrixD) to the AOD one (Double_t[21])
  // 
  // Cov(x,x)       ... :   cv[0]
  // Cov(x,slopeX)  ... :   cv[1]  cv[2]
  // Cov(x,y)       ... :   cv[3]  cv[4]  cv[5]
  // Cov(x,slopeY)  ... :   cv[6]  cv[7]  cv[8]  cv[9]
  // Cov(x,invP_yz) ... :   cv[10] cv[11] cv[12] cv[13] cv[14]
  // not-used       ... :   cv[15] cv[16] cv[17] cv[18] cv[19] cv[20]

  covAOD[0]  = covMUON(0,0);

  covAOD[1]  = covMUON(1,0);
  covAOD[2]  = covMUON(1,1);

  covAOD[3]  = covMUON(2,0);  
  covAOD[4]  = covMUON(2,1);  
  covAOD[5]  = covMUON(2,2);  

  covAOD[6]  = covMUON(3,0);  
  covAOD[7]  = covMUON(3,1);  
  covAOD[8]  = covMUON(3,2);  
  covAOD[9]  = covMUON(3,3);  

  covAOD[10] = covMUON(4,0);  
  covAOD[11] = covMUON(4,1);  
  covAOD[12] = covMUON(4,2);  
  covAOD[13] = covMUON(4,3);  
  covAOD[14] = covMUON(4,4);  

  covAOD[15] = 0;  
  covAOD[16] = 0;  
  covAOD[17] = 0;  
  covAOD[18] = 0;  
  covAOD[19] = 0;  
  covAOD[20] = 0;  

}

//====================================================================================================================================================

const TMatrixD AliMFTAnalysisTools::ConvertCovMatrixAOD2MUON(AliAODTrack *muon) {

  Double_t covAOD[21] = {0};
  muon -> GetCovarianceXYZPxPyPz(covAOD);

  TMatrixD covMUON(5,5);

  covMUON(0,0) = covAOD[0];
  	         		
  covMUON(1,0) = covAOD[1];
  covMUON(1,1) = covAOD[2];
  	         		
  covMUON(2,0) = covAOD[3];  
  covMUON(2,1) = covAOD[4];  
  covMUON(2,2) = covAOD[5];  
  	         		
  covMUON(3,0) = covAOD[6];  
  covMUON(3,1) = covAOD[7];  
  covMUON(3,2) = covAOD[8];  
  covMUON(3,3) = covAOD[9];  
  	         		
  covMUON(4,0) = covAOD[10];  
  covMUON(4,1) = covAOD[11];  
  covMUON(4,2) = covAOD[12];  
  covMUON(4,3) = covAOD[13];  
  covMUON(4,4) = covAOD[14]; 

  return covMUON;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::IsCorrectMatch(AliAODTrack *muon) {

  for (Int_t iPlane=0; iPlane<AliMFTConstants::fNMaxPlanes; iPlane++) if (IsWrongCluster(muon, iPlane)) return kFALSE;
  return kTRUE;

}

//====================================================================================================================================================

TString AliMFTAnalysisTools::GetGenerator(Int_t label, AliAODMCHeader* header) {

  // get the name of the generator that produced a given particle

  Int_t partCounter = 0;
  TList *genHeaders = header->GetCocktailHeaders();
  Int_t nGenHeaders = genHeaders->GetEntries();

  for (Int_t i=0; i<nGenHeaders; i++){
    AliGenEventHeader *gh = (AliGenEventHeader*) genHeaders->At(i);
    TString genName = gh->GetName();
    Int_t nPart = gh->NProduced();
    if (label>=partCounter && label<(partCounter+nPart)) return genName;
    partCounter += nPart;
  }

  TString empty="";
  return empty;

}

//====================================================================================================================================================

void AliMFTAnalysisTools::GetTrackPrimaryGenerator(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC, TString &nameGen) {

  // method to check if a track comes from a given generator

  Int_t label = TMath::Abs(track->GetLabel());
  nameGen = GetGenerator(label,header);
  
  // In case the particle is not primary nameGen will contain blank spaces. In this case, we search backward for the primary which originated the chain
  
  while (nameGen.IsWhitespace()) {
    AliAODMCParticle *mcPart = (AliAODMCParticle*) arrayMC->At(label);
    if (!mcPart) {
      printf("AliMFTAnalysisTools::GetTrackPrimaryGenerator - BREAK: No valid AliAODMCParticle at label %i\n",label);
      break;
    }
    Int_t motherLabel = mcPart->GetMother();
    if (motherLabel < 0) {
      printf("AliMFTAnalysisTools::GetTrackPrimaryGenerator - BREAK: Reached primary particle without valid mother\n");
      break;
    }
    label = motherLabel;
    nameGen = GetGenerator(label,header);
  }
  
  return;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::IsTrackInjected(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC) {

  // method to check if a track comes from the signal event or from the underlying Hijing event

  TString nameGen;

  GetTrackPrimaryGenerator(track,header,arrayMC,nameGen);
  
  if (nameGen.IsWhitespace() || nameGen.Contains("ijing")) return kFALSE;
  
  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::TranslateMuon(AliAODTrack *muon, Double_t vtxInitial[3], Double_t vtxFinal[3]) {

  if (!(muon->PzAtDCA()!=0)) return kFALSE;

  AliMUONTrackParam *param = new AliMUONTrackParam();

  Double_t deltaVtx[3] = {0};
  for (Int_t i=0; i<3; i++) deltaVtx[i] = vtxInitial[i] - vtxFinal[i];

  param -> SetNonBendingCoor(muon->XAtDCA());
  param -> SetBendingCoor(muon->YAtDCA());
  param -> SetZ(AliMFTConstants::fZEvalKinem);
  param -> SetNonBendingSlope(muon->PxAtDCA()/muon->PzAtDCA());
  param -> SetBendingSlope(muon->PyAtDCA()/muon->PzAtDCA());
  param -> SetInverseBendingMomentum( muon->Charge() * (1./muon->PzAtDCA()) / (TMath::Sqrt(1+TMath::Power(muon->PyAtDCA()/muon->PzAtDCA(),2))) );

  // This will be interpreted as if the track (produced in an event having the primary vertex in vtxInitial) 
  // were produced in an event having the primary vertex in vtxFinal

  AliMUONTrackExtrap::ExtrapToZ(param, deltaVtx[2]);
  muon->SetXYAtDCA(param->GetNonBendingCoor() - deltaVtx[0], param->GetBendingCoor() - deltaVtx[1]);
  muon->SetPxPyPzAtDCA(param->Px(), param->Py(), param->Pz());

  delete param;

  return kTRUE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::TranslateMuonToOrigin(AliAODTrack *muon, Double_t vtx[3]) {

  Double_t origin[3] = {0,0,0};

  return TranslateMuon(muon, vtx, origin);

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::IsPDGCharm(Int_t pdgCode) {

  pdgCode = TMath::Abs(pdgCode/100);
  if (pdgCode>9) pdgCode /= 10;
  if (pdgCode == 4 ) return kTRUE;
  else return kFALSE;
  
}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::IsPDGBeauty(Int_t pdgCode) {

  pdgCode = TMath::Abs(pdgCode/100);
  if (pdgCode>9) pdgCode /= 10;
  if (pdgCode == 5) return kTRUE;
  else return kFALSE;

}

//====================================================================================================================================================

Bool_t AliMFTAnalysisTools::IsPDGResonance(Int_t pdgCode) {

  Int_t id = pdgCode%100000;
  return (!((id-id%10)%110));

} 

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