ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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.                  *
 **************************************************************************/
////////////////////////////////////////////////////////////////////////////
//                                                                        //
// Base Class used to find                                                //
// the reconstructed points for ITS                                       //
// See also AliITSClusterFinderSPD, AliITSClusterFinderSDD,               //
// AliITSClusterFinderSDD  AliITSClusterFinderV2                          //
////////////////////////////////////////////////////////////////////////////

#include "AliRun.h"
#include "AliITSClusterFinder.h"
#include "AliITSRecPoint.h"
#include "AliITSdigit.h"
#include "AliITSDetTypeRec.h"
#include "AliITSMap.h"
#include "AliITSgeomTGeo.h"
#include <TParticle.h>
#include <TArrayI.h>
#include "AliMC.h"
#include "AliLog.h"

using std::endl;

ClassImp(AliITSClusterFinder)

extern AliRun *gAlice;

//----------------------------------------------------------------------
AliITSClusterFinder::AliITSClusterFinder():
TObject(),
fModule(0),
fDigits(0),
fNdigits(0),
fDetTypeRec(0),
fClusters(0),
fMap(0),
fNPeaks(-1),
fNModules(AliITSgeomTGeo::GetNModules()),
fEvent(0),
fZmin(0),
fZmax(0),
fXmin(0),
fXmax(0),
fNClusters(0),
fRawID2ClusID(0)
{
    // default cluster finder
    // Input:
    //   none.
    // Output:
    //   none.
    // Return:
    //   A default constructed AliITSCulsterFinder
  for(Int_t i=0; i<2200; i++){
    fNdet[i]=0;
    fNlayer[i]=0;
  }
}
//----------------------------------------------------------------------
AliITSClusterFinder::AliITSClusterFinder(AliITSDetTypeRec* dettyp):
TObject(),
fModule(0),
fDigits(0),
fNdigits(0),
fDetTypeRec(dettyp),
fClusters(0),
fMap(0),
fNPeaks(-1),
fNModules(AliITSgeomTGeo::GetNModules()),
fEvent(0),
fZmin(0),
fZmax(0),
fXmin(0),
fXmax(0),
fNClusters(0),
fRawID2ClusID(0)
{
    // default cluster finder
    // Standard constructor for cluster finder
    // Input:
    //   AliITSsegmentation *seg  The segmentation class to be used
    //   AliITSresponse     *res  The response class to be used
    // Output:
    //   none.
    // Return:
    //   A Standard constructed AliITSCulsterFinder
  for(Int_t i=0; i<2200; i++){
    fNdet[i]=0;
    fNlayer[i]=0;
  }
}
//----------------------------------------------------------------------
AliITSClusterFinder::AliITSClusterFinder(AliITSDetTypeRec* dettyp,
					 TClonesArray *digits):
TObject(),
fModule(0),
fDigits(digits),
fNdigits(0),
fDetTypeRec(dettyp),
fClusters(0),
fMap(0),
fNPeaks(-1),
fNModules(AliITSgeomTGeo::GetNModules()),
fEvent(0),
fZmin(0),
fZmax(0),
fXmin(0),
fXmax(0),
fNClusters(0),
fRawID2ClusID(0)
{
    // default cluster finder
    // Standard + cluster finder constructor
    // Input:
    //   AliITSsegmentation *seg  The segmentation class to be used
    //   AliITSresponse     *res  The response class to be used
    //   TClonesArray    *digits  Array of digits to be used
    // Output:
    //   none.
    // Return:
    //   A Standard constructed AliITSCulsterFinder

  fNdigits = fDigits->GetEntriesFast();
  for(Int_t i=0; i<2200; i++){
    fNdet[i]=0;
    fNlayer[i]=0;
  }
}

//______________________________________________________________________
AliITSClusterFinder::AliITSClusterFinder(const AliITSClusterFinder &source) : 
  TObject(source),
  fModule(source.fModule),
  fDigits(),
  fNdigits(source.fNdigits),
  fDetTypeRec(),
  fClusters(),
  fMap(),
  fNPeaks(source.fNPeaks),
  fNModules(source.fNModules),
  fEvent(source.fEvent),
  fZmin(source.fZmin),
  fZmax(source.fZmax),
  fXmin(source.fXmin),
  fXmax(source.fXmax),
  fNClusters(source.fNClusters),
  fRawID2ClusID(source.fRawID2ClusID) 
{
  // Copy constructor
  // Copies are not allowed. The method is protected to avoid misuse.
  AliError("Copy constructor not allowed\n");
}


//______________________________________________________________________
//AliITSClusterFinder& AliITSClusterFinder::operator=(const AliITSClusterFinder& /* source */){
  // Assignment operator
  // Assignment is not allowed. The method is protected to avoid misuse.
//  Fatal("= operator","Assignment operator not allowed\n");
//  return *this;
//}

