ROOT logo
/**************************************************************************
 * Copyright(c) 2006-2008, 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.                  *
 **************************************************************************/
#include <TTree.h>
#include "AliRunLoader.h"
#include "AliESDVertex.h"
#include "AliLog.h"
#include "AliStrLine.h"
#include "AliTracker.h"
#include "AliITSDetTypeRec.h"
#include "AliITSRecPoint.h"
#include "AliITSRecPointContainer.h"
#include "AliITSgeomTGeo.h"
#include "AliVertexerTracks.h"
#include "AliITSVertexer3D.h"
#include "AliITSVertexerZ.h"
#include "AliITSSortTrkl.h"
/////////////////////////////////////////////////////////////////
// this class implements a method to determine
// the 3 coordinates of the primary vertex
// optimized for 
// p-p collisions
////////////////////////////////////////////////////////////////

const Int_t    AliITSVertexer3D::fgkMaxNumOfClDefault = 300;
const Int_t    AliITSVertexer3D::fgkMaxNumOfClRebinDefault = 500;
const Int_t    AliITSVertexer3D::fgkMaxNumOfClDownscaleDefault = 1000;
const Float_t  AliITSVertexer3D::fgk3DBinSizeDefault = 0.1;

ClassImp(AliITSVertexer3D)

/* $Id$ */

//______________________________________________________________________
AliITSVertexer3D::AliITSVertexer3D(Double_t zcut):
  AliITSVertexer(),
  fLines("AliStrLine",1000),
  fVert3D(),
  fCoarseDiffPhiCut(0.),
  fFineDiffPhiCut(0.),
  fCutOnPairs(0.),
  fCoarseMaxRCut(0.),
  fMaxRCut(0.),
  fMaxRCut2(0.),
  fZCutDiamond(0.),
  fMaxZCut(0.),
  fDCAcut(0.),
  fDiffPhiMax(0.),
  fMeanPSelTrk(0.),
  fMeanPtSelTrk(0.),
  fUsedCluster(kMaxCluPerMod*kNSPDMod),
  fZHisto(0),
  fDCAforPileup(0.),
  fDiffPhiforPileup(0.),
  fBinSizeR(0.),
  fBinSizeZ(0.),
  fPileupAlgo(0),
  fMaxNumOfCl(fgkMaxNumOfClDefault),
  fMaxNumOfClForRebin(fgkMaxNumOfClRebinDefault),
  fMaxNumOfClForDownScale(fgkMaxNumOfClDownscaleDefault),
  fNRecPLay1(0),
  fNRecPLay2(0),
  f3DBinSize(fgk3DBinSizeDefault),
  fDoDownScale(kFALSE),
  fGenerForDownScale(0),
  f3DPeak(),
  fHighMultAlgo(1),
  fSwitchAlgorithm(kFALSE),
  fFallBack(kFALSE),
  fFallBackThreshold(0),
  fH3d(NULL),
  fH3dcs(NULL),
  fH3dfs(NULL),
  fH3dv(NULL)
{
  // Default constructor
  SetCoarseDiffPhiCut();
  SetFineDiffPhiCut();
  SetCutOnPairs();
  SetCoarseMaxRCut();
  SetMaxRCut();
  SetMaxRCutAlgo2();
  if(zcut>0.){
    SetZCutDiamond(zcut);
  }
  else {
    SetZCutDiamond();
  }
  SetMaxZCut();
  SetDCACut();
  SetDiffPhiMax();
  SetMeanPSelTracks();
  SetMeanPtSelTracks();
  SetMinDCAforPileup();
  SetDeltaPhiforPileup();
  SetPileupAlgo();
  SetBinSizeR();
  SetBinSizeZ();
  fGenerForDownScale=new TRandom3(987654321);
}

//______________________________________________________________________
AliITSVertexer3D::AliITSVertexer3D(TRootIOCtor*):
  AliITSVertexer(),
  fLines("AliStrLine",1000),
  fVert3D(),
  fCoarseDiffPhiCut(0.),
  fFineDiffPhiCut(0.),
  fCutOnPairs(0.),
  fCoarseMaxRCut(0.),
  fMaxRCut(0.),
  fMaxRCut2(0.),
  fZCutDiamond(0.),
  fMaxZCut(0.),
  fDCAcut(0.),
  fDiffPhiMax(0.),
  fMeanPSelTrk(0.),
  fMeanPtSelTrk(0.),
  fUsedCluster(kMaxCluPerMod*kNSPDMod),
  fZHisto(0),
  fDCAforPileup(0.),
  fDiffPhiforPileup(0.),
  fBinSizeR(0.),
  fBinSizeZ(0.),
  fPileupAlgo(0),
  fMaxNumOfCl(fgkMaxNumOfClDefault),
  fMaxNumOfClForRebin(fgkMaxNumOfClRebinDefault),
  fMaxNumOfClForDownScale(fgkMaxNumOfClDownscaleDefault),
  fNRecPLay1(0),
  fNRecPLay2(0),
  f3DBinSize(fgk3DBinSizeDefault),
  fDoDownScale(kFALSE),
  fGenerForDownScale(0),
  f3DPeak(),
  fHighMultAlgo(1),
  fSwitchAlgorithm(kFALSE),
  fFallBack(kFALSE),
  fFallBackThreshold(0),
  fH3d(NULL),
  fH3dcs(NULL),
  fH3dfs(NULL),
  fH3dv(NULL)
{
  // I/O constructor


}

//______________________________________________________________________
AliITSVertexer3D::~AliITSVertexer3D() {
  // Destructor
  if(fH3d) delete fH3d;
  if(fH3dcs) delete fH3dcs;
  if(fH3dfs) delete fH3dfs;
  if(fH3dv) delete fH3dv;
  fLines.Clear("C");
  if(fZHisto) delete fZHisto;
  if(fGenerForDownScale) delete fGenerForDownScale;
}

//______________________________________________________________________
void AliITSVertexer3D::ResetVert3D(){
  // Reset the fVert3D object and reset the used clusters
  ResetVertex();
  fVert3D.SetXv(0.);
  fVert3D.SetYv(0.);
  fVert3D.SetZv(0.);
  fVert3D.SetDispersion(0.);
  fVert3D.SetNContributors(0);
  fUsedCluster.ResetAllBits(0);
}
//______________________________________________________________________
AliESDVertex* AliITSVertexer3D::FindVertexForCurrentEvent(TTree *itsClusterTree){
  // Defines the AliESDVertex for the current event

  //cleanup
  if(fZHisto)fZHisto->Reset(); 
  ResetVert3D();
  AliDebug(1,"FindVertexForCurrentEvent - 3D - PROCESSING NEXT EVENT");
  fLines.Clear("C");
  fCurrentVertex = NULL;

  // fall back to VertexerZ if too many clusters on SPD first layer
  AliITSRecPointContainer* rpcont=AliITSRecPointContainer::Instance();
  rpcont->FetchClusters(0,itsClusterTree);
  if(!rpcont->IsSPDActive()){
    AliWarning("No SPD rec points found, 3D vertex not calculated");
    return NULL;
  }
  Bool_t fallBack = kFALSE; // 3D algo , no fallback to vertexer Z
  if(fFallBack && (rpcont->GetNClustersInLayerFast(1)) > fFallBackThreshold) 
     fallBack = kTRUE;
  if(!fallBack){
    Int_t nolines = FindTracklets(itsClusterTree,0);
    Int_t rc;
    if(nolines>=2){
      if(fSwitchAlgorithm) {
	rc = Prepare3DVertexPbPb();
	FindVertex3D(itsClusterTree);
      } else {
	rc=Prepare3DVertex(0);
	if(fVert3D.GetNContributors()>0){
	  fLines.Clear("C");
	  nolines = FindTracklets(itsClusterTree,1);
	  if(nolines>=2){
	    rc=Prepare3DVertex(1);
	    if(fPileupAlgo == 2 && rc == 0) FindVertex3DIterative();
	    else if(fPileupAlgo!=2 && rc == 0) FindVertex3D(itsClusterTree);
	    if(rc!=0) fVert3D.SetNContributors(0); // exclude this vertex      
	  }
	}
      }
    }
  }   // if(!fallBack)
  if(fallBack  || (!fCurrentVertex)){
    AliITSVertexerZ vertz(GetNominalPos()[0],GetNominalPos()[1]);
    vertz.SetDetTypeRec(GetDetTypeRec());
    AliDebug(1,"Call Vertexer Z\n");
    vertz.SetLowLimit(-fZCutDiamond);
    vertz.SetHighLimit(fZCutDiamond);
    AliESDVertex* vtxz = vertz.FindVertexForCurrentEvent(itsClusterTree);
    if(vtxz){
      Double_t position[3]={GetNominalPos()[0],GetNominalPos()[1],vtxz->GetZ()};
      Double_t covmatrix[6];
      vtxz->GetCovMatrix(covmatrix);
      Double_t chi2=99999.;
      Int_t    nContr=vtxz->GetNContributors();
      fCurrentVertex = new AliESDVertex(position,covmatrix,chi2,nContr);    
      fCurrentVertex->SetDispersion(vtxz->GetDispersion());
      fCurrentVertex->SetTitle("vertexer: Z");
      fCurrentVertex->SetName("SPDVertexZ");
      delete vtxz;
    }

  }  
  if(fComputeMultiplicity) FindMultiplicity(itsClusterTree);
  return fCurrentVertex;
}  

//______________________________________________________________________
void AliITSVertexer3D::FindVertex3D(TTree *itsClusterTree){
  // Instantiates the fCurrentVertex object. calle by FindVertexForCurrenEvent
  Double_t vRadius=TMath::Sqrt(fVert3D.GetX()*fVert3D.GetX()+fVert3D.GetY()*fVert3D.GetY());
  if(vRadius<GetPipeRadius() && fVert3D.GetNContributors()>0){
    Double_t position[3]={fVert3D.GetX(),fVert3D.GetY(),fVert3D.GetZ()};
    Double_t covmatrix[6];
    fVert3D.GetCovMatrix(covmatrix);
    Double_t chi2=99999.;
    Int_t    nContr=fVert3D.GetNContributors();
    fCurrentVertex = new AliESDVertex(position,covmatrix,chi2,nContr);    
    fCurrentVertex->SetTitle("vertexer: 3D");
    fCurrentVertex->SetName("SPDVertex3D");
    fCurrentVertex->SetDispersion(fVert3D.GetDispersion());
    fNoVertices=1;
    
    switch(fPileupAlgo){
    case 0: PileupFromZ(); break;
    case 1: FindOther3DVertices(itsClusterTree); break;
    case 3: break; // no pileup algo  
    default: AliError("Wrong pileup algorithm"); break;
    }
    if(fNoVertices==1){
      delete[] fVertArray;
      fVertArray = new AliESDVertex[1];
      fVertArray[0]=(*fCurrentVertex);	  
    }
  }
}

