ROOT logo
#include <TTree.h>
#include <TFile.h>
#include <TObjArray.h>
#include <TParticle.h>
#include <TMath.h>
#include "AliRun.h"
#include "AliLog.h"
#include "AliMC.h"
#include <AliITSUSegmentationPix.h>
#include "AliITSUClusterizer.h"
#include "AliITSUGeomTGeo.h"
#include "AliITSUSegmentationPix.h"
#include "AliITSUDigitPix.h"
#include "AliITSURecoParam.h"
#include "AliITSUAux.h"
using namespace TMath;
using namespace AliITSUAux;

ClassImp(AliITSUClusterizer)

//______________________________________________________________________________
AliITSUClusterizer::AliITSUClusterizer(Int_t initNRow) 
:  fVolID(-1)
  ,fAllowDiagonalClusterization(kFALSE)
  ,fSegm(0)
  ,fRecoParam(0)
  ,fInputDigits(0)
  ,fInputDigitsReadIndex(0)
  ,fLayerID(0)
  ,fNLabels(0)
  ,fRawData(kFALSE)
  ,fLorAngCorrection(0)
  ,fOutputClusters(0)
  ,fDigitFreelist(0)
  ,fPartFreelist(0)
  ,fCandFreelist(0)
  ,fDigitFreelistBptrFirst(0)
  ,fDigitFreelistBptrLast(0)
  ,fPartFreelistBptr(0)
  ,fCandFreelistBptr(0)
#ifdef _ClusterTopology_
  ,fTopology(0)
  ,fMinCol(0)
  ,fMinRow(0)
#endif //_ClusterTopology_
{
  SetUniqueID(0);
  // c-tor
  SetNRow(initNRow);
//
#ifdef _ClusterTopology_
  AliInfo("*********************************************************************");
  AliInfo("ATTENTION: YOU ARE RUNNING IN SPECIAL MODE OF STORING CLUSTER PATTERN");
  AliInfo("*********************************************************************");
#endif //_ClusterTopology_

//
}

//______________________________________________________________________________
void AliITSUClusterizer::SetSegmentation(const AliITSUSegmentationPix *segm) 
{
  // attach segmentation, if needed, reinitialize array
  fSegm = segm;
  SetNRow(fSegm->GetNRow()); // reinitialize if needed

}

//______________________________________________________________________________
void AliITSUClusterizer::SetNRow(Int_t nr)
{
  // update buffers
  int nrOld = GetUniqueID();
  if (nrOld>=nr) return;
  SetUniqueID(nr);
  while (fDigitFreelistBptrFirst) {
    AliITSUClusterizerClusterDigit *next = fDigitFreelistBptrFirst[kDigitChunkSize-1].fNext;
    delete[] fDigitFreelistBptrFirst;
    fDigitFreelistBptrFirst=next;
  }
  delete[] fPartFreelistBptr;
  delete[] fCandFreelistBptr;
  //
  fPartFreelist=fPartFreelistBptr = new AliITSUClusterizerClusterPart[nr+1];
  fCandFreelist=fCandFreelistBptr = new AliITSUClusterizerClusterCand[nr+1];
  for (int i=0;i<nr;++i) {
    fPartFreelistBptr[i].fNextInRow = &fPartFreelistBptr[i+1];
    fCandFreelistBptr[i].fNext      = &fCandFreelistBptr[i+1];
  }  
}

//______________________________________________________________________________
AliITSUClusterizer::~AliITSUClusterizer() 
{
  // d-tor
  while (fDigitFreelistBptrFirst) {
    AliITSUClusterizerClusterDigit *next = fDigitFreelistBptrFirst[kDigitChunkSize-1].fNext;
    delete[] fDigitFreelistBptrFirst;
    fDigitFreelistBptrFirst=next;
  }
  delete[] fPartFreelistBptr;
  delete[] fCandFreelistBptr;
  //
}