//----------------------------------------------------------------------
AliITSClusterFinder::~AliITSClusterFinder(){
    // destructor cluster finder
    // Input:
    //   none.
    // Output:
    //   none.
    // Return:
    //   none.

    if(fMap) {delete fMap;}
    // Zero local pointers. Other classes own these pointers.
    fMap          = 0;
    fDigits       = 0;
    fNdigits      = 0;
    fNPeaks       = 0;
    fDetTypeRec   = 0;

}
//__________________________________________________________________________
void AliITSClusterFinder::InitGeometry(){
 //
 // Initialisation of ITS geometry
 //
  Int_t mmax=AliITSgeomTGeo::GetNModules();
  for (Int_t m=0; m<mmax; m++) {
    Int_t lay,lad,det; AliITSgeomTGeo::GetModuleId(m,lay,lad,det);
    fNdet[m] = (lad-1)*AliITSgeomTGeo::GetNDetectors(lay) + (det-1);
    fNlayer[m] = lay-1;
  }
}




//______________________________________________________________________
Bool_t AliITSClusterFinder::IsNeighbor(TObjArray *digs,Int_t i,Int_t n[])const{
    // Locagical function which checks to see if digit i has a neighbor.
    // If so, then it returns kTRUE and its neighbor index j.
    // This routine checks if the digits are side by side or one before the
    // other. Requires that the array of digits be in proper order.
    // Returns kTRUE in the following cases.
    //                 ji   0j   if kdiagonal  j0    0i
    //                 00   0i   if kdiagonal  0i    j0
    // Inputs:
    //    TObjArray *digs   Array to search for neighbors in
    //    Int_t      i      Index of digit for which we are searching for
    //                      a neighbor of.
    // Output:
    //    Int_t      j[4]   Index of one or more of the digits which is a
    //                      neighbor of digit a index i.
    // Return:
    //    Bool_t            kTRUE if a neighbor was found kFALSE otherwise.
    Int_t ix,jx,iz,jz,j;
    const Bool_t kdiagonal=kFALSE;
    Bool_t nei[4];

    // No neighbors found if array empty.
    if(digs->GetEntriesFast()<=0) return kFALSE;
    // can not be a digit with first element or elements out or range
    if(i<=0 || i>=digs->GetEntriesFast()) return kFALSE;

    for(j=0;j<4;j++){n[j] = -1;nei[j]=kFALSE;}
    ix = ((AliITSdigit*)(digs->At(i)))->GetCoord1();
    iz = ((AliITSdigit*)(digs->At(i)))->GetCoord2();
    for(j=0;j<i;j++){
        jx = ((AliITSdigit*)(digs->At(j)))->GetCoord1();
        jz = ((AliITSdigit*)(digs->At(j)))->GetCoord2();
        if(jx+1==ix && jz  ==iz){n[0] = j;nei[0] = kTRUE;}
        if(jx  ==ix && jz+1==iz){n[1] = j;nei[1] = kTRUE;}
        if(jx+1==ix && jz+1==iz){n[2] = j;nei[2] = kTRUE;}
        if(jx+1==ix && jz-1==iz){n[3] = j;nei[3] = kTRUE;}
    } // end for k
    if(nei[0]||nei[1]) return kTRUE;
    if(kdiagonal&&(nei[2]||nei[3])) return kTRUE;
    // no Neighbors found.
    return kFALSE;
}

//______________________________________________________________________
void AliITSClusterFinder::Print(ostream *os) const{
    //Standard output format for this class
    // Inputs:
    //    ostream *os   Output stream
    // Output:
    //    ostream *os   Output stream
    // Return:
    //    none.

    *os << fModule<<",";
    *os << fNdigits<<",";
    *os << fNPeaks<<endl;
}
//______________________________________________________________________
void AliITSClusterFinder::Read(istream *is)  {
    //Standard input for this class
    // Inputs:
    //    istream *is   Input stream
    // Output:
    //    istream *is   Input stream
    // Return:
    //    none.

    *is >> fModule;
    *is >> fNdigits;
    *is >> fNPeaks;
}
//______________________________________________________________________
ostream &operator<<(ostream &os,AliITSClusterFinder &source){
    // Standard output streaming function.
    // Inputs:
    //    ostream             *os     Output stream
    //    AliITSClusterFinder &source Class to be printed
    // Output:
    //    ostream             *os     Output stream
    // Return:
    //    none.

    source.Print(&os);
    return os;
}
//______________________________________________________________________
istream &operator>>(istream &is,AliITSClusterFinder &source){
    // Standard output streaming function.
    // Inputs:
    //    istream              *is      Input stream
    //     AliITSClusterFinder &source  Class to be read in.
    // Output:
    //    istream              *is      Input stream
    // Return:
    //    none.

    source.Read(&is);
    return is;
}