//______________________________________________________________________
void AliITSVertexer3D::FindVertex3DIterative(){
  // find vertex if fPileupAlgo == 2

  Int_t nLines=fLines.GetEntriesFast();
  Int_t maxPoints=nLines*(nLines-1)/2;
  Double_t* xP=new Double_t[maxPoints];
  Double_t* yP=new Double_t[maxPoints];
  Double_t* zP=new Double_t[maxPoints];
  Int_t* index1=new Int_t[maxPoints];
  Int_t* index2=new Int_t[maxPoints];
  Double_t xbeam=fVert3D.GetX();
  Double_t ybeam=fVert3D.GetY();

  Int_t iPoint=0;
  for(Int_t ilin1=0; ilin1<nLines; ilin1++){
    AliStrLine *l1 = (AliStrLine*)fLines.At(ilin1);
    for(Int_t ilin2=ilin1+1; ilin2<nLines; ilin2++){
      AliStrLine *l2 = (AliStrLine*)fLines.At(ilin2);
      Double_t dca=l1->GetDCA(l2);
      if(dca > fDCAcut || dca<0.00001) continue;
      Double_t point[3];
      Int_t retc = l1->Cross(l2,point);
      if(retc<0)continue;
      Double_t rad=TMath::Sqrt(point[0]*point[0]+point[1]*point[1]);
      if(rad>fCoarseMaxRCut)continue;
      Double_t distFromBeam=TMath::Sqrt((point[0]-xbeam)*(point[0]-xbeam)+(point[1]-ybeam)*(point[1]-ybeam));
      if(distFromBeam>fMaxRCut2) continue;
      xP[iPoint]=point[0];
      yP[iPoint]=point[1];
      zP[iPoint]=point[2];
      index1[iPoint]=ilin1;
      index2[iPoint]=ilin2;
      iPoint++;
    }
  }
  Int_t npoints=iPoint++;
  Int_t index=0;
  Short_t* mask=new Short_t[npoints];
  for(Int_t ip=0;ip<npoints;ip++) mask[ip]=-1;
 
  for(Int_t ip1=0;ip1<npoints;ip1++){
    if(mask[ip1]==-1) mask[ip1]=index++;
    for(Int_t ip2=ip1+1; ip2<npoints; ip2++){
      if(mask[ip2]==mask[ip1] && mask[ip2]!=-1) continue;
      Double_t dist2=(xP[ip1]-xP[ip2])*(xP[ip1]-xP[ip2]);
      dist2+=(yP[ip1]-yP[ip2])*(yP[ip1]-yP[ip2]);
      dist2+=(zP[ip1]-zP[ip2])*(zP[ip1]-zP[ip2]);
      if(dist2<fCutOnPairs*fCutOnPairs){ 
	if(mask[ip2]==-1) mask[ip2]=mask[ip1];
	else{
	  for(Int_t ip=0; ip<npoints;ip++){
	    if(mask[ip]==mask[ip2]) mask[ip]=mask[ip1];
	  }
	}
      }
    }
  }


  // Count multiplicity of trackelts in clusters
  UInt_t* isIndUsed=new UInt_t[index+1];
  for(Int_t ind=0;ind<index+1;ind++) isIndUsed[ind]=0;
  for(Int_t ip=0; ip<npoints;ip++){
    Int_t ind=mask[ip];
    isIndUsed[ind]++;
  }

  // Count clusters/vertices and sort according to multiplicity
  Int_t nClusters=0;
  Int_t* sortedIndex=new Int_t[index+1];
  for(Int_t ind1=0;ind1<index+1;ind1++){
    if(isIndUsed[ind1]<=1) isIndUsed[ind1]=0;
    else nClusters++;
    UInt_t cap=9999999;
    if(ind1>0) cap=isIndUsed[sortedIndex[ind1-1]];
    UInt_t bigger=0;
    Int_t biggerindex=-1;
    for(Int_t ind2=0;ind2<index+1;ind2++){
      Bool_t use=kTRUE;
      for(Int_t ind3=0; ind3<ind1; ind3++)
	if(ind2==sortedIndex[ind3]) use=kFALSE;
      if(use && isIndUsed[ind2]>bigger && isIndUsed[ind2]<=cap){
	bigger=isIndUsed[ind2];
	biggerindex=ind2;
      }
    }
    sortedIndex[ind1]=biggerindex;    
  }
  AliDebug(3,Form("Number of clusters before merging = %d\n",nClusters));

  // Assign lines to clusters/vertices and merge clusters which share 1 line
  Int_t nClustersAfterMerge=nClusters;
  Int_t* belongsTo=new Int_t[nLines];
  for(Int_t ilin=0; ilin<nLines; ilin++) belongsTo[ilin]=-1;
  for(Int_t iclu=0;iclu<nClusters;iclu++){
    Int_t actualCluIndex=iclu;
    for(Int_t ip=0; ip<npoints;ip++){
      if(mask[ip]==sortedIndex[iclu]){
	Int_t ind1=index1[ip];
	if(belongsTo[ind1]==-1) belongsTo[ind1]=actualCluIndex;
	else if(belongsTo[ind1]<actualCluIndex){
	  Int_t newCluIndex=belongsTo[ind1];
	  for(Int_t ilin=0; ilin<nLines; ilin++){
	    if(belongsTo[ilin]==actualCluIndex) belongsTo[ilin]=newCluIndex;
	  }
	  AliDebug(10,Form("Merged cluster %d with %d\n",actualCluIndex,newCluIndex));
	  actualCluIndex=newCluIndex;
	  nClustersAfterMerge--;
	}
	Int_t ind2=index2[ip];      
	if(belongsTo[ind2]==-1) belongsTo[ind2]=actualCluIndex;
	else if(belongsTo[ind2]<actualCluIndex){
	  Int_t newCluIndex=belongsTo[ind2];
	  for(Int_t ilin=0; ilin<nLines; ilin++){
	    if(belongsTo[ilin]==actualCluIndex) belongsTo[ilin]=newCluIndex;
	  }
	  AliDebug(10,Form("Merged cluster %d with %d\n",actualCluIndex,newCluIndex));
	  actualCluIndex=newCluIndex;
	  nClustersAfterMerge--;
	}
      }
    }
  }
  AliDebug(3,Form("Number of clusters after merging = %d\n",nClustersAfterMerge));
  
  // Count lines associated to each cluster/vertex
  UInt_t *cluSize=new UInt_t[nClusters];
  for(Int_t iclu=0;iclu<nClusters;iclu++){ 
    cluSize[iclu]=0;
    for(Int_t ilin=0; ilin<nLines; ilin++){
      if(belongsTo[ilin]==iclu) cluSize[iclu]++;
    }
  }

  // Count good vertices (>1 associated tracklet)
  UInt_t nGoodVert=0;
  for(Int_t iclu=0;iclu<nClusters;iclu++){ 
    AliDebug(3,Form("Vertex %d Size=%d\n",iclu,cluSize[iclu]));
    if(cluSize[iclu]>1) nGoodVert++;
  }
    
  AliDebug(1,Form("Number of good vertices = %d\n",nGoodVert));
  // Calculate vertex coordinates for each cluster
  if(nGoodVert>0){
    fVertArray = new AliESDVertex[nGoodVert];
    Int_t iVert=0;
    for(Int_t iclu=0;iclu<nClusters;iclu++){
      Int_t size=cluSize[iclu];
      if(size>1){
	AliStrLine **arrlin = new AliStrLine*[size];
	Int_t nFilled=0;
	for(Int_t ilin=0; ilin<nLines; ilin++){
	  if(belongsTo[ilin]==iclu){
	    arrlin[nFilled++] = dynamic_cast<AliStrLine*>(fLines[ilin]);
	  }
	}      
	AliDebug(3,Form("Vertex %d  N associated tracklets = %d out of %d\n",iVert,size,nFilled));

	fVertArray[iVert]=AliVertexerTracks::TrackletVertexFinder(arrlin,nFilled);
	Double_t peak[3];
	fVertArray[iVert].GetXYZ(peak);
	AliStrLine **arrlin2 = new AliStrLine*[size];
	Int_t nFilled2=0;	
	for(Int_t i=0; i<nFilled;i++){
	  AliStrLine *l1 = arrlin[i];	  
	  if(l1->GetDistFromPoint(peak)< fDCAcut)
	    arrlin2[nFilled2++] = dynamic_cast<AliStrLine*>(l1);
	}
	if(nFilled2>1){
	  AliDebug(3,Form("Vertex %d  recalculated with %d tracklets\n",iVert,nFilled2));
	  fVertArray[iVert]=AliVertexerTracks::TrackletVertexFinder(arrlin2,nFilled2);
	}
 	delete [] arrlin;
 	delete [] arrlin2;
	++iVert;
      }
    }
    
    if(nGoodVert > 1){
      fIsPileup = kTRUE;
      fNTrpuv = fVertArray[1].GetNContributors();
      fZpuv = fVertArray[1].GetZ();
    }
    
    Double_t vRadius=TMath::Sqrt(fVertArray[0].GetX()*fVertArray[0].GetX()+fVertArray[0].GetY()*fVertArray[0].GetY());
    if(vRadius<GetPipeRadius() && fVertArray[0].GetNContributors()>0){
      Double_t position[3]={fVertArray[0].GetX(),fVertArray[0].GetY(),fVertArray[0].GetZ()};
      Double_t covmatrix[6];
      fVertArray[0].GetCovMatrix(covmatrix);
      Double_t chi2=99999.;
      Int_t    nContr=fVertArray[0].GetNContributors();
      fCurrentVertex = new AliESDVertex(position,covmatrix,chi2,nContr);    
      fCurrentVertex->SetTitle("vertexer: 3D");
      fCurrentVertex->SetName("SPDVertex3D");
      fCurrentVertex->SetDispersion(fVertArray[0].GetDispersion());  
    }
  }

  delete [] index1;
  delete [] index2;
  delete [] mask;
  delete [] isIndUsed;
  delete [] sortedIndex;
  delete [] belongsTo;
  delete [] cluSize;
  delete [] xP;
  delete [] yP;
  delete [] zP;
}
//______________________________________________________________________
void AliITSVertexer3D::FindVertex3DIterativeMM(){
  // Defines the AliESDVertex for the current event
  Int_t numsor=fLines.GetEntriesFast()*(fLines.GetEntriesFast()-1)/2;
  //cout<<"AliITSVertexer3D::FindVertexForCurentEvent: Number of tracklets selected for vertexing "<<fLines.GetEntriesFast()<<"; Number of pairs: "<<numsor<<endl;
  AliITSSortTrkl srt(fLines,numsor,fCutOnPairs,fCoarseMaxRCut); 
  srt.FindClusters();	
  AliInfo(Form("Number of vertices: %d",srt.GetNumberOfClusters()));
      
  fNoVertices = srt.GetNumberOfClusters();
  //printf("fNoVertices = %d \n",fNoVertices);
  if(fNoVertices>0){
    fVertArray = new AliESDVertex[fNoVertices];
    for(Int_t kk=0; kk<srt.GetNumberOfClusters(); kk++){
      Int_t size = 0;
      Int_t *labels = srt.GetTrackletsLab(kk,size);
      /*
	Int_t *pairs = srt.GetClusters(kk);
	Int_t nopai = srt.GetSizeOfCluster(kk);
	cout<<"***** Vertex number "<<kk<<".  Pairs: \n";
	for(Int_t jj=0;jj<nopai;jj++){
	cout<<pairs[jj]<<" - ";
	if(jj>0 & jj%8==0)cout<<endl;
	}
	cout<<endl;
	cout<<"***** Vertex number "<<kk<<".  Labels: \n";
      */
      AliStrLine **tclo = new AliStrLine* [size];
      for(Int_t jj=0;jj<size;jj++){
	//	    cout<<labels[jj]<<" - ";
	//	    if(jj>0 & jj%8==0)cout<<endl;
	tclo[jj] = dynamic_cast<AliStrLine*>(fLines[labels[jj]]);
      }
      //	  cout<<endl;
      delete []labels;
      fVertArray[kk]=AliVertexerTracks::TrackletVertexFinder(tclo,size);
      delete [] tclo;
      //	  fVertArray[kk].PrintStatus();
      if(kk == 1){
	// at least one second vertex is present
	fIsPileup = kTRUE;
	fNTrpuv = fVertArray[kk].GetNContributors();
	fZpuv = fVertArray[kk].GetZ();
      }
    }
    Double_t vRadius=TMath::Sqrt(fVertArray[0].GetX()*fVertArray[0].GetX()+fVertArray[0].GetY()*fVertArray[0].GetY());
    if(vRadius<GetPipeRadius() && fVertArray[0].GetNContributors()>0){
      Double_t position[3]={fVertArray[0].GetX(),fVertArray[0].GetY(),fVertArray[0].GetZ()};
      Double_t covmatrix[6];
      fVertArray[0].GetCovMatrix(covmatrix);
      Double_t chi2=99999.;
      Int_t    nContr=fVertArray[0].GetNContributors();
      fCurrentVertex = new AliESDVertex(position,covmatrix,chi2,nContr);    
      fCurrentVertex->SetTitle("vertexer: 3D");
      fCurrentVertex->SetName("SPDVertex3D");
      fCurrentVertex->SetDispersion(fVertArray[0].GetDispersion());  
    }
  }

}  

//______________________________________________________________________
Bool_t AliITSVertexer3D::DistBetweenVertices(AliESDVertex &a, AliESDVertex &b, Double_t test, Double_t &dist){
  // method to compare the distance between vertices a and b with "test"
  //it returns kTRUE is the distance is less or equal to test
  dist = (a.GetX()-b.GetX()) * (a.GetX()-b.GetX());
  dist +=  (a.GetY()-b.GetY()) * (a.GetY()-b.GetY());
  dist +=  (a.GetZ()-b.GetZ()) * (a.GetZ()-b.GetZ());
  dist = TMath::Sqrt(dist);
  if(dist <= test)return kTRUE;
  return kFALSE;
}


//______________________________________________________________________
Int_t AliITSVertexer3D::FindTracklets(TTree *itsClusterTree, Int_t optCuts){
  // All the possible combinations between recpoints on layer 1and 2 are
  // considered. Straight lines (=tracklets)are formed. 
  // The tracklets are processed in Prepare3DVertex

  TClonesArray *itsRec  = 0;
  if(optCuts==0) fZHisto->Reset();
  // gc1 are local and global coordinates for layer 1
  Float_t gc1f[3]={0.,0.,0.};
  Double_t gc1[3]={0.,0.,0.};
  // gc2 are local and global coordinates for layer 2
  Float_t gc2f[3]={0.,0.,0.};
  Double_t gc2[3]={0.,0.,0.};
  AliITSRecPointContainer* rpcont=AliITSRecPointContainer::Instance();
  rpcont->FetchClusters(0,itsClusterTree);
  if(!rpcont->IsSPDActive()){
    AliWarning("No SPD rec points found, 3D vertex not calculated");
    return -1;
  }

  // Set values for cuts
  Double_t xbeam=GetNominalPos()[0]; 
  Double_t ybeam=GetNominalPos()[1];
  Double_t zvert=0.;
  Double_t deltaPhi=fCoarseDiffPhiCut;
  Double_t deltaR=fCoarseMaxRCut;
  Double_t dZmax=fZCutDiamond;
  if(optCuts==1){
    xbeam=fVert3D.GetX();
    ybeam=fVert3D.GetY();
    zvert=fVert3D.GetZ();
    deltaPhi = fDiffPhiMax; 
    deltaR=fMaxRCut;
    dZmax=fMaxZCut;
    if(fPileupAlgo == 2){
      dZmax=fZCutDiamond;
      deltaR=fMaxRCut2;
    }
  } else if(optCuts==2){
    xbeam=fVert3D.GetX();
    ybeam=fVert3D.GetY();
    deltaPhi = fDiffPhiforPileup;
    deltaR=fMaxRCut;
  }

  fNRecPLay1=rpcont->GetNClustersInLayerFast(1);
  fNRecPLay2=rpcont->GetNClustersInLayerFast(2);
  if(fNRecPLay1 == 0 || fNRecPLay2 == 0){
    AliDebug(1,Form("No RecPoints in at least one SPD layer (%d %d)",fNRecPLay1,fNRecPLay2));
    return -1;
  }
  AliDebug(1,Form("RecPoints on Layer 1,2 = %d, %d\n",fNRecPLay1,fNRecPLay2));
  fDoDownScale=kFALSE;
  fSwitchAlgorithm=kFALSE;

  Float_t factDownScal=1.;
  Int_t origLaddersOnLayer2=fLadOnLay2;

  switch(fHighMultAlgo){
  case 0: 
    if(fNRecPLay1>fMaxNumOfClForDownScale || fNRecPLay2>fMaxNumOfClForDownScale){
      if(optCuts==2) return -1; // do not try to search for pileup
      SetLaddersOnLayer2(2);
      fDoDownScale=kTRUE;
      factDownScal=(Float_t)fMaxNumOfClForDownScale*(Float_t)fMaxNumOfClForDownScale/(Float_t)fNRecPLay1/(Float_t)fNRecPLay2;
      if(optCuts==1){
	factDownScal*=(fCoarseDiffPhiCut/fDiffPhiMax)*10;
	if(factDownScal>1.){
	  fDoDownScale=kFALSE;
	  SetLaddersOnLayer2(origLaddersOnLayer2);
	}
      }
      if(fDoDownScale)AliDebug(1,Form("Too many recpoints on SPD(%d %d ), downscale by %f",fNRecPLay1,fNRecPLay2,factDownScal));
    }
    break;
  case 1: 
    if(fNRecPLay1>fMaxNumOfCl || fNRecPLay2>fMaxNumOfCl) {
      if(optCuts==2) return -1; // do not try to search for pileup
      fSwitchAlgorithm=kTRUE;
    }
    break;
  default: break; // no pileup algo  
  }

  if(!fDoDownScale && !fSwitchAlgorithm){
    if(fNRecPLay1>fMaxNumOfClForRebin || fNRecPLay2>fMaxNumOfClForRebin){
      SetLaddersOnLayer2(2);
    }
  }

  Double_t a[3]={xbeam,ybeam,0.}; 
  Double_t b[3]={xbeam,ybeam,10.};
  AliStrLine zeta(a,b,kTRUE);
  static Double_t bField=TMath::Abs(AliTracker::GetBz()/10.); //T
  SetMeanPPtSelTracks(bField);

  Int_t nolines = 0;
  // Loop on modules of layer 1
  Int_t firstL1 = TMath::Max(0,AliITSgeomTGeo::GetModuleIndex(1,1,1));
  Int_t lastL1 = AliITSgeomTGeo::GetModuleIndex(2,1,1)-1;
  for(Int_t modul1= firstL1; modul1<=lastL1;modul1++){   // Loop on modules of layer 1
    if(!fUseModule[modul1]) continue;
    
    UShort_t ladder=modul1/4+1; // ladders are numbered starting from 1
    TClonesArray *prpl1=rpcont->UncheckedGetClusters(modul1);
    Int_t nrecp1 = prpl1->GetEntries();
    for(Int_t j=0;j<nrecp1;j++){
      if(j>kMaxCluPerMod) continue;
      UShort_t idClu1=modul1*kMaxCluPerMod+j;
      if(fUsedCluster.TestBitNumber(idClu1)) continue;
      if(fDoDownScale && !fSwitchAlgorithm){
	if(fGenerForDownScale->Rndm()>factDownScal) continue;
      }
      AliITSRecPoint *recp1 = (AliITSRecPoint*)prpl1->At(j);
      recp1->GetGlobalXYZ(gc1f);
      for(Int_t ico=0;ico<3;ico++)gc1[ico]=gc1f[ico];

      Double_t phi1 = TMath::ATan2(gc1[1]-ybeam,gc1[0]-xbeam);
      if(phi1<0)phi1=2*TMath::Pi()+phi1;
      for(Int_t ladl2=0 ; ladl2<fLadOnLay2*2+1;ladl2++){
	for(Int_t k=0;k<4;k++){
	  Int_t ladmod=fLadders[ladder-1]+ladl2;
 	  if(ladmod>AliITSgeomTGeo::GetNLadders(2)) ladmod=ladmod-AliITSgeomTGeo::GetNLadders(2);
	  Int_t modul2=AliITSgeomTGeo::GetModuleIndex(2,ladmod,k+1);
	  if(modul2<0)continue;
	  if(!fUseModule[modul2]) continue;
	  itsRec=rpcont->UncheckedGetClusters(modul2);
	  Int_t nrecp2 = itsRec->GetEntries();
	  for(Int_t j2=0;j2<nrecp2;j2++){
	    if(j2>kMaxCluPerMod) continue;
	    UShort_t idClu2=modul2*kMaxCluPerMod+j2;
	    if(fUsedCluster.TestBitNumber(idClu2)) continue;

	    AliITSRecPoint *recp2 = (AliITSRecPoint*)itsRec->At(j2);
	    recp2->GetGlobalXYZ(gc2f);
	    for(Int_t ico=0;ico<3;ico++)gc2[ico]=gc2f[ico];
	    Double_t phi2 = TMath::ATan2(gc2[1]-ybeam,gc2[0]-xbeam);
	    if(phi2<0)phi2=2*TMath::Pi()+phi2;
	    Double_t diff = TMath::Abs(phi2-phi1); 
	    if(diff>TMath::Pi())diff=2.*TMath::Pi()-diff; 
	    if(optCuts==0 && diff<fDiffPhiforPileup){
	      Double_t r1=TMath::Sqrt(gc1[0]*gc1[0]+gc1[1]*gc1[1]);
	      Double_t zc1=gc1[2];
	      Double_t r2=TMath::Sqrt(gc2[0]*gc2[0]+gc2[1]*gc2[1]);
	      Double_t zc2=gc2[2];
	      Double_t zr0=(r2*zc1-r1*zc2)/(r2-r1); //Z @ null radius
	      fZHisto->Fill(zr0);
	    }
	    if(diff>deltaPhi)continue;
	    AliStrLine line(gc1,gc2,kTRUE);
	    Double_t cp[3];
	    Int_t retcode = line.Cross(&zeta,cp);
	    if(retcode<0)continue;
	    Double_t dca = line.GetDCA(&zeta);
	    if(dca<0.) continue;
	    if(dca>deltaR)continue;
	    Double_t deltaZ=cp[2]-zvert;
	    if(TMath::Abs(deltaZ)>dZmax)continue;


	    if(nolines == 0){
	      if(fLines.GetEntriesFast()>0)fLines.Clear("C");
	    }
	    Float_t cov[6];
	    recp2->GetGlobalCov(cov);


	    Double_t rad1=TMath::Sqrt(gc1[0]*gc1[0]+gc1[1]*gc1[1]);
	    Double_t rad2=TMath::Sqrt(gc2[0]*gc2[0]+gc2[1]*gc2[1]);
	    Double_t factor=(rad1+rad2)/(rad2-rad1); //factor to account for error on tracklet direction 

	    Double_t curvErr=0;
	    if(bField>0.00001){
	      Double_t curvRadius=fMeanPtSelTrk/(0.3*bField)*100; //cm 
	      Double_t dRad=TMath::Sqrt((gc1[0]-gc2[0])*(gc1[0]-gc2[0])+(gc1[1]-gc2[1])*(gc1[1]-gc2[1]));
	      Double_t aux=dRad/2.+rad1;
	      curvErr=TMath::Sqrt(curvRadius*curvRadius-dRad*dRad/4.)-TMath::Sqrt(curvRadius*curvRadius-aux*aux); //cm
	    }
	    Double_t sigmasq[3];
	    sigmasq[0]=(cov[0]+curvErr*curvErr/2.)*factor*factor;
	    sigmasq[1]=(cov[3]+curvErr*curvErr/2.)*factor*factor;
	    sigmasq[2]=cov[5]*factor*factor;

	    // Multiple scattering
	    Double_t pOverMass=fMeanPSelTrk/0.140;
 	    Double_t beta2=pOverMass*pOverMass/(1+pOverMass*pOverMass);
 	    Double_t p2=fMeanPSelTrk*fMeanPSelTrk;
 	    Double_t rBP=GetPipeRadius();
 	    Double_t dBP=0.08/35.3; // 800 um of Be
 	    Double_t dL1=0.01; //approx. 1% of radiation length  
 	    Double_t theta2BP=14.1*14.1/(beta2*p2*1e6)*dBP;
 	    Double_t theta2L1=14.1*14.1/(beta2*p2*1e6)*dL1;
	    Double_t rtantheta1=(rad2-rad1)*TMath::Tan(TMath::Sqrt(theta2L1));
	    Double_t rtanthetaBP=(rad1-rBP)*TMath::Tan(TMath::Sqrt(theta2BP));
 	    for(Int_t ico=0; ico<3;ico++){    
 	      sigmasq[ico]+=rtantheta1*rtantheta1*factor*factor/3.;
 	      sigmasq[ico]+=rtanthetaBP*rtanthetaBP*factor*factor/3.;
 	    }
	    Double_t wmat[9]={1.,0.,0.,0.,1.,0.,0.,0.,1.};
	    if(sigmasq[0]!=0.) wmat[0]=1./sigmasq[0];
	    if(sigmasq[1]!=0.) wmat[4]=1./sigmasq[1];
	    if(sigmasq[2]!=0.) wmat[8]=1./sigmasq[2];
	    new(fLines[nolines++])AliStrLine(gc1,sigmasq,wmat,gc2,kTRUE,idClu1,idClu2);

	  }
	}
      }
    }
  }

  SetLaddersOnLayer2(origLaddersOnLayer2);

  if(nolines == 0)return -2;
  return nolines;
}

