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

//-----------------------------------------------------------------
//           AliITSVertexer3DTapan class
//   This is a class for the 3d vertex finding
//    Origin: Tapan Nayak, VECC-CERN, Tapan.Nayak@cern.ch
//-----------------------------------------------------------------

#include <TH1.h>
#include <TTree.h>
#include <TClonesArray.h>

#include <AliITSVertexer3DTapan.h>
#include <AliITSRecPoint.h>
#include <AliITSgeomTGeo.h>
#include <AliESDVertex.h>

ClassImp(AliITSVertexer3DTapan)

void AliITSVertexer3DTapan::LoadClusters(TTree *cTree) {
  //--------------------------------------------------------------------
  //This function loads the SPD clusters
  //--------------------------------------------------------------------
   TClonesArray dummy("AliITSRecPoint",10000), *clusters=&dummy;
   TBranch *branch=cTree->GetBranch("ITSRecPoints");
   branch->SetAddress(&clusters);

   Int_t nentr=cTree->GetEntries(),nc1=0,nc2=0;
   for (Int_t i=0; i<nentr; i++) {
       if (!cTree->GetEvent(i)) continue;
       //
       //   Below:
       //   "alpha" is the angle from the global X-axis to the
       //    local GEANT X'-axis  ( rot[0]=cos(alpha) and rot[1]=sin(alpha) )
       //    "phi" is the angle from the global X-axis to the
       //         local cluster X"-axis
       //

       Int_t    lay,lad,det; AliITSgeomTGeo::GetModuleId(i,lay,lad,det);

       if (lay>2) break;  //load the SPD clusters only

       Int_t ncl=clusters->GetEntriesFast();
       Float_t hPhi=0.;
       while (ncl--) {
          AliITSRecPoint *c=(AliITSRecPoint*)clusters->UncheckedAt(ncl);
	  Float_t pos[3];
	  c->GetGlobalXYZ(pos);
          if (lay==1) {
	    /*             fX1[nc1]= r*cp - c->GetY()*sp;
             fY1[nc1]= r*sp + c->GetY()*cp;
             fZ1[nc1]= c->GetZ(); */
	    fX1[nc1] = pos[0]; fY1[nc1] = pos[1]; fZ1[nc1] = pos[2];
	     CalculatePhi(fX1[nc1], fY1[nc1], hPhi);
	     fPhi1[nc1]= hPhi;
             nc1++;
          } else {
            /* fX2[nc2]= r*cp - c->GetY()*sp;
             fY2[nc2]= r*sp + c->GetY()*cp;
             fZ2[nc2]= c->GetZ(); */
	    fX2[nc2] = pos[0]; fY2[nc2] = pos[1]; fZ2[nc2] = pos[2];
	     CalculatePhi(fX2[nc2], fY2[nc2], hPhi);
	     fPhi2[nc2]= hPhi;
             nc2++;
          }
       }
   }
   ficlu1 = nc1; ficlu2 = nc2;
   AliInfo(Form("Number of clusters: %d (first layer) and %d (second layer)",ficlu1,ficlu2));
}

AliESDVertex *AliITSVertexer3DTapan::FindVertexForCurrentEvent(TTree *cTree) {
  //
  // This function reconstructs ....
  //
  //
  LoadClusters(cTree);

  Double_t pos[3], postemp[3];
  Double_t sigpos[3]={0.,0.,0.};
  Int_t ncontr, ncontrtemp;
  Float_t cuts[3];
  Int_t vtxstatus=0;

  //....
  pos[0] = 0.;   pos[1] = 0.;   pos[2] = 0.;
  cuts[0]=1.;  cuts[1]=1.;  cuts[2]=20.;
  CalculateVertex3d1(pos, cuts, ncontr);
  if(ncontr==0) {
    pos[0] = 9999.;   pos[1] = 9999.;   pos[2] = 9999.;
    vtxstatus = -1;
  }
  AliInfo(Form("1st step: %d %f %f %f st=%d",ncontr,pos[0],pos[1],pos[2],vtxstatus));

  if(vtxstatus == 0) {
    ncontrtemp = ncontr; postemp[0] = pos[0];   postemp[1] = pos[1];   postemp[2] = pos[2]; 
    cuts[0]=0.3;  cuts[1]=0.3;  cuts[2]=1.;
    CalculateVertex3d1(pos, cuts, ncontr);
    if(ncontr==0) {
      ncontr = ncontrtemp; pos[0] = postemp[0];   pos[1] = postemp[1];   pos[2] = postemp[2];
      vtxstatus = 2;
    }
    AliInfo(Form("2nd step: %d %f %f %f st=%d",ncontr,pos[0],pos[1],pos[2],vtxstatus));
  }

  if(vtxstatus == 0) {
    ncontrtemp = ncontr; postemp[0] = pos[0];   postemp[1] = pos[1];   postemp[2] = pos[2]; 
    cuts[0]=0.25;  cuts[1]=0.25;  cuts[2]=1.0;
    CalculateVertex3d2(pos, cuts, ncontr, sigpos);
    if(ncontr==0) {
      ncontr = ncontrtemp; pos[0] = postemp[0];   pos[1] = postemp[1];   pos[2] = postemp[2];
      vtxstatus = 3;
    }
    AliInfo(Form("3rd step: %d %f %f %f st=%d",ncontr,pos[0],pos[1],pos[2],vtxstatus));
  }

  if(vtxstatus == 0) {
    ncontrtemp = ncontr; postemp[0] = pos[0];   postemp[1] = pos[1];   postemp[2] = pos[2]; 
    cuts[0]=0.1;  cuts[1]=0.1;  cuts[2]=0.2;
    CalculateVertex3d2(pos, cuts, ncontr, sigpos);
    if(ncontr==0) {
      ncontr = ncontrtemp; pos[0] = postemp[0];   pos[1] = postemp[1];   pos[2] = postemp[2];
      vtxstatus = 4;
    }
    AliInfo(Form("4th step: %d %f %f %f st=%d",ncontr,pos[0],pos[1],pos[2],vtxstatus));
  }
  AliInfo(Form("Final step: %d %f %f %f st=%d",ncontr,pos[0],pos[1],pos[2],vtxstatus));

  Double_t covma[6]={0.,0.,0.,0.,0.,0.};
  covma[0]=sigpos[0];
  covma[2]=sigpos[1];
  covma[5]=sigpos[2];
  return new AliESDVertex(pos,covma,(Double_t)vtxstatus,ncontr,"AliITSVertexer3DTapan");

}