//______________________________________________________________________________
AliITSUClusterizer::AliITSUClusterizerClusterDigit* AliITSUClusterizer::AllocDigitFreelist() 
{
  // allocate aux space
  AliITSUClusterizerClusterDigit *tmp = new AliITSUClusterizerClusterDigit[kDigitChunkSize];
  for (int i=0;i<kDigitChunkSize-2;++i) tmp[i].fNext=&tmp[i+1];
  tmp[kDigitChunkSize-2].fNext=0;
  tmp[kDigitChunkSize-1].fNext=0;
  if (!fDigitFreelistBptrFirst) fDigitFreelistBptrFirst=tmp;
  else                          fDigitFreelistBptrLast[kDigitChunkSize-1].fNext=tmp;
  fDigitFreelistBptrLast=tmp;
  return tmp;
}

//______________________________________________________________________________
AliITSUClusterizer::AliITSUClusterizerClusterDigit* AliITSUClusterizer::NextDigit() 
{
  // get next digit
  while (fInputDigitsReadIndex<fInputDigits->GetEntriesFast()) {
    AliITSUDigitPix *tmp=static_cast<AliITSUDigitPix*>(fInputDigits->UncheckedAt(fInputDigitsReadIndex++));
    if (TMath::Abs(tmp->GetROCycle())>=fRecoParam->GetMaxROCycle()) continue;
    AliITSUClusterizerClusterDigit *digit=AllocDigit();
    digit->fDigit=tmp;
    return digit;
  }
  return 0;
}

//______________________________________________________________________________
void AliITSUClusterizer::AttachPartToCand(AliITSUClusterizerClusterCand *cand,AliITSUClusterizerClusterPart *part) 
{
  // attach part
  part->fParent = cand;
  part->fPrevInCluster = 0;
  part->fNextInCluster = cand->fFirstPart;
  if (cand->fFirstPart) cand->fFirstPart->fPrevInCluster = part;
  cand->fFirstPart=part;
}

//______________________________________________________________________________
void AliITSUClusterizer::MergeCands(AliITSUClusterizerClusterCand *a,AliITSUClusterizerClusterCand *b) 
{
  // merge cluster parts
  AliITSUClusterizerClusterPart *ipart=b->fFirstPart; 
  AliITSUClusterizerClusterPart *jpart; 
  do {
    jpart=ipart;
    jpart->fParent=a;
  } while ((ipart=ipart->fNextInCluster));
  jpart->fNextInCluster=a->fFirstPart;
  jpart->fNextInCluster->fPrevInCluster=jpart;
  a->fFirstPart=b->fFirstPart;
  // merge digits
  b->fLastDigit->fNext=a->fFirstDigit;
  a->fFirstDigit=b->fFirstDigit;
  //  DeallocCand(b);
}

