ROOT logo
#include <TFile.h>
#include <TH1.h>
#include <TH2.h>
#include <TTree.h>
#include "AliGeomManager.h"
#include "AliITSDetTypeRec.h"
#include "AliITSInitGeometry.h"
#include "AliITSMeanVertexer.h"
#include "AliITSRecPointContainer.h"
#include "AliITSLoader.h"
#include "AliLog.h"
#include "AliRawReader.h"
#include "AliRawReaderDate.h"
#include "AliRawReaderRoot.h"
#include "AliRunLoader.h"
#include "AliITSVertexer3D.h"
#include "AliITSVertexer3DTapan.h"
#include "AliESDVertex.h"
#include "AliMeanVertex.h"
//#include "AliCodeTimer.h"

const Int_t AliITSMeanVertexer::fgkMaxNumOfEvents = 10000;
ClassImp(AliITSMeanVertexer)
///////////////////////////////////////////////////////////////////////
//                                                                   //
// Class to compute vertex position using SPD local reconstruction   //
// An average vertex position using all the events                   //
// is built and saved                                                //
// Individual vertices can be optionally stored                      //
// Origin: M.Masera  (masera@to.infn.it)                             //
// Usage:                                                            //
// Class used by the ITSSPDVertexDiamondda.cxx detector algorithm    //
///////////////////////////////////////////////////////////////////////
/* $Id$ */
//______________________________________________________________________
AliITSMeanVertexer::AliITSMeanVertexer(Bool_t mode):TObject(),
fDetTypeRec(NULL),
fVertexXY(NULL),
fVertexZ(NULL),
fNoEventsContr(0),
fTotContributors(0.),
fAverContributors(0.), 
fFilterOnContributors(0),
fMode(mode),
fVertexer(NULL),
fAccEvents(fgkMaxNumOfEvents), 
fVertArray("AliESDVertex",fgkMaxNumOfEvents),
fClu0(NULL),
fIndex(0),
fErrXCut(0.),
fRCut(0.),
fZCutDiamond(0.),
fLowSPD0(0),
fHighSPD0(0),
fMultH(NULL),
fErrXH(NULL),
fMultHa(NULL),
fErrXHa(NULL),
fDistH(NULL),
fContrH(NULL),
fContrHa(NULL)
{
  // Default Constructor
  SetZFiducialRegion();   //  sets fZCutDiamond to its default value
  Reset(kFALSE,kFALSE);

  // Histograms initialization
  const Float_t xLimit = 0.6, yLimit = 0.6, zLimit = 50.0;
  const Float_t xDelta = 0.003, yDelta = 0.003, zDelta = 0.2;
  fVertexXY = new TH2F("VertexXY","Vertex Diamond (Y vs X)",
		       2*(Int_t)(xLimit/xDelta),-xLimit,xLimit,
		       2*(Int_t)(yLimit/yDelta),-yLimit,yLimit);
  fVertexXY->SetXTitle("X , cm");
  fVertexXY->SetYTitle("Y , cm");
  fVertexXY->SetOption("colz");
  fVertexZ  = new TH1F("VertexZ"," Longitudinal Vertex Profile",
		       2*(Int_t)(zLimit/zDelta),-zLimit,zLimit);
  fVertexZ->SetXTitle("Z , cm");
  fErrXH = new TH1F("errorX","Error X - before cuts",100,0.,99.);
  fMultH = new TH1F("multh","mult on layer 1 before cuts",2400,0.,7200.);
  fErrXHa = new TH1F("errorXa","Error X - after Filter",100,0.,99.);
  fErrXHa->SetLineColor(kRed);
  fMultHa = new TH1F("multha","mult on layer 1 - after Filter",2400,0.,7200.);
  fMultHa->SetLineColor(kRed);
  fDistH = new TH1F("disth","distance (mm)",100,0.,30.);
  fContrH = new TH1F("contrib","Number of contributors - before cuts",300,0.5,300.5);
  fContrHa = new TH1F("contriba","Number of contributors - after cuts",300,0.5,300.5);
  fContrHa->SetLineColor(kRed);

  fClu0 = new UInt_t [fgkMaxNumOfEvents];
  for(Int_t i=0;i<fgkMaxNumOfEvents;i++)fClu0[i]=0;
  fAccEvents.ResetAllBits(kTRUE);
}

