ROOT logo
#include <Riostream.h>
#include <TBranch.h>
#include <TClonesArray.h>
#include <TMath.h>
#include <TString.h>
#include <TTree.h>
#include "AliESDVertex.h"
#include "AliITSUClusterLines.h"
#include "AliITSUClusterPix.h"
#include "AliITSUVertexer.h"
#include "AliLog.h"
#include "AliStrLine.h"
#include "AliVertexerTracks.h"

using TMath::Abs;
using TMath::Sqrt;
using TMath::ATan2;
using TMath::TwoPi;
using TMath::BubbleLow;

using std::cout;
using std::endl;

//////////////////////////////////////////////////////////////////////
// This class is used to compute the position of all the primary    // 
// vertices in a single event using the upgraded ITS.               //
// Optimizations ongoing.                                           //
// Origin puccio@to.infn.it  Feb. 20 2014                           //
//////////////////////////////////////////////////////////////////////

//_____________________________________________________________________________________________
AliITSUVertexer::AliITSUVertexer(Double_t phicut, Double_t zcut, Double_t paircut,Double_t clcut, Int_t cclcut) : AliVertexer(),
														  fClusterContribCut(cclcut),
														  fClusterCut(clcut),
														  fClusterIndex(),
														  fClusterPhi(),
														  fClusters(),
														  fLines("AliStrLine",1000),
														  fLinesClusters("AliITSUClusterLines.h",1000),
														  fLinesPhi(0),
														  fNoClusters(0),
														  fNoLines(0),
														  fNoVertices(0),
														  fPairCut(paircut),
														  fPhiCut(phicut),
														  fZCut(zcut),
														  fUsedClusters(),
														  fUsedLines(),
														  fVertices(NULL) 
#ifdef MC_CHECK 
,fGoodLines(0),fGoodLinesPhi(0),fParticleId(0)
#endif
{
  // Standard I/O constructor
}

//_____________________________________________________________________________________________
AliITSUVertexer::~AliITSUVertexer() {
  // Destructor
  Reset();
}