//______________________________________________________________________________
void AliITSUClusterizer::Transform(AliITSUClusterPix *cluster,AliITSUClusterizerClusterCand *cand) 
{
  // convert set of digits to cluster data in LOCAL frame
  const double k1to12 = 1./12;
  static int maxLbinDigit = AliITSdigit::GetNTracks();
  //
  fNLabels = 0;
  Int_t n=0;
  cand->fLastDigit->fNext=0;
  double x=0,z=0,xmn=1e9,xmx=-1e9,zmn=1e9,zmx=-1e9,px=0,pz=0;
  float  cx,cz;
  int charge=0;
  //
  for (AliITSUClusterizerClusterDigit *idigit=cand->fFirstDigit;idigit;idigit=idigit->fNext) {
    AliITSdigit* dig = idigit->fDigit;
    fSegm->DetToLocal(dig->GetCoord2(),dig->GetCoord1(),cx,cz); // center of pixel
    //
    // account for possible diod shift
    double ddx,ddz, dx=fSegm->Dpx(dig->GetCoord2()), dz=fSegm->Dpz(dig->GetCoord1());
    fSegm->GetDiodShift(dig->GetCoord2(),dig->GetCoord1(),ddx,ddz);
    //
    charge += dig->GetSignal();
    x += cx;
    z += cz;
    if (cx<xmn) xmn=cx;
    if (cx>xmx) xmx=cx;
    if (cz<zmn) zmn=cz;
    if (cz>zmx) zmx=cz;
    x += ddx*dx;
    z += ddz*dz;
    px += dx;
    pz += dz;
    //
    if (!fRawData) {
      for(Int_t dlab=0;dlab<maxLbinDigit;dlab++){
	Int_t digitlab = (dig->GetTracks())[dlab];
	if(digitlab<0) continue;
	AddLabel(digitlab);
      }
    }
    //
    ++n;
  }
  Int_t nx=1,nz=1;
  double dx = xmx-xmn, dz = zmx-zmn;
  if (n>1) {
    double fac=1./n;
    x  *= fac;  // mean coordinates
    z  *= fac;
    px *= fac;  // mean pitch
    pz *= fac; 
    nx = 1+Nint(dx/px);
    nz = 1+Nint(dz/pz);
  }
  x -= fLorAngCorrection;  // LorentzAngle correction
  cluster->SetX(x);
  cluster->SetZ(z);  
  cluster->SetY(0);
  cluster->SetSigmaZ2(nz>1 ? dz*dz*k1to12 : pz*pz*k1to12);
  cluster->SetSigmaY2(nx>1 ? dx*dx*k1to12 : px*px*k1to12);
  cluster->SetSigmaYZ(0);
  cluster->SetFrameLoc();
  if (n>AliITSUClusterPix::kMaskNPix) n = AliITSUClusterPix::kMaskNPix;
  cluster->SetNxNzN(nx>AliITSUClusterPix::kMaskNX ? AliITSUClusterPix::kMaskNX : nx,
		    nz>AliITSUClusterPix::kMaskNZ ? AliITSUClusterPix::kMaskNZ : nz,
		    n>AliITSUClusterPix::kMaskNPix ? AliITSUClusterPix::kMaskNPix : n);		    
  cluster->SetQ(charge); // note: this is MC info
  //  if (cluster->GetNPix()!=n || cluster->GetNx()!=nx || cluster->GetNz()!=nz) {
  //  printf("PROBLEM: %d %d %d -> %d %d %d\n",nx,nz,n,
  //	   cluster->GetNx(),cluster->GetNz(),cluster->GetNPix());
  //  cluster->Dump();
  //  }
  //
  if (!fRawData) {
    CheckLabels();
    int nl = Min(kMaxLabInCluster,fNLabels);
    for (int i=nl;i--;) cluster->SetLabel(fCurrLabels[i],i);
  }
  //
  // Set Volume id
  cluster->SetVolumeId(fVolID);
  //    printf("mod %d: (%.4lf,%.4lf)cm\n",fVolID,x,z);
  //
#ifdef _ClusterTopology_
  FillClusterTopology(cand,cluster);
#endif //_ClusterTopology_
  //
}

//______________________________________________________________________________
void AliITSUClusterizer::CloseCand(AliITSUClusterizerClusterCand *cand) 
{
  // finish cluster
  AliITSUClusterPix *cluster = (AliITSUClusterPix*)NextCluster();
  Transform(cluster,cand);
  DeallocDigits(cand->fFirstDigit,cand->fLastDigit);
  DeallocCand(cand);
}

//______________________________________________________________________________
void AliITSUClusterizer::ClosePart(AliITSUClusterizerClusterPart *part) 
{
  // finish cluster part
  AliITSUClusterizerClusterCand *cand=part->fParent;
  DetachPartFromCand(cand,part);
  DeallocPart(part);
  if (!cand->fFirstPart) CloseCand(cand); 
}

//______________________________________________________________________________
void AliITSUClusterizer::CloseRemainingParts(AliITSUClusterizerClusterPart *part) 
{
  // finish what is left
  while (part) {
    AliITSUClusterizerClusterPart *next=part->fNextInRow;
    ClosePart(part);
    part=next;
  } 
}

