ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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 <TClonesArray.h>
#include <TTree.h>
#include "AliLog.h"
#include "AliESDVertex.h"
#include "AliITSgeomTGeo.h"
#include "AliITSRecPoint.h"
#include "AliITSReconstructor.h"
#include "AliITSVertexerCosmics.h"
#include "AliStrLine.h"

//------------------------------------------------------------------------
// This class implements a method to construct a "fake" primary
// vertex for cosmic events in which the muon crosses one of 5 inner
// ITS layers. A fake primary vertex is needed for the reconstruction,
// with e.g. AliITStrackerSA, of the two tracks produced by the muon 
// in the ITS.
//   We build pairs of clusters on a given layer and define the fake vertex as
// the mid-point of the straight line joining the two clusters.
//   We use the innermost layer that has at least two clusters.
//   We reject the background by requiring at least one cluster on the outer
// layer, closer than fMaxDistOnOuterLayer to the tracklet prolongation.
//   We can reject (potentially pathological) events with the muon track
// tangential to the layer by the requiring the radial position of
// the vertex to be smaller than fMaxVtxRadius.
//   Due to background clusters, more than one vertex per event can 
// be found. We consider the first found.
//   The errors on x,y,z of the vertex are calculated as errors on the mean
// of clusters coordinates. Non-diag elements of vertex cov. mat. are set to 0.
//   The number of contributors set in the AliESDVertex object is the
// number of the layer on which the tracklet was built; if this number is -1, 
// the procedure could not find a vertex position and by default 
// the vertex coordinates are set to (0,0,0) with large errors (100,100,100)
//
// Origin: A.Dainese, andrea.dainese@lnl.infn.it
//-------------------------------------------------------------------------

ClassImp(AliITSVertexerCosmics)