//______________________________________________________________________
Int_t  AliITSVertexer3D::Prepare3DVertex(Int_t optCuts){
  // Finds the 3D vertex information using tracklets
  Int_t retcode = -1;
  Double_t xbeam=GetNominalPos()[0];
  Double_t ybeam=GetNominalPos()[1];
  Double_t zvert=0.;
  Double_t deltaR=fCoarseMaxRCut;
  Double_t dZmax=fZCutDiamond;
  if(optCuts==1){
    xbeam=fVert3D.GetX();
    ybeam=fVert3D.GetY();
    zvert=fVert3D.GetZ();
    deltaR=fMaxRCut;
    dZmax=fMaxZCut;
    if(fPileupAlgo == 2){ 
      dZmax=fZCutDiamond;
      deltaR=fMaxRCut2;
    }
  }else if(optCuts==2){
    xbeam=fVert3D.GetX();
    ybeam=fVert3D.GetY();
    deltaR=fMaxRCut;
  }

  Double_t origBinSizeR=fBinSizeR;
  Double_t origBinSizeZ=fBinSizeZ;
  Bool_t rebinned=kFALSE;
  if(fDoDownScale){
    SetBinSizeR(0.05);
    SetBinSizeZ(0.05);
    rebinned=kTRUE;
  }else{
    if(optCuts==0 && (fNRecPLay1>fMaxNumOfClForRebin || fNRecPLay2>fMaxNumOfClForRebin)){
      SetBinSizeR(0.1);
      SetBinSizeZ(0.2);
      rebinned=kTRUE;
    }
  }
  Double_t rl=-fCoarseMaxRCut;
  Double_t rh=fCoarseMaxRCut;
  Double_t zl=-fZCutDiamond;
  Double_t zh=fZCutDiamond;
  Int_t nbr=(Int_t)((rh-rl)/fBinSizeR+0.0001);
  Int_t nbz=(Int_t)((zh-zl)/fBinSizeZ+0.0001);
  Int_t nbrcs=(Int_t)((rh-rl)/(fBinSizeR*2.)+0.0001);
  Int_t nbzcs=(Int_t)((zh-zl)/(fBinSizeZ*2.)+0.0001);
  if(!fH3d){
    fH3d = new TH3F("fH3d","xyz distribution",nbr,rl,rh,nbr,rl,rh,nbz,zl,zh);
    fH3d->SetDirectory(0);
  }else{
    fH3d->SetBins(nbr,rl,rh,nbr,rl,rh,nbz,zl,zh);
  }
  if(!fH3dcs){
    fH3dcs = new TH3F("fH3dcs","xyz distribution",nbrcs,rl,rh,nbrcs,rl,rh,nbzcs,zl,zh);
    fH3dcs->SetDirectory(0);
  }else{ 
    fH3dcs->SetBins(nbr,rl,rh,nbr,rl,rh,nbz,zl,zh);
  }

  // cleanup of the TCLonesArray of tracklets (i.e. fakes are removed)
  Int_t vsiz = fLines.GetEntriesFast();
  Int_t *validate = new Int_t [vsiz];
  for(Int_t i=0; i<vsiz;i++)validate[i]=0;
  for(Int_t i=0; i<vsiz-1;i++){
    AliStrLine *l1 = (AliStrLine*)fLines.At(i);
    for(Int_t j=i+1;j<fLines.GetEntriesFast();j++){
      AliStrLine *l2 = (AliStrLine*)fLines.At(j);
      Double_t dca=l1->GetDCA(l2);
      if(dca > fDCAcut || dca<0.00001) continue;
      Double_t point[3];
      Int_t retc = l1->Cross(l2,point);
      if(retc<0)continue;
      Double_t deltaZ=point[2]-zvert;
      if(TMath::Abs(deltaZ)>dZmax)continue;
      Double_t rad=TMath::Sqrt(point[0]*point[0]+point[1]*point[1]);
      if(rad>fCoarseMaxRCut)continue;
      Double_t deltaX=point[0]-xbeam;
      Double_t deltaY=point[1]-ybeam;
      Double_t raddist=TMath::Sqrt(deltaX*deltaX+deltaY*deltaY);
      if(raddist>deltaR)continue;
      validate[i]=1;
      validate[j]=1;
      fH3d->Fill(point[0],point[1],point[2]);
      fH3dcs->Fill(point[0],point[1],point[2]);
    }
  }

  Int_t numbtracklets=0;
  for(Int_t i=0; i<vsiz;i++)if(validate[i]>=1)numbtracklets++;
  if(numbtracklets<2){
    delete [] validate; 
    fH3d->Reset(); 
    fH3dcs->Reset(); 
    SetBinSizeR(origBinSizeR);
    SetBinSizeZ(origBinSizeZ);
    return retcode; 
  }

  for(Int_t i=0; i<fLines.GetEntriesFast();i++){
    if(validate[i]<1)fLines.RemoveAt(i);
  }
  fLines.Compress();
  AliDebug(1,Form("Number of tracklets (after compress)%d ",fLines.GetEntriesFast()));
  delete [] validate;

  // Exit here if Pileup Algorithm 2 has been chosen during second loop
  if(fPileupAlgo == 2 && optCuts==1){
    fH3d->Reset();
    fH3dcs->Reset();     
    SetBinSizeR(origBinSizeR);
    SetBinSizeZ(origBinSizeZ);
    return 0;
  }

  //        Find peaks in histos

  Double_t peak[3]={0.,0.,0.};
  Int_t ntrkl,ntimes;
  FindPeaks(fH3d,peak,ntrkl,ntimes);  
  fH3d->Reset();
  Double_t binsizer=(rh-rl)/nbr;
  Double_t binsizez=(zh-zl)/nbz;
  if(optCuts==0 && (ntrkl<=2 || ntimes>1)){
    ntrkl=0;
    ntimes=0;
    FindPeaks(fH3dcs,peak,ntrkl,ntimes);  
    binsizer=(rh-rl)/nbrcs;
    binsizez=(zh-zl)/nbzcs;
    if(ntrkl==1 || ntimes>1){
      fH3dcs->Reset(); 
      SetBinSizeR(origBinSizeR);
      SetBinSizeZ(origBinSizeZ);
      return retcode;
    }
  }
  fH3dcs->Reset();

  Double_t bs=(binsizer+binsizez)/2.;
  for(Int_t i=0; i<fLines.GetEntriesFast();i++){
    AliStrLine *l1 = (AliStrLine*)fLines.At(i);
    if(l1->GetDistFromPoint(peak)>2.5*bs)fLines.RemoveAt(i);
  }
  fLines.Compress();
  AliDebug(1,Form("Number of tracklets (after 2nd compression) %d",fLines.GetEntriesFast()));

  // Finer Histo in limited range in case of high mult.
  if(rebinned){
    SetBinSizeR(0.01);
    SetBinSizeZ(0.01);
    Double_t xl=peak[0]-0.3;
    Double_t xh=peak[0]+0.3;
    Double_t yl=peak[1]-0.3;
    Double_t yh=peak[1]+0.3;
    zl=peak[2]-0.5;
    zh=peak[2]+0.5;
    Int_t nbxfs=(Int_t)((xh-xl)/fBinSizeR+0.0001);
    Int_t nbyfs=(Int_t)((yh-yl)/fBinSizeR+0.0001);
    Int_t nbzfs=(Int_t)((zh-zl)/fBinSizeZ+0.0001);

    if(!fH3dfs){
      fH3dfs = new TH3F("fH3dfs","xyz distribution",nbxfs,xl,xh,nbyfs,yl,yh,nbzfs,zl,zh);
      fH3dfs->SetDirectory(0);
    }else{ 
      fH3dfs->SetBins(nbxfs,xl,xh,nbyfs,yl,yh,nbzfs,zl,zh);
    }
    for(Int_t i=0; i<fLines.GetEntriesFast()-1;i++){
      AliStrLine *l1 = (AliStrLine*)fLines.At(i);
      for(Int_t j=i+1;j<fLines.GetEntriesFast();j++){
	AliStrLine *l2 = (AliStrLine*)fLines.At(j);
	Double_t dca=l1->GetDCA(l2);
	if(dca > fDCAcut || dca<0.00001) continue;
	Double_t point[3];
	Int_t retc = l1->Cross(l2,point);
	if(retc<0)continue;
	Double_t deltaZ=point[2]-zvert;
	if(TMath::Abs(deltaZ)>dZmax)continue;
	Double_t rad=TMath::Sqrt(point[0]*point[0]+point[1]*point[1]);
	if(rad>fCoarseMaxRCut)continue;
	Double_t deltaX=point[0]-xbeam;
	Double_t deltaY=point[1]-ybeam;
	Double_t raddist=TMath::Sqrt(deltaX*deltaX+deltaY*deltaY);
	if(raddist>deltaR)continue;
	fH3dfs->Fill(point[0],point[1],point[2]);
      }
    }
    ntrkl=0;
    ntimes=0;

    Double_t newpeak[3]={0.,0.,0.};
    FindPeaks(fH3dfs,newpeak,ntrkl,ntimes);  
    if(ntimes==1){
      for(Int_t iCoo=0; iCoo<3; iCoo++) peak[iCoo]=newpeak[iCoo];
      binsizer=fBinSizeR;
      binsizez=fBinSizeZ;
    }
    fH3dfs->Reset();
    bs=(binsizer+binsizez)/2.;
    for(Int_t i=0; i<fLines.GetEntriesFast();i++){
      AliStrLine *l1 = (AliStrLine*)fLines.At(i);
      if(l1->GetDistFromPoint(peak)>2.5*bs)fLines.RemoveAt(i);
    }
    fLines.Compress();
    AliDebug(1,Form("Number of tracklets (after 3rd compression) %d",fLines.GetEntriesFast()));
  }
  SetBinSizeR(origBinSizeR);
  SetBinSizeZ(origBinSizeZ);


  //         Second selection loop


  if(fLines.GetEntriesFast()>1){
    retcode=0;
    //  find a first candidate for the primary vertex
    fVert3D=AliVertexerTracks::TrackletVertexFinder(&fLines,0); 
    // make a further selection on tracklets based on this first candidate
    fVert3D.GetXYZ(peak);
    AliDebug(1,Form("FIRST V candidate: %f ; %f ; %f",peak[0],peak[1],peak[2]));
    Int_t *validate2 = new Int_t [fLines.GetEntriesFast()];
    for(Int_t i=0; i<fLines.GetEntriesFast();i++) validate2[i]=1; 
    for(Int_t i=0; i<fLines.GetEntriesFast();i++){
      if(validate2[i]==0) continue; 
      AliStrLine *l1 = (AliStrLine*)fLines.At(i);
      if(l1->GetDistFromPoint(peak)> fDCAcut)fLines.RemoveAt(i);
      if(optCuts==2){ // temporarily only for pileup
	for(Int_t j=i+1; j<fLines.GetEntriesFast();j++){
	  AliStrLine *l2 = (AliStrLine*)fLines.At(j);
	  if(l1->GetDCA(l2)<0.00001){ 
	    Int_t delta1=(Int_t)l1->GetIdPoint(0)-(Int_t)l2->GetIdPoint(0);
	    Int_t delta2=(Int_t)l1->GetIdPoint(1)-(Int_t)l2->GetIdPoint(1);
	    Int_t deltamod1=(Int_t)l1->GetIdPoint(0)/kMaxCluPerMod
	      -(Int_t)l2->GetIdPoint(0)/kMaxCluPerMod;
	    Int_t deltamod2=(Int_t)l1->GetIdPoint(1)/kMaxCluPerMod
	      -(Int_t)l2->GetIdPoint(1)/kMaxCluPerMod;
	    // remove tracklets sharing a point
	    if( (delta1==0 && deltamod2==0)  || 
		(delta2==0 && deltamod1==0)  ) validate2[j]=0; 
	  }
	}
      }
    }
    for(Int_t i=0; i<fLines.GetEntriesFast();i++){
      if(validate2[i]==0)  fLines.RemoveAt(i);
    }
    delete [] validate2;
    fLines.Compress();
    AliDebug(1,Form("Number of tracklets (after 3rd compression) %d",fLines.GetEntriesFast()));
    if(fLines.GetEntriesFast()>1){// this new tracklet selection is used
      fVert3D=AliVertexerTracks::TrackletVertexFinder(&fLines,0);
    }
  }
  return retcode;  
}