//______________________________________________________________________
void AliITSClusterFinder::CheckLabels2(Int_t lab[10]) 
{
  //------------------------------------------------------------
  // Tries to find mother's labels
  //------------------------------------------------------------
  AliRunLoader *rl = AliRunLoader::Instance();
  if(!rl) return;
  TTree *trK=(TTree*)rl->TreeK();
  if (!trK) return;
  //
  int labS[10];
  Int_t nlabels = 0; 
  Int_t ntracks = gAlice->GetMCApp()->GetNtrack();
  for (Int_t i=0;i<10;i++) if (lab[i]>=0) labS[nlabels++] = lab[i];
  if (nlabels==0) return;
  //
  float mom[10];
  for (Int_t i=0;i<nlabels;i++) {
    Int_t label = labS[i];
    mom[i] = 0;
    if (label>=ntracks) continue;
    TParticle *part=(TParticle*)gAlice->GetMCApp()->Particle(label);
    mom[i] = part->P();
    if (part->P() < 0.02) {    // reduce soft particles from the same cluster
      Int_t m=part->GetFirstMother();
      if (m<0) continue; // primary
      //
      if (part->GetStatusCode()>0) continue;
      //
      // if the parent is within the same cluster, reassign the label to it
      for (int j=0;j<nlabels;j++) if (labS[j]==m) { labS[i] = m; break;	}
    }
  } 
  //
  if (nlabels>3) { // only 3 labels are stored in cluster, sort in decreasing momentum
    int ind[10],labSS[10];
    TMath::Sort(nlabels,mom,ind);
    for (int i=nlabels;i--;) labSS[i] = labS[i];
    for (int i=0;i<nlabels;i++) labS[i] = labSS[ind[i]]; 
  }
  //
  //compress labels -- if multi-times the same
  for (Int_t i=0;i<10;i++) lab[i]=-2;
  int nlabFin=0,j=0;
  for (int i=0;i<nlabels;i++) {
    for (j=0;j<nlabFin;j++) if (labS[i]==lab[j]) break; // the label already there
    if (j==nlabFin) lab[nlabFin++] = labS[i];
  }
  //
}

//______________________________________________________________________
void AliITSClusterFinder::AddLabel(Int_t lab[10], Int_t label) {
  //add label to the cluster
  AliRunLoader *rl = AliRunLoader::Instance();
  TTree *trK=(TTree*)rl->TreeK();
  if(trK){
    if(label<0) return; // In case of no label just exit

    Int_t ntracks = gAlice->GetMCApp()->GetNtrack();
    if (label>ntracks) return;
    for (Int_t i=0;i<10;i++){
      //    if (label<0) break;
      if (lab[i]==label) break;
      if (lab[i]<0) {
	lab[i]= label;
	break;
      }
    }
  }
}


//______________________________________________________________________
void AliITSClusterFinder:: 
FindCluster(Int_t k,Int_t maxz,AliBin *bins,Int_t &n,Int_t *idx) {
  //------------------------------------------------------------
  // returns an array of indices of digits belonging to the cluster
  // (needed when the segmentation is not regular) 
  //------------------------------------------------------------
  if (n<200) idx[n++]=bins[k].GetIndex();
  bins[k].Use();

  if (bins[k-maxz].IsNotUsed()) FindCluster(k-maxz,maxz,bins,n,idx);
  if (bins[k-1   ].IsNotUsed()) FindCluster(k-1   ,maxz,bins,n,idx);
  if (bins[k+maxz].IsNotUsed()) FindCluster(k+maxz,maxz,bins,n,idx);
  if (bins[k+1   ].IsNotUsed()) FindCluster(k+1   ,maxz,bins,n,idx);
  /*
  if (bins[k-maxz-1].IsNotUsed()) FindCluster(k-maxz-1,maxz,bins,n,idx);
  if (bins[k-maxz+1].IsNotUsed()) FindCluster(k-maxz+1,maxz,bins,n,idx);
  if (bins[k+maxz-1].IsNotUsed()) FindCluster(k+maxz-1,maxz,bins,n,idx);
  if (bins[k+maxz+1].IsNotUsed()) FindCluster(k+maxz+1,maxz,bins,n,idx);
  */
}

//______________________________________________________________________
Bool_t AliITSClusterFinder::IsMaximum(Int_t k,Int_t max,const AliBin *bins) {
  //------------------------------------------------------------
  //is this a local maximum ?
  //------------------------------------------------------------
  UShort_t q=bins[k].GetQ();
  if (q==1023) return kFALSE;
  if (bins[k-max].GetQ() > q) return kFALSE;
  if (bins[k-1  ].GetQ() > q) return kFALSE; 
  if (bins[k+max].GetQ() > q) return kFALSE; 
  if (bins[k+1  ].GetQ() > q) return kFALSE; 
  if (bins[k-max-1].GetQ() > q) return kFALSE;
  if (bins[k+max-1].GetQ() > q) return kFALSE; 
  if (bins[k+max+1].GetQ() > q) return kFALSE; 
  if (bins[k-max+1].GetQ() > q) return kFALSE;
  return kTRUE; 
}

//______________________________________________________________________
void AliITSClusterFinder::
FindPeaks(Int_t k,Int_t max,AliBin *b,Int_t *idx,UInt_t *msk,Int_t& n) {
  //------------------------------------------------------------
  //find local maxima
  //------------------------------------------------------------
  if (n<31)
  if (IsMaximum(k,max,b)) {
    idx[n]=k; msk[n]=(2<<n);
    n++;
  }
  b[k].SetMask(0);
  if (b[k-max].GetMask()&1) FindPeaks(k-max,max,b,idx,msk,n);
  if (b[k-1  ].GetMask()&1) FindPeaks(k-1  ,max,b,idx,msk,n);
  if (b[k+max].GetMask()&1) FindPeaks(k+max,max,b,idx,msk,n);
  if (b[k+1  ].GetMask()&1) FindPeaks(k+1  ,max,b,idx,msk,n);
}