//______________________________________________________________________
void AliITSMeanVertexer::Reset(Bool_t redefine2D,Bool_t complete){
  // Reset averages 
  // Both arguments are kFALSE when the method is called by the constructor
  // redefine2D is TRUE when the method is called by ComputeMean at the second
  //            pass.
  // redefine2D is FALSE and complete is TRUE when the method is called
  //            after a failure cof ComputeMean(kTRUE)

  static Int_t counter = 0;
  if(fVertexXY && redefine2D){
    counter++;
    Double_t rangeX=fVertexXY->GetXaxis()->GetXmax()-fVertexXY->GetXaxis()->GetXmin();
    Double_t rangeY=fVertexXY->GetYaxis()->GetXmax()-fVertexXY->GetYaxis()->GetXmin();
    Int_t nx=fVertexXY->GetNbinsX();
    Int_t ny=fVertexXY->GetNbinsY();
    delete fVertexXY;
    Double_t xmi=fWeighPos[0]-rangeX/2.;
    Double_t xma=fWeighPos[0]+rangeX/2.;
    Double_t ymi=fWeighPos[1]-rangeY/2.;
    Double_t yma=fWeighPos[1]+rangeY/2.;
    fVertexXY = new TH2F("VertexXY","Vertex Diamond (Y vs X)",nx,xmi,xma,ny,ymi,yma);
    fVertexXY->SetXTitle("X , cm");
    fVertexXY->SetYTitle("Y , cm");
    fVertexXY->SetOption("colz");
    fVertexXY->SetDirectory(0);
  }
  else if(fVertexXY && !redefine2D){
    fVertexXY->Reset();
  }
  if(fVertexZ){
    fVertexZ->Reset();
    fDistH->Reset();
    if(complete){
      fErrXH->Reset();
      fMultH->Reset();
      fErrXHa->Reset(); 
      fMultHa->Reset();
      fContrH->Reset();
      fContrHa->Reset();
    }
  }
  for(Int_t i=0;i<3;i++){
    fWeighPosSum[i] = 0.;
    fWeighSigSum[i] = 0.;
    fAverPosSum[i] = 0.;
    fWeighPos[i] = 0.;
    fWeighSig[i] = 0.;
    fAverPos[i] = 0.;
    for(Int_t j=0; j<3;j++)fAverPosSq[i][j] = 0.;
    for(Int_t j=0; j<3;j++)fAverPosSqSum[i][j] = 0.;
    fNoEventsContr=0;
    fTotContributors = 0.;
  }
}
//______________________________________________________________________
Bool_t AliITSMeanVertexer::Init() {
  // Initialize filters
  // Initialize geometry
  // Initialize ITS classes
 
  AliGeomManager::LoadGeometry();
  if (!AliGeomManager::ApplyAlignObjsFromCDB("ITS")) return kFALSE;

  AliITSInitGeometry initgeom;
  AliITSgeom *geom = initgeom.CreateAliITSgeom();
  if (!geom) return kFALSE;
  printf("Geometry name: %s \n",(initgeom.GetGeometryName()).Data());

  fDetTypeRec = new AliITSDetTypeRec();
  fDetTypeRec->SetLoadOnlySPDCalib(kTRUE);
  fDetTypeRec->SetITSgeom(geom);
  fDetTypeRec->SetDefaults();
  fDetTypeRec->SetDefaultClusterFindersV2(kTRUE);

  // Initialize filter values to their defaults
  SetFilterOnContributors();
  SetCutOnErrX();
  SetCutOnR();
  SetCutOnCls();

  // Instatiate vertexer
  if (!fMode) {
    fVertexer = new AliITSVertexer3DTapan(1000);
  }
  else {
    fVertexer = new AliITSVertexer3D();
    fVertexer->SetDetTypeRec(fDetTypeRec);
    AliITSVertexer3D* alias = (AliITSVertexer3D*)fVertexer;
    alias->SetWideFiducialRegion(fZCutDiamond,0.5);
    alias->SetNarrowFiducialRegion(0.5,0.5);
    alias->SetDeltaPhiCuts(0.5,0.025);
    alias->SetDCACut(0.1);
    alias->SetPileupAlgo(3);
    fVertexer->SetComputeMultiplicity(kFALSE);
  }
  return kTRUE;
}

//______________________________________________________________________
AliITSMeanVertexer::~AliITSMeanVertexer() {
  // Destructor
  delete fDetTypeRec;
  delete fVertexXY;
  delete fVertexZ;
  delete fMultH;
  delete fErrXH;
  delete fMultHa;
  delete fErrXHa;
  delete fDistH;
  delete fContrH;
  delete fContrHa;
  delete fVertexer;
}