//_____________________________________________________________________________________________
void AliITSUVertexer::FindVerticesForCurrentEvent() {
  // Try to find all the primary vertices in the current 
  fNoVertices=0;
  FindTracklets();
  if(fNoLines<2) { 
    //fVertices.push_back(AliESDVertex());
    return;// AliESDVertex();
  }
  
  //  fVertices.push_back(AliVertexerTracks::TrackletVertexFinder(&fLines,1));
  //fNoVertices=1;
  fUsedLines=new Short_t[fNoLines];
  for(UInt_t i=0;i<fNoLines;++i) fUsedLines[i]=-1;
  
  fNoClusters=0;
  for(UInt_t i1=0;i1<fNoLines;++i1) {
    if(fUsedLines[i1]!=-1) continue;
    AliStrLine* line1 = (AliStrLine*)fLines.At(i1);
    for(UInt_t i2=i1+1;i2<fNoLines;++i2) {
      if(fUsedLines[i2]!=-1) continue;
      AliStrLine* line2 = (AliStrLine*)fLines.At(i2);
      if(line1->GetDCA(line2)<=fPairCut) {
	//cout << fNoClusters <<" " << i1 << " " << i2 << " ";
	new(fLinesClusters[fNoClusters])AliITSUClusterLines(i1,line1,i2,line2);
	AliITSUClusterLines* current=(AliITSUClusterLines*)fLinesClusters.At(fNoClusters);
	Double_t p[3];
	current->GetVertex(p);
	if((p[0]*p[0]+p[1]*p[1])>=4) { // Beam pipe check
	  fLinesClusters.RemoveAt(fNoClusters);
	  fLinesClusters.Compress();
	  break;
	}
	fUsedLines[i1]=fNoClusters;
	fUsedLines[i2]=fNoClusters;
	for(UInt_t i3=0;i3<fNoLines;++i3) {
	  if(fUsedLines[i3]!=-1) continue;
	  AliStrLine *line3 = (AliStrLine*)fLines.At(i3);
	  //cout << p[0] << " " << p[1] << " " << p[2] << endl;
	  //line3->PrintStatus();
	  if(line3->GetDistFromPoint(p)<=fPairCut) {
	    //cout << i3 << " ";
	    current->Add(i3,line3);
	    fUsedLines[i3]=fNoClusters;
	    current->GetVertex(p);
	  }
	}
	++fNoClusters;
	//cout << endl;
	break;
      }
    }
  }
  
  fLinesClusters.Sort();

  for(UInt_t i0=0;i0<fNoClusters; ++i0) {
    Double_t p0[3],p1[3];
    AliITSUClusterLines *clu0 = (AliITSUClusterLines*)fLinesClusters.At(i0);
    clu0->GetVertex(p0);
    for(UInt_t i1=i0+1;i1<fNoClusters; ++i1) {
      AliITSUClusterLines *clu1 = (AliITSUClusterLines*)fLinesClusters.At(i1);
      clu1->GetVertex(p1);
      if (TMath::Abs(p0[2]-p1[2])<=fClusterCut) {
	Double_t distance=(p0[0]-p1[0])*(p0[0]-p1[0])+(p0[1]-p1[1])*(p0[1]-p1[1])+(p0[2]-p1[2])*(p0[2]-p1[2]);
	//Bool_t flag=kFALSE;
	if(distance<=fPairCut*fPairCut) {
	  UInt_t n=0;
	  Int_t *labels=clu1->GetLabels(n);
	  for(UInt_t icl=0; icl<n; ++icl) clu0->Add(labels[icl],(AliStrLine*)fLines.At(labels[icl]));
	  clu0->GetVertex(p0);
	  //flag=kTRUE;
	}
	fLinesClusters.RemoveAt(i1);
	fLinesClusters.Compress();
	fNoClusters--;
	i1--;
	//if(flag) i1=10;
      }
    }
  }

  fVertices=new AliESDVertex[fNoClusters];
  for(UInt_t i0=0; i0<fNoClusters; ++i0) {
    AliITSUClusterLines *clu0 = (AliITSUClusterLines*)fLinesClusters.At(i0);
    Int_t size=clu0->GetSize();
    if(size<fClusterContribCut&&fNoClusters>1) {
      fLinesClusters.RemoveAt(i0);
      fLinesClusters.Compress();
      fNoClusters--;
      continue;
    } 
    Double_t p0[3],cov[6];
    clu0->GetVertex(p0);
    clu0->GetCovMatrix(cov);
    if((p0[0]*p0[0]+p0[1]*p0[1])<1.98*1.98) {
      fVertices[fNoVertices++]=AliESDVertex(p0,cov,99999.,size);   
    }
  }
  
  return;// AliVertexerTracks::TrackletVertexFinder(&fLines,0);
}

//______________________________________________________________________
AliESDVertex* AliITSUVertexer::FindVertexForCurrentEvent(TTree *cluTree)
{
// Reconstruction of all the primary vertices in the event. It returns the vertex with the highest number of contributors.  
  Reset();
  for(Int_t i=0;i<3;++i) {
    TBranch* br = cluTree->GetBranch(Form("ITSRecPoints%d",i));
    if (!br) return NULL;
    br->SetAddress(&fClusters[i]);
  }    
  cluTree->GetEntry(0);
  
  SortClusters();

  FindVerticesForCurrentEvent();
  if(fNoVertices<1) return NULL;
  return new AliESDVertex(fVertices[0]);
}  