//______________________________________________________________________
void AliITSClusterFinder::
MarkPeak(Int_t k, Int_t max, AliBin *bins, UInt_t m) {
  //------------------------------------------------------------
  //mark this peak
  //------------------------------------------------------------
  UShort_t q=bins[k].GetQ();

  bins[k].SetMask(bins[k].GetMask()|m); 

  if (bins[k-max].GetQ() <= q)
     if ((bins[k-max].GetMask()&m) == 0) MarkPeak(k-max,max,bins,m);
  if (bins[k-1  ].GetQ() <= q)
     if ((bins[k-1  ].GetMask()&m) == 0) MarkPeak(k-1  ,max,bins,m);
  if (bins[k+max].GetQ() <= q)
     if ((bins[k+max].GetMask()&m) == 0) MarkPeak(k+max,max,bins,m);
  if (bins[k+1  ].GetQ() <= q)
     if ((bins[k+1  ].GetMask()&m) == 0) MarkPeak(k+1  ,max,bins,m);
}

//______________________________________________________________________
void AliITSClusterFinder::
MakeCluster(Int_t k,Int_t max,AliBin *bins,UInt_t m,AliITSRecPoint &c) {
  //------------------------------------------------------------
  //make cluster using digits of this peak
  //------------------------------------------------------------
  Float_t q=(Float_t)bins[k].GetQ();
  Int_t i=k/max, j=k-i*max;
  if(c.GetQ()<0.01){ // first entry in cluster
    fXmin=i;
    fXmax=i;
    fZmin=j;
    fZmax=j;
  }else{  // check cluster extension
    if(i<fXmin) fXmin=i;
    if(i>fXmax) fXmax=i;
    if(j<fZmin) fZmin=j;
    if(j>fZmax) fZmax=j;
  }
  c.SetQ(c.GetQ()+q);
  c.SetY(c.GetY()+i*q);
  c.SetZ(c.GetZ()+j*q);
  c.SetSigmaY2(c.GetSigmaY2()+i*i*q);
  c.SetSigmaZ2(c.GetSigmaZ2()+j*j*q);

  bins[k].SetMask(0xFFFFFFFE);
  if (fRawID2ClusID) { // RS: Register cluster id in raw words list
    int rwid = bins[k].GetRawID();
    if (fRawID2ClusID->GetSize()<=rwid) fRawID2ClusID->Set( (rwid+10)<<1 );
    (*fRawID2ClusID)[rwid] = fNClusters+1; // RS: store clID+1 as a reference to the cluster
  }
  if (bins[k-max].GetMask() == m) MakeCluster(k-max,max,bins,m,c);
  if (bins[k-1  ].GetMask() == m) MakeCluster(k-1  ,max,bins,m,c);
  if (bins[k+max].GetMask() == m) MakeCluster(k+max,max,bins,m,c);
  if (bins[k+1  ].GetMask() == m) MakeCluster(k+1  ,max,bins,m,c);
}
 AliITSClusterFinder.cxx:1
 AliITSClusterFinder.cxx:2
 AliITSClusterFinder.cxx:3
 AliITSClusterFinder.cxx:4
 AliITSClusterFinder.cxx:5
 AliITSClusterFinder.cxx:6
 AliITSClusterFinder.cxx:7
 AliITSClusterFinder.cxx:8
 AliITSClusterFinder.cxx:9
 AliITSClusterFinder.cxx:10
 AliITSClusterFinder.cxx:11
 AliITSClusterFinder.cxx:12
 AliITSClusterFinder.cxx:13
 AliITSClusterFinder.cxx:14
 AliITSClusterFinder.cxx:15
 AliITSClusterFinder.cxx:16
 AliITSClusterFinder.cxx:17
 AliITSClusterFinder.cxx:18
 AliITSClusterFinder.cxx:19
 AliITSClusterFinder.cxx:20
 AliITSClusterFinder.cxx:21
 AliITSClusterFinder.cxx:22
 AliITSClusterFinder.cxx:23
 AliITSClusterFinder.cxx:24
 AliITSClusterFinder.cxx:25
 AliITSClusterFinder.cxx:26
 AliITSClusterFinder.cxx:27
 AliITSClusterFinder.cxx:28
 AliITSClusterFinder.cxx:29
 AliITSClusterFinder.cxx:30
 AliITSClusterFinder.cxx:31
 AliITSClusterFinder.cxx:32
 AliITSClusterFinder.cxx:33
 AliITSClusterFinder.cxx:34
 AliITSClusterFinder.cxx:35
 AliITSClusterFinder.cxx:36
 AliITSClusterFinder.cxx:37
 AliITSClusterFinder.cxx:38
 AliITSClusterFinder.cxx:39
 AliITSClusterFinder.cxx:40
 AliITSClusterFinder.cxx:41
 AliITSClusterFinder.cxx:42
 AliITSClusterFinder.cxx:43
 AliITSClusterFinder.cxx:44
 AliITSClusterFinder.cxx:45
 AliITSClusterFinder.cxx:46
 AliITSClusterFinder.cxx:47
 AliITSClusterFinder.cxx:48
 AliITSClusterFinder.cxx:49
 AliITSClusterFinder.cxx:50
 AliITSClusterFinder.cxx:51
 AliITSClusterFinder.cxx:52
 AliITSClusterFinder.cxx:53
 AliITSClusterFinder.cxx:54
 AliITSClusterFinder.cxx:55
 AliITSClusterFinder.cxx:56
 AliITSClusterFinder.cxx:57
 AliITSClusterFinder.cxx:58
 AliITSClusterFinder.cxx:59
 AliITSClusterFinder.cxx:60
 AliITSClusterFinder.cxx:61
 AliITSClusterFinder.cxx:62
 AliITSClusterFinder.cxx:63
 AliITSClusterFinder.cxx:64
 AliITSClusterFinder.cxx:65
 AliITSClusterFinder.cxx:66
 AliITSClusterFinder.cxx:67
 AliITSClusterFinder.cxx:68
 AliITSClusterFinder.cxx:69
 AliITSClusterFinder.cxx:70
 AliITSClusterFinder.cxx:71
 AliITSClusterFinder.cxx:72
 AliITSClusterFinder.cxx:73
 AliITSClusterFinder.cxx:74
 AliITSClusterFinder.cxx:75
 AliITSClusterFinder.cxx:76
 AliITSClusterFinder.cxx:77
 AliITSClusterFinder.cxx:78
 AliITSClusterFinder.cxx:79
 AliITSClusterFinder.cxx:80
 AliITSClusterFinder.cxx:81
 AliITSClusterFinder.cxx:82
 AliITSClusterFinder.cxx:83
 AliITSClusterFinder.cxx:84
 AliITSClusterFinder.cxx:85
 AliITSClusterFinder.cxx:86
 AliITSClusterFinder.cxx:87
 AliITSClusterFinder.cxx:88
 AliITSClusterFinder.cxx:89
 AliITSClusterFinder.cxx:90
 AliITSClusterFinder.cxx:91
 AliITSClusterFinder.cxx:92
 AliITSClusterFinder.cxx:93
 AliITSClusterFinder.cxx:94
 AliITSClusterFinder.cxx:95
 AliITSClusterFinder.cxx:96
 AliITSClusterFinder.cxx:97
 AliITSClusterFinder.cxx:98
 AliITSClusterFinder.cxx:99
 AliITSClusterFinder.cxx:100
 AliITSClusterFinder.cxx:101
 AliITSClusterFinder.cxx:102
 AliITSClusterFinder.cxx:103
 AliITSClusterFinder.cxx:104
 AliITSClusterFinder.cxx:105
 AliITSClusterFinder.cxx:106
 AliITSClusterFinder.cxx:107
 AliITSClusterFinder.cxx:108
 AliITSClusterFinder.cxx:109
 AliITSClusterFinder.cxx:110
 AliITSClusterFinder.cxx:111
 AliITSClusterFinder.cxx:112
 AliITSClusterFinder.cxx:113
 AliITSClusterFinder.cxx:114
 AliITSClusterFinder.cxx:115
 AliITSClusterFinder.cxx:116
 AliITSClusterFinder.cxx:117
 AliITSClusterFinder.cxx:118
 AliITSClusterFinder.cxx:119
 AliITSClusterFinder.cxx:120
 AliITSClusterFinder.cxx:121
 AliITSClusterFinder.cxx:122
 AliITSClusterFinder.cxx:123
 AliITSClusterFinder.cxx:124
 AliITSClusterFinder.cxx:125
 AliITSClusterFinder.cxx:126
 AliITSClusterFinder.cxx:127
 AliITSClusterFinder.cxx:128
 AliITSClusterFinder.cxx:129
 AliITSClusterFinder.cxx:130
 AliITSClusterFinder.cxx:131
 AliITSClusterFinder.cxx:132
 AliITSClusterFinder.cxx:133
 AliITSClusterFinder.cxx:134
 AliITSClusterFinder.cxx:135
 AliITSClusterFinder.cxx:136
 AliITSClusterFinder.cxx:137
 AliITSClusterFinder.cxx:138
 AliITSClusterFinder.cxx:139
 AliITSClusterFinder.cxx:140
 AliITSClusterFinder.cxx:141
 AliITSClusterFinder.cxx:142
 AliITSClusterFinder.cxx:143
 AliITSClusterFinder.cxx:144
 AliITSClusterFinder.cxx:145
 AliITSClusterFinder.cxx:146
 AliITSClusterFinder.cxx:147
 AliITSClusterFinder.cxx:148
 AliITSClusterFinder.cxx:149
 AliITSClusterFinder.cxx:150
 AliITSClusterFinder.cxx:151
 AliITSClusterFinder.cxx:152
 AliITSClusterFinder.cxx:153
 AliITSClusterFinder.cxx:154
 AliITSClusterFinder.cxx:155
 AliITSClusterFinder.cxx:156
 AliITSClusterFinder.cxx:157
 AliITSClusterFinder.cxx:158
 AliITSClusterFinder.cxx:159
 AliITSClusterFinder.cxx:160
 AliITSClusterFinder.cxx:161
 AliITSClusterFinder.cxx:162
 AliITSClusterFinder.cxx:163
 AliITSClusterFinder.cxx:164
 AliITSClusterFinder.cxx:165
 AliITSClusterFinder.cxx:166
 AliITSClusterFinder.cxx:167
 AliITSClusterFinder.cxx:168
 AliITSClusterFinder.cxx:169
 AliITSClusterFinder.cxx:170
 AliITSClusterFinder.cxx:171
 AliITSClusterFinder.cxx:172
 AliITSClusterFinder.cxx:173
 AliITSClusterFinder.cxx:174
 AliITSClusterFinder.cxx:175
 AliITSClusterFinder.cxx:176
 AliITSClusterFinder.cxx:177
 AliITSClusterFinder.cxx:178
 AliITSClusterFinder.cxx:179
 AliITSClusterFinder.cxx:180
 AliITSClusterFinder.cxx:181
 AliITSClusterFinder.cxx:182
 AliITSClusterFinder.cxx:183
 AliITSClusterFinder.cxx:184
 AliITSClusterFinder.cxx:185
 AliITSClusterFinder.cxx:186
 AliITSClusterFinder.cxx:187
 AliITSClusterFinder.cxx:188
 AliITSClusterFinder.cxx:189
 AliITSClusterFinder.cxx:190
 AliITSClusterFinder.cxx:191
 AliITSClusterFinder.cxx:192
 AliITSClusterFinder.cxx:193
 AliITSClusterFinder.cxx:194
 AliITSClusterFinder.cxx:195
 AliITSClusterFinder.cxx:196
 AliITSClusterFinder.cxx:197
 AliITSClusterFinder.cxx:198
 AliITSClusterFinder.cxx:199
 AliITSClusterFinder.cxx:200
 AliITSClusterFinder.cxx:201
 AliITSClusterFinder.cxx:202
 AliITSClusterFinder.cxx:203
 AliITSClusterFinder.cxx:204
 AliITSClusterFinder.cxx:205
 AliITSClusterFinder.cxx:206
 AliITSClusterFinder.cxx:207
 AliITSClusterFinder.cxx:208
 AliITSClusterFinder.cxx:209
 AliITSClusterFinder.cxx:210
 AliITSClusterFinder.cxx:211
 AliITSClusterFinder.cxx:212
 AliITSClusterFinder.cxx:213
 AliITSClusterFinder.cxx:214
 AliITSClusterFinder.cxx:215
 AliITSClusterFinder.cxx:216
 AliITSClusterFinder.cxx:217
 AliITSClusterFinder.cxx:218
 AliITSClusterFinder.cxx:219
 AliITSClusterFinder.cxx:220
 AliITSClusterFinder.cxx:221
 AliITSClusterFinder.cxx:222
 AliITSClusterFinder.cxx:223
 AliITSClusterFinder.cxx:224
 AliITSClusterFinder.cxx:225
 AliITSClusterFinder.cxx:226
 AliITSClusterFinder.cxx:227
 AliITSClusterFinder.cxx:228
 AliITSClusterFinder.cxx:229
 AliITSClusterFinder.cxx:230
 AliITSClusterFinder.cxx:231
 AliITSClusterFinder.cxx:232
 AliITSClusterFinder.cxx:233
 AliITSClusterFinder.cxx:234
 AliITSClusterFinder.cxx:235
 AliITSClusterFinder.cxx:236
 AliITSClusterFinder.cxx:237
 AliITSClusterFinder.cxx:238
 AliITSClusterFinder.cxx:239
 AliITSClusterFinder.cxx:240
 AliITSClusterFinder.cxx:241
 AliITSClusterFinder.cxx:242
 AliITSClusterFinder.cxx:243
 AliITSClusterFinder.cxx:244
 AliITSClusterFinder.cxx:245
 AliITSClusterFinder.cxx:246
 AliITSClusterFinder.cxx:247
 AliITSClusterFinder.cxx:248
 AliITSClusterFinder.cxx:249
 AliITSClusterFinder.cxx:250
 AliITSClusterFinder.cxx:251
 AliITSClusterFinder.cxx:252
 AliITSClusterFinder.cxx:253
 AliITSClusterFinder.cxx:254
 AliITSClusterFinder.cxx:255
 AliITSClusterFinder.cxx:256
 AliITSClusterFinder.cxx:257
 AliITSClusterFinder.cxx:258
 AliITSClusterFinder.cxx:259
 AliITSClusterFinder.cxx:260
 AliITSClusterFinder.cxx:261
 AliITSClusterFinder.cxx:262
 AliITSClusterFinder.cxx:263
 AliITSClusterFinder.cxx:264
 AliITSClusterFinder.cxx:265
 AliITSClusterFinder.cxx:266
 AliITSClusterFinder.cxx:267
 AliITSClusterFinder.cxx:268
 AliITSClusterFinder.cxx:269
 AliITSClusterFinder.cxx:270
 AliITSClusterFinder.cxx:271
 AliITSClusterFinder.cxx:272
 AliITSClusterFinder.cxx:273
 AliITSClusterFinder.cxx:274
 AliITSClusterFinder.cxx:275
 AliITSClusterFinder.cxx:276
 AliITSClusterFinder.cxx:277
 AliITSClusterFinder.cxx:278
 AliITSClusterFinder.cxx:279
 AliITSClusterFinder.cxx:280
 AliITSClusterFinder.cxx:281
 AliITSClusterFinder.cxx:282
 AliITSClusterFinder.cxx:283
 AliITSClusterFinder.cxx:284
 AliITSClusterFinder.cxx:285
 AliITSClusterFinder.cxx:286
 AliITSClusterFinder.cxx:287
 AliITSClusterFinder.cxx:288
 AliITSClusterFinder.cxx:289
 AliITSClusterFinder.cxx:290
 AliITSClusterFinder.cxx:291
 AliITSClusterFinder.cxx:292
 AliITSClusterFinder.cxx:293
 AliITSClusterFinder.cxx:294
 AliITSClusterFinder.cxx:295
 AliITSClusterFinder.cxx:296
 AliITSClusterFinder.cxx:297
 AliITSClusterFinder.cxx:298
 AliITSClusterFinder.cxx:299
 AliITSClusterFinder.cxx:300
 AliITSClusterFinder.cxx:301
 AliITSClusterFinder.cxx:302
 AliITSClusterFinder.cxx:303
 AliITSClusterFinder.cxx:304
 AliITSClusterFinder.cxx:305
 AliITSClusterFinder.cxx:306
 AliITSClusterFinder.cxx:307
 AliITSClusterFinder.cxx:308
 AliITSClusterFinder.cxx:309
 AliITSClusterFinder.cxx:310
 AliITSClusterFinder.cxx:311
 AliITSClusterFinder.cxx:312
 AliITSClusterFinder.cxx:313
 AliITSClusterFinder.cxx:314
 AliITSClusterFinder.cxx:315
 AliITSClusterFinder.cxx:316
 AliITSClusterFinder.cxx:317
 AliITSClusterFinder.cxx:318
 AliITSClusterFinder.cxx:319
 AliITSClusterFinder.cxx:320
 AliITSClusterFinder.cxx:321
 AliITSClusterFinder.cxx:322
 AliITSClusterFinder.cxx:323
 AliITSClusterFinder.cxx:324
 AliITSClusterFinder.cxx:325
 AliITSClusterFinder.cxx:326
 AliITSClusterFinder.cxx:327
 AliITSClusterFinder.cxx:328
 AliITSClusterFinder.cxx:329
 AliITSClusterFinder.cxx:330
 AliITSClusterFinder.cxx:331
 AliITSClusterFinder.cxx:332
 AliITSClusterFinder.cxx:333
 AliITSClusterFinder.cxx:334
 AliITSClusterFinder.cxx:335
 AliITSClusterFinder.cxx:336
 AliITSClusterFinder.cxx:337
 AliITSClusterFinder.cxx:338
 AliITSClusterFinder.cxx:339
 AliITSClusterFinder.cxx:340
 AliITSClusterFinder.cxx:341
 AliITSClusterFinder.cxx:342
 AliITSClusterFinder.cxx:343
 AliITSClusterFinder.cxx:344
 AliITSClusterFinder.cxx:345
 AliITSClusterFinder.cxx:346
 AliITSClusterFinder.cxx:347
 AliITSClusterFinder.cxx:348
 AliITSClusterFinder.cxx:349
 AliITSClusterFinder.cxx:350
 AliITSClusterFinder.cxx:351
 AliITSClusterFinder.cxx:352
 AliITSClusterFinder.cxx:353
 AliITSClusterFinder.cxx:354
 AliITSClusterFinder.cxx:355
 AliITSClusterFinder.cxx:356
 AliITSClusterFinder.cxx:357
 AliITSClusterFinder.cxx:358
 AliITSClusterFinder.cxx:359
 AliITSClusterFinder.cxx:360
 AliITSClusterFinder.cxx:361
 AliITSClusterFinder.cxx:362
 AliITSClusterFinder.cxx:363
 AliITSClusterFinder.cxx:364
 AliITSClusterFinder.cxx:365
 AliITSClusterFinder.cxx:366
 AliITSClusterFinder.cxx:367
 AliITSClusterFinder.cxx:368
 AliITSClusterFinder.cxx:369
 AliITSClusterFinder.cxx:370
 AliITSClusterFinder.cxx:371
 AliITSClusterFinder.cxx:372
 AliITSClusterFinder.cxx:373
 AliITSClusterFinder.cxx:374
 AliITSClusterFinder.cxx:375
 AliITSClusterFinder.cxx:376
 AliITSClusterFinder.cxx:377
 AliITSClusterFinder.cxx:378
 AliITSClusterFinder.cxx:379
 AliITSClusterFinder.cxx:380
 AliITSClusterFinder.cxx:381
 AliITSClusterFinder.cxx:382
 AliITSClusterFinder.cxx:383
 AliITSClusterFinder.cxx:384
 AliITSClusterFinder.cxx:385
 AliITSClusterFinder.cxx:386
 AliITSClusterFinder.cxx:387
 AliITSClusterFinder.cxx:388
 AliITSClusterFinder.cxx:389
 AliITSClusterFinder.cxx:390
 AliITSClusterFinder.cxx:391
 AliITSClusterFinder.cxx:392
 AliITSClusterFinder.cxx:393
 AliITSClusterFinder.cxx:394
 AliITSClusterFinder.cxx:395
 AliITSClusterFinder.cxx:396
 AliITSClusterFinder.cxx:397
 AliITSClusterFinder.cxx:398
 AliITSClusterFinder.cxx:399
 AliITSClusterFinder.cxx:400
 AliITSClusterFinder.cxx:401
 AliITSClusterFinder.cxx:402
 AliITSClusterFinder.cxx:403
 AliITSClusterFinder.cxx:404
 AliITSClusterFinder.cxx:405
 AliITSClusterFinder.cxx:406
 AliITSClusterFinder.cxx:407
 AliITSClusterFinder.cxx:408
 AliITSClusterFinder.cxx:409
 AliITSClusterFinder.cxx:410
 AliITSClusterFinder.cxx:411
 AliITSClusterFinder.cxx:412
 AliITSClusterFinder.cxx:413
 AliITSClusterFinder.cxx:414
 AliITSClusterFinder.cxx:415
 AliITSClusterFinder.cxx:416
 AliITSClusterFinder.cxx:417
 AliITSClusterFinder.cxx:418
 AliITSClusterFinder.cxx:419
 AliITSClusterFinder.cxx:420
 AliITSClusterFinder.cxx:421
 AliITSClusterFinder.cxx:422
 AliITSClusterFinder.cxx:423
 AliITSClusterFinder.cxx:424
 AliITSClusterFinder.cxx:425
 AliITSClusterFinder.cxx:426
 AliITSClusterFinder.cxx:427
 AliITSClusterFinder.cxx:428
 AliITSClusterFinder.cxx:429
 AliITSClusterFinder.cxx:430
 AliITSClusterFinder.cxx:431
 AliITSClusterFinder.cxx:432
 AliITSClusterFinder.cxx:433
 AliITSClusterFinder.cxx:434
 AliITSClusterFinder.cxx:435
 AliITSClusterFinder.cxx:436
 AliITSClusterFinder.cxx:437
 AliITSClusterFinder.cxx:438
 AliITSClusterFinder.cxx:439
 AliITSClusterFinder.cxx:440
 AliITSClusterFinder.cxx:441
 AliITSClusterFinder.cxx:442
 AliITSClusterFinder.cxx:443
 AliITSClusterFinder.cxx:444
 AliITSClusterFinder.cxx:445
 AliITSClusterFinder.cxx:446
 AliITSClusterFinder.cxx:447
 AliITSClusterFinder.cxx:448
 AliITSClusterFinder.cxx:449
 AliITSClusterFinder.cxx:450
 AliITSClusterFinder.cxx:451
 AliITSClusterFinder.cxx:452
 AliITSClusterFinder.cxx:453
 AliITSClusterFinder.cxx:454
 AliITSClusterFinder.cxx:455
 AliITSClusterFinder.cxx:456
 AliITSClusterFinder.cxx:457
 AliITSClusterFinder.cxx:458
 AliITSClusterFinder.cxx:459
 AliITSClusterFinder.cxx:460
 AliITSClusterFinder.cxx:461
 AliITSClusterFinder.cxx:462
 AliITSClusterFinder.cxx:463
 AliITSClusterFinder.cxx:464
 AliITSClusterFinder.cxx:465
 AliITSClusterFinder.cxx:466
 AliITSClusterFinder.cxx:467
 AliITSClusterFinder.cxx:468
 AliITSClusterFinder.cxx:469
 AliITSClusterFinder.cxx:470
 AliITSClusterFinder.cxx:471
 AliITSClusterFinder.cxx:472
 AliITSClusterFinder.cxx:473
 AliITSClusterFinder.cxx:474
 AliITSClusterFinder.cxx:475
 AliITSClusterFinder.cxx:476
 AliITSClusterFinder.cxx:477
 AliITSClusterFinder.cxx:478
 AliITSClusterFinder.cxx:479
 AliITSClusterFinder.cxx:480
 AliITSClusterFinder.cxx:481
 AliITSClusterFinder.cxx:482
 AliITSClusterFinder.cxx:483
 AliITSClusterFinder.cxx:484
 AliITSClusterFinder.cxx:485
 AliITSClusterFinder.cxx:486
 AliITSClusterFinder.cxx:487
 AliITSClusterFinder.cxx:488
 AliITSClusterFinder.cxx:489
 AliITSClusterFinder.cxx:490
 AliITSClusterFinder.cxx:491
 AliITSClusterFinder.cxx:492
 AliITSClusterFinder.cxx:493
 AliITSClusterFinder.cxx:494
 AliITSClusterFinder.cxx:495
 AliITSClusterFinder.cxx:496
 AliITSClusterFinder.cxx:497
 AliITSClusterFinder.cxx:498
 AliITSClusterFinder.cxx:499