//______________________________________________________________________
Bool_t AliITSMeanVertexer::Reconstruct(AliRawReader *rawReader){
  // Performs SPD local reconstruction
  // and vertex finding
  // returns true in case a vertex is found

  // Run SPD cluster finder
  static Int_t evcount = -1;
  if(evcount <0){
    evcount++;
    AliInfo(Form("Low and high cuts on SPD L0 clusters %d , %d \n",fLowSPD0,fHighSPD0));
    AliInfo(Form("Reconstruct: cut on errX %f \n",fErrXCut));
  }
//  AliCodeTimerAuto("",0);
  AliITSRecPointContainer::Instance()->PrepareToRead();
  TTree* clustersTree = new TTree("TreeR", "Reconstructed Points Container"); //make a tree
  fDetTypeRec->DigitsToRecPoints(rawReader,clustersTree,"SPD");

  Bool_t vtxOK = kFALSE;
  UInt_t nl1=0;
  AliESDVertex *vtx = fVertexer->FindVertexForCurrentEvent(clustersTree);
  if (!fMode) {
    if (TMath::Abs(vtx->GetChi2()) < 0.1) vtxOK = kTRUE;
  }
  else {
    AliITSRecPointContainer* rpcont= AliITSRecPointContainer::Instance();
    nl1=rpcont->GetNClustersInLayerFast(1);
    if(Filter(vtx,nl1)) vtxOK = kTRUE;
    /*    if(vtx){
      if(vtxOK){
	printf("The vertex is OK\n");
      }
      else {
	printf("The vertex is NOT OK\n");
      }
      vtx->PrintStatus();
    }
    else {
      printf("The vertex was not reconstructed\n");
      }  */
  }
  delete clustersTree;
  if (vtxOK && fMode){
    new(fVertArray[fIndex])AliESDVertex(*vtx);
    fClu0[fIndex]=nl1;
    fAccEvents.SetBitNumber(fIndex);
    fIndex++;
    if(fIndex>=fgkMaxNumOfEvents){
      if(ComputeMean(kFALSE)){
	if(ComputeMean(kTRUE))AliInfo("Mean vertex computed");
      }
    }
  }
  if (vtx) delete vtx;

  return vtxOK;
}

//______________________________________________________________________
void AliITSMeanVertexer::WriteVertices(const char *filename){
  // Compute mean vertex and
  // store it along with the histograms
  // in a file
  
  TFile fmv(filename,"update");
  Bool_t itisOK = kFALSE;
  if(ComputeMean(kFALSE)){
    if(ComputeMean(kTRUE)){
      Double_t cov[6];
      cov[0] =  fAverPosSq[0][0];  // variance x
      cov[1] =  fAverPosSq[0][1];  // cov xy
      cov[2] =  fAverPosSq[1][1];  // variance y
      cov[3] =  fAverPosSq[0][2];  // cov xz
      cov[4] =  fAverPosSq[1][2];  // cov yz
      cov[5] =  fAverPosSq[2][2];  // variance z
      // We use standard average and not weighed averag now
      // AliMeanVertex is apparently not taken by the preprocessor; only
      // the AliESDVertex object is retrieved
      //      AliMeanVertex mv(fWeighPos,fWeighSig,cov,fNoEventsContr,0,0.,0.);
      AliMeanVertex mv(fAverPos,fWeighSig,cov,fNoEventsContr,0,0.,0.);
      mv.SetTitle("Mean Vertex");
      mv.SetName("MeanVertex");
      // we have to add chi2 here
      //      AliESDVertex vtx(fWeighPos,cov,0,TMath::Nint(fAverContributors),"MeanVertexPos");
      AliESDVertex vtx(fAverPos,cov,0,TMath::Nint(fAverContributors),"MeanVertexPos");

      mv.Write(mv.GetName(),TObject::kOverwrite);
      vtx.Write(vtx.GetName(),TObject::kOverwrite);
      itisOK = kTRUE;
    }
  }

  if(!itisOK){
    AliError(Form("Evaluation of mean vertex not possible. Number of used events = %d",fNoEventsContr));
  }

  fVertexXY->Write(fVertexXY->GetName(),TObject::kOverwrite);
  fVertexZ->Write(fVertexZ->GetName(),TObject::kOverwrite);
  fMultH->Write(fMultH->GetName(),TObject::kOverwrite);
  fErrXH->Write(fErrXH->GetName(),TObject::kOverwrite);
  fMultHa->Write(fMultHa->GetName(),TObject::kOverwrite);
  fErrXHa->Write(fErrXHa->GetName(),TObject::kOverwrite);
  fDistH->Write(fDistH->GetName(),TObject::kOverwrite);
  fContrH->Write(fContrH->GetName(),TObject::kOverwrite);
  fContrHa->Write(fContrHa->GetName(),TObject::kOverwrite);
  fmv.Close();
}

//______________________________________________________________________
Bool_t AliITSMeanVertexer::Filter(AliESDVertex *vert,UInt_t mult){
  // Apply selection criteria to events
  Bool_t status = kFALSE;
  if(!vert)return status;
  // Remove vertices reconstructed with vertexerZ
  if(strcmp(vert->GetName(),"SPDVertexZ") == 0) return status;
  Int_t ncontr = vert->GetNContributors();
  AliDebug(1,Form("Number of contributors = %d",ncontr));
  Double_t ex = vert->GetXRes();
  fMultH->Fill(mult);
  fErrXH->Fill(ex*1000.);
  fContrH->Fill((Float_t)ncontr);
  if(ncontr>fFilterOnContributors && (mult>fLowSPD0 && mult<fHighSPD0) && 
     ((ex*1000.)<fErrXCut)) {
    status = kTRUE;
    fMultHa->Fill(mult);
    fErrXHa->Fill(ex*1000.);
    fContrHa->Fill((Float_t)ncontr);
  }
  return status;
}