//_____________________________________________________________________________________________
Int_t AliITSUVertexer::MatchPoints(UShort_t layer, Double_t anchor, Double_t *p0, Double_t *p1) {
  // Method for matching clusters with similar phi and z inside the range [zmin,zmax]
  AliDebug(3,Form("Matching points on layer %i...\n",layer));

  Double_t xyz[3][3];        // {{0: 'min', 1: 'mid', 2: 'max'},{0: 'x', 1: 'y', 2: 'z'}}
  AliITSUClusterPix* cl[3];  // {0: 'min', 1: 'mid', 2: 'max'}
  Double_t phi[3];           // {0: 'min', 1: 'mid', 2: 'max'}

  Int_t nocl=fClusters[layer]->GetEntriesFast();
  Int_t imin=0,imax=nocl!=0 ? nocl-1 : nocl,imid=(imax+imin)/2;

  Double_t a=0,b=0,c=0;
  if(layer==2) {
    a=(p0[0]-p1[0])*(p0[0]-p1[0])+(p0[1]-p1[1])*(p0[1]-p1[1]);
    b=(p1[0]-p0[0])*p0[0]+(p1[1]-p0[1])*p0[1];
    c=p0[0]*p0[0]+p0[1]*p0[1];
  }

  Int_t flag=-1;

  while (imax > imin) {
    while(fUsedClusters[layer][fClusterIndex[layer][imin]]==kTRUE&&imin<imax) ++imin;
    while(fUsedClusters[layer][fClusterIndex[layer][imax]]==kTRUE&&imax>0) --imax;
    if(imax<imin) return -1;    
    
    cl[0] = (AliITSUClusterPix*)fClusters[layer]->At(fClusterIndex[layer][imin]);
    cl[0]->GetGlobalXYZ(xyz[0]);
    phi[0] = fClusterPhi[layer][fClusterIndex[layer][imin]];
    AliDebug(4,Form("Cluster min: %i, %i, %f, %i\n",imin,cl[0]->GetLabel(0),phi[0]-anchor,fUsedClusters[layer][fClusterIndex[layer][imin]]));
    if((Abs(phi[0]-anchor)<=fPhiCut||Abs(Abs(phi[0]-anchor)-TMath::TwoPi())<=fPhiCut)) {
      AliDebug(4,Form("Ok min: %i \n",imin));
      if(layer==2) {
	if(fUsedClusters[layer][fClusterIndex[layer][imin]]) {
	  flag=1;
	  break;
	}
	c-=(xyz[0][0]*xyz[0][0]+xyz[0][1]*xyz[0][1]);
	Double_t z=p0[2]+(p1[2]-p0[2])*(-b+Sqrt(b*b-a*c))/a;
	Double_t zmin=z-fZCut,zmax=z+fZCut;
	if(zmin<=xyz[0][2]&&xyz[0][2]<=zmax) {
	  AliDebug(4,Form("Ok Z: %i \n",imin));
	  return fClusterIndex[layer][imin];
	}
	AliDebug(4,Form("No Z match: %i \n",imin));
	c=p0[0]*p0[0]+p0[1]*p0[1];
	flag=1;
	break;
      } else if(!fUsedClusters[layer][fClusterIndex[layer][imin]]) return fClusterIndex[layer][imin];
    }
    
    cl[2] = (AliITSUClusterPix*)fClusters[layer]->At(fClusterIndex[layer][imax]);
    cl[2]->GetGlobalXYZ(xyz[2]);
    phi[2] = fClusterPhi[layer][fClusterIndex[layer][imax]];
    AliDebug(4,Form("Cluster max: %i, %i, %f, %i\n",imax,cl[2]->GetLabel(0),phi[2]-anchor,fUsedClusters[layer][fClusterIndex[layer][imax]]));
    if((Abs(phi[2]-anchor)<=fPhiCut||Abs(Abs(phi[2]-anchor)-TMath::TwoPi())<=fPhiCut)) {
      AliDebug(4,Form("Ok max: %i \n",imax));
      if(layer==2) {
	if(fUsedClusters[layer][fClusterIndex[layer][imax]]) {
	  flag=3;
	  break;
	}
	c-=(xyz[2][0]*xyz[2][0]+xyz[2][1]*xyz[2][1]);
	Double_t z=p0[2]+(p1[2]-p0[2])*(-b+Sqrt(b*b-a*c))/a;
	Double_t zmin=z-fZCut,zmax=z+fZCut;
	if(zmin<=xyz[2][2]&&xyz[2][2]<=zmax) {
	  AliDebug(4,Form("Ok Z: %i \n",imax));
	  return fClusterIndex[layer][imax];
	}
	c=p0[0]*p0[0]+p0[1]*p0[1];
	AliDebug(4,Form("No Z match: %i \n",imax));
	flag=3;
	break;
      } else if(!fUsedClusters[layer][fClusterIndex[layer][imax]]) return fClusterIndex[layer][imax];
    }
    
    imid=(imax+imin)/2;
    if(imid==imin) return -1;
    Int_t step=1,sign=-1;
    while(fUsedClusters[layer][fClusterIndex[layer][imid]]) {
      imid=imid+step;
      sign*=-1;
      step=(step+sign)*(-1);
      if(imid>=imax||imid<=imin) return -1;
    }
    
    cl[1] = (AliITSUClusterPix*)fClusters[layer]->At(fClusterIndex[layer][imid]);
    cl[1]->GetGlobalXYZ(xyz[1]);
    phi[1] = fClusterPhi[layer][fClusterIndex[layer][imid]];
    AliDebug(4,Form("Cluster mid: %i, %i, %f, %i \n",imid,cl[1]->GetLabel(0),phi[1]-anchor,fUsedClusters[layer][fClusterIndex[layer][imid]]));
    //cout << imin << " " << imid << " " << imax << endl;
    //cout << fClusterIndex[layer][imid] << endl;
    if((Abs(phi[1]-anchor)<=fPhiCut||Abs(Abs(phi[1]-anchor)-TMath::TwoPi())<=fPhiCut)) {
      AliDebug(4,Form("Ok mid: %i \n",imid));
      if(layer==2) {
	c-=(xyz[1][0]*xyz[1][0]+xyz[1][1]*xyz[1][1]);
	Double_t z=p0[2]+(p1[2]-p0[2])*(-b+Sqrt(b*b-a*c))/a;
	Double_t zmin=z-fZCut,zmax=z+fZCut;
	if(zmin<=xyz[1][2]&&xyz[1][2]<=zmax) {
	  AliDebug(4,Form("Ok Z: %i \n",imid));
	  return fClusterIndex[layer][imid];
	}
	AliDebug(4,Form("No Z match: %i \n",imid));
	c=p0[0]*p0[0]+p0[1]*p0[1];
	flag=2;
	break;
      } else if(!fUsedClusters[layer][fClusterIndex[layer][imid]]) return fClusterIndex[layer][imid];
    }
    
    // determine which subarray to search
    if (phi[1] < anchor) {
      // change min index to search upper subarray
      AliDebug(4,"Case minor\n");
      imin = imid + 1;
      --imax;
    } else if (phi[1] > anchor) {
      AliDebug(4,"Case greater\n");
      // change max index to search lower subarray
      ++imin;
      imax = imid - 1;
    } else if(!fUsedClusters[layer][fClusterIndex[layer][imid]]) {
      return fClusterIndex[layer][imid];
    } else return -1;
  }

  if(flag>-1) {
    AliDebug(4,"Flag issued, starting forward backward check\n");
    Int_t start=imid;
    switch(flag) {
    case 1:
      start=imin;
      break;
    case 2:
      start=imid;
      break;
    case 3:
      start=imax;
      break;
    }
   
    Int_t curr=start-1;
    Bool_t lap=kFALSE;
    while(1){
      if(curr==-1&&!lap) {
	lap=kTRUE;
	curr=nocl-1;
      } else if(lap) break;
      cl[0] = (AliITSUClusterPix*)fClusters[layer]->At(fClusterIndex[layer][curr]);
      cl[0]->GetGlobalXYZ(xyz[0]);
      phi[0] = fClusterPhi[layer][fClusterIndex[layer][curr]];
      AliDebug(4,Form("Looking backward: %i, %i, %f, %i\n",curr,cl[0]->GetLabel(0),phi[0]-anchor,fUsedClusters[layer][fClusterIndex[layer][curr]]));
      if(!(Abs(phi[0]-anchor)<=fPhiCut||Abs(Abs(phi[0]-anchor)-TMath::TwoPi())<=fPhiCut)) break;
      if(fUsedClusters[layer][fClusterIndex[layer][curr]]) {
	curr--;
	continue;
      }
      
      AliDebug(4,Form("Ok backward: %i \n",curr));
      
      c-=(xyz[0][0]*xyz[0][0]+xyz[0][1]*xyz[0][1]);
      Double_t z=p0[2]+(p1[2]-p0[2])*(-b+Sqrt(b*b-a*c))/a;
      Double_t zmin=z-fZCut,zmax=z+fZCut;
      if(zmin<=xyz[0][2]&&xyz[0][2]<=zmax) {
	AliDebug(4,Form("Ok Z: %i \n",curr));
	return fClusterIndex[layer][curr];
      }
      AliDebug(4,Form("No Z match: %i \n",curr));
      c=p0[0]*p0[0]+p0[1]*p0[1];
      curr--;
    }
    
    lap=kFALSE;
    curr=start+1;
    while(1){
      if(curr==nocl&&!lap) {
	curr=0;
	lap=kTRUE;
      } else if(lap) break;
      cl[0] = (AliITSUClusterPix*)fClusters[layer]->At(fClusterIndex[layer][curr]);
      cl[0]->GetGlobalXYZ(xyz[0]);
      phi[0] = fClusterPhi[layer][fClusterIndex[layer][curr]];
      AliDebug(4,Form("Looking forward: %i, %i, %f, %i\n",curr,cl[0]->GetLabel(0),phi[0]-anchor,fUsedClusters[layer][fClusterIndex[layer][curr]]));
      if(!(Abs(phi[0]-anchor)<=fPhiCut||Abs(Abs(phi[0]-anchor)-TMath::TwoPi())<=fPhiCut)) break;
      if(fUsedClusters[layer][fClusterIndex[layer][curr]]) {
	curr++;
	continue;
      }
      AliDebug(4,Form("Ok forward: %i \n",curr));
      c-=(xyz[0][0]*xyz[0][0]+xyz[0][1]*xyz[0][1]);
      Double_t z=p0[2]+(p1[2]-p0[2])*(-b+Sqrt(b*b-a*c))/a;
      Double_t zmin=z-fZCut,zmax=z+fZCut;
      if(zmin<=xyz[0][2]&&xyz[0][2]<=zmax) {
	AliDebug(4,Form("Ok Z: %i \n",curr));
	return fClusterIndex[layer][curr];
      }
      AliDebug(4,Form("No Z match: %i \n",curr));
      c=p0[0]*p0[0]+p0[1]*p0[1];
      curr++;
    }
  }
  
  if(imax==imin&&imax!=0) {
    cl[0] = (AliITSUClusterPix*)fClusters[layer]->At(fClusterIndex[layer][imin]);
    cl[0]->GetGlobalXYZ(xyz[0]);
    phi[0] = fClusterPhi[layer][fClusterIndex[layer][imin]];
    AliDebug(4,Form("Cluster eq: %i, %i, %f, %i\n",imin,cl[0]->GetLabel(0),phi[0]-anchor,fUsedClusters[layer][fClusterIndex[layer][imin]]));
    if((Abs(phi[0]-anchor)<=fPhiCut||Abs(Abs(phi[0]-anchor)-TMath::TwoPi())<=fPhiCut)&&!fUsedClusters[layer][fClusterIndex[layer][imin]]) {
      AliDebug(4,Form("Ok eq: %i \n",imin));
      if(layer==2) {
        c-=(xyz[0][0]*xyz[0][0]+xyz[0][1]*xyz[0][1]);
        Double_t z=p0[2]+(p1[2]-p0[2])*(-b+Sqrt(b*b-a*c))/a;
        Double_t zmin=z-fZCut,zmax=z+fZCut;
        if(zmin<=xyz[0][2]&&xyz[0][2]<=zmax) {
	  AliDebug(4,Form("Ok Z eq: %i \n",imin));
	  return fClusterIndex[layer][imin];
	}	
	AliDebug(4,Form("No Z eq: %i \n",imin));
	c=p0[0]*p0[0]+p0[1]*p0[1];
      } else return fClusterIndex[layer][imin];
    }
  }
  // no match found :(
  return -1;

}