void AliITSVertexer3DTapan::CalculateVertex3d1(Double_t pos[3], Float_t cuts[3], Int_t &ncontr) {
  //
  // This function reconstructs first two steps of vertex
  //

  Double_t p1[4], p2[4], p3[4], p4[4];
  Double_t pa[3], pb[3];
  Double_t hphi1, hphi2, hphi3, hphi4;

  ncontr = 0;
  Float_t  phicut = 1.0;
  Double_t distance;  Float_t  distancecut = 1.0;
  Int_t    ibin=20;  Float_t  ilow=-1.; Float_t  ihigh=1.; 
  Int_t    ibinz=400; Float_t  ilowz=-20.; Float_t  ihighz=20.;

  TH1F *hx = new TH1F("hx","",  ibin, ilow, ihigh);
  TH1F *hy = new TH1F("hy","",  ibin, ilow, ihigh);
  TH1F *hz = new TH1F("hz","",  ibinz,ilowz,ihighz);
  
  for (Int_t ip1=0; ip1<ficlu1; ip1++) {
    // Two points on layer1: p1 and p3
    p1[0] = fX1[ip1];   p1[1] = fY1[ip1];    p1[2] = fZ1[ip1];   
    p3[0] = fX1[ip1+1]; p3[1] = fY1[ip1+1];  p3[2] = fZ1[ip1+1]; 
    hphi1 = fPhi1[ip1]; hphi3 = fPhi1[ip1+1];
    
    for (Int_t ip2=0; ip2<ficlu2; ip2++) {
      // Two points on layer 2: p2 and p4
      p2[0] = fX2[ip2];   p2[1] = fY2[ip2];     p2[2] = fZ2[ip2]; 
      p4[0] = fX2[ip2+1]; p4[1] = fY2[ip2+1];   p4[2] = fZ2[ip2+1]; 
      hphi2 = fPhi2[ip2]; hphi4 = fPhi2[ip2+1];

      // First line is formed by p1-p2 and second line by p3-p4
      // We find two points on each line which form the closest distance of the two lines
      // pa[0],pa[1],pa[2]: points on line 1 and pb[0],pb[1],pb[2]: points on line 2
      // Next: Consider x, y and z to be less than cuts[0], cuts[1] and cuts[2], respectively

      if(TMath::Abs(hphi1-hphi2)<phicut && TMath::Abs(hphi3-hphi4)<phicut){
	CalculateLine(p1, p2, p3, p4, pa, pb);

	if (pa[0]>pos[0]-cuts[0] && pa[0]<pos[0]+cuts[0] && pa[1]>pos[1]-cuts[1] && pa[1]<pos[1]+cuts[1] && pa[2]>pos[2]-cuts[2] && pa[2]<pos[2]+cuts[2]){
	  distance = (TMath::Sqrt(pow((pa[0]-pb[0]),2) + pow((pa[1]-pb[1]),2) + pow((pa[2]-pb[2]),2)));
	  if(distance<distancecut){
	    hx->Fill(pa[0]); 		hy->Fill(pa[1]);		hz->Fill(pa[2]);
	    hx->Fill(pb[0]); 		hy->Fill(pb[1]);		hz->Fill(pb[2]);
	    ncontr++;
	  }
	}
      }

      // Third line is formed by p1-p4 and fourth line by p3-p2
      // We find two points on each line which form the closest distance of the two lines
      // pa[0],pa[1],pa[2]: points on line 3 and pb[0],pb[1],pb[2]: points on line 4
      // Next: Consider x, y and z to be less than cuts[0], cuts[1] and cuts[2], respectively      
      if(TMath::Abs(hphi1-hphi4)<phicut && TMath::Abs(hphi3-hphi2)<phicut) {
	CalculateLine(p1, p4, p3, p2, pa, pb);
	if (pa[0]>pos[0]-cuts[0] && pa[0]<pos[0]+cuts[0] && pa[1]>pos[1]-cuts[1] && pa[1]<pos[1]+cuts[1]){
	  distance = (TMath::Sqrt(pow((pa[0]-pb[0]),2) + pow((pa[1]-pb[1]),2) + pow((pa[2]-pb[2]),2)));
	  if(distance<distancecut){
	    hx->Fill(pa[0]); 		hy->Fill(pa[1]);		hz->Fill(pa[2]);
	    hx->Fill(pb[0]); 		hy->Fill(pb[1]);		hz->Fill(pb[2]);
	    ncontr++;
	  }
	}
      }
    }
  }

  Int_t maxbinx = hx->GetMaximumBin(); 
  Int_t maxbiny = hy->GetMaximumBin();
  Int_t maxbinz = hz->GetMaximumBin();
  pos[0] = ilow  + ((ihigh-ilow)/ibin)*maxbinx;
  pos[1] = ilow  + ((ihigh-ilow)/ibin)*maxbiny;
  pos[2] = ilowz + ((ihighz-ilowz)/ibinz)*maxbinz;
  hx->Delete();
  hy->Delete();
  hz->Delete();
}