//______________________________________________________________________
void AliITSMeanVertexer::AddToMean(AliESDVertex *vert){
  // update mean vertex
  Double_t currentPos[3],currentSigma[3];
  vert->GetXYZ(currentPos);
  vert->GetSigmaXYZ(currentSigma);
  Bool_t goon = kTRUE;
  for(Int_t i=0;i<3;i++)if(currentSigma[i] == 0.)goon = kFALSE;
  if(!goon)return;
  for(Int_t i=0;i<3;i++){
    fWeighPosSum[i]+=currentPos[i]/currentSigma[i]/currentSigma[i];
    fWeighSigSum[i]+=1./currentSigma[i]/currentSigma[i];
    fAverPosSum[i]+=currentPos[i];
  }
  for(Int_t i=0;i<3;i++){
    for(Int_t j=i;j<3;j++){
      fAverPosSqSum[i][j] += currentPos[i] * currentPos[j];
    }
  }

  fTotContributors+=vert->GetNContributors();
  fVertexXY->Fill(currentPos[0],currentPos[1]);
  fVertexZ->Fill(currentPos[2]);

  fNoEventsContr++;
}

//______________________________________________________________________
 Bool_t AliITSMeanVertexer::ComputeMean(Bool_t killOutliers){
   // compute mean vertex
   // called once with killOutliers = kFALSE and then again with
   // killOutliers = kTRUE

   static Bool_t preliminary = kTRUE;
   static Int_t oldnumbevt = 0;
   if(!(preliminary || killOutliers))return kTRUE;  //ComputeMean is
                             // executed only once with argument kFALSE
   Double_t wpos[3];
   for(Int_t i=0;i<3;i++)wpos[i]=fWeighPos[i];

   Int_t istart = oldnumbevt;
   if(killOutliers)istart = 0;
   if(killOutliers && preliminary){
     preliminary = kFALSE;
     Reset(kTRUE,kFALSE);
   }
   oldnumbevt = fVertArray.GetEntries();
   for(Int_t i=istart;i<fVertArray.GetEntries();i++){
     AliESDVertex* vert = NULL;

     // second pass
     if(killOutliers && fAccEvents.TestBitNumber(i)){
       vert=(AliESDVertex*)fVertArray[i];
       Double_t dist=(vert->GetX()-wpos[0])*(vert->GetX()-wpos[0]);
       dist+=(vert->GetY()-wpos[1])*(vert->GetY()-wpos[1]);
       dist=sqrt(dist)*10.;    // distance in mm
       fDistH->Fill(dist);
       if(dist>fRCut)fAccEvents.SetBitNumber(i,kFALSE);
     }
     
     if(!fAccEvents.TestBitNumber(i))continue;
     vert=(AliESDVertex*)fVertArray[i];
     AddToMean(vert);
   }
   Bool_t bad = ((!killOutliers) && fNoEventsContr < 5) || (killOutliers && fNoEventsContr <2);
   if(bad) {
     if(killOutliers){  
// when the control reachs this point, the preliminary evaluation of the
// diamond region has to be redone. So a general reset must be issued
// if this occurs, it is likely that the cuts are badly defined
       ResetArray();
       Reset(kFALSE,kTRUE);
       preliminary = kTRUE;
       oldnumbevt = 0;
     }
     return kFALSE;
   }
   Double_t nevents = fNoEventsContr;
   for(Int_t i=0;i<3;i++){
     fWeighPos[i] = fWeighPosSum[i]/fWeighSigSum[i]; 
     fWeighSig[i] = 1./TMath::Sqrt(fWeighSigSum[i]);
     fAverPos[i] = fAverPosSum[i]/nevents;
   } 
   for(Int_t i=0;i<3;i++){
     for(Int_t j=i;j<3;j++){
       fAverPosSq[i][j] = fAverPosSqSum[i][j]/(nevents -1.);
       fAverPosSq[i][j] -= nevents/(nevents -1.)*fAverPos[i]*fAverPos[j];
     }
   } 
   if(killOutliers)ResetArray();
   fAverContributors = fTotContributors/nevents;
   return kTRUE;
 }
 AliITSMeanVertexer.cxx:1
 AliITSMeanVertexer.cxx:2
 AliITSMeanVertexer.cxx:3
 AliITSMeanVertexer.cxx:4
 AliITSMeanVertexer.cxx:5
 AliITSMeanVertexer.cxx:6
 AliITSMeanVertexer.cxx:7
 AliITSMeanVertexer.cxx:8
 AliITSMeanVertexer.cxx:9
 AliITSMeanVertexer.cxx:10
 AliITSMeanVertexer.cxx:11
 AliITSMeanVertexer.cxx:12
 AliITSMeanVertexer.cxx:13
 AliITSMeanVertexer.cxx:14
 AliITSMeanVertexer.cxx:15
 AliITSMeanVertexer.cxx:16
 AliITSMeanVertexer.cxx:17
 AliITSMeanVertexer.cxx:18
 AliITSMeanVertexer.cxx:19
 AliITSMeanVertexer.cxx:20
 AliITSMeanVertexer.cxx:21
 AliITSMeanVertexer.cxx:22
 AliITSMeanVertexer.cxx:23
 AliITSMeanVertexer.cxx:24
 AliITSMeanVertexer.cxx:25
 AliITSMeanVertexer.cxx:26
 AliITSMeanVertexer.cxx:27
 AliITSMeanVertexer.cxx:28
 AliITSMeanVertexer.cxx:29
 AliITSMeanVertexer.cxx:30
 AliITSMeanVertexer.cxx:31
 AliITSMeanVertexer.cxx:32
 AliITSMeanVertexer.cxx:33
 AliITSMeanVertexer.cxx:34
 AliITSMeanVertexer.cxx:35
 AliITSMeanVertexer.cxx:36
 AliITSMeanVertexer.cxx:37
 AliITSMeanVertexer.cxx:38
 AliITSMeanVertexer.cxx:39
 AliITSMeanVertexer.cxx:40
 AliITSMeanVertexer.cxx:41
 AliITSMeanVertexer.cxx:42
 AliITSMeanVertexer.cxx:43
 AliITSMeanVertexer.cxx:44
 AliITSMeanVertexer.cxx:45
 AliITSMeanVertexer.cxx:46
 AliITSMeanVertexer.cxx:47
 AliITSMeanVertexer.cxx:48
 AliITSMeanVertexer.cxx:49
 AliITSMeanVertexer.cxx:50
 AliITSMeanVertexer.cxx:51
 AliITSMeanVertexer.cxx:52
 AliITSMeanVertexer.cxx:53
 AliITSMeanVertexer.cxx:54
 AliITSMeanVertexer.cxx:55
 AliITSMeanVertexer.cxx:56
 AliITSMeanVertexer.cxx:57
 AliITSMeanVertexer.cxx:58
 AliITSMeanVertexer.cxx:59
 AliITSMeanVertexer.cxx:60
 AliITSMeanVertexer.cxx:61
 AliITSMeanVertexer.cxx:62
 AliITSMeanVertexer.cxx:63
 AliITSMeanVertexer.cxx:64
 AliITSMeanVertexer.cxx:65
 AliITSMeanVertexer.cxx:66
 AliITSMeanVertexer.cxx:67
 AliITSMeanVertexer.cxx:68
 AliITSMeanVertexer.cxx:69
 AliITSMeanVertexer.cxx:70
 AliITSMeanVertexer.cxx:71
 AliITSMeanVertexer.cxx:72
 AliITSMeanVertexer.cxx:73
 AliITSMeanVertexer.cxx:74
 AliITSMeanVertexer.cxx:75
 AliITSMeanVertexer.cxx:76
 AliITSMeanVertexer.cxx:77
 AliITSMeanVertexer.cxx:78
 AliITSMeanVertexer.cxx:79
 AliITSMeanVertexer.cxx:80
 AliITSMeanVertexer.cxx:81
 AliITSMeanVertexer.cxx:82
 AliITSMeanVertexer.cxx:83
 AliITSMeanVertexer.cxx:84
 AliITSMeanVertexer.cxx:85
 AliITSMeanVertexer.cxx:86
 AliITSMeanVertexer.cxx:87
 AliITSMeanVertexer.cxx:88
 AliITSMeanVertexer.cxx:89
 AliITSMeanVertexer.cxx:90
 AliITSMeanVertexer.cxx:91
 AliITSMeanVertexer.cxx:92
 AliITSMeanVertexer.cxx:93
 AliITSMeanVertexer.cxx:94
 AliITSMeanVertexer.cxx:95
 AliITSMeanVertexer.cxx:96
 AliITSMeanVertexer.cxx:97
 AliITSMeanVertexer.cxx:98
 AliITSMeanVertexer.cxx:99
 AliITSMeanVertexer.cxx:100
 AliITSMeanVertexer.cxx:101
 AliITSMeanVertexer.cxx:102
 AliITSMeanVertexer.cxx:103
 AliITSMeanVertexer.cxx:104
 AliITSMeanVertexer.cxx:105
 AliITSMeanVertexer.cxx:106
 AliITSMeanVertexer.cxx:107
 AliITSMeanVertexer.cxx:108
 AliITSMeanVertexer.cxx:109
 AliITSMeanVertexer.cxx:110
 AliITSMeanVertexer.cxx:111
 AliITSMeanVertexer.cxx:112
 AliITSMeanVertexer.cxx:113
 AliITSMeanVertexer.cxx:114
 AliITSMeanVertexer.cxx:115
 AliITSMeanVertexer.cxx:116
 AliITSMeanVertexer.cxx:117
 AliITSMeanVertexer.cxx:118
 AliITSMeanVertexer.cxx:119
 AliITSMeanVertexer.cxx:120
 AliITSMeanVertexer.cxx:121
 AliITSMeanVertexer.cxx:122
 AliITSMeanVertexer.cxx:123
 AliITSMeanVertexer.cxx:124
 AliITSMeanVertexer.cxx:125
 AliITSMeanVertexer.cxx:126
 AliITSMeanVertexer.cxx:127
 AliITSMeanVertexer.cxx:128
 AliITSMeanVertexer.cxx:129
 AliITSMeanVertexer.cxx:130
 AliITSMeanVertexer.cxx:131
 AliITSMeanVertexer.cxx:132
 AliITSMeanVertexer.cxx:133
 AliITSMeanVertexer.cxx:134
 AliITSMeanVertexer.cxx:135
 AliITSMeanVertexer.cxx:136
 AliITSMeanVertexer.cxx:137
 AliITSMeanVertexer.cxx:138
 AliITSMeanVertexer.cxx:139
 AliITSMeanVertexer.cxx:140
 AliITSMeanVertexer.cxx:141
 AliITSMeanVertexer.cxx:142
 AliITSMeanVertexer.cxx:143
 AliITSMeanVertexer.cxx:144
 AliITSMeanVertexer.cxx:145
 AliITSMeanVertexer.cxx:146
 AliITSMeanVertexer.cxx:147
 AliITSMeanVertexer.cxx:148
 AliITSMeanVertexer.cxx:149
 AliITSMeanVertexer.cxx:150
 AliITSMeanVertexer.cxx:151
 AliITSMeanVertexer.cxx:152
 AliITSMeanVertexer.cxx:153
 AliITSMeanVertexer.cxx:154
 AliITSMeanVertexer.cxx:155
 AliITSMeanVertexer.cxx:156
 AliITSMeanVertexer.cxx:157
 AliITSMeanVertexer.cxx:158
 AliITSMeanVertexer.cxx:159
 AliITSMeanVertexer.cxx:160
 AliITSMeanVertexer.cxx:161
 AliITSMeanVertexer.cxx:162
 AliITSMeanVertexer.cxx:163
 AliITSMeanVertexer.cxx:164
 AliITSMeanVertexer.cxx:165
 AliITSMeanVertexer.cxx:166
 AliITSMeanVertexer.cxx:167
 AliITSMeanVertexer.cxx:168
 AliITSMeanVertexer.cxx:169
 AliITSMeanVertexer.cxx:170
 AliITSMeanVertexer.cxx:171
 AliITSMeanVertexer.cxx:172
 AliITSMeanVertexer.cxx:173
 AliITSMeanVertexer.cxx:174
 AliITSMeanVertexer.cxx:175
 AliITSMeanVertexer.cxx:176
 AliITSMeanVertexer.cxx:177
 AliITSMeanVertexer.cxx:178
 AliITSMeanVertexer.cxx:179
 AliITSMeanVertexer.cxx:180
 AliITSMeanVertexer.cxx:181
 AliITSMeanVertexer.cxx:182
 AliITSMeanVertexer.cxx:183
 AliITSMeanVertexer.cxx:184
 AliITSMeanVertexer.cxx:185
 AliITSMeanVertexer.cxx:186
 AliITSMeanVertexer.cxx:187
 AliITSMeanVertexer.cxx:188
 AliITSMeanVertexer.cxx:189
 AliITSMeanVertexer.cxx:190
 AliITSMeanVertexer.cxx:191
 AliITSMeanVertexer.cxx:192
 AliITSMeanVertexer.cxx:193
 AliITSMeanVertexer.cxx:194
 AliITSMeanVertexer.cxx:195
 AliITSMeanVertexer.cxx:196
 AliITSMeanVertexer.cxx:197
 AliITSMeanVertexer.cxx:198
 AliITSMeanVertexer.cxx:199
 AliITSMeanVertexer.cxx:200
 AliITSMeanVertexer.cxx:201
 AliITSMeanVertexer.cxx:202
 AliITSMeanVertexer.cxx:203
 AliITSMeanVertexer.cxx:204
 AliITSMeanVertexer.cxx:205
 AliITSMeanVertexer.cxx:206
 AliITSMeanVertexer.cxx:207
 AliITSMeanVertexer.cxx:208
 AliITSMeanVertexer.cxx:209
 AliITSMeanVertexer.cxx:210
 AliITSMeanVertexer.cxx:211
 AliITSMeanVertexer.cxx:212
 AliITSMeanVertexer.cxx:213
 AliITSMeanVertexer.cxx:214
 AliITSMeanVertexer.cxx:215
 AliITSMeanVertexer.cxx:216
 AliITSMeanVertexer.cxx:217
 AliITSMeanVertexer.cxx:218
 AliITSMeanVertexer.cxx:219
 AliITSMeanVertexer.cxx:220
 AliITSMeanVertexer.cxx:221
 AliITSMeanVertexer.cxx:222
 AliITSMeanVertexer.cxx:223
 AliITSMeanVertexer.cxx:224
 AliITSMeanVertexer.cxx:225
 AliITSMeanVertexer.cxx:226
 AliITSMeanVertexer.cxx:227
 AliITSMeanVertexer.cxx:228
 AliITSMeanVertexer.cxx:229
 AliITSMeanVertexer.cxx:230
 AliITSMeanVertexer.cxx:231
 AliITSMeanVertexer.cxx:232
 AliITSMeanVertexer.cxx:233
 AliITSMeanVertexer.cxx:234
 AliITSMeanVertexer.cxx:235
 AliITSMeanVertexer.cxx:236
 AliITSMeanVertexer.cxx:237
 AliITSMeanVertexer.cxx:238
 AliITSMeanVertexer.cxx:239
 AliITSMeanVertexer.cxx:240
 AliITSMeanVertexer.cxx:241
 AliITSMeanVertexer.cxx:242
 AliITSMeanVertexer.cxx:243
 AliITSMeanVertexer.cxx:244
 AliITSMeanVertexer.cxx:245
 AliITSMeanVertexer.cxx:246
 AliITSMeanVertexer.cxx:247
 AliITSMeanVertexer.cxx:248
 AliITSMeanVertexer.cxx:249
 AliITSMeanVertexer.cxx:250
 AliITSMeanVertexer.cxx:251
 AliITSMeanVertexer.cxx:252
 AliITSMeanVertexer.cxx:253
 AliITSMeanVertexer.cxx:254
 AliITSMeanVertexer.cxx:255
 AliITSMeanVertexer.cxx:256
 AliITSMeanVertexer.cxx:257
 AliITSMeanVertexer.cxx:258
 AliITSMeanVertexer.cxx:259
 AliITSMeanVertexer.cxx:260
 AliITSMeanVertexer.cxx:261
 AliITSMeanVertexer.cxx:262
 AliITSMeanVertexer.cxx:263
 AliITSMeanVertexer.cxx:264
 AliITSMeanVertexer.cxx:265
 AliITSMeanVertexer.cxx:266
 AliITSMeanVertexer.cxx:267
 AliITSMeanVertexer.cxx:268
 AliITSMeanVertexer.cxx:269
 AliITSMeanVertexer.cxx:270
 AliITSMeanVertexer.cxx:271
 AliITSMeanVertexer.cxx:272
 AliITSMeanVertexer.cxx:273
 AliITSMeanVertexer.cxx:274
 AliITSMeanVertexer.cxx:275
 AliITSMeanVertexer.cxx:276
 AliITSMeanVertexer.cxx:277
 AliITSMeanVertexer.cxx:278
 AliITSMeanVertexer.cxx:279
 AliITSMeanVertexer.cxx:280
 AliITSMeanVertexer.cxx:281
 AliITSMeanVertexer.cxx:282
 AliITSMeanVertexer.cxx:283
 AliITSMeanVertexer.cxx:284
 AliITSMeanVertexer.cxx:285
 AliITSMeanVertexer.cxx:286
 AliITSMeanVertexer.cxx:287
 AliITSMeanVertexer.cxx:288
 AliITSMeanVertexer.cxx:289
 AliITSMeanVertexer.cxx:290
 AliITSMeanVertexer.cxx:291
 AliITSMeanVertexer.cxx:292
 AliITSMeanVertexer.cxx:293
 AliITSMeanVertexer.cxx:294
 AliITSMeanVertexer.cxx:295
 AliITSMeanVertexer.cxx:296
 AliITSMeanVertexer.cxx:297
 AliITSMeanVertexer.cxx:298
 AliITSMeanVertexer.cxx:299
 AliITSMeanVertexer.cxx:300
 AliITSMeanVertexer.cxx:301
 AliITSMeanVertexer.cxx:302
 AliITSMeanVertexer.cxx:303
 AliITSMeanVertexer.cxx:304
 AliITSMeanVertexer.cxx:305
 AliITSMeanVertexer.cxx:306
 AliITSMeanVertexer.cxx:307
 AliITSMeanVertexer.cxx:308
 AliITSMeanVertexer.cxx:309
 AliITSMeanVertexer.cxx:310
 AliITSMeanVertexer.cxx:311
 AliITSMeanVertexer.cxx:312
 AliITSMeanVertexer.cxx:313
 AliITSMeanVertexer.cxx:314
 AliITSMeanVertexer.cxx:315
 AliITSMeanVertexer.cxx:316
 AliITSMeanVertexer.cxx:317
 AliITSMeanVertexer.cxx:318
 AliITSMeanVertexer.cxx:319
 AliITSMeanVertexer.cxx:320
 AliITSMeanVertexer.cxx:321
 AliITSMeanVertexer.cxx:322
 AliITSMeanVertexer.cxx:323
 AliITSMeanVertexer.cxx:324
 AliITSMeanVertexer.cxx:325
 AliITSMeanVertexer.cxx:326
 AliITSMeanVertexer.cxx:327
 AliITSMeanVertexer.cxx:328
 AliITSMeanVertexer.cxx:329
 AliITSMeanVertexer.cxx:330
 AliITSMeanVertexer.cxx:331
 AliITSMeanVertexer.cxx:332
 AliITSMeanVertexer.cxx:333
 AliITSMeanVertexer.cxx:334
 AliITSMeanVertexer.cxx:335
 AliITSMeanVertexer.cxx:336
 AliITSMeanVertexer.cxx:337
 AliITSMeanVertexer.cxx:338
 AliITSMeanVertexer.cxx:339
 AliITSMeanVertexer.cxx:340
 AliITSMeanVertexer.cxx:341
 AliITSMeanVertexer.cxx:342
 AliITSMeanVertexer.cxx:343
 AliITSMeanVertexer.cxx:344
 AliITSMeanVertexer.cxx:345
 AliITSMeanVertexer.cxx:346
 AliITSMeanVertexer.cxx:347
 AliITSMeanVertexer.cxx:348
 AliITSMeanVertexer.cxx:349
 AliITSMeanVertexer.cxx:350
 AliITSMeanVertexer.cxx:351
 AliITSMeanVertexer.cxx:352
 AliITSMeanVertexer.cxx:353
 AliITSMeanVertexer.cxx:354
 AliITSMeanVertexer.cxx:355
 AliITSMeanVertexer.cxx:356
 AliITSMeanVertexer.cxx:357
 AliITSMeanVertexer.cxx:358
 AliITSMeanVertexer.cxx:359
 AliITSMeanVertexer.cxx:360
 AliITSMeanVertexer.cxx:361
 AliITSMeanVertexer.cxx:362
 AliITSMeanVertexer.cxx:363
 AliITSMeanVertexer.cxx:364
 AliITSMeanVertexer.cxx:365
 AliITSMeanVertexer.cxx:366
 AliITSMeanVertexer.cxx:367
 AliITSMeanVertexer.cxx:368
 AliITSMeanVertexer.cxx:369
 AliITSMeanVertexer.cxx:370
 AliITSMeanVertexer.cxx:371
 AliITSMeanVertexer.cxx:372
 AliITSMeanVertexer.cxx:373
 AliITSMeanVertexer.cxx:374
 AliITSMeanVertexer.cxx:375
 AliITSMeanVertexer.cxx:376
 AliITSMeanVertexer.cxx:377
 AliITSMeanVertexer.cxx:378
 AliITSMeanVertexer.cxx:379
 AliITSMeanVertexer.cxx:380
 AliITSMeanVertexer.cxx:381
 AliITSMeanVertexer.cxx:382
 AliITSMeanVertexer.cxx:383
 AliITSMeanVertexer.cxx:384
 AliITSMeanVertexer.cxx:385
 AliITSMeanVertexer.cxx:386
 AliITSMeanVertexer.cxx:387
 AliITSMeanVertexer.cxx:388
 AliITSMeanVertexer.cxx:389
 AliITSMeanVertexer.cxx:390
 AliITSMeanVertexer.cxx:391
 AliITSMeanVertexer.cxx:392
 AliITSMeanVertexer.cxx:393
 AliITSMeanVertexer.cxx:394
 AliITSMeanVertexer.cxx:395
 AliITSMeanVertexer.cxx:396
 AliITSMeanVertexer.cxx:397
 AliITSMeanVertexer.cxx:398
 AliITSMeanVertexer.cxx:399
 AliITSMeanVertexer.cxx:400
 AliITSMeanVertexer.cxx:401
 AliITSMeanVertexer.cxx:402
 AliITSMeanVertexer.cxx:403
 AliITSMeanVertexer.cxx:404
 AliITSMeanVertexer.cxx:405
 AliITSMeanVertexer.cxx:406
 AliITSMeanVertexer.cxx:407
 AliITSMeanVertexer.cxx:408
 AliITSMeanVertexer.cxx:409
 AliITSMeanVertexer.cxx:410
 AliITSMeanVertexer.cxx:411
 AliITSMeanVertexer.cxx:412
 AliITSMeanVertexer.cxx:413
 AliITSMeanVertexer.cxx:414
 AliITSMeanVertexer.cxx:415
 AliITSMeanVertexer.cxx:416
 AliITSMeanVertexer.cxx:417
 AliITSMeanVertexer.cxx:418
 AliITSMeanVertexer.cxx:419
 AliITSMeanVertexer.cxx:420
 AliITSMeanVertexer.cxx:421
 AliITSMeanVertexer.cxx:422
 AliITSMeanVertexer.cxx:423
 AliITSMeanVertexer.cxx:424
 AliITSMeanVertexer.cxx:425
 AliITSMeanVertexer.cxx:426
 AliITSMeanVertexer.cxx:427
 AliITSMeanVertexer.cxx:428
 AliITSMeanVertexer.cxx:429
 AliITSMeanVertexer.cxx:430
 AliITSMeanVertexer.cxx:431
 AliITSMeanVertexer.cxx:432
 AliITSMeanVertexer.cxx:433