//_____________________________________________________________________________________________
void AliITSUVertexer::PrintStatus() const {
  // Prints all the cuts and important data members for the current status
  cout << "Cut on phi: " << fPhiCut << endl;
  cout << "Cut on z: " << fZCut << endl;
}

//_____________________________________________________________________________________________
void AliITSUVertexer::Reset() {
  // Resets the vertexer for a new event (or for its destruction) 
  AliDebug(2,"Resetting the vertexer...\n");
  fNoVertices=0;
  for(Int_t i=0;i<3;++i) {
    delete[] fUsedClusters[i];
    delete[] fClusterIndex[i];
    delete[] fClusterPhi[i];
  }
  if(fNoLines>2) {
    delete []fUsedLines;
  }

  delete[] fVertices;

  fLinesPhi=0;
  fLines.Clear();
  fLinesClusters.Clear();
  
  #ifdef MC_CHECK
  fGoodLines=0;
  fGoodLinesPhi=0;
  delete[] fParticleId;
  #endif

  //delete fVertices;
}

//_____________________________________________________________________________________________
void AliITSUVertexer::FindTracklets() {
  // It combines recpoints over the first three layers to define a list of tracklets
  // Here it uses the ordered list of points. Second and third layers are ordered using phi
  AliDebug(2,"Calling the trackleter...\n");

  UInt_t noPntL[3]; 
  for(UShort_t i=0;i<3;++i) {
    noPntL[i]=fClusters[i]->GetEntries();
    fUsedClusters[i]=new Bool_t[noPntL[i]];
    for(UInt_t ii=0;ii<noPntL[i];++ii) fUsedClusters[i][ii]=kFALSE;
  }
  
  #ifdef MC_CHECK
  fParticleId=new UInt_t[noPntL[0]];
  #endif

  fNoLines=0;
  UInt_t nolinesphi=0;
  Double_t p0[3],p1[3],pp2[3];
  for(UInt_t i0=0;i0<noPntL[0];++i0) {
    if(fUsedClusters[0][i0]) continue;
    AliITSUClusterPix* cluster0=(AliITSUClusterPix*)fClusters[0]->At(i0);
    cluster0->GetGlobalXYZ(p0);
    vector<Int_t> tmp;
    Int_t i1=0;
    Int_t label0=cluster0->GetLabel(0);  
    AliDebug(4,Form("Layer 0: %i\n",label0));
    while(i1>=0) {
      i1 = MatchPoints(1,fClusterPhi[0][i0]);
      if(i1<0) break;
      
      ++nolinesphi;
      AliITSUClusterPix* cluster1=(AliITSUClusterPix*)fClusters[1]->At(i1);
      cluster1->GetGlobalXYZ(p1);
      tmp.push_back(i1);
      fUsedClusters[1][i1]=kTRUE;

      Int_t i2 = MatchPoints(2,fClusterPhi[1][i1],p0,p1);
      if(i2<0) continue;
      
      #ifdef MC_CHECK
      CheckMC(i0,i1,i2);
      #endif

      AliITSUClusterPix* cluster2=(AliITSUClusterPix*)fClusters[2]->At(i2);
      cluster2->GetGlobalXYZ(pp2);

      fUsedClusters[0][i0]=kTRUE;
      fUsedClusters[2][i2]=kTRUE;
      
      // Errors to be checked... 
      
      Float_t cov0[6],cov1[6],cov2[6];
      cluster0->GetGlobalCov(cov0);
      cluster1->GetGlobalCov(cov1);
      cluster2->GetGlobalCov(cov2);
      
      //Error on tracklet direction near the vertex
      Double_t rad1=TMath::Sqrt(p0[0]*p0[0]+p0[1]*p0[1]);
      Double_t rad2=TMath::Sqrt(p1[0]*p1[0]+p1[1]*p1[1]);
      Double_t factor=(rad1+rad2)/(rad2-rad1);
      
      //Curvature error
      Double_t curvErr=0;
      Double_t bField=0.5;
      Double_t meanPtSelTrk=0.630;
      Double_t curvRadius=meanPtSelTrk/(0.3*bField)*100; //cm 
      Double_t dRad=TMath::Sqrt((p0[0]-p1[0])*(p0[0]-p1[0])+(p0[1]-p1[1])*(p0[1]-p1[1]));
      Double_t aux=dRad/2.+rad1;
      curvErr=TMath::Sqrt(curvRadius*curvRadius-dRad*dRad/4.)-TMath::Sqrt(curvRadius*curvRadius-aux*aux); //cm
      
      Double_t sq[3],wmat[9]={1,0,0,0,1,0,0,0,1};
      sq[0]=(cov0[0]+curvErr*curvErr/2.)*factor*factor;//cov1[0]+cov2[0]);
      sq[1]=(cov0[3]+curvErr*curvErr/2.)*factor*factor;//cov1[3]+cov2[3]);
      sq[2]=(cov0[5])*factor*factor;//cov1[5]+cov2[5]);	    

      // Multiple scattering
      Double_t meanPSelTrk=0.875;
      Double_t pOverMass=meanPSelTrk/0.140;
      Double_t beta2=pOverMass*pOverMass/(1+pOverMass*pOverMass);
      Double_t p2=meanPSelTrk*meanPSelTrk;
      Double_t rBP=1.98; // Beam pipe radius
      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++){    
	sq[ico]+=rtantheta1*rtantheta1*factor*factor/3.;
	sq[ico]+=rtanthetaBP*rtanthetaBP*factor*factor/3.;
      }
      
      if(sq[0]!=0) wmat[0]=1/sq[0];
      if(sq[1]!=0) wmat[4]=1/sq[1];
      if(sq[2]!=0) wmat[8]=1/sq[2];

      /*Int_t label0=cluster0->GetLabel(0);
      Int_t label1=cluster1->GetLabel(0);
      Int_t label2=cluster2->GetLabel(0);*/
      //cout << label0 << " " << label1 << " "<<label2 << endl;

      //printf("%f\t%f\t%f\n-\t%f\t%f\n-\t-\t%f\n",wmat[0],wmat[1],wmat[2],wmat[3],wmat[4],wmat[5]);
      //gSystem->Exec(Form("echo %i >> trkl",cluster0->GetLabel(0)+cluster1->GetLabel(0)));
      
      new(fLines[fNoLines++])AliStrLine(p0,sq,wmat,p1,kTRUE);
      break;
    }
    for(UInt_t itmp=0; itmp<tmp.size(); ++itmp) fUsedClusters[1][tmp.at(itmp)]=kFALSE;
    tmp.clear();
    //((AliStrLine*)fLines[fNoLines-1])->PrintStatus();
    //printf("(%f,%f,%f) and (%f,%f,%f)\n",p0[0],p0[1],p0[2],p1[0],p1[1],p1[2]);
  }
  
  fLinesPhi=nolinesphi;
  //cout << Form("=======================================================\nNolinesphi: %i, nolines: %i\nGood Nolinesphi: %i, good nolines: %i\n",nolinesphi,fNoLines,fGoodLinesPhi,fGoodLines);
}
 
//___________________________________________________________________________
void AliITSUVertexer::SortClusters() { 
  // Reading of the clusters on the first three layer of the upgraded ITS
  for(Int_t i=0;i<3;++i) {
    TClonesArray *clr=fClusters[i];
    Int_t nocl=clr->GetEntriesFast();
    if(nocl==0) {
      fClusterPhi[i]=new Double_t[1];
      fClusterPhi[i][0]=-999999;
      fClusterIndex[i]=new Int_t[1];
      fClusterIndex[i][0]=0;
    } else {
      fClusterPhi[i]=new Double_t[nocl];
      fClusterIndex[i]=new Int_t[nocl];
      for(Int_t k=0;k<nocl;++k) {
	AliITSUClusterPix* cl=(AliITSUClusterPix*)clr->At(k);
	Double_t pt[3]; 
	cl->GetGlobalXYZ(pt);
	fClusterPhi[i][k]=ATan2(pt[1],pt[0]);
      }
      BubbleLow(nocl,fClusterPhi[i],fClusterIndex[i]);
    }
  }
}

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