void AliITSVertexer3DTapan::CalculateVertex3d2(Double_t pos[3], Float_t cuts[3], Int_t &ncontr, Double_t sigpos[3]) {
  //
  // This function reconstructs second two steps of vertex
  //

  Double_t p1[4], p2[4], p3[4], p4[4];
  Double_t pa[3], pb[3];
  Double_t hphi1, hphi2, hphi3, hphi4;

  ncontr = 0;
  Float_t  phicut = 0.3;
  Double_t distance; Float_t  distancecut = 1.0;

  Double_t vertx  =0.;   Double_t verty  =0.;   Double_t vertz  =0.;	 
  Double_t vertx2 =0.;   Double_t verty2 =0.;   Double_t vertz2 =0.;	 

  for (Int_t ip1=0; ip1<ficlu1; ip1++) {
    // Two points on layer1: p1 and p3
    p1[0] = fX1[ip1];   p1[1] = fY1[ip1];    p1[2] = fZ1[ip1];   
    p3[0] = fX1[ip1+1]; p3[1] = fY1[ip1+1];  p3[2] = fZ1[ip1+1]; 
    hphi1 = fPhi1[ip1]; hphi3 = fPhi1[ip1+1];
    
    for (Int_t ip2=0; ip2<ficlu2; ip2++) {
      // Two points on layer 2: p2 and p4
      p2[0] = fX2[ip2];   p2[1] = fY2[ip2];     p2[2] = fZ2[ip2]; 
      p4[0] = fX2[ip2+1]; p4[1] = fY2[ip2+1];   p4[2] = fZ2[ip2+1]; 
      hphi2 = fPhi2[ip2]; hphi4 = fPhi2[ip2+1];

      // First line is formed by p1-p2 and second line by p3-p4
      // We find two points on each line which form the closest distance of the two lines
      // pa[0],pa[1],pa[2] are the points on line 1 and pb[0],pb[1],pb[2] are the points on line 2
      // Next: Consider x, y and z to be less than cuts[0], cuts[1] and cuts[2], respectively

      if(TMath::Abs(hphi1-hphi2)<phicut && TMath::Abs(hphi3-hphi4)<phicut){
	CalculateLine(p1, p2, p3, p4, pa, pb);

	// We consider the points where x, y and z points are less than xcut, ycut and zcut, respectively
	if (pa[0]>pos[0]-cuts[0] && pa[0]<pos[0]+cuts[0] && pa[1]>pos[1]-cuts[1] && pa[1]<pos[1]+cuts[1] && pa[2]>pos[2]-cuts[2] && pa[2]<pos[2]+cuts[2]){
	  distance = (TMath::Sqrt(pow((pa[0]-pb[0]),2) + pow((pa[1]-pb[1]),2) + pow((pa[2]-pb[2]),2)));
	  if(distance<distancecut){
	    ncontr++;
	    vertx  = vertx  + pa[0];       verty  = verty  + pa[1];       vertz  = vertz  + pa[2];
	    vertx2 = vertx2 + pa[0]*pa[0]; verty2 = verty2 + pa[1]*pa[1]; vertz2 = vertz2 + pa[2]*pa[2];
	    ncontr++;
	    vertx  = vertx  + pb[0];       verty  = verty  + pb[1];       vertz  = vertz  + pb[2];
	    vertx2 = vertx2 + pb[0]*pb[0]; verty2 = verty2 + pb[1]*pb[1]; vertz2 = vertz2 + pb[2]*pb[2];
	  }
	}
      }
      
      // Third line is formed by p1-p4 and fourth line by p3-p2
      // We find two points on each line which form the closest distance of the two lines
      // pa[0],pa[1],pa[2] are the points on line 3 and pb[0],pb[1],pb[2] are the points on line 4
      // Next: Consider x, y and z to be less than cuts[0], cuts[1] and cuts[2], respectively      
      if(TMath::Abs(hphi1-hphi4)<phicut && TMath::Abs(hphi3-hphi2)<phicut) {
	
	CalculateLine(p1, p4, p3, p2, pa, pb);
	if (pa[0]>pos[0]-cuts[0] && pa[0]<pos[0]+cuts[0] && pa[1]>pos[1]-cuts[1] && pa[1]<pos[1]+cuts[1] && pa[2]>pos[2]-cuts[2] && pa[2]<pos[2]+cuts[2]){
	  distance = (TMath::Sqrt(pow((pa[0]-pb[0]),2) + pow((pa[1]-pb[1]),2) + pow((pa[2]-pb[2]),2)));
	  if(distance<distancecut){
	    ncontr++;
	    vertx  = vertx  + pa[0];       verty  = verty  + pa[1];       vertz  = vertz  + pa[2];
	    vertx2 = vertx2 + pa[0]*pa[0]; verty2 = verty2 + pa[1]*pa[1]; vertz2 = vertz2 + pa[2]*pa[2];
	    ncontr++;
	    vertx  = vertx  + pb[0];       verty  = verty  + pb[1];       vertz  = vertz  + pb[2];
	    vertx2 = vertx2 + pb[0]*pb[0]; verty2 = verty2 + pb[1]*pb[1]; vertz2 = vertz2 + pb[2]*pb[2];
	  }
	}
      }
    }
  }

  if(ncontr>0){
    pos[0]  = vertx/ncontr;  pos[1] = verty/ncontr;   pos[2] = vertz/ncontr;
    vertx2 = vertx2/ncontr; verty2 = verty2/ncontr; vertz2 = vertz2/ncontr;
    sigpos[0] = TMath::Sqrt(vertx2 - pos[0]*pos[0]); 
    sigpos[1] = TMath::Sqrt(verty2 - pos[1]*pos[1]);
    sigpos[2] = TMath::Sqrt(vertz2 - pos[2]*pos[2]);
  }
  ncontr = ncontr/2;
}