//________________________________________________________
Int_t  AliITSVertexer3D::Prepare3DVertexPbPb(){
  // Finds the 3D vertex information in Pb-Pb events using tracklets
  AliDebug(1,"High multiplicity event.\n");

  Int_t nxy=(Int_t)(2.*fCoarseMaxRCut/f3DBinSize);
  Double_t xymi= -nxy*f3DBinSize/2.;
  Double_t xyma= nxy*f3DBinSize/2.;
  Int_t nz=(Int_t)(2.*fZCutDiamond/f3DBinSize);
  Double_t zmi=-nz*f3DBinSize/2.;
  Double_t zma=nz*f3DBinSize/2.;
  Int_t nolines=fLines.GetEntriesFast();
  if(!fH3dv)fH3dv = new TH3F("fH3dv","3d tracklets",nxy,xymi,xyma,nxy,xymi,xyma,nz,zmi,zma);
  
  for(Int_t itra=0; itra<nolines; itra++){
    Double_t wei = GetFraction(itra);
    //printf("tracklet %d ) - weight %f \n",itra,wei);
    if(wei>1.e-6){
      AliStrLine *str=(AliStrLine*)fLines.At(itra);
      Double_t t1,t2;
      if(str->GetParamAtRadius(fCoarseMaxRCut,t1,t2)){
	do{
	  Double_t punt[3];
	  str->ComputePointAtT(t1,punt);
	  fH3dv->Fill(punt[0],punt[1],punt[2],wei);
	  t1+=f3DBinSize/3.;
	} while(t1<t2);
      }
    }
  }
  Int_t noftrk,noftim;
  FindPeaks(fH3dv,f3DPeak,noftrk,noftim); // arg: histo3d, peak, # of contrib., # of other peak with same magnitude
  
  
  // Remove all the tracklets which are not passing near peak
  
  while(nolines--){
    AliStrLine *str=(AliStrLine*)fLines.At(nolines);
    Double_t dist = str->GetDistFromPoint(f3DPeak);
    if(dist>(2.*f3DBinSize)) fLines.RemoveAt(nolines);
    }
  fLines.Compress();
  nolines=fLines.GetEntriesFast();

  fH3dv->Reset();

  Int_t *validate2 = new Int_t [fLines.GetEntriesFast()];
  for(Int_t i=0; i<fLines.GetEntriesFast();i++) validate2[i]=1; 
  for(Int_t i=0; i<fLines.GetEntriesFast();i++){
    if(validate2[i]==0) continue; 
    AliStrLine *l1 = (AliStrLine*)fLines.At(i);
    if(l1->GetDistFromPoint(f3DPeak)> fDCAcut)fLines.RemoveAt(i);
    for(Int_t j=i+1; j<fLines.GetEntriesFast();j++){
      AliStrLine *l2 = (AliStrLine*)fLines.At(j);
      if(l1->GetDCA(l2)<0.00001){ 
	Int_t delta1=(Int_t)l1->GetIdPoint(0)-(Int_t)l2->GetIdPoint(0);
	Int_t delta2=(Int_t)l1->GetIdPoint(1)-(Int_t)l2->GetIdPoint(1);
	Int_t deltamod1=(Int_t)l1->GetIdPoint(0)/kMaxCluPerMod
	  -(Int_t)l2->GetIdPoint(0)/kMaxCluPerMod;
	Int_t deltamod2=(Int_t)l1->GetIdPoint(1)/kMaxCluPerMod
	  -(Int_t)l2->GetIdPoint(1)/kMaxCluPerMod;
	// remove tracklets sharing a point
	if( (delta1==0 && deltamod2==0)  || 
	    (delta2==0 && deltamod1==0)  ) validate2[j]=0; 
	
      }
    }
  }
  for(Int_t i=0; i<fLines.GetEntriesFast();i++){
    if(validate2[i]==0)  fLines.RemoveAt(i);
  }
  
  delete [] validate2;
  fLines.Compress();

  
  AliDebug(1,Form("Number of tracklets (after 3rd compression) %d",fLines.GetEntriesFast()));

  fVert3D=AliVertexerTracks::TrackletVertexFinder(&fLines,0); 
  fVert3D.GetXYZ(f3DPeak);
  
  return 0;  
}

//________________________________________________________
void AliITSVertexer3D::SetMeanPPtSelTracks(Double_t fieldTesla){
  // Sets mean values of Pt based on the field
  // for P (used in multiple scattering) the most probable value is used
  if(TMath::Abs(fieldTesla-0.5)<0.01){
    SetMeanPSelTracks(0.375);
    SetMeanPtSelTracks(0.630);
  }else if(TMath::Abs(fieldTesla-0.4)<0.01){
    SetMeanPSelTracks(0.375);
    SetMeanPtSelTracks(0.580);
  }else if(TMath::Abs(fieldTesla-0.2)<0.01){
    SetMeanPSelTracks(0.375);
    SetMeanPtSelTracks(0.530);
  }else if(fieldTesla<0.00001){
    SetMeanPSelTracks(0.375);
    SetMeanPtSelTracks(0.230);
  }else{
    SetMeanPSelTracks();
    SetMeanPtSelTracks();
  }
}

//________________________________________________________
void AliITSVertexer3D::SetZCutDiamond(Double_t zcut){
  // The fiducial region along Z is set. The TH1 object pointed by 
  // fZHisto is created 
  if(TMath::AreEqualAbs(zcut,fZCutDiamond,1.e-10))return;
  fZCutDiamond=zcut;
  if(fZHisto) delete fZHisto;
  Double_t binsize=0.02; // default 200 micron
  Int_t nbins=static_cast<Int_t>(1+2*fZCutDiamond/binsize);
  fZHisto=new TH1F("hz","",nbins,-fZCutDiamond,-fZCutDiamond+binsize*nbins);
  fZHisto->SetDirectory(0);
}

//________________________________________________________
void AliITSVertexer3D::FindPeaks(TH3F* histo, Double_t *peak, Int_t &nOfTracklets, Int_t &nOfTimes){
  // Finds bin with max contents in 3D histo of tracket intersections
  TAxis *xax = histo->GetXaxis();  
  TAxis *yax = histo->GetYaxis();
  TAxis *zax = histo->GetZaxis();
  peak[0]=0.;
  peak[1]=0.;
  peak[2]=0.;
  nOfTracklets = 0;
  nOfTimes=0;
  Int_t peakbin[3]={0,0,0};
  Int_t peak2bin[3]={-1,-1,-1};
  Int_t bc2=-1;
  for(Int_t i=xax->GetFirst();i<=xax->GetLast();i++){
    Double_t xval = xax->GetBinCenter(i);
    for(Int_t j=yax->GetFirst();j<=yax->GetLast();j++){
      Double_t yval = yax->GetBinCenter(j);
      for(Int_t k=zax->GetFirst();k<=zax->GetLast();k++){
	Double_t zval = zax->GetBinCenter(k);
	Int_t bc =(Int_t)histo->GetBinContent(i,j,k);
	if(bc==0) continue;
	if(bc>nOfTracklets){
	  nOfTracklets=bc;
	  peak[2] = zval;
	  peak[1] = yval;
	  peak[0] = xval;
	  peakbin[2] = k;
	  peakbin[1] = j;
	  peakbin[0] = i;
	  peak2bin[2] = -1;
	  peak2bin[1] = -1;
	  peak2bin[0] = -1;
	  bc2=-1;
	  nOfTimes = 1;
	}else if(bc==nOfTracklets){
	  if(TMath::Abs(i-peakbin[0])<=1 && TMath::Abs(j-peakbin[1])<=1 && TMath::Abs(k-peakbin[2])<=1){
	    peak2bin[2] = k;
	    peak2bin[1] = j;
	    peak2bin[0] = i;
	    bc2=bc;
	    nOfTimes = 1;
	  }else{
	    nOfTimes++;
	  }
	}
      }
    }
  }
  if(peak2bin[0]>=-1 && bc2!=-1){ // two contiguous peak-cells with same contents
    peak[0]=0.5*(xax->GetBinCenter(peakbin[0])+xax->GetBinCenter(peak2bin[0]));
    peak[1]=0.5*(yax->GetBinCenter(peakbin[1])+yax->GetBinCenter(peak2bin[1]));
    peak[2]=0.5*(zax->GetBinCenter(peakbin[2])+zax->GetBinCenter(peak2bin[2]));
    nOfTracklets+=bc2;
    nOfTimes=1;
  }
}
//________________________________________________________
void AliITSVertexer3D::MarkUsedClusters(){
  // Mark clusters of tracklets used in vertex claulation
  for(Int_t i=0; i<fLines.GetEntriesFast();i++){
    AliStrLine *lin = (AliStrLine*)fLines.At(i);
    Int_t idClu1=lin->GetIdPoint(0);
    Int_t idClu2=lin->GetIdPoint(1);
    fUsedCluster.SetBitNumber(idClu1);
    fUsedCluster.SetBitNumber(idClu2);
  }
}
//________________________________________________________
Int_t AliITSVertexer3D::RemoveTracklets(){
  // Remove trackelts close to first found vertex
  Double_t vert[3]={fVert3D.GetX(),fVert3D.GetY(),fVert3D.GetZ()};
  Int_t nRemoved=0;
  for(Int_t i=0; i<fLines.GetEntriesFast();i++){
    AliStrLine *lin = (AliStrLine*)fLines.At(i);
    if(lin->GetDistFromPoint(vert)<fDCAforPileup){
      Int_t idClu1=lin->GetIdPoint(0);
      Int_t idClu2=lin->GetIdPoint(1);
      fUsedCluster.SetBitNumber(idClu1);
      fUsedCluster.SetBitNumber(idClu2);
      fLines.RemoveAt(i);
      ++nRemoved;
    }
  }
  fLines.Compress();
  return nRemoved;
}
//________________________________________________________
void AliITSVertexer3D::FindOther3DVertices(TTree *itsClusterTree){
  // pileup identification based on 3D vertexing with not used clusters

  fVertArray = new AliESDVertex[kMaxPileupVertices+1];
  fVertArray[0]=(*fCurrentVertex);
  Int_t nFoundVert=1;
  for(Int_t iPilV=1; iPilV<=kMaxPileupVertices; iPilV++){
    MarkUsedClusters();
    fLines.Clear("C");
    Int_t nolines = FindTracklets(itsClusterTree,2);
    if(nolines>=2){
      Int_t nr=RemoveTracklets();
      nolines-=nr;
      if(nolines>=2){
	Int_t rc=Prepare3DVertex(2);
	if(rc==0){ 
	  fVert3D=AliVertexerTracks::TrackletVertexFinder(&fLines,0);
	  if(fVert3D.GetNContributors()>=fMinTrackletsForPilup){
	    fIsPileup=kTRUE;
	    fVertArray[nFoundVert]=fVert3D;
	    nFoundVert++;
	    if(nFoundVert==2){
	      fZpuv=fVert3D.GetZ();
	      fNTrpuv=fVert3D.GetNContributors();
	    }
	  }
	}
      }
    }
  }
  fNoVertices=nFoundVert;
}
//______________________________________________________________________
void AliITSVertexer3D::PileupFromZ(){
  // Calls the pileup algorithm of ALiITSVertexerZ
  Int_t binmin, binmax;
  Int_t nPeaks=AliITSVertexerZ::GetPeakRegion(fZHisto,binmin,binmax);   
  if(nPeaks==2)AliWarning("2 peaks found");
  Int_t firstPeakCont=0;
  Double_t firstPeakPos=0.;
  for(Int_t i=binmin-1;i<=binmax+1;i++){
    firstPeakCont+=static_cast<Int_t>(fZHisto->GetBinContent(i));
    firstPeakPos+=fZHisto->GetBinContent(i)*fZHisto->GetBinCenter(i);
  }
  if(firstPeakCont>0){ 
    firstPeakPos/=firstPeakCont;
    Int_t ncontr2=0;
    if(firstPeakCont>fMinTrackletsForPilup){     
      Float_t secPeakPos;
      ncontr2=AliITSVertexerZ::FindSecondPeak(fZHisto,binmin,binmax,secPeakPos);
      if(ncontr2>=fMinTrackletsForPilup){ 
	fIsPileup=kTRUE;
	fNoVertices=2;
	AliESDVertex secondVert(secPeakPos,0.1,ncontr2);
	fVertArray = new AliESDVertex[2];
	fVertArray[0]=(*fCurrentVertex);
	fVertArray[1]=secondVert;
	fZpuv=secPeakPos;
	fNTrpuv=ncontr2;
      }
    }
  }
}

//________________________________________________________
Double_t AliITSVertexer3D::GetFraction(Int_t itr) const {
  // this method is used to fill a 3D histogram representing
  // the trajectories of the candidate tracklets
  // The computed fraction is used as a weight at filling time
  AliStrLine *str = (AliStrLine*)fLines.At(itr);
  Double_t spigolo=10.;
  Double_t cd[3];
  str->GetCd(cd);
  Double_t par=0.;
  Double_t maxl=TMath::Sqrt(3.)*spigolo;
 // intersection with a plane normal to the X axis 
  if(TMath::AreEqualAbs(cd[0],0.,1.e-9)){
    par=1000000.;
  }
  else {
    par=spigolo/cd[0];
  }
  Double_t zc=cd[2]*par;
  Double_t yc=cd[1]*par;
  if((-spigolo<=yc && yc<=spigolo) && (-spigolo<=zc && zc<=spigolo))return TMath::Abs(par/maxl);
 // intersection with a plane normal to the Y axis
  if(TMath::AreEqualAbs(cd[1],0.,1.e-9)){
    par=1000000.;
  }
  else {
    par=spigolo/cd[1];
  }
  zc=cd[2]*par;
  Double_t xc=cd[0]*par;
  if((-spigolo<=xc && xc<=spigolo) && (-spigolo<=zc && zc<=spigolo))return TMath::Abs(par/maxl);
 // intersection with a plane normal to the Z axis
  if(TMath::AreEqualAbs(cd[2],0.,1.e-9)){
    par=1000000.;
  }
  else {
    par=spigolo/cd[2];
  }
  yc=cd[1]*par;
  xc=cd[0]*par;
  if((-spigolo<=xc && xc<=spigolo) && (-spigolo<=yc && yc<=spigolo))return TMath::Abs(par/maxl);
  // control should never reach the following lines
  AliError(Form("anomalous tracklet direction for tracklet %d in fLines\n",itr));
  str->PrintStatus();
  return 0.;
}