//-------------------------------------------------------------------------
AliITSVertexerCosmics::AliITSVertexerCosmics():AliITSVertexer(),
fMaxDistOnOuterLayer(0),
fMinDist2Vtxs(0)
{
  // Default constructor
  SetFirstLastModules(0,0,79);
  SetFirstLastModules(1,80,239);
  SetFirstLastModules(2,240,323);
  SetFirstLastModules(3,324,499);
  SetFirstLastModules(4,500,1247);
  SetFirstLastModules(5,1248,2197);
  /*
  SetMaxVtxRadius(0,3.5);
  SetMaxVtxRadius(1,6.5);
  SetMaxVtxRadius(2,14.5);
  SetMaxVtxRadius(3,23.5);
  SetMaxVtxRadius(4,37.5);
  SetMaxVtxRadius(5,42.5);
  */  
  SetMaxVtxRadius(0,5.5);
  SetMaxVtxRadius(1,8.5);
  SetMaxVtxRadius(2,18.5);
  SetMaxVtxRadius(3,28.5);
  SetMaxVtxRadius(4,39.5);
  SetMaxVtxRadius(5,48.5);
  
  SetMaxDistOnOuterLayer();
  SetMinDist2Vtxs();
}
//--------------------------------------------------------------------------
AliESDVertex* AliITSVertexerCosmics::FindVertexForCurrentEvent(TTree *itsClusterTree) 
{
  // Defines the AliESDVertex for the current event

  fCurrentVertex = 0;

  TClonesArray *recpoints=new TClonesArray("AliITSRecPoint",10000);
  itsClusterTree->SetBranchAddress("ITSRecPoints",&recpoints);

  Int_t lay,lad,det; 

  Double_t pos[3]={0.,0.,0.};
  Double_t err[3]={100.,100.,100.};
  Int_t ncontributors = -1;

  // Search for innermost layer with at least two clusters 
  // on two different modules
  Int_t ilayer=0,ilayer2=0;
  Int_t nHitModulesSPDinner=0;
  while(ilayer<AliITSgeomTGeo::GetNLayers()) {
    if(AliITSReconstructor::GetRecoParam()->GetLayersToSkip(ilayer)) {
      ilayer++;
      continue;
    }
    Int_t nHitModules=0;
    for(Int_t imodule=fFirst[ilayer]; imodule<=fLast[ilayer]; imodule++) {
      itsClusterTree->GetEvent(imodule);
      AliITSgeomTGeo::GetModuleId(imodule,lay,lad,det);
      lay -= 1;  // AliITSgeomTGeo gives layer from 1 to 6, we want 0 to 5
      if(lay!=ilayer) AliFatal("Layer mismatch!");
      if(recpoints->GetEntriesFast()>0) nHitModules++;
    }
    if(ilayer==0) nHitModulesSPDinner=nHitModules;
    if(nHitModules>=2) break;
    ilayer++;
  }

  ilayer2=ilayer+1;
  while(ilayer2<6) {
    if(!AliITSReconstructor::GetRecoParam()->GetLayersToSkip(ilayer2)) break;
    ilayer2++;
  }

  // try tracklet on SPD2 and point on SPD1
  if(ilayer==1 && !AliITSReconstructor::GetRecoParam()->GetLayersToSkip(0) &&
     nHitModulesSPDinner>0) { ilayer=0; ilayer2=1; }

  if(ilayer>4 || ilayer2>5) {
    AliWarning("Not enough clusters");
    delete recpoints;
    fCurrentVertex = new AliESDVertex(pos,err,"cosmics");
    fCurrentVertex->SetTitle("cosmics fake vertex (failed)");
    fCurrentVertex->SetNContributors(ncontributors);
    return fCurrentVertex;
  }


  const Int_t arrSize = 1000;
  Float_t xclInnLay[arrSize],yclInnLay[arrSize],zclInnLay[arrSize],modclInnLay[arrSize];
  Float_t e2xclInnLay[arrSize],e2yclInnLay[arrSize],e2zclInnLay[arrSize];
  Float_t e2xclOutLay[arrSize],e2yclOutLay[arrSize],e2zclOutLay[arrSize];
  Int_t nclInnLayStored=0;
  Float_t xclOutLay[arrSize],yclOutLay[arrSize],zclOutLay[arrSize],modclOutLay[arrSize];
  Int_t nclOutLayStored=0;
  Int_t nRecPoints,nRecPointsInnLay=0;

  Float_t gc[3],gcov[6];

  Float_t matchOutLayValue;
  Float_t distxyInnLay,distxyInnLayBest=0.;
  Double_t p1[3],p2[3],p3[3];

  Float_t xvtx,yvtx,zvtx,rvtx;
  Int_t i1InnLayBest=-1,i2InnLayBest=-1;


  // Collect clusters in the selected layer and the outer one
  for(Int_t imodule=fFirst[ilayer]; imodule<=fLast[ilayer2]; imodule++) {
    itsClusterTree->GetEvent(imodule);
    AliITSgeomTGeo::GetModuleId(imodule,lay,lad,det);
    lay -= 1; // AliITSgeomTGeo gives layer from 1 to 6, we want 0 to 5
    nRecPoints=recpoints->GetEntriesFast();
    if(imodule<=fLast[ilayer]) nRecPointsInnLay += nRecPoints;
    //printf("cosmics: module %d clusters %d\n",imodule,nRecPoints);
    for(Int_t irp=0; irp<nRecPoints; irp++) {
      AliITSRecPoint *rp=(AliITSRecPoint*)recpoints->UncheckedAt(irp);
      // Local coordinates of this recpoint
      rp->GetGlobalXYZ(gc);
      if(lay==ilayer) { // store InnLay clusters
	xclInnLay[nclInnLayStored]=gc[0];
	yclInnLay[nclInnLayStored]=gc[1];
	zclInnLay[nclInnLayStored]=gc[2];
	rp->GetGlobalCov(gcov);
	e2xclInnLay[nclInnLayStored]=gcov[0];
	e2yclInnLay[nclInnLayStored]=gcov[3];
	e2zclInnLay[nclInnLayStored]=gcov[5];
	modclInnLay[nclInnLayStored]=imodule;
	nclInnLayStored++;
      }
      if(lay==ilayer2) { // store OutLay clusters
	xclOutLay[nclOutLayStored]=gc[0];
	yclOutLay[nclOutLayStored]=gc[1];
	zclOutLay[nclOutLayStored]=gc[2];
	rp->GetGlobalCov(gcov);
	e2xclOutLay[nclOutLayStored]=gcov[0];
	e2yclOutLay[nclOutLayStored]=gcov[3];
	e2zclOutLay[nclOutLayStored]=gcov[5];
	modclOutLay[nclOutLayStored]=imodule;
	nclOutLayStored++;
      }
      if(nclInnLayStored>arrSize || nclOutLayStored>arrSize) {
	//AliFatal("More than arrSize clusters per layer");
	AliWarning("Too many clusters per layer");
	delete recpoints;
	fCurrentVertex = new AliESDVertex(pos,err,"cosmics");
	fCurrentVertex->SetTitle("cosmics fake vertex (failed)");
	fCurrentVertex->SetNContributors(ncontributors);
	return fCurrentVertex;
      }
    }// end clusters in a module
  }// end modules


  Int_t i1InnLay,i2InnLay,iOutLay;

  // build fake vertices
  //printf("Building tracklets on layer %d\n",ilayer);

  // InnLay - first cluster
  for(i1InnLay=0; i1InnLay<nclInnLayStored; i1InnLay++) { 
    p1[0]=xclInnLay[i1InnLay]; 
    p1[1]=yclInnLay[i1InnLay]; 
    p1[2]=zclInnLay[i1InnLay];
    // InnLay - second cluster
    for(i2InnLay=i1InnLay+1; i2InnLay<nclInnLayStored; i2InnLay++) { 
      if(modclInnLay[i1InnLay]==modclInnLay[i2InnLay]) continue;
      p2[0]=xclInnLay[i2InnLay]; 
      p2[1]=yclInnLay[i2InnLay]; 
      p2[2]=zclInnLay[i2InnLay];
      // look for point on OutLay
      AliStrLine innLayline(p1,p2,kTRUE);
      for(iOutLay=0; iOutLay<nclOutLayStored; iOutLay++) {
	p3[0]=xclOutLay[iOutLay]; 
	p3[1]=yclOutLay[iOutLay]; 
	p3[2]=zclOutLay[iOutLay];
	//printf("(%f,%f) (%f,%f)     (%f,%f) %f\n",p1[0],p1[1],p2[0],p2[1],p3[0],p3[1],innLayline.GetDistFromPoint(p3));
	matchOutLayValue=innLayline.GetDistFromPoint(p3);
	distxyInnLay = (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);
	if(matchOutLayValue<fMaxDistOnOuterLayer &&
	   distxyInnLay>distxyInnLayBest) { 
	  //printf("found\n");
	  distxyInnLayBest=distxyInnLay;
	  i1InnLayBest=i1InnLay;
	  i2InnLayBest=i2InnLay;
	}
      }
    } // InnLay - second cluster
  } // InnLay - first cluster

  if(i1InnLayBest>-1 && i2InnLayBest>-1) { 
    xvtx = 0.5*(xclInnLay[i1InnLayBest]+xclInnLay[i2InnLayBest]);
    yvtx = 0.5*(yclInnLay[i1InnLayBest]+yclInnLay[i2InnLayBest]);
    zvtx = 0.5*(zclInnLay[i1InnLayBest]+zclInnLay[i2InnLayBest]);
    rvtx = TMath::Sqrt(xvtx*xvtx+yvtx*yvtx);
    if(rvtx<fMaxVtxRadius[ilayer]) {
      ncontributors = ilayer;
      pos[0] = xvtx;
      pos[1] = yvtx;
      pos[2] = zvtx;
      err[0]=TMath::Sqrt(0.25*(e2xclInnLay[i1InnLayBest]+e2xclInnLay[i2InnLayBest])); 
      err[1]=TMath::Sqrt(0.25*(e2yclInnLay[i1InnLayBest]+e2yclInnLay[i2InnLayBest])); 
      err[2]=TMath::Sqrt(0.25*(e2zclInnLay[i1InnLayBest]+e2zclInnLay[i2InnLayBest]));
    }

  } else { // give it a try exchanging InnLay and OutLay

    // OutLay - first cluster
    for(i1InnLay=0; i1InnLay<nclOutLayStored; i1InnLay++) { 
      p1[0]=xclOutLay[i1InnLay]; 
      p1[1]=yclOutLay[i1InnLay]; 
      p1[2]=zclOutLay[i1InnLay];
      // OutLay - second cluster
      for(i2InnLay=i1InnLay+1; i2InnLay<nclOutLayStored; i2InnLay++) { 
	if(modclOutLay[i1InnLay]==modclOutLay[i2InnLay]) continue;
	p2[0]=xclOutLay[i2InnLay]; 
	p2[1]=yclOutLay[i2InnLay]; 
	p2[2]=zclOutLay[i2InnLay];
	// look for point on InnLay
	AliStrLine outLayline(p1,p2,kTRUE);
	for(iOutLay=0; iOutLay<nclInnLayStored; iOutLay++) {
	  p3[0]=xclInnLay[iOutLay]; 
	  p3[1]=yclInnLay[iOutLay]; 
	  p3[2]=zclInnLay[iOutLay];
	  //printf(" %f\n",InnLayline.GetDistFromPoint(p3));
	  matchOutLayValue=outLayline.GetDistFromPoint(p3);
	  distxyInnLay = (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);
	  if(matchOutLayValue<fMaxDistOnOuterLayer &&
	     distxyInnLay>distxyInnLayBest) { 
	    distxyInnLayBest=distxyInnLay;
	    i1InnLayBest=i1InnLay;
	    i2InnLayBest=i2InnLay;
	  }
	}
      } // OutLay - second cluster
    } // OutLay - first cluster

    if(i1InnLayBest>-1 && i2InnLayBest>-1) { 
      xvtx = 0.5*(xclOutLay[i1InnLayBest]+xclOutLay[i2InnLayBest]);
      yvtx = 0.5*(yclOutLay[i1InnLayBest]+yclOutLay[i2InnLayBest]);
      zvtx = 0.5*(zclOutLay[i1InnLayBest]+zclOutLay[i2InnLayBest]);
      rvtx = TMath::Sqrt(xvtx*xvtx+yvtx*yvtx);
      if(rvtx<fMaxVtxRadius[ilayer]) {
	ncontributors = ilayer2;
	pos[0] = xvtx;
	pos[1] = yvtx;
	pos[2] = zvtx;
	err[0]=TMath::Sqrt(0.25*(e2xclOutLay[i1InnLayBest]+e2xclOutLay[i2InnLayBest])); 
	err[1]=TMath::Sqrt(0.25*(e2yclOutLay[i1InnLayBest]+e2yclOutLay[i2InnLayBest])); 
	err[2]=TMath::Sqrt(0.25*(e2zclOutLay[i1InnLayBest]+e2zclOutLay[i2InnLayBest]));
      }
    }
  } // give it a try exchanging InnLay and OutLay

  fCurrentVertex = new AliESDVertex(pos,err,"cosmics");
  fCurrentVertex->SetTitle("cosmics fake vertex");
  fCurrentVertex->SetNContributors(ncontributors);
  //fCurrentVertex->Print();
  if(fComputeMultiplicity) FindMultiplicity(itsClusterTree);

  delete recpoints;

  return fCurrentVertex;
}  

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