//______________________________________________________________________________
void AliITSUClusterizer::Clusterize() 
{
  // main algo for MC clustererization
  SetRawData(kFALSE);
  //
  AliITSUClusterizerClusterDigit *iDigit=NextDigit();
  AliITSUClusterizerClusterPart *iPrevRowBegin=0;
  AliITSUClusterizerClusterPart *iNextRowBegin=0;
  AliITSUClusterizerClusterPart *iPrevRow=0;
  AliITSUClusterizerClusterPart *iNextRow=0;
  Int_t lastV=0;
  //
  while (iDigit) {
    if (iDigit->fDigit->GetCoord2()!=lastV) {
      // NEW ROW
      if (iNextRow) iNextRow->fNextInRow=0;
      if (iPrevRowBegin) CloseRemainingParts(iPrevRowBegin);
      if (iDigit->fDigit->GetCoord2()==lastV+1) {
	iPrevRowBegin=iNextRowBegin;
	iPrevRow     =iNextRowBegin;
      }
      else {
	// there was an empty row
	CloseRemainingParts(iNextRowBegin);
	iPrevRowBegin=0;
	iPrevRow     =0;
      }
      iNextRowBegin=0;
      iNextRow     =0;
      lastV=iDigit->fDigit->GetCoord2(); 
    }
    // skip cluster parts before this digit
    int limCol = iDigit->fDigit->GetCoord1()-fAllowDiagonalClusterization;
    while (iPrevRow && iPrevRow->fUEnd < limCol) {
      iPrevRow=iPrevRow->fNextInRow;
    }
    // find the longest continous line of digits [iDigit,pDigit]=[iDigit,jDigit)
    AliITSUClusterizerClusterCand *cand=AllocCand(); 
    AliITSUClusterizerClusterDigit *pDigit=iDigit;
    AliITSUClusterizerClusterDigit *jDigit=NextDigit();
    cand->fFirstPart=0;
    cand->fFirstDigit=cand->fLastDigit=iDigit; // NB: first diggit is attached differently
    iDigit->fNext=0;
    Int_t lastU =iDigit->fDigit->GetCoord1();
    Int_t lastU1=lastU+1;
    while (jDigit && jDigit->fDigit->GetCoord1()==lastU1 && jDigit->fDigit->GetCoord2()==lastV) {
      pDigit=jDigit;
      jDigit=NextDigit();
      AttachDigitToCand(cand,pDigit);
      ++lastU1;
    }
    if (!fAllowDiagonalClusterization) --lastU1;
    AliITSUClusterizerClusterPart *part=AllocPart();
    part->fUBegin=lastU ;
    part->fUEnd  =lastU1;
    AttachPartToCand(cand,part);
    // merge all cluster candidates of the previous line touching this one,
    // advance to the last one, but keep that one the next active one
    AliITSUClusterizerClusterPart *jPrevRow=iPrevRow;
    while (jPrevRow && jPrevRow->fUBegin<=lastU1) {
      if (jPrevRow->fParent!=cand) {
	MergeCands(jPrevRow->fParent,cand);
	DeallocCand(cand);
	cand=jPrevRow->fParent;
      }
      iPrevRow=jPrevRow;
      jPrevRow=jPrevRow->fNextInRow;
    }
    if (iNextRow)
      iNextRow->fNextInRow=part;
    else
      iNextRowBegin=part;
    iNextRow=part;
    iDigit=jDigit;
  }
  // remove remaining cluster parts
  CloseRemainingParts(iPrevRowBegin);
  if (iNextRow) iNextRow->fNextInRow=0;
  CloseRemainingParts(iNextRowBegin);
  return;
}

//______________________________________________________________________________
void AliITSUClusterizer::PrepareLorentzAngleCorrection(Double_t bz)
{
  // calculate parameters for Lorentz Angle correction. Must be called 
  // after setting segmentation and recoparams
  fLorAngCorrection = 0.5*fRecoParam->GetTanLorentzAngle(fLayerID)*bz/kNominalBz*fSegm->Dy();
}