//________________________________________________________
void AliITSVertexer3D::PrintStatus() const {
  // Print current status
  printf("========= First step selections =====================\n");
  printf("Cut on diamond (Z) %f\n",fZCutDiamond);
  printf("Loose cut on Delta Phi %f\n",fCoarseDiffPhiCut);
  printf("Loose cut on tracklet DCA to Z axis %f\n",fCoarseMaxRCut);
  printf("Cut on DCA - tracklet to tracklet and to vertex %f\n",fDCAcut);
  printf("========= Second step selections ====================\n");
  printf("Cut on tracklet-to-first-vertex Z distance %f\n",fMaxZCut);
  printf("Max Phi difference: %f\n",fDiffPhiMax);
  printf("Cut on tracklet DCA to beam axis %f\n",fMaxRCut);
  printf("Cut on tracklet DCA to beam axis (algo2) %f\n",fMaxRCut2);
  printf("========= Pileup selections =========================\n");
  printf("Pileup algo: %d\n",fPileupAlgo);
  printf("Min DCA to 1st vertex for pileup (algo 0 and 1): %f\n",fDCAforPileup);
  printf("Cut on distance between pair-vertices  (algo 2): %f\n",fCutOnPairs);
  printf("Maximum number of clusters on L1 or L2 for downscale: %d\n",fMaxNumOfClForDownScale);
  printf("Maximum number of clusters on L1 or L2 for histo rebin: %d\n",fMaxNumOfClForRebin);
  printf("=======================================================\n");
}

 AliITSVertexer3D.cxx:1
 AliITSVertexer3D.cxx:2
 AliITSVertexer3D.cxx:3
 AliITSVertexer3D.cxx:4
 AliITSVertexer3D.cxx:5
 AliITSVertexer3D.cxx:6
 AliITSVertexer3D.cxx:7
 AliITSVertexer3D.cxx:8
 AliITSVertexer3D.cxx:9
 AliITSVertexer3D.cxx:10
 AliITSVertexer3D.cxx:11
 AliITSVertexer3D.cxx:12
 AliITSVertexer3D.cxx:13
 AliITSVertexer3D.cxx:14
 AliITSVertexer3D.cxx:15
 AliITSVertexer3D.cxx:16
 AliITSVertexer3D.cxx:17
 AliITSVertexer3D.cxx:18
 AliITSVertexer3D.cxx:19
 AliITSVertexer3D.cxx:20
 AliITSVertexer3D.cxx:21
 AliITSVertexer3D.cxx:22
 AliITSVertexer3D.cxx:23
 AliITSVertexer3D.cxx:24
 AliITSVertexer3D.cxx:25
 AliITSVertexer3D.cxx:26
 AliITSVertexer3D.cxx:27
 AliITSVertexer3D.cxx:28
 AliITSVertexer3D.cxx:29
 AliITSVertexer3D.cxx:30
 AliITSVertexer3D.cxx:31
 AliITSVertexer3D.cxx:32
 AliITSVertexer3D.cxx:33
 AliITSVertexer3D.cxx:34
 AliITSVertexer3D.cxx:35
 AliITSVertexer3D.cxx:36
 AliITSVertexer3D.cxx:37
 AliITSVertexer3D.cxx:38
 AliITSVertexer3D.cxx:39
 AliITSVertexer3D.cxx:40
 AliITSVertexer3D.cxx:41
 AliITSVertexer3D.cxx:42
 AliITSVertexer3D.cxx:43
 AliITSVertexer3D.cxx:44
 AliITSVertexer3D.cxx:45
 AliITSVertexer3D.cxx:46
 AliITSVertexer3D.cxx:47
 AliITSVertexer3D.cxx:48
 AliITSVertexer3D.cxx:49
 AliITSVertexer3D.cxx:50
 AliITSVertexer3D.cxx:51
 AliITSVertexer3D.cxx:52
 AliITSVertexer3D.cxx:53
 AliITSVertexer3D.cxx:54
 AliITSVertexer3D.cxx:55
 AliITSVertexer3D.cxx:56
 AliITSVertexer3D.cxx:57
 AliITSVertexer3D.cxx:58
 AliITSVertexer3D.cxx:59
 AliITSVertexer3D.cxx:60
 AliITSVertexer3D.cxx:61
 AliITSVertexer3D.cxx:62
 AliITSVertexer3D.cxx:63
 AliITSVertexer3D.cxx:64
 AliITSVertexer3D.cxx:65
 AliITSVertexer3D.cxx:66
 AliITSVertexer3D.cxx:67
 AliITSVertexer3D.cxx:68
 AliITSVertexer3D.cxx:69
 AliITSVertexer3D.cxx:70
 AliITSVertexer3D.cxx:71
 AliITSVertexer3D.cxx:72
 AliITSVertexer3D.cxx:73
 AliITSVertexer3D.cxx:74
 AliITSVertexer3D.cxx:75
 AliITSVertexer3D.cxx:76
 AliITSVertexer3D.cxx:77
 AliITSVertexer3D.cxx:78
 AliITSVertexer3D.cxx:79
 AliITSVertexer3D.cxx:80
 AliITSVertexer3D.cxx:81
 AliITSVertexer3D.cxx:82
 AliITSVertexer3D.cxx:83
 AliITSVertexer3D.cxx:84
 AliITSVertexer3D.cxx:85
 AliITSVertexer3D.cxx:86
 AliITSVertexer3D.cxx:87
 AliITSVertexer3D.cxx:88
 AliITSVertexer3D.cxx:89
 AliITSVertexer3D.cxx:90
 AliITSVertexer3D.cxx:91
 AliITSVertexer3D.cxx:92
 AliITSVertexer3D.cxx:93
 AliITSVertexer3D.cxx:94
 AliITSVertexer3D.cxx:95
 AliITSVertexer3D.cxx:96
 AliITSVertexer3D.cxx:97
 AliITSVertexer3D.cxx:98
 AliITSVertexer3D.cxx:99
 AliITSVertexer3D.cxx:100
 AliITSVertexer3D.cxx:101
 AliITSVertexer3D.cxx:102
 AliITSVertexer3D.cxx:103
 AliITSVertexer3D.cxx:104
 AliITSVertexer3D.cxx:105
 AliITSVertexer3D.cxx:106
 AliITSVertexer3D.cxx:107
 AliITSVertexer3D.cxx:108
 AliITSVertexer3D.cxx:109
 AliITSVertexer3D.cxx:110
 AliITSVertexer3D.cxx:111
 AliITSVertexer3D.cxx:112
 AliITSVertexer3D.cxx:113
 AliITSVertexer3D.cxx:114
 AliITSVertexer3D.cxx:115
 AliITSVertexer3D.cxx:116
 AliITSVertexer3D.cxx:117
 AliITSVertexer3D.cxx:118
 AliITSVertexer3D.cxx:119
 AliITSVertexer3D.cxx:120
 AliITSVertexer3D.cxx:121
 AliITSVertexer3D.cxx:122
 AliITSVertexer3D.cxx:123
 AliITSVertexer3D.cxx:124
 AliITSVertexer3D.cxx:125
 AliITSVertexer3D.cxx:126
 AliITSVertexer3D.cxx:127
 AliITSVertexer3D.cxx:128
 AliITSVertexer3D.cxx:129
 AliITSVertexer3D.cxx:130
 AliITSVertexer3D.cxx:131
 AliITSVertexer3D.cxx:132
 AliITSVertexer3D.cxx:133
 AliITSVertexer3D.cxx:134
 AliITSVertexer3D.cxx:135
 AliITSVertexer3D.cxx:136
 AliITSVertexer3D.cxx:137
 AliITSVertexer3D.cxx:138
 AliITSVertexer3D.cxx:139
 AliITSVertexer3D.cxx:140
 AliITSVertexer3D.cxx:141
 AliITSVertexer3D.cxx:142
 AliITSVertexer3D.cxx:143
 AliITSVertexer3D.cxx:144
 AliITSVertexer3D.cxx:145
 AliITSVertexer3D.cxx:146
 AliITSVertexer3D.cxx:147
 AliITSVertexer3D.cxx:148
 AliITSVertexer3D.cxx:149
 AliITSVertexer3D.cxx:150
 AliITSVertexer3D.cxx:151
 AliITSVertexer3D.cxx:152
 AliITSVertexer3D.cxx:153
 AliITSVertexer3D.cxx:154
 AliITSVertexer3D.cxx:155
 AliITSVertexer3D.cxx:156
 AliITSVertexer3D.cxx:157
 AliITSVertexer3D.cxx:158
 AliITSVertexer3D.cxx:159
 AliITSVertexer3D.cxx:160
 AliITSVertexer3D.cxx:161
 AliITSVertexer3D.cxx:162
 AliITSVertexer3D.cxx:163
 AliITSVertexer3D.cxx:164
 AliITSVertexer3D.cxx:165
 AliITSVertexer3D.cxx:166
 AliITSVertexer3D.cxx:167
 AliITSVertexer3D.cxx:168
 AliITSVertexer3D.cxx:169
 AliITSVertexer3D.cxx:170
 AliITSVertexer3D.cxx:171
 AliITSVertexer3D.cxx:172
 AliITSVertexer3D.cxx:173
 AliITSVertexer3D.cxx:174
 AliITSVertexer3D.cxx:175
 AliITSVertexer3D.cxx:176
 AliITSVertexer3D.cxx:177
 AliITSVertexer3D.cxx:178
 AliITSVertexer3D.cxx:179
 AliITSVertexer3D.cxx:180
 AliITSVertexer3D.cxx:181
 AliITSVertexer3D.cxx:182
 AliITSVertexer3D.cxx:183
 AliITSVertexer3D.cxx:184
 AliITSVertexer3D.cxx:185
 AliITSVertexer3D.cxx:186
 AliITSVertexer3D.cxx:187
 AliITSVertexer3D.cxx:188
 AliITSVertexer3D.cxx:189
 AliITSVertexer3D.cxx:190
 AliITSVertexer3D.cxx:191
 AliITSVertexer3D.cxx:192
 AliITSVertexer3D.cxx:193
 AliITSVertexer3D.cxx:194
 AliITSVertexer3D.cxx:195
 AliITSVertexer3D.cxx:196
 AliITSVertexer3D.cxx:197
 AliITSVertexer3D.cxx:198
 AliITSVertexer3D.cxx:199
 AliITSVertexer3D.cxx:200
 AliITSVertexer3D.cxx:201
 AliITSVertexer3D.cxx:202
 AliITSVertexer3D.cxx:203
 AliITSVertexer3D.cxx:204
 AliITSVertexer3D.cxx:205
 AliITSVertexer3D.cxx:206
 AliITSVertexer3D.cxx:207
 AliITSVertexer3D.cxx:208
 AliITSVertexer3D.cxx:209
 AliITSVertexer3D.cxx:210
 AliITSVertexer3D.cxx:211
 AliITSVertexer3D.cxx:212
 AliITSVertexer3D.cxx:213
 AliITSVertexer3D.cxx:214
 AliITSVertexer3D.cxx:215
 AliITSVertexer3D.cxx:216
 AliITSVertexer3D.cxx:217
 AliITSVertexer3D.cxx:218
 AliITSVertexer3D.cxx:219
 AliITSVertexer3D.cxx:220
 AliITSVertexer3D.cxx:221
 AliITSVertexer3D.cxx:222
 AliITSVertexer3D.cxx:223
 AliITSVertexer3D.cxx:224
 AliITSVertexer3D.cxx:225
 AliITSVertexer3D.cxx:226
 AliITSVertexer3D.cxx:227
 AliITSVertexer3D.cxx:228
 AliITSVertexer3D.cxx:229
 AliITSVertexer3D.cxx:230
 AliITSVertexer3D.cxx:231
 AliITSVertexer3D.cxx:232
 AliITSVertexer3D.cxx:233
 AliITSVertexer3D.cxx:234
 AliITSVertexer3D.cxx:235
 AliITSVertexer3D.cxx:236
 AliITSVertexer3D.cxx:237
 AliITSVertexer3D.cxx:238
 AliITSVertexer3D.cxx:239
 AliITSVertexer3D.cxx:240
 AliITSVertexer3D.cxx:241
 AliITSVertexer3D.cxx:242
 AliITSVertexer3D.cxx:243
 AliITSVertexer3D.cxx:244
 AliITSVertexer3D.cxx:245
 AliITSVertexer3D.cxx:246
 AliITSVertexer3D.cxx:247
 AliITSVertexer3D.cxx:248
 AliITSVertexer3D.cxx:249
 AliITSVertexer3D.cxx:250
 AliITSVertexer3D.cxx:251
 AliITSVertexer3D.cxx:252
 AliITSVertexer3D.cxx:253
 AliITSVertexer3D.cxx:254
 AliITSVertexer3D.cxx:255
 AliITSVertexer3D.cxx:256
 AliITSVertexer3D.cxx:257
 AliITSVertexer3D.cxx:258
 AliITSVertexer3D.cxx:259
 AliITSVertexer3D.cxx:260
 AliITSVertexer3D.cxx:261
 AliITSVertexer3D.cxx:262
 AliITSVertexer3D.cxx:263
 AliITSVertexer3D.cxx:264
 AliITSVertexer3D.cxx:265
 AliITSVertexer3D.cxx:266
 AliITSVertexer3D.cxx:267
 AliITSVertexer3D.cxx:268
 AliITSVertexer3D.cxx:269
 AliITSVertexer3D.cxx:270
 AliITSVertexer3D.cxx:271
 AliITSVertexer3D.cxx:272
 AliITSVertexer3D.cxx:273
 AliITSVertexer3D.cxx:274
 AliITSVertexer3D.cxx:275
 AliITSVertexer3D.cxx:276
 AliITSVertexer3D.cxx:277
 AliITSVertexer3D.cxx:278
 AliITSVertexer3D.cxx:279
 AliITSVertexer3D.cxx:280
 AliITSVertexer3D.cxx:281
 AliITSVertexer3D.cxx:282
 AliITSVertexer3D.cxx:283
 AliITSVertexer3D.cxx:284
 AliITSVertexer3D.cxx:285
 AliITSVertexer3D.cxx:286
 AliITSVertexer3D.cxx:287
 AliITSVertexer3D.cxx:288
 AliITSVertexer3D.cxx:289
 AliITSVertexer3D.cxx:290
 AliITSVertexer3D.cxx:291
 AliITSVertexer3D.cxx:292
 AliITSVertexer3D.cxx:293
 AliITSVertexer3D.cxx:294
 AliITSVertexer3D.cxx:295
 AliITSVertexer3D.cxx:296
 AliITSVertexer3D.cxx:297
 AliITSVertexer3D.cxx:298
 AliITSVertexer3D.cxx:299
 AliITSVertexer3D.cxx:300
 AliITSVertexer3D.cxx:301
 AliITSVertexer3D.cxx:302
 AliITSVertexer3D.cxx:303
 AliITSVertexer3D.cxx:304
 AliITSVertexer3D.cxx:305
 AliITSVertexer3D.cxx:306
 AliITSVertexer3D.cxx:307
 AliITSVertexer3D.cxx:308
 AliITSVertexer3D.cxx:309
 AliITSVertexer3D.cxx:310
 AliITSVertexer3D.cxx:311
 AliITSVertexer3D.cxx:312
 AliITSVertexer3D.cxx:313
 AliITSVertexer3D.cxx:314
 AliITSVertexer3D.cxx:315
 AliITSVertexer3D.cxx:316
 AliITSVertexer3D.cxx:317
 AliITSVertexer3D.cxx:318
 AliITSVertexer3D.cxx:319
 AliITSVertexer3D.cxx:320
 AliITSVertexer3D.cxx:321
 AliITSVertexer3D.cxx:322
 AliITSVertexer3D.cxx:323
 AliITSVertexer3D.cxx:324
 AliITSVertexer3D.cxx:325
 AliITSVertexer3D.cxx:326
 AliITSVertexer3D.cxx:327
 AliITSVertexer3D.cxx:328
 AliITSVertexer3D.cxx:329
 AliITSVertexer3D.cxx:330
 AliITSVertexer3D.cxx:331
 AliITSVertexer3D.cxx:332
 AliITSVertexer3D.cxx:333
 AliITSVertexer3D.cxx:334
 AliITSVertexer3D.cxx:335
 AliITSVertexer3D.cxx:336
 AliITSVertexer3D.cxx:337
 AliITSVertexer3D.cxx:338
 AliITSVertexer3D.cxx:339
 AliITSVertexer3D.cxx:340
 AliITSVertexer3D.cxx:341
 AliITSVertexer3D.cxx:342
 AliITSVertexer3D.cxx:343
 AliITSVertexer3D.cxx:344
 AliITSVertexer3D.cxx:345
 AliITSVertexer3D.cxx:346
 AliITSVertexer3D.cxx:347
 AliITSVertexer3D.cxx:348
 AliITSVertexer3D.cxx:349
 AliITSVertexer3D.cxx:350
 AliITSVertexer3D.cxx:351
 AliITSVertexer3D.cxx:352
 AliITSVertexer3D.cxx:353
 AliITSVertexer3D.cxx:354
 AliITSVertexer3D.cxx:355
 AliITSVertexer3D.cxx:356
 AliITSVertexer3D.cxx:357
 AliITSVertexer3D.cxx:358
 AliITSVertexer3D.cxx:359
 AliITSVertexer3D.cxx:360
 AliITSVertexer3D.cxx:361
 AliITSVertexer3D.cxx:362
 AliITSVertexer3D.cxx:363
 AliITSVertexer3D.cxx:364
 AliITSVertexer3D.cxx:365
 AliITSVertexer3D.cxx:366
 AliITSVertexer3D.cxx:367
 AliITSVertexer3D.cxx:368
 AliITSVertexer3D.cxx:369
 AliITSVertexer3D.cxx:370
 AliITSVertexer3D.cxx:371
 AliITSVertexer3D.cxx:372
 AliITSVertexer3D.cxx:373
 AliITSVertexer3D.cxx:374
 AliITSVertexer3D.cxx:375
 AliITSVertexer3D.cxx:376
 AliITSVertexer3D.cxx:377
 AliITSVertexer3D.cxx:378
 AliITSVertexer3D.cxx:379
 AliITSVertexer3D.cxx:380
 AliITSVertexer3D.cxx:381
 AliITSVertexer3D.cxx:382
 AliITSVertexer3D.cxx:383
 AliITSVertexer3D.cxx:384
 AliITSVertexer3D.cxx:385
 AliITSVertexer3D.cxx:386
 AliITSVertexer3D.cxx:387
 AliITSVertexer3D.cxx:388
 AliITSVertexer3D.cxx:389
 AliITSVertexer3D.cxx:390
 AliITSVertexer3D.cxx:391
 AliITSVertexer3D.cxx:392
 AliITSVertexer3D.cxx:393
 AliITSVertexer3D.cxx:394
 AliITSVertexer3D.cxx:395
 AliITSVertexer3D.cxx:396
 AliITSVertexer3D.cxx:397
 AliITSVertexer3D.cxx:398
 AliITSVertexer3D.cxx:399
 AliITSVertexer3D.cxx:400
 AliITSVertexer3D.cxx:401
 AliITSVertexer3D.cxx:402
 AliITSVertexer3D.cxx:403
 AliITSVertexer3D.cxx:404
 AliITSVertexer3D.cxx:405
 AliITSVertexer3D.cxx:406
 AliITSVertexer3D.cxx:407
 AliITSVertexer3D.cxx:408
 AliITSVertexer3D.cxx:409
 AliITSVertexer3D.cxx:410
 AliITSVertexer3D.cxx:411
 AliITSVertexer3D.cxx:412
 AliITSVertexer3D.cxx:413
 AliITSVertexer3D.cxx:414
 AliITSVertexer3D.cxx:415
 AliITSVertexer3D.cxx:416
 AliITSVertexer3D.cxx:417
 AliITSVertexer3D.cxx:418
 AliITSVertexer3D.cxx:419
 AliITSVertexer3D.cxx:420
 AliITSVertexer3D.cxx:421
 AliITSVertexer3D.cxx:422
 AliITSVertexer3D.cxx:423
 AliITSVertexer3D.cxx:424
 AliITSVertexer3D.cxx:425
 AliITSVertexer3D.cxx:426
 AliITSVertexer3D.cxx:427
 AliITSVertexer3D.cxx:428
 AliITSVertexer3D.cxx:429
 AliITSVertexer3D.cxx:430
 AliITSVertexer3D.cxx:431
 AliITSVertexer3D.cxx:432
 AliITSVertexer3D.cxx:433
 AliITSVertexer3D.cxx:434
 AliITSVertexer3D.cxx:435
 AliITSVertexer3D.cxx:436
 AliITSVertexer3D.cxx:437
 AliITSVertexer3D.cxx:438
 AliITSVertexer3D.cxx:439
 AliITSVertexer3D.cxx:440
 AliITSVertexer3D.cxx:441
 AliITSVertexer3D.cxx:442
 AliITSVertexer3D.cxx:443
 AliITSVertexer3D.cxx:444
 AliITSVertexer3D.cxx:445
 AliITSVertexer3D.cxx:446
 AliITSVertexer3D.cxx:447
 AliITSVertexer3D.cxx:448
 AliITSVertexer3D.cxx:449
 AliITSVertexer3D.cxx:450
 AliITSVertexer3D.cxx:451
 AliITSVertexer3D.cxx:452
 AliITSVertexer3D.cxx:453
 AliITSVertexer3D.cxx:454
 AliITSVertexer3D.cxx:455
 AliITSVertexer3D.cxx:456
 AliITSVertexer3D.cxx:457
 AliITSVertexer3D.cxx:458
 AliITSVertexer3D.cxx:459
 AliITSVertexer3D.cxx:460
 AliITSVertexer3D.cxx:461
 AliITSVertexer3D.cxx:462
 AliITSVertexer3D.cxx:463
 AliITSVertexer3D.cxx:464
 AliITSVertexer3D.cxx:465
 AliITSVertexer3D.cxx:466
 AliITSVertexer3D.cxx:467
 AliITSVertexer3D.cxx:468
 AliITSVertexer3D.cxx:469
 AliITSVertexer3D.cxx:470
 AliITSVertexer3D.cxx:471
 AliITSVertexer3D.cxx:472
 AliITSVertexer3D.cxx:473
 AliITSVertexer3D.cxx:474
 AliITSVertexer3D.cxx:475
 AliITSVertexer3D.cxx:476
 AliITSVertexer3D.cxx:477
 AliITSVertexer3D.cxx:478
 AliITSVertexer3D.cxx:479
 AliITSVertexer3D.cxx:480
 AliITSVertexer3D.cxx:481
 AliITSVertexer3D.cxx:482
 AliITSVertexer3D.cxx:483
 AliITSVertexer3D.cxx:484
 AliITSVertexer3D.cxx:485
 AliITSVertexer3D.cxx:486
 AliITSVertexer3D.cxx:487
 AliITSVertexer3D.cxx:488
 AliITSVertexer3D.cxx:489
 AliITSVertexer3D.cxx:490
 AliITSVertexer3D.cxx:491
 AliITSVertexer3D.cxx:492
 AliITSVertexer3D.cxx:493
 AliITSVertexer3D.cxx:494
 AliITSVertexer3D.cxx:495
 AliITSVertexer3D.cxx:496
 AliITSVertexer3D.cxx:497
 AliITSVertexer3D.cxx:498
 AliITSVertexer3D.cxx:499
 AliITSVertexer3D.cxx:500
 AliITSVertexer3D.cxx:501
 AliITSVertexer3D.cxx:502
 AliITSVertexer3D.cxx:503
 AliITSVertexer3D.cxx:504
 AliITSVertexer3D.cxx:505
 AliITSVertexer3D.cxx:506
 AliITSVertexer3D.cxx:507
 AliITSVertexer3D.cxx:508
 AliITSVertexer3D.cxx:509
 AliITSVertexer3D.cxx:510
 AliITSVertexer3D.cxx:511
 AliITSVertexer3D.cxx:512
 AliITSVertexer3D.cxx:513
 AliITSVertexer3D.cxx:514
 AliITSVertexer3D.cxx:515
 AliITSVertexer3D.cxx:516
 AliITSVertexer3D.cxx:517
 AliITSVertexer3D.cxx:518
 AliITSVertexer3D.cxx:519
 AliITSVertexer3D.cxx:520
 AliITSVertexer3D.cxx:521
 AliITSVertexer3D.cxx:522
 AliITSVertexer3D.cxx:523
 AliITSVertexer3D.cxx:524
 AliITSVertexer3D.cxx:525
 AliITSVertexer3D.cxx:526
 AliITSVertexer3D.cxx:527
 AliITSVertexer3D.cxx:528
 AliITSVertexer3D.cxx:529
 AliITSVertexer3D.cxx:530
 AliITSVertexer3D.cxx:531
 AliITSVertexer3D.cxx:532
 AliITSVertexer3D.cxx:533
 AliITSVertexer3D.cxx:534
 AliITSVertexer3D.cxx:535
 AliITSVertexer3D.cxx:536
 AliITSVertexer3D.cxx:537
 AliITSVertexer3D.cxx:538
 AliITSVertexer3D.cxx:539
 AliITSVertexer3D.cxx:540
 AliITSVertexer3D.cxx:541
 AliITSVertexer3D.cxx:542
 AliITSVertexer3D.cxx:543
 AliITSVertexer3D.cxx:544
 AliITSVertexer3D.cxx:545
 AliITSVertexer3D.cxx:546
 AliITSVertexer3D.cxx:547
 AliITSVertexer3D.cxx:548
 AliITSVertexer3D.cxx:549
 AliITSVertexer3D.cxx:550
 AliITSVertexer3D.cxx:551
 AliITSVertexer3D.cxx:552
 AliITSVertexer3D.cxx:553
 AliITSVertexer3D.cxx:554
 AliITSVertexer3D.cxx:555
 AliITSVertexer3D.cxx:556
 AliITSVertexer3D.cxx:557
 AliITSVertexer3D.cxx:558
 AliITSVertexer3D.cxx:559
 AliITSVertexer3D.cxx:560
 AliITSVertexer3D.cxx:561
 AliITSVertexer3D.cxx:562
 AliITSVertexer3D.cxx:563
 AliITSVertexer3D.cxx:564
 AliITSVertexer3D.cxx:565
 AliITSVertexer3D.cxx:566
 AliITSVertexer3D.cxx:567
 AliITSVertexer3D.cxx:568
 AliITSVertexer3D.cxx:569
 AliITSVertexer3D.cxx:570
 AliITSVertexer3D.cxx:571
 AliITSVertexer3D.cxx:572
 AliITSVertexer3D.cxx:573
 AliITSVertexer3D.cxx:574
 AliITSVertexer3D.cxx:575
 AliITSVertexer3D.cxx:576
 AliITSVertexer3D.cxx:577
 AliITSVertexer3D.cxx:578
 AliITSVertexer3D.cxx:579
 AliITSVertexer3D.cxx:580
 AliITSVertexer3D.cxx:581
 AliITSVertexer3D.cxx:582
 AliITSVertexer3D.cxx:583
 AliITSVertexer3D.cxx:584
 AliITSVertexer3D.cxx:585
 AliITSVertexer3D.cxx:586
 AliITSVertexer3D.cxx:587
 AliITSVertexer3D.cxx:588
 AliITSVertexer3D.cxx:589
 AliITSVertexer3D.cxx:590
 AliITSVertexer3D.cxx:591
 AliITSVertexer3D.cxx:592
 AliITSVertexer3D.cxx:593
 AliITSVertexer3D.cxx:594
 AliITSVertexer3D.cxx:595
 AliITSVertexer3D.cxx:596
 AliITSVertexer3D.cxx:597
 AliITSVertexer3D.cxx:598
 AliITSVertexer3D.cxx:599
 AliITSVertexer3D.cxx:600
 AliITSVertexer3D.cxx:601
 AliITSVertexer3D.cxx:602
 AliITSVertexer3D.cxx:603
 AliITSVertexer3D.cxx:604
 AliITSVertexer3D.cxx:605
 AliITSVertexer3D.cxx:606
 AliITSVertexer3D.cxx:607
 AliITSVertexer3D.cxx:608
 AliITSVertexer3D.cxx:609
 AliITSVertexer3D.cxx:610
 AliITSVertexer3D.cxx:611
 AliITSVertexer3D.cxx:612
 AliITSVertexer3D.cxx:613
 AliITSVertexer3D.cxx:614
 AliITSVertexer3D.cxx:615
 AliITSVertexer3D.cxx:616
 AliITSVertexer3D.cxx:617
 AliITSVertexer3D.cxx:618
 AliITSVertexer3D.cxx:619
 AliITSVertexer3D.cxx:620
 AliITSVertexer3D.cxx:621
 AliITSVertexer3D.cxx:622
 AliITSVertexer3D.cxx:623
 AliITSVertexer3D.cxx:624
 AliITSVertexer3D.cxx:625
 AliITSVertexer3D.cxx:626
 AliITSVertexer3D.cxx:627
 AliITSVertexer3D.cxx:628
 AliITSVertexer3D.cxx:629
 AliITSVertexer3D.cxx:630
 AliITSVertexer3D.cxx:631
 AliITSVertexer3D.cxx:632
 AliITSVertexer3D.cxx:633
 AliITSVertexer3D.cxx:634
 AliITSVertexer3D.cxx:635
 AliITSVertexer3D.cxx:636
 AliITSVertexer3D.cxx:637
 AliITSVertexer3D.cxx:638
 AliITSVertexer3D.cxx:639
 AliITSVertexer3D.cxx:640
 AliITSVertexer3D.cxx:641
 AliITSVertexer3D.cxx:642
 AliITSVertexer3D.cxx:643
 AliITSVertexer3D.cxx:644
 AliITSVertexer3D.cxx:645
 AliITSVertexer3D.cxx:646
 AliITSVertexer3D.cxx:647
 AliITSVertexer3D.cxx:648
 AliITSVertexer3D.cxx:649
 AliITSVertexer3D.cxx:650
 AliITSVertexer3D.cxx:651
 AliITSVertexer3D.cxx:652
 AliITSVertexer3D.cxx:653
 AliITSVertexer3D.cxx:654
 AliITSVertexer3D.cxx:655
 AliITSVertexer3D.cxx:656
 AliITSVertexer3D.cxx:657
 AliITSVertexer3D.cxx:658
 AliITSVertexer3D.cxx:659
 AliITSVertexer3D.cxx:660
 AliITSVertexer3D.cxx:661
 AliITSVertexer3D.cxx:662
 AliITSVertexer3D.cxx:663
 AliITSVertexer3D.cxx:664
 AliITSVertexer3D.cxx:665
 AliITSVertexer3D.cxx:666
 AliITSVertexer3D.cxx:667
 AliITSVertexer3D.cxx:668
 AliITSVertexer3D.cxx:669
 AliITSVertexer3D.cxx:670
 AliITSVertexer3D.cxx:671
 AliITSVertexer3D.cxx:672
 AliITSVertexer3D.cxx:673
 AliITSVertexer3D.cxx:674
 AliITSVertexer3D.cxx:675
 AliITSVertexer3D.cxx:676
 AliITSVertexer3D.cxx:677
 AliITSVertexer3D.cxx:678
 AliITSVertexer3D.cxx:679
 AliITSVertexer3D.cxx:680
 AliITSVertexer3D.cxx:681
 AliITSVertexer3D.cxx:682
 AliITSVertexer3D.cxx:683
 AliITSVertexer3D.cxx:684
 AliITSVertexer3D.cxx:685
 AliITSVertexer3D.cxx:686
 AliITSVertexer3D.cxx:687
 AliITSVertexer3D.cxx:688
 AliITSVertexer3D.cxx:689
 AliITSVertexer3D.cxx:690
 AliITSVertexer3D.cxx:691
 AliITSVertexer3D.cxx:692
 AliITSVertexer3D.cxx:693
 AliITSVertexer3D.cxx:694
 AliITSVertexer3D.cxx:695
 AliITSVertexer3D.cxx:696
 AliITSVertexer3D.cxx:697
 AliITSVertexer3D.cxx:698
 AliITSVertexer3D.cxx:699
 AliITSVertexer3D.cxx:700
 AliITSVertexer3D.cxx:701
 AliITSVertexer3D.cxx:702
 AliITSVertexer3D.cxx:703
 AliITSVertexer3D.cxx:704
 AliITSVertexer3D.cxx:705
 AliITSVertexer3D.cxx:706
 AliITSVertexer3D.cxx:707
 AliITSVertexer3D.cxx:708
 AliITSVertexer3D.cxx:709
 AliITSVertexer3D.cxx:710
 AliITSVertexer3D.cxx:711
 AliITSVertexer3D.cxx:712
 AliITSVertexer3D.cxx:713
 AliITSVertexer3D.cxx:714
 AliITSVertexer3D.cxx:715
 AliITSVertexer3D.cxx:716
 AliITSVertexer3D.cxx:717
 AliITSVertexer3D.cxx:718
 AliITSVertexer3D.cxx:719
 AliITSVertexer3D.cxx:720
 AliITSVertexer3D.cxx:721
 AliITSVertexer3D.cxx:722
 AliITSVertexer3D.cxx:723
 AliITSVertexer3D.cxx:724
 AliITSVertexer3D.cxx:725
 AliITSVertexer3D.cxx:726
 AliITSVertexer3D.cxx:727
 AliITSVertexer3D.cxx:728
 AliITSVertexer3D.cxx:729
 AliITSVertexer3D.cxx:730
 AliITSVertexer3D.cxx:731
 AliITSVertexer3D.cxx:732
 AliITSVertexer3D.cxx:733
 AliITSVertexer3D.cxx:734
 AliITSVertexer3D.cxx:735
 AliITSVertexer3D.cxx:736
 AliITSVertexer3D.cxx:737
 AliITSVertexer3D.cxx:738
 AliITSVertexer3D.cxx:739
 AliITSVertexer3D.cxx:740
 AliITSVertexer3D.cxx:741
 AliITSVertexer3D.cxx:742
 AliITSVertexer3D.cxx:743
 AliITSVertexer3D.cxx:744
 AliITSVertexer3D.cxx:745
 AliITSVertexer3D.cxx:746
 AliITSVertexer3D.cxx:747
 AliITSVertexer3D.cxx:748
 AliITSVertexer3D.cxx:749
 AliITSVertexer3D.cxx:750
 AliITSVertexer3D.cxx:751
 AliITSVertexer3D.cxx:752
 AliITSVertexer3D.cxx:753
 AliITSVertexer3D.cxx:754
 AliITSVertexer3D.cxx:755
 AliITSVertexer3D.cxx:756
 AliITSVertexer3D.cxx:757
 AliITSVertexer3D.cxx:758
 AliITSVertexer3D.cxx:759
 AliITSVertexer3D.cxx:760
 AliITSVertexer3D.cxx:761
 AliITSVertexer3D.cxx:762
 AliITSVertexer3D.cxx:763
 AliITSVertexer3D.cxx:764
 AliITSVertexer3D.cxx:765
 AliITSVertexer3D.cxx:766
 AliITSVertexer3D.cxx:767
 AliITSVertexer3D.cxx:768
 AliITSVertexer3D.cxx:769
 AliITSVertexer3D.cxx:770
 AliITSVertexer3D.cxx:771
 AliITSVertexer3D.cxx:772
 AliITSVertexer3D.cxx:773
 AliITSVertexer3D.cxx:774
 AliITSVertexer3D.cxx:775
 AliITSVertexer3D.cxx:776
 AliITSVertexer3D.cxx:777
 AliITSVertexer3D.cxx:778
 AliITSVertexer3D.cxx:779
 AliITSVertexer3D.cxx:780
 AliITSVertexer3D.cxx:781
 AliITSVertexer3D.cxx:782
 AliITSVertexer3D.cxx:783
 AliITSVertexer3D.cxx:784
 AliITSVertexer3D.cxx:785
 AliITSVertexer3D.cxx:786
 AliITSVertexer3D.cxx:787
 AliITSVertexer3D.cxx:788
 AliITSVertexer3D.cxx:789
 AliITSVertexer3D.cxx:790
 AliITSVertexer3D.cxx:791
 AliITSVertexer3D.cxx:792
 AliITSVertexer3D.cxx:793
 AliITSVertexer3D.cxx:794
 AliITSVertexer3D.cxx:795
 AliITSVertexer3D.cxx:796
 AliITSVertexer3D.cxx:797
 AliITSVertexer3D.cxx:798
 AliITSVertexer3D.cxx:799
 AliITSVertexer3D.cxx:800
 AliITSVertexer3D.cxx:801
 AliITSVertexer3D.cxx:802
 AliITSVertexer3D.cxx:803
 AliITSVertexer3D.cxx:804
 AliITSVertexer3D.cxx:805
 AliITSVertexer3D.cxx:806
 AliITSVertexer3D.cxx:807
 AliITSVertexer3D.cxx:808
 AliITSVertexer3D.cxx:809
 AliITSVertexer3D.cxx:810
 AliITSVertexer3D.cxx:811
 AliITSVertexer3D.cxx:812
 AliITSVertexer3D.cxx:813
 AliITSVertexer3D.cxx:814
 AliITSVertexer3D.cxx:815
 AliITSVertexer3D.cxx:816
 AliITSVertexer3D.cxx:817
 AliITSVertexer3D.cxx:818
 AliITSVertexer3D.cxx:819
 AliITSVertexer3D.cxx:820
 AliITSVertexer3D.cxx:821
 AliITSVertexer3D.cxx:822
 AliITSVertexer3D.cxx:823
 AliITSVertexer3D.cxx:824
 AliITSVertexer3D.cxx:825
 AliITSVertexer3D.cxx:826
 AliITSVertexer3D.cxx:827
 AliITSVertexer3D.cxx:828
 AliITSVertexer3D.cxx:829
 AliITSVertexer3D.cxx:830
 AliITSVertexer3D.cxx:831
 AliITSVertexer3D.cxx:832
 AliITSVertexer3D.cxx:833
 AliITSVertexer3D.cxx:834
 AliITSVertexer3D.cxx:835
 AliITSVertexer3D.cxx:836
 AliITSVertexer3D.cxx:837
 AliITSVertexer3D.cxx:838
 AliITSVertexer3D.cxx:839
 AliITSVertexer3D.cxx:840
 AliITSVertexer3D.cxx:841
 AliITSVertexer3D.cxx:842
 AliITSVertexer3D.cxx:843
 AliITSVertexer3D.cxx:844
 AliITSVertexer3D.cxx:845
 AliITSVertexer3D.cxx:846
 AliITSVertexer3D.cxx:847
 AliITSVertexer3D.cxx:848
 AliITSVertexer3D.cxx:849
 AliITSVertexer3D.cxx:850
 AliITSVertexer3D.cxx:851
 AliITSVertexer3D.cxx:852
 AliITSVertexer3D.cxx:853
 AliITSVertexer3D.cxx:854
 AliITSVertexer3D.cxx:855
 AliITSVertexer3D.cxx:856
 AliITSVertexer3D.cxx:857
 AliITSVertexer3D.cxx:858
 AliITSVertexer3D.cxx:859
 AliITSVertexer3D.cxx:860
 AliITSVertexer3D.cxx:861
 AliITSVertexer3D.cxx:862
 AliITSVertexer3D.cxx:863
 AliITSVertexer3D.cxx:864
 AliITSVertexer3D.cxx:865
 AliITSVertexer3D.cxx:866
 AliITSVertexer3D.cxx:867
 AliITSVertexer3D.cxx:868
 AliITSVertexer3D.cxx:869
 AliITSVertexer3D.cxx:870
 AliITSVertexer3D.cxx:871
 AliITSVertexer3D.cxx:872
 AliITSVertexer3D.cxx:873
 AliITSVertexer3D.cxx:874
 AliITSVertexer3D.cxx:875
 AliITSVertexer3D.cxx:876
 AliITSVertexer3D.cxx:877
 AliITSVertexer3D.cxx:878
 AliITSVertexer3D.cxx:879
 AliITSVertexer3D.cxx:880
 AliITSVertexer3D.cxx:881
 AliITSVertexer3D.cxx:882
 AliITSVertexer3D.cxx:883
 AliITSVertexer3D.cxx:884
 AliITSVertexer3D.cxx:885
 AliITSVertexer3D.cxx:886
 AliITSVertexer3D.cxx:887
 AliITSVertexer3D.cxx:888
 AliITSVertexer3D.cxx:889
 AliITSVertexer3D.cxx:890
 AliITSVertexer3D.cxx:891
 AliITSVertexer3D.cxx:892
 AliITSVertexer3D.cxx:893
 AliITSVertexer3D.cxx:894
 AliITSVertexer3D.cxx:895
 AliITSVertexer3D.cxx:896
 AliITSVertexer3D.cxx:897
 AliITSVertexer3D.cxx:898
 AliITSVertexer3D.cxx:899
 AliITSVertexer3D.cxx:900
 AliITSVertexer3D.cxx:901
 AliITSVertexer3D.cxx:902
 AliITSVertexer3D.cxx:903
 AliITSVertexer3D.cxx:904
 AliITSVertexer3D.cxx:905
 AliITSVertexer3D.cxx:906
 AliITSVertexer3D.cxx:907
 AliITSVertexer3D.cxx:908
 AliITSVertexer3D.cxx:909
 AliITSVertexer3D.cxx:910
 AliITSVertexer3D.cxx:911
 AliITSVertexer3D.cxx:912
 AliITSVertexer3D.cxx:913
 AliITSVertexer3D.cxx:914
 AliITSVertexer3D.cxx:915
 AliITSVertexer3D.cxx:916
 AliITSVertexer3D.cxx:917
 AliITSVertexer3D.cxx:918
 AliITSVertexer3D.cxx:919
 AliITSVertexer3D.cxx:920
 AliITSVertexer3D.cxx:921
 AliITSVertexer3D.cxx:922
 AliITSVertexer3D.cxx:923
 AliITSVertexer3D.cxx:924
 AliITSVertexer3D.cxx:925
 AliITSVertexer3D.cxx:926
 AliITSVertexer3D.cxx:927
 AliITSVertexer3D.cxx:928
 AliITSVertexer3D.cxx:929
 AliITSVertexer3D.cxx:930
 AliITSVertexer3D.cxx:931
 AliITSVertexer3D.cxx:932
 AliITSVertexer3D.cxx:933
 AliITSVertexer3D.cxx:934
 AliITSVertexer3D.cxx:935
 AliITSVertexer3D.cxx:936
 AliITSVertexer3D.cxx:937
 AliITSVertexer3D.cxx:938
 AliITSVertexer3D.cxx:939
 AliITSVertexer3D.cxx:940
 AliITSVertexer3D.cxx:941
 AliITSVertexer3D.cxx:942
 AliITSVertexer3D.cxx:943
 AliITSVertexer3D.cxx:944
 AliITSVertexer3D.cxx:945
 AliITSVertexer3D.cxx:946
 AliITSVertexer3D.cxx:947
 AliITSVertexer3D.cxx:948
 AliITSVertexer3D.cxx:949
 AliITSVertexer3D.cxx:950
 AliITSVertexer3D.cxx:951
 AliITSVertexer3D.cxx:952
 AliITSVertexer3D.cxx:953
 AliITSVertexer3D.cxx:954
 AliITSVertexer3D.cxx:955
 AliITSVertexer3D.cxx:956
 AliITSVertexer3D.cxx:957
 AliITSVertexer3D.cxx:958
 AliITSVertexer3D.cxx:959
 AliITSVertexer3D.cxx:960
 AliITSVertexer3D.cxx:961
 AliITSVertexer3D.cxx:962
 AliITSVertexer3D.cxx:963
 AliITSVertexer3D.cxx:964
 AliITSVertexer3D.cxx:965
 AliITSVertexer3D.cxx:966
 AliITSVertexer3D.cxx:967
 AliITSVertexer3D.cxx:968
 AliITSVertexer3D.cxx:969
 AliITSVertexer3D.cxx:970
 AliITSVertexer3D.cxx:971
 AliITSVertexer3D.cxx:972
 AliITSVertexer3D.cxx:973
 AliITSVertexer3D.cxx:974
 AliITSVertexer3D.cxx:975
 AliITSVertexer3D.cxx:976
 AliITSVertexer3D.cxx:977
 AliITSVertexer3D.cxx:978
 AliITSVertexer3D.cxx:979
 AliITSVertexer3D.cxx:980
 AliITSVertexer3D.cxx:981
 AliITSVertexer3D.cxx:982
 AliITSVertexer3D.cxx:983
 AliITSVertexer3D.cxx:984
 AliITSVertexer3D.cxx:985
 AliITSVertexer3D.cxx:986
 AliITSVertexer3D.cxx:987
 AliITSVertexer3D.cxx:988
 AliITSVertexer3D.cxx:989
 AliITSVertexer3D.cxx:990
 AliITSVertexer3D.cxx:991
 AliITSVertexer3D.cxx:992
 AliITSVertexer3D.cxx:993
 AliITSVertexer3D.cxx:994
 AliITSVertexer3D.cxx:995
 AliITSVertexer3D.cxx:996
 AliITSVertexer3D.cxx:997
 AliITSVertexer3D.cxx:998
 AliITSVertexer3D.cxx:999
 AliITSVertexer3D.cxx:1000
 AliITSVertexer3D.cxx:1001
 AliITSVertexer3D.cxx:1002
 AliITSVertexer3D.cxx:1003
 AliITSVertexer3D.cxx:1004
 AliITSVertexer3D.cxx:1005
 AliITSVertexer3D.cxx:1006
 AliITSVertexer3D.cxx:1007
 AliITSVertexer3D.cxx:1008
 AliITSVertexer3D.cxx:1009
 AliITSVertexer3D.cxx:1010
 AliITSVertexer3D.cxx:1011
 AliITSVertexer3D.cxx:1012
 AliITSVertexer3D.cxx:1013
 AliITSVertexer3D.cxx:1014
 AliITSVertexer3D.cxx:1015
 AliITSVertexer3D.cxx:1016
 AliITSVertexer3D.cxx:1017
 AliITSVertexer3D.cxx:1018
 AliITSVertexer3D.cxx:1019
 AliITSVertexer3D.cxx:1020
 AliITSVertexer3D.cxx:1021
 AliITSVertexer3D.cxx:1022
 AliITSVertexer3D.cxx:1023
 AliITSVertexer3D.cxx:1024
 AliITSVertexer3D.cxx:1025
 AliITSVertexer3D.cxx:1026
 AliITSVertexer3D.cxx:1027
 AliITSVertexer3D.cxx:1028
 AliITSVertexer3D.cxx:1029
 AliITSVertexer3D.cxx:1030
 AliITSVertexer3D.cxx:1031
 AliITSVertexer3D.cxx:1032
 AliITSVertexer3D.cxx:1033
 AliITSVertexer3D.cxx:1034
 AliITSVertexer3D.cxx:1035
 AliITSVertexer3D.cxx:1036
 AliITSVertexer3D.cxx:1037
 AliITSVertexer3D.cxx:1038
 AliITSVertexer3D.cxx:1039
 AliITSVertexer3D.cxx:1040
 AliITSVertexer3D.cxx:1041
 AliITSVertexer3D.cxx:1042
 AliITSVertexer3D.cxx:1043
 AliITSVertexer3D.cxx:1044
 AliITSVertexer3D.cxx:1045
 AliITSVertexer3D.cxx:1046
 AliITSVertexer3D.cxx:1047
 AliITSVertexer3D.cxx:1048
 AliITSVertexer3D.cxx:1049
 AliITSVertexer3D.cxx:1050
 AliITSVertexer3D.cxx:1051
 AliITSVertexer3D.cxx:1052
 AliITSVertexer3D.cxx:1053
 AliITSVertexer3D.cxx:1054
 AliITSVertexer3D.cxx:1055
 AliITSVertexer3D.cxx:1056
 AliITSVertexer3D.cxx:1057
 AliITSVertexer3D.cxx:1058
 AliITSVertexer3D.cxx:1059
 AliITSVertexer3D.cxx:1060
 AliITSVertexer3D.cxx:1061
 AliITSVertexer3D.cxx:1062
 AliITSVertexer3D.cxx:1063
 AliITSVertexer3D.cxx:1064
 AliITSVertexer3D.cxx:1065
 AliITSVertexer3D.cxx:1066
 AliITSVertexer3D.cxx:1067
 AliITSVertexer3D.cxx:1068
 AliITSVertexer3D.cxx:1069
 AliITSVertexer3D.cxx:1070
 AliITSVertexer3D.cxx:1071
 AliITSVertexer3D.cxx:1072
 AliITSVertexer3D.cxx:1073
 AliITSVertexer3D.cxx:1074
 AliITSVertexer3D.cxx:1075
 AliITSVertexer3D.cxx:1076
 AliITSVertexer3D.cxx:1077
 AliITSVertexer3D.cxx:1078
 AliITSVertexer3D.cxx:1079
 AliITSVertexer3D.cxx:1080
 AliITSVertexer3D.cxx:1081
 AliITSVertexer3D.cxx:1082
 AliITSVertexer3D.cxx:1083
 AliITSVertexer3D.cxx:1084
 AliITSVertexer3D.cxx:1085
 AliITSVertexer3D.cxx:1086
 AliITSVertexer3D.cxx:1087
 AliITSVertexer3D.cxx:1088
 AliITSVertexer3D.cxx:1089
 AliITSVertexer3D.cxx:1090
 AliITSVertexer3D.cxx:1091
 AliITSVertexer3D.cxx:1092
 AliITSVertexer3D.cxx:1093
 AliITSVertexer3D.cxx:1094
 AliITSVertexer3D.cxx:1095
 AliITSVertexer3D.cxx:1096
 AliITSVertexer3D.cxx:1097
 AliITSVertexer3D.cxx:1098
 AliITSVertexer3D.cxx:1099
 AliITSVertexer3D.cxx:1100
 AliITSVertexer3D.cxx:1101
 AliITSVertexer3D.cxx:1102
 AliITSVertexer3D.cxx:1103
 AliITSVertexer3D.cxx:1104
 AliITSVertexer3D.cxx:1105
 AliITSVertexer3D.cxx:1106
 AliITSVertexer3D.cxx:1107
 AliITSVertexer3D.cxx:1108
 AliITSVertexer3D.cxx:1109
 AliITSVertexer3D.cxx:1110
 AliITSVertexer3D.cxx:1111
 AliITSVertexer3D.cxx:1112
 AliITSVertexer3D.cxx:1113
 AliITSVertexer3D.cxx:1114
 AliITSVertexer3D.cxx:1115
 AliITSVertexer3D.cxx:1116
 AliITSVertexer3D.cxx:1117
 AliITSVertexer3D.cxx:1118
 AliITSVertexer3D.cxx:1119
 AliITSVertexer3D.cxx:1120
 AliITSVertexer3D.cxx:1121
 AliITSVertexer3D.cxx:1122
 AliITSVertexer3D.cxx:1123
 AliITSVertexer3D.cxx:1124
 AliITSVertexer3D.cxx:1125
 AliITSVertexer3D.cxx:1126
 AliITSVertexer3D.cxx:1127
 AliITSVertexer3D.cxx:1128
 AliITSVertexer3D.cxx:1129
 AliITSVertexer3D.cxx:1130
 AliITSVertexer3D.cxx:1131
 AliITSVertexer3D.cxx:1132
 AliITSVertexer3D.cxx:1133
 AliITSVertexer3D.cxx:1134
 AliITSVertexer3D.cxx:1135
 AliITSVertexer3D.cxx:1136
 AliITSVertexer3D.cxx:1137
 AliITSVertexer3D.cxx:1138
 AliITSVertexer3D.cxx:1139
 AliITSVertexer3D.cxx:1140
 AliITSVertexer3D.cxx:1141
 AliITSVertexer3D.cxx:1142
 AliITSVertexer3D.cxx:1143
 AliITSVertexer3D.cxx:1144
 AliITSVertexer3D.cxx:1145
 AliITSVertexer3D.cxx:1146
 AliITSVertexer3D.cxx:1147
 AliITSVertexer3D.cxx:1148
 AliITSVertexer3D.cxx:1149
 AliITSVertexer3D.cxx:1150
 AliITSVertexer3D.cxx:1151
 AliITSVertexer3D.cxx:1152
 AliITSVertexer3D.cxx:1153
 AliITSVertexer3D.cxx:1154
 AliITSVertexer3D.cxx:1155
 AliITSVertexer3D.cxx:1156
 AliITSVertexer3D.cxx:1157
 AliITSVertexer3D.cxx:1158
 AliITSVertexer3D.cxx:1159
 AliITSVertexer3D.cxx:1160
 AliITSVertexer3D.cxx:1161
 AliITSVertexer3D.cxx:1162
 AliITSVertexer3D.cxx:1163
 AliITSVertexer3D.cxx:1164
 AliITSVertexer3D.cxx:1165
 AliITSVertexer3D.cxx:1166
 AliITSVertexer3D.cxx:1167
 AliITSVertexer3D.cxx:1168
 AliITSVertexer3D.cxx:1169
 AliITSVertexer3D.cxx:1170
 AliITSVertexer3D.cxx:1171
 AliITSVertexer3D.cxx:1172
 AliITSVertexer3D.cxx:1173
 AliITSVertexer3D.cxx:1174
 AliITSVertexer3D.cxx:1175
 AliITSVertexer3D.cxx:1176
 AliITSVertexer3D.cxx:1177
 AliITSVertexer3D.cxx:1178
 AliITSVertexer3D.cxx:1179
 AliITSVertexer3D.cxx:1180
 AliITSVertexer3D.cxx:1181
 AliITSVertexer3D.cxx:1182
 AliITSVertexer3D.cxx:1183
 AliITSVertexer3D.cxx:1184
 AliITSVertexer3D.cxx:1185
 AliITSVertexer3D.cxx:1186
 AliITSVertexer3D.cxx:1187
 AliITSVertexer3D.cxx:1188
 AliITSVertexer3D.cxx:1189
 AliITSVertexer3D.cxx:1190
 AliITSVertexer3D.cxx:1191
 AliITSVertexer3D.cxx:1192
 AliITSVertexer3D.cxx:1193
 AliITSVertexer3D.cxx:1194
 AliITSVertexer3D.cxx:1195
 AliITSVertexer3D.cxx:1196
 AliITSVertexer3D.cxx:1197
 AliITSVertexer3D.cxx:1198
 AliITSVertexer3D.cxx:1199
 AliITSVertexer3D.cxx:1200
 AliITSVertexer3D.cxx:1201
 AliITSVertexer3D.cxx:1202
 AliITSVertexer3D.cxx:1203
 AliITSVertexer3D.cxx:1204
 AliITSVertexer3D.cxx:1205
 AliITSVertexer3D.cxx:1206
 AliITSVertexer3D.cxx:1207
 AliITSVertexer3D.cxx:1208
 AliITSVertexer3D.cxx:1209
 AliITSVertexer3D.cxx:1210
 AliITSVertexer3D.cxx:1211
 AliITSVertexer3D.cxx:1212
 AliITSVertexer3D.cxx:1213
 AliITSVertexer3D.cxx:1214
 AliITSVertexer3D.cxx:1215
 AliITSVertexer3D.cxx:1216
 AliITSVertexer3D.cxx:1217
 AliITSVertexer3D.cxx:1218
 AliITSVertexer3D.cxx:1219
 AliITSVertexer3D.cxx:1220
 AliITSVertexer3D.cxx:1221
 AliITSVertexer3D.cxx:1222
 AliITSVertexer3D.cxx:1223
 AliITSVertexer3D.cxx:1224
 AliITSVertexer3D.cxx:1225
 AliITSVertexer3D.cxx:1226
 AliITSVertexer3D.cxx:1227
 AliITSVertexer3D.cxx:1228
 AliITSVertexer3D.cxx:1229
 AliITSVertexer3D.cxx:1230
 AliITSVertexer3D.cxx:1231
 AliITSVertexer3D.cxx:1232
 AliITSVertexer3D.cxx:1233
 AliITSVertexer3D.cxx:1234
 AliITSVertexer3D.cxx:1235
 AliITSVertexer3D.cxx:1236
 AliITSVertexer3D.cxx:1237
 AliITSVertexer3D.cxx:1238
 AliITSVertexer3D.cxx:1239
 AliITSVertexer3D.cxx:1240
 AliITSVertexer3D.cxx:1241
 AliITSVertexer3D.cxx:1242
 AliITSVertexer3D.cxx:1243
 AliITSVertexer3D.cxx:1244
 AliITSVertexer3D.cxx:1245
 AliITSVertexer3D.cxx:1246
 AliITSVertexer3D.cxx:1247
 AliITSVertexer3D.cxx:1248
 AliITSVertexer3D.cxx:1249
 AliITSVertexer3D.cxx:1250
 AliITSVertexer3D.cxx:1251
 AliITSVertexer3D.cxx:1252
 AliITSVertexer3D.cxx:1253
 AliITSVertexer3D.cxx:1254
 AliITSVertexer3D.cxx:1255
 AliITSVertexer3D.cxx:1256
 AliITSVertexer3D.cxx:1257
 AliITSVertexer3D.cxx:1258
 AliITSVertexer3D.cxx:1259
 AliITSVertexer3D.cxx:1260
 AliITSVertexer3D.cxx:1261
 AliITSVertexer3D.cxx:1262
 AliITSVertexer3D.cxx:1263
 AliITSVertexer3D.cxx:1264
 AliITSVertexer3D.cxx:1265
 AliITSVertexer3D.cxx:1266
 AliITSVertexer3D.cxx:1267
 AliITSVertexer3D.cxx:1268
 AliITSVertexer3D.cxx:1269
 AliITSVertexer3D.cxx:1270
 AliITSVertexer3D.cxx:1271
 AliITSVertexer3D.cxx:1272
 AliITSVertexer3D.cxx:1273
 AliITSVertexer3D.cxx:1274
 AliITSVertexer3D.cxx:1275
 AliITSVertexer3D.cxx:1276
 AliITSVertexer3D.cxx:1277
 AliITSVertexer3D.cxx:1278
 AliITSVertexer3D.cxx:1279
 AliITSVertexer3D.cxx:1280
 AliITSVertexer3D.cxx:1281
 AliITSVertexer3D.cxx:1282
 AliITSVertexer3D.cxx:1283
 AliITSVertexer3D.cxx:1284
 AliITSVertexer3D.cxx:1285
 AliITSVertexer3D.cxx:1286
 AliITSVertexer3D.cxx:1287
 AliITSVertexer3D.cxx:1288
 AliITSVertexer3D.cxx:1289
 AliITSVertexer3D.cxx:1290
 AliITSVertexer3D.cxx:1291
 AliITSVertexer3D.cxx:1292
 AliITSVertexer3D.cxx:1293
 AliITSVertexer3D.cxx:1294
 AliITSVertexer3D.cxx:1295
 AliITSVertexer3D.cxx:1296
 AliITSVertexer3D.cxx:1297
 AliITSVertexer3D.cxx:1298
 AliITSVertexer3D.cxx:1299
 AliITSVertexer3D.cxx:1300
 AliITSVertexer3D.cxx:1301
 AliITSVertexer3D.cxx:1302
 AliITSVertexer3D.cxx:1303
 AliITSVertexer3D.cxx:1304
 AliITSVertexer3D.cxx:1305
 AliITSVertexer3D.cxx:1306
 AliITSVertexer3D.cxx:1307
 AliITSVertexer3D.cxx:1308
 AliITSVertexer3D.cxx:1309
 AliITSVertexer3D.cxx:1310
 AliITSVertexer3D.cxx:1311
 AliITSVertexer3D.cxx:1312
 AliITSVertexer3D.cxx:1313
 AliITSVertexer3D.cxx:1314
 AliITSVertexer3D.cxx:1315
 AliITSVertexer3D.cxx:1316
 AliITSVertexer3D.cxx:1317
 AliITSVertexer3D.cxx:1318
 AliITSVertexer3D.cxx:1319
 AliITSVertexer3D.cxx:1320
 AliITSVertexer3D.cxx:1321
 AliITSVertexer3D.cxx:1322
 AliITSVertexer3D.cxx:1323
 AliITSVertexer3D.cxx:1324
 AliITSVertexer3D.cxx:1325
 AliITSVertexer3D.cxx:1326
 AliITSVertexer3D.cxx:1327
 AliITSVertexer3D.cxx:1328
 AliITSVertexer3D.cxx:1329
 AliITSVertexer3D.cxx:1330
 AliITSVertexer3D.cxx:1331
 AliITSVertexer3D.cxx:1332
 AliITSVertexer3D.cxx:1333
 AliITSVertexer3D.cxx:1334
 AliITSVertexer3D.cxx:1335
 AliITSVertexer3D.cxx:1336
 AliITSVertexer3D.cxx:1337
 AliITSVertexer3D.cxx:1338
 AliITSVertexer3D.cxx:1339
 AliITSVertexer3D.cxx:1340
 AliITSVertexer3D.cxx:1341
 AliITSVertexer3D.cxx:1342
 AliITSVertexer3D.cxx:1343
 AliITSVertexer3D.cxx:1344
 AliITSVertexer3D.cxx:1345
 AliITSVertexer3D.cxx:1346
 AliITSVertexer3D.cxx:1347
 AliITSVertexer3D.cxx:1348
 AliITSVertexer3D.cxx:1349
 AliITSVertexer3D.cxx:1350
 AliITSVertexer3D.cxx:1351
 AliITSVertexer3D.cxx:1352
 AliITSVertexer3D.cxx:1353
 AliITSVertexer3D.cxx:1354
 AliITSVertexer3D.cxx:1355
 AliITSVertexer3D.cxx:1356
 AliITSVertexer3D.cxx:1357
 AliITSVertexer3D.cxx:1358
 AliITSVertexer3D.cxx:1359
 AliITSVertexer3D.cxx:1360
 AliITSVertexer3D.cxx:1361
 AliITSVertexer3D.cxx:1362
 AliITSVertexer3D.cxx:1363
 AliITSVertexer3D.cxx:1364
 AliITSVertexer3D.cxx:1365
 AliITSVertexer3D.cxx:1366
 AliITSVertexer3D.cxx:1367
 AliITSVertexer3D.cxx:1368
 AliITSVertexer3D.cxx:1369
 AliITSVertexer3D.cxx:1370
 AliITSVertexer3D.cxx:1371
 AliITSVertexer3D.cxx:1372
 AliITSVertexer3D.cxx:1373
 AliITSVertexer3D.cxx:1374
 AliITSVertexer3D.cxx:1375
 AliITSVertexer3D.cxx:1376