void AliITSVertexer3DTapan::CalculatePhi(Float_t fx, Float_t fy, Float_t & phi)
{
  //calculates phi
  Float_t ybyx, phi1;
  const Float_t kradian = 180./3.141592654;
  
  if(fx==0.)
    {
      if(fy>0.) phi = 90.;
      if(fy<0.) phi = 270.;
    }
  if(fx != 0.)
    {
      ybyx = fy/fx;
      if(ybyx < 0) ybyx = - ybyx;
      phi1 = TMath::ATan(ybyx)*kradian;
      if(fx > 0 && fy > 0) phi = phi1;        // 1st Quadrant
      if(fx < 0 && fy > 0) phi = 180 - phi1;  // 2nd Quadrant
      if(fx < 0 && fy < 0) phi = 180 + phi1;  // 3rd Quadrant
      if(fx > 0 && fy < 0) phi = 360 - phi1;  // 4th Quadrant
      
    }
  phi = phi/kradian;
}

void AliITSVertexer3DTapan::CalculateLine(Double_t p1[4], Double_t p2[4], Double_t p3[4], Double_t p4[4], Double_t pa[3], Double_t pb[3]) const{
  //calculates line
  Double_t p13x, p13y, p13z;
  Double_t p21x, p21y, p21z;
  Double_t p43x, p43y, p43z;
  Double_t d1343, d4321, d1321, d4343, d2121;
  Double_t numer, denom;
  Double_t mua,   mub;
  mua = 0.; mub = 0.;
  
  p13x = p1[0] - p3[0];
  p13y = p1[1] - p3[1];
  p13z = p1[2] - p3[2];

  p21x = p2[0] - p1[0];
  p21y = p2[1] - p1[1];
  p21z = p2[2] - p1[2];

  p43x = p4[0] - p3[0];
  p43y = p4[1] - p3[1];
  p43z = p4[2] - p3[2];

  d1343 = p13x * p43x + p13y * p43y + p13z * p43z;
  d4321 = p43x * p21x + p43y * p21y + p43z * p21z;
  d1321 = p13x * p21x + p13y * p21y + p13z * p21z;
  d4343 = p43x * p43x + p43y * p43y + p43z * p43z;
  d2121 = p21x * p21x + p21y * p21y + p21z * p21z;

  denom = d2121 * d4343 - d4321 * d4321;
  numer = d1343 * d4321 - d1321 * d4343;

  if(denom>0) mua = numer / denom;
  if(d4343>0) mub = (d1343 + d4321 * (mua)) / d4343;

  pa[0] = p1[0] + mua * p21x;
  pa[1] = p1[1] + mua * p21y;
  pa[2] = p1[2] + mua * p21z;

  pb[0] = p3[0] + mub * p43x;
  pb[1] = p3[1] + mub * p43y;
  pb[2] = p3[2] + mub * p43z;
}

 AliITSVertexer3DTapan.cxx:1
 AliITSVertexer3DTapan.cxx:2
 AliITSVertexer3DTapan.cxx:3
 AliITSVertexer3DTapan.cxx:4
 AliITSVertexer3DTapan.cxx:5
 AliITSVertexer3DTapan.cxx:6
 AliITSVertexer3DTapan.cxx:7
 AliITSVertexer3DTapan.cxx:8
 AliITSVertexer3DTapan.cxx:9
 AliITSVertexer3DTapan.cxx:10
 AliITSVertexer3DTapan.cxx:11
 AliITSVertexer3DTapan.cxx:12
 AliITSVertexer3DTapan.cxx:13
 AliITSVertexer3DTapan.cxx:14
 AliITSVertexer3DTapan.cxx:15
 AliITSVertexer3DTapan.cxx:16
 AliITSVertexer3DTapan.cxx:17
 AliITSVertexer3DTapan.cxx:18
 AliITSVertexer3DTapan.cxx:19
 AliITSVertexer3DTapan.cxx:20
 AliITSVertexer3DTapan.cxx:21
 AliITSVertexer3DTapan.cxx:22
 AliITSVertexer3DTapan.cxx:23
 AliITSVertexer3DTapan.cxx:24
 AliITSVertexer3DTapan.cxx:25
 AliITSVertexer3DTapan.cxx:26
 AliITSVertexer3DTapan.cxx:27
 AliITSVertexer3DTapan.cxx:28
 AliITSVertexer3DTapan.cxx:29
 AliITSVertexer3DTapan.cxx:30
 AliITSVertexer3DTapan.cxx:31
 AliITSVertexer3DTapan.cxx:32
 AliITSVertexer3DTapan.cxx:33
 AliITSVertexer3DTapan.cxx:34
 AliITSVertexer3DTapan.cxx:35
 AliITSVertexer3DTapan.cxx:36
 AliITSVertexer3DTapan.cxx:37
 AliITSVertexer3DTapan.cxx:38
 AliITSVertexer3DTapan.cxx:39
 AliITSVertexer3DTapan.cxx:40
 AliITSVertexer3DTapan.cxx:41
 AliITSVertexer3DTapan.cxx:42
 AliITSVertexer3DTapan.cxx:43
 AliITSVertexer3DTapan.cxx:44
 AliITSVertexer3DTapan.cxx:45
 AliITSVertexer3DTapan.cxx:46
 AliITSVertexer3DTapan.cxx:47
 AliITSVertexer3DTapan.cxx:48
 AliITSVertexer3DTapan.cxx:49
 AliITSVertexer3DTapan.cxx:50
 AliITSVertexer3DTapan.cxx:51
 AliITSVertexer3DTapan.cxx:52
 AliITSVertexer3DTapan.cxx:53
 AliITSVertexer3DTapan.cxx:54
 AliITSVertexer3DTapan.cxx:55
 AliITSVertexer3DTapan.cxx:56
 AliITSVertexer3DTapan.cxx:57
 AliITSVertexer3DTapan.cxx:58
 AliITSVertexer3DTapan.cxx:59
 AliITSVertexer3DTapan.cxx:60
 AliITSVertexer3DTapan.cxx:61
 AliITSVertexer3DTapan.cxx:62
 AliITSVertexer3DTapan.cxx:63
 AliITSVertexer3DTapan.cxx:64
 AliITSVertexer3DTapan.cxx:65
 AliITSVertexer3DTapan.cxx:66
 AliITSVertexer3DTapan.cxx:67
 AliITSVertexer3DTapan.cxx:68
 AliITSVertexer3DTapan.cxx:69
 AliITSVertexer3DTapan.cxx:70
 AliITSVertexer3DTapan.cxx:71
 AliITSVertexer3DTapan.cxx:72
 AliITSVertexer3DTapan.cxx:73
 AliITSVertexer3DTapan.cxx:74
 AliITSVertexer3DTapan.cxx:75
 AliITSVertexer3DTapan.cxx:76
 AliITSVertexer3DTapan.cxx:77
 AliITSVertexer3DTapan.cxx:78
 AliITSVertexer3DTapan.cxx:79
 AliITSVertexer3DTapan.cxx:80
 AliITSVertexer3DTapan.cxx:81
 AliITSVertexer3DTapan.cxx:82
 AliITSVertexer3DTapan.cxx:83
 AliITSVertexer3DTapan.cxx:84
 AliITSVertexer3DTapan.cxx:85
 AliITSVertexer3DTapan.cxx:86
 AliITSVertexer3DTapan.cxx:87
 AliITSVertexer3DTapan.cxx:88
 AliITSVertexer3DTapan.cxx:89
 AliITSVertexer3DTapan.cxx:90
 AliITSVertexer3DTapan.cxx:91
 AliITSVertexer3DTapan.cxx:92
 AliITSVertexer3DTapan.cxx:93
 AliITSVertexer3DTapan.cxx:94
 AliITSVertexer3DTapan.cxx:95
 AliITSVertexer3DTapan.cxx:96
 AliITSVertexer3DTapan.cxx:97
 AliITSVertexer3DTapan.cxx:98
 AliITSVertexer3DTapan.cxx:99
 AliITSVertexer3DTapan.cxx:100
 AliITSVertexer3DTapan.cxx:101
 AliITSVertexer3DTapan.cxx:102
 AliITSVertexer3DTapan.cxx:103
 AliITSVertexer3DTapan.cxx:104
 AliITSVertexer3DTapan.cxx:105
 AliITSVertexer3DTapan.cxx:106
 AliITSVertexer3DTapan.cxx:107
 AliITSVertexer3DTapan.cxx:108
 AliITSVertexer3DTapan.cxx:109
 AliITSVertexer3DTapan.cxx:110
 AliITSVertexer3DTapan.cxx:111
 AliITSVertexer3DTapan.cxx:112
 AliITSVertexer3DTapan.cxx:113
 AliITSVertexer3DTapan.cxx:114
 AliITSVertexer3DTapan.cxx:115
 AliITSVertexer3DTapan.cxx:116
 AliITSVertexer3DTapan.cxx:117
 AliITSVertexer3DTapan.cxx:118
 AliITSVertexer3DTapan.cxx:119
 AliITSVertexer3DTapan.cxx:120
 AliITSVertexer3DTapan.cxx:121
 AliITSVertexer3DTapan.cxx:122
 AliITSVertexer3DTapan.cxx:123
 AliITSVertexer3DTapan.cxx:124
 AliITSVertexer3DTapan.cxx:125
 AliITSVertexer3DTapan.cxx:126
 AliITSVertexer3DTapan.cxx:127
 AliITSVertexer3DTapan.cxx:128
 AliITSVertexer3DTapan.cxx:129
 AliITSVertexer3DTapan.cxx:130
 AliITSVertexer3DTapan.cxx:131
 AliITSVertexer3DTapan.cxx:132
 AliITSVertexer3DTapan.cxx:133
 AliITSVertexer3DTapan.cxx:134
 AliITSVertexer3DTapan.cxx:135
 AliITSVertexer3DTapan.cxx:136
 AliITSVertexer3DTapan.cxx:137
 AliITSVertexer3DTapan.cxx:138
 AliITSVertexer3DTapan.cxx:139
 AliITSVertexer3DTapan.cxx:140
 AliITSVertexer3DTapan.cxx:141
 AliITSVertexer3DTapan.cxx:142
 AliITSVertexer3DTapan.cxx:143
 AliITSVertexer3DTapan.cxx:144
 AliITSVertexer3DTapan.cxx:145
 AliITSVertexer3DTapan.cxx:146
 AliITSVertexer3DTapan.cxx:147
 AliITSVertexer3DTapan.cxx:148
 AliITSVertexer3DTapan.cxx:149
 AliITSVertexer3DTapan.cxx:150
 AliITSVertexer3DTapan.cxx:151
 AliITSVertexer3DTapan.cxx:152
 AliITSVertexer3DTapan.cxx:153
 AliITSVertexer3DTapan.cxx:154
 AliITSVertexer3DTapan.cxx:155
 AliITSVertexer3DTapan.cxx:156
 AliITSVertexer3DTapan.cxx:157
 AliITSVertexer3DTapan.cxx:158
 AliITSVertexer3DTapan.cxx:159
 AliITSVertexer3DTapan.cxx:160
 AliITSVertexer3DTapan.cxx:161
 AliITSVertexer3DTapan.cxx:162
 AliITSVertexer3DTapan.cxx:163
 AliITSVertexer3DTapan.cxx:164
 AliITSVertexer3DTapan.cxx:165
 AliITSVertexer3DTapan.cxx:166
 AliITSVertexer3DTapan.cxx:167
 AliITSVertexer3DTapan.cxx:168
 AliITSVertexer3DTapan.cxx:169
 AliITSVertexer3DTapan.cxx:170
 AliITSVertexer3DTapan.cxx:171
 AliITSVertexer3DTapan.cxx:172
 AliITSVertexer3DTapan.cxx:173
 AliITSVertexer3DTapan.cxx:174
 AliITSVertexer3DTapan.cxx:175
 AliITSVertexer3DTapan.cxx:176
 AliITSVertexer3DTapan.cxx:177
 AliITSVertexer3DTapan.cxx:178
 AliITSVertexer3DTapan.cxx:179
 AliITSVertexer3DTapan.cxx:180
 AliITSVertexer3DTapan.cxx:181
 AliITSVertexer3DTapan.cxx:182
 AliITSVertexer3DTapan.cxx:183
 AliITSVertexer3DTapan.cxx:184
 AliITSVertexer3DTapan.cxx:185
 AliITSVertexer3DTapan.cxx:186
 AliITSVertexer3DTapan.cxx:187
 AliITSVertexer3DTapan.cxx:188
 AliITSVertexer3DTapan.cxx:189
 AliITSVertexer3DTapan.cxx:190
 AliITSVertexer3DTapan.cxx:191
 AliITSVertexer3DTapan.cxx:192
 AliITSVertexer3DTapan.cxx:193
 AliITSVertexer3DTapan.cxx:194
 AliITSVertexer3DTapan.cxx:195
 AliITSVertexer3DTapan.cxx:196
 AliITSVertexer3DTapan.cxx:197
 AliITSVertexer3DTapan.cxx:198
 AliITSVertexer3DTapan.cxx:199
 AliITSVertexer3DTapan.cxx:200
 AliITSVertexer3DTapan.cxx:201
 AliITSVertexer3DTapan.cxx:202
 AliITSVertexer3DTapan.cxx:203
 AliITSVertexer3DTapan.cxx:204
 AliITSVertexer3DTapan.cxx:205
 AliITSVertexer3DTapan.cxx:206
 AliITSVertexer3DTapan.cxx:207
 AliITSVertexer3DTapan.cxx:208
 AliITSVertexer3DTapan.cxx:209
 AliITSVertexer3DTapan.cxx:210
 AliITSVertexer3DTapan.cxx:211
 AliITSVertexer3DTapan.cxx:212
 AliITSVertexer3DTapan.cxx:213
 AliITSVertexer3DTapan.cxx:214
 AliITSVertexer3DTapan.cxx:215
 AliITSVertexer3DTapan.cxx:216
 AliITSVertexer3DTapan.cxx:217
 AliITSVertexer3DTapan.cxx:218
 AliITSVertexer3DTapan.cxx:219
 AliITSVertexer3DTapan.cxx:220
 AliITSVertexer3DTapan.cxx:221
 AliITSVertexer3DTapan.cxx:222
 AliITSVertexer3DTapan.cxx:223
 AliITSVertexer3DTapan.cxx:224
 AliITSVertexer3DTapan.cxx:225
 AliITSVertexer3DTapan.cxx:226
 AliITSVertexer3DTapan.cxx:227
 AliITSVertexer3DTapan.cxx:228
 AliITSVertexer3DTapan.cxx:229
 AliITSVertexer3DTapan.cxx:230
 AliITSVertexer3DTapan.cxx:231
 AliITSVertexer3DTapan.cxx:232
 AliITSVertexer3DTapan.cxx:233
 AliITSVertexer3DTapan.cxx:234
 AliITSVertexer3DTapan.cxx:235
 AliITSVertexer3DTapan.cxx:236
 AliITSVertexer3DTapan.cxx:237
 AliITSVertexer3DTapan.cxx:238
 AliITSVertexer3DTapan.cxx:239
 AliITSVertexer3DTapan.cxx:240
 AliITSVertexer3DTapan.cxx:241
 AliITSVertexer3DTapan.cxx:242
 AliITSVertexer3DTapan.cxx:243
 AliITSVertexer3DTapan.cxx:244
 AliITSVertexer3DTapan.cxx:245
 AliITSVertexer3DTapan.cxx:246
 AliITSVertexer3DTapan.cxx:247
 AliITSVertexer3DTapan.cxx:248
 AliITSVertexer3DTapan.cxx:249
 AliITSVertexer3DTapan.cxx:250
 AliITSVertexer3DTapan.cxx:251
 AliITSVertexer3DTapan.cxx:252
 AliITSVertexer3DTapan.cxx:253
 AliITSVertexer3DTapan.cxx:254
 AliITSVertexer3DTapan.cxx:255
 AliITSVertexer3DTapan.cxx:256
 AliITSVertexer3DTapan.cxx:257
 AliITSVertexer3DTapan.cxx:258
 AliITSVertexer3DTapan.cxx:259
 AliITSVertexer3DTapan.cxx:260
 AliITSVertexer3DTapan.cxx:261
 AliITSVertexer3DTapan.cxx:262
 AliITSVertexer3DTapan.cxx:263
 AliITSVertexer3DTapan.cxx:264
 AliITSVertexer3DTapan.cxx:265
 AliITSVertexer3DTapan.cxx:266
 AliITSVertexer3DTapan.cxx:267
 AliITSVertexer3DTapan.cxx:268
 AliITSVertexer3DTapan.cxx:269
 AliITSVertexer3DTapan.cxx:270
 AliITSVertexer3DTapan.cxx:271
 AliITSVertexer3DTapan.cxx:272
 AliITSVertexer3DTapan.cxx:273
 AliITSVertexer3DTapan.cxx:274
 AliITSVertexer3DTapan.cxx:275
 AliITSVertexer3DTapan.cxx:276
 AliITSVertexer3DTapan.cxx:277
 AliITSVertexer3DTapan.cxx:278
 AliITSVertexer3DTapan.cxx:279
 AliITSVertexer3DTapan.cxx:280
 AliITSVertexer3DTapan.cxx:281
 AliITSVertexer3DTapan.cxx:282
 AliITSVertexer3DTapan.cxx:283
 AliITSVertexer3DTapan.cxx:284
 AliITSVertexer3DTapan.cxx:285
 AliITSVertexer3DTapan.cxx:286
 AliITSVertexer3DTapan.cxx:287
 AliITSVertexer3DTapan.cxx:288
 AliITSVertexer3DTapan.cxx:289
 AliITSVertexer3DTapan.cxx:290
 AliITSVertexer3DTapan.cxx:291
 AliITSVertexer3DTapan.cxx:292
 AliITSVertexer3DTapan.cxx:293
 AliITSVertexer3DTapan.cxx:294
 AliITSVertexer3DTapan.cxx:295
 AliITSVertexer3DTapan.cxx:296
 AliITSVertexer3DTapan.cxx:297
 AliITSVertexer3DTapan.cxx:298
 AliITSVertexer3DTapan.cxx:299
 AliITSVertexer3DTapan.cxx:300
 AliITSVertexer3DTapan.cxx:301
 AliITSVertexer3DTapan.cxx:302
 AliITSVertexer3DTapan.cxx:303
 AliITSVertexer3DTapan.cxx:304
 AliITSVertexer3DTapan.cxx:305
 AliITSVertexer3DTapan.cxx:306
 AliITSVertexer3DTapan.cxx:307
 AliITSVertexer3DTapan.cxx:308
 AliITSVertexer3DTapan.cxx:309
 AliITSVertexer3DTapan.cxx:310
 AliITSVertexer3DTapan.cxx:311
 AliITSVertexer3DTapan.cxx:312
 AliITSVertexer3DTapan.cxx:313
 AliITSVertexer3DTapan.cxx:314
 AliITSVertexer3DTapan.cxx:315
 AliITSVertexer3DTapan.cxx:316
 AliITSVertexer3DTapan.cxx:317
 AliITSVertexer3DTapan.cxx:318
 AliITSVertexer3DTapan.cxx:319
 AliITSVertexer3DTapan.cxx:320
 AliITSVertexer3DTapan.cxx:321
 AliITSVertexer3DTapan.cxx:322
 AliITSVertexer3DTapan.cxx:323
 AliITSVertexer3DTapan.cxx:324
 AliITSVertexer3DTapan.cxx:325
 AliITSVertexer3DTapan.cxx:326
 AliITSVertexer3DTapan.cxx:327
 AliITSVertexer3DTapan.cxx:328
 AliITSVertexer3DTapan.cxx:329
 AliITSVertexer3DTapan.cxx:330
 AliITSVertexer3DTapan.cxx:331
 AliITSVertexer3DTapan.cxx:332
 AliITSVertexer3DTapan.cxx:333
 AliITSVertexer3DTapan.cxx:334
 AliITSVertexer3DTapan.cxx:335
 AliITSVertexer3DTapan.cxx:336
 AliITSVertexer3DTapan.cxx:337
 AliITSVertexer3DTapan.cxx:338
 AliITSVertexer3DTapan.cxx:339
 AliITSVertexer3DTapan.cxx:340
 AliITSVertexer3DTapan.cxx:341
 AliITSVertexer3DTapan.cxx:342
 AliITSVertexer3DTapan.cxx:343
 AliITSVertexer3DTapan.cxx:344
 AliITSVertexer3DTapan.cxx:345
 AliITSVertexer3DTapan.cxx:346
 AliITSVertexer3DTapan.cxx:347
 AliITSVertexer3DTapan.cxx:348
 AliITSVertexer3DTapan.cxx:349
 AliITSVertexer3DTapan.cxx:350
 AliITSVertexer3DTapan.cxx:351
 AliITSVertexer3DTapan.cxx:352
 AliITSVertexer3DTapan.cxx:353
 AliITSVertexer3DTapan.cxx:354
 AliITSVertexer3DTapan.cxx:355
 AliITSVertexer3DTapan.cxx:356
 AliITSVertexer3DTapan.cxx:357
 AliITSVertexer3DTapan.cxx:358
 AliITSVertexer3DTapan.cxx:359
 AliITSVertexer3DTapan.cxx:360
 AliITSVertexer3DTapan.cxx:361
 AliITSVertexer3DTapan.cxx:362
 AliITSVertexer3DTapan.cxx:363
 AliITSVertexer3DTapan.cxx:364
 AliITSVertexer3DTapan.cxx:365
 AliITSVertexer3DTapan.cxx:366
 AliITSVertexer3DTapan.cxx:367
 AliITSVertexer3DTapan.cxx:368
 AliITSVertexer3DTapan.cxx:369
 AliITSVertexer3DTapan.cxx:370
 AliITSVertexer3DTapan.cxx:371
 AliITSVertexer3DTapan.cxx:372
 AliITSVertexer3DTapan.cxx:373
 AliITSVertexer3DTapan.cxx:374
 AliITSVertexer3DTapan.cxx:375
 AliITSVertexer3DTapan.cxx:376
 AliITSVertexer3DTapan.cxx:377
 AliITSVertexer3DTapan.cxx:378