//______________________________________________________________________
void AliITSUClusterizer::CheckLabels() 
{
  // Tries to find mother's labels
  //
  if (fNLabels<1) return;
  AliRunLoader *rl = AliRunLoader::Instance();
  if(!rl) return;
  TTree *trK=(TTree*)rl->TreeK();
  if (!trK) return;
  //
  static int   labS[kMaxLabels];
  static float kine[kMaxLabels];
  Int_t nlabels = fNLabels; 
  Int_t ntracks = gAlice->GetMCApp()->GetNtrack();
  for (Int_t i=fNLabels;i--;) labS[i] = fCurrLabels[i];
  //
  for (Int_t i=0;i<nlabels;i++) {
    Int_t label = labS[i];
    if (label>=ntracks) continue;
    TParticle *part=(TParticle*)gAlice->GetMCApp()->Particle(label);
    kine[i] = part->Energy() - part->GetCalcMass(); // kinetic energy 
    if (kine[i] < 0.001) {    // 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, assign parent's label
      for (int j=0;j<nlabels;j++) if (labS[j]==m) { labS[i] = m; break;}
    }
  } 
  //
  if (nlabels>kMaxLabInCluster) { // only 3 labels are stored in cluster, sort in decreasing momentum
    static int ind[kMaxLabels],labSS[kMaxLabels];
    TMath::Sort(nlabels,kine,ind);
    for (int i=nlabels;i--;) labSS[i] = labS[i];
    for (int i=nlabels;i--;) labS[i] = labSS[ind[i]]; 
  }
  //
  //compress labels -- if multi-times the same
  for (Int_t i=0;i<nlabels;i++) fCurrLabels[i]=-2;
  fNLabels = 0;
  int j=0;
  for (int i=0;i<nlabels;i++) {
    for (j=fNLabels;j--;) if (labS[i]==fCurrLabels[j]) break; // the label already there
    if (j<0) fCurrLabels[fNLabels++] = labS[i];
  }
  //
}

//------------------------------------------------------------------------

#ifdef _ClusterTopology_
//
//______________________________________________________________________
void AliITSUClusterizer::FillClusterTopology(const AliITSUClusterizerClusterCand *cand, AliITSUClusterPix* cl) const 
{
  // fill cluster topology bit pattern
  //
  //
  UShort_t mnCol=0xffff,mxCol=0,mnRow=0xffff,mxRow=0;
  for (AliITSUClusterizerClusterDigit *idigit=cand->fFirstDigit;idigit;idigit=idigit->fNext) {
    AliITSdigit* dig = idigit->fDigit;
    if (mnCol>dig->GetCoord1()) mnCol = (UShort_t)dig->GetCoord1();
    if (mxCol<dig->GetCoord1()) mxCol = (UShort_t)dig->GetCoord1();
    if (mnRow>dig->GetCoord2()) mnRow = (UShort_t)dig->GetCoord2();
    if (mxRow<dig->GetCoord2()) mxRow = (UShort_t)dig->GetCoord2();    
  }
  UShort_t nColSpan = UShort_t(mxCol-mnCol+1);
  UShort_t nRowSpan = UShort_t(mxRow-mnRow+1);
  UShort_t nColSpanW = nColSpan;
  UShort_t nRowSpanW = nRowSpan;
  if (nColSpan*nRowSpan>AliITSUClusterPix::kMaxPatternBits) { // need to store partial info
    // will crtail largest dimension
    if (nColSpan>nRowSpan) {
      if ( (nColSpanW=AliITSUClusterPix::kMaxPatternBits/nRowSpan)==0 ) {
	nColSpanW = 1;
	nRowSpanW = AliITSUClusterPix::kMaxPatternBits;
      }
    }
    else {
      if ( (nRowSpanW=AliITSUClusterPix::kMaxPatternBits/nColSpan)==0 ) {
	nRowSpanW = 1;
	nColSpanW = AliITSUClusterPix::kMaxPatternBits;
      }
    }
  }
  cl->ResetPattern();
  //
  cl->SetPatternRowSpan(nRowSpanW,nRowSpanW<nRowSpan);
  cl->SetPatternColSpan(nColSpanW,nColSpanW<nColSpan);
  cl->SetPatternMinRow(mnRow);
  cl->SetPatternMinCol(mnCol);
  //
  for (AliITSUClusterizerClusterDigit *idigit=cand->fFirstDigit;idigit;idigit=idigit->fNext) {
    AliITSdigit* dig = idigit->fDigit;
    UInt_t ir = dig->GetCoord2()-mnRow;
    UInt_t ic = dig->GetCoord1()-mnCol;
    if (ir<nRowSpanW && ic<nColSpanW) cl->SetPixel(ir,ic);
  }
  //
}

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