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

//-----------------------------------------------------//
//                                                     //
//  Source File : PMDClustering.cxx, Version 00        //
//                                                     //
//  Date   : September 26 2002                         //
//                                                     //
//  clustering code for alice pmd                      //
//                                                     //
//-----------------------------------------------------//

/* --------------------------------------------------------------------
   Code developed by S. C. Phatak, Institute of Physics,
   Bhubaneswar 751 005 ( phatak@iopb.res.in ) Given the energy deposited
   ( or ADC value ) in each cell of supermodule ( pmd or cpv ), the code
   builds up superclusters and breaks them into clusters. The input is
   in array fEdepCell[kNDIMX][kNDIMY] and cluster information is in array
   fClusters[5][5000]. integer fClno gives total number of clusters in the
   supermodule.

   fEdepCell, fClno  and fClusters are the only global ( public ) variables.
   Others are local ( private ) to the code.
   At the moment, the data is read for whole detector ( all supermodules
   and pmd as well as cpv. This will have to be modify later )
   LAST UPDATE  :  October 23, 2002
-----------------------------------------------------------------------*/

#include "Riostream.h"
#include <TNtuple.h>
#include <TObjArray.h>
#include <stdio.h>

#include "AliPMDcluster.h"
#include "AliPMDClustering.h"
#include "AliLog.h"

ClassImp(AliPMDClustering)

const Double_t AliPMDClustering::fgkSqroot3by2=0.8660254;  // sqrt(3.)/2.

AliPMDClustering::AliPMDClustering():
  fCutoff(0.0)
{
  for(int i = 0; i < kNDIMX; i++)
    {
      for(int j = 0; j < kNDIMY; j++)
	{
	  fCoord[0][i][j] = i+j/2.;
	  fCoord[1][i][j] = fgkSqroot3by2*j;
	  fEdepCell[i][j] = 0;
	}
    }
}
// ------------------------------------------------------------------------ //
AliPMDClustering::~AliPMDClustering()
{

}
// ------------------------------------------------------------------------ //
void AliPMDClustering::DoClust(Int_t idet, Int_t ismn, Double_t celladc[48][96], TObjArray *pmdcont)
{
  // main function to call other necessary functions to do clustering
  //
  AliPMDcluster *pmdcl = 0;
  /*
    int id and jd defined to read the input data.
    It is assumed that for data we have 0 <= id <= 48
    and 0 <= jd <=96
  */
  int i, i1, i2, j, nmx1, incr, id, jd;
  double  cutoff, ave;
  Float_t clusdata[7];

  const float ktwobysqrt3 = 1.1547; // 2./sqrt(3.)

  for (id = 0; id < kNDIMXr; id++)
    {
      for (jd = 0; jd < kNDIMYr; jd++)
	{
	  j=jd;
	  i=id+(kNDIMYr/2-1)-(jd/2);
	  fEdepCell[i][j] = celladc[id][jd];
	}
    }
  Order(); // order the data
  cutoff = fCutoff; // cutoff used to discard cells having ener. dep.
  ave=0.;
  nmx1=-1;

  for(j=0;j<kNMX; j++)
    {
      i1 = fIord[0][j];
      i2 = fIord[1][j];
      if (fEdepCell[i1][i2] > 0.) {ave = ave + fEdepCell[i1][i2];}
      if (fEdepCell[i1][i2] > cutoff ) nmx1 = nmx1 + 1;
    }
  // nmx1 --- number of cells having ener dep >= cutoff

  AliDebug(1,Form("Number of cells having energy >= %f are %d",cutoff,nmx1));

  //  if (nmx1 == 0 | nmx1 == -1) return;

  if (nmx1 == 0) nmx1 = 1;
  ave=ave/nmx1;

  AliDebug(1,Form("Number of cells in a SuperM = %d and Average = %f",
		  kNMX,ave));
	   
  incr = CrClust(ave, cutoff, nmx1);
  RefClust(incr);

  AliDebug(1,Form("Detector Plane = %d  Serial Module No = %d Number of clusters = %d",idet, ismn, fClno));
  
  for(i1=0; i1<=fClno; i1++)
    {
      Float_t cluXC    = (Float_t) fClusters[0][i1];
      Float_t cluYC    = (Float_t) fClusters[1][i1];
      Float_t cluADC   = (Float_t) fClusters[2][i1];
      Float_t cluCELLS = (Float_t) fClusters[3][i1];
      Float_t cluRAD   = (Float_t) fClusters[4][i1];
      Float_t cluY0    = ktwobysqrt3*cluYC;
      Float_t cluX0    = cluXC - cluY0/2.;
      // 
      // Cluster X centroid is back transformed
      //
      clusdata[0]      = cluX0 - (48-1) + cluY0/2.;
      clusdata[1]      = cluY0;
      clusdata[2]      = cluADC;
      clusdata[3]      = cluCELLS;
      clusdata[4]      = cluRAD;

      pmdcl = new AliPMDcluster(idet, ismn, clusdata);
      pmdcont->Add(pmdcl);
    }
}
// ------------------------------------------------------------------------ //
void AliPMDClustering::Order()
{
  // Sorting algorithm
  // sorts the ADC values from higher to lower
  //
  double dd[kNMX];
  // matrix fEdepCell converted into
  // one dimensional array dd. adum a place holder for double
  int i, j, i1, i2, iord1[kNMX];
  // information of
  // ordering is stored in iord1, original array not ordered
  //
  // define arrays dd and iord1
  for(i1=0; i1 < kNDIMX; i1++)
    {
      for(i2=0; i2 < kNDIMY; i2++)
	{
	  i        = i1 + i2*kNDIMX;
	  iord1[i] = i;
	  dd[i]    = fEdepCell[i1][i2];
	}
    }
  // sort and store sorting information in iord1
//   for(j=1; j < kNMX; j++)
//     {
//       itst = 0;
//       adum = dd[j];
//       idum = iord1[j];
//       for(i1=0; i1 < j ; i1++)
// 	{
// 	  if(adum > dd[i1] && itst == 0)
// 	    {
// 	      itst = 1;
// 	      for(i2=j-1; i2 >= i1 ; i2=i2--)
// 		{
// 		  dd[i2+1]    = dd[i2];
// 		  iord1[i2+1] = iord1[i2];
// 		}
// 	      dd[i1]    = adum;
// 	      iord1[i1] = idum;
// 	    }
// 	}
//     }

  TMath::Sort(kNMX,dd,iord1); //PH Using much better algorithm...
  // store the sorted information in fIord for later use
  for(i=0; i<kNMX; i++)
    {
      j  = iord1[i];
      i2 = j/kNDIMX;
      i1 = j-i2*kNDIMX;
      fIord[0][i]=i1;
      fIord[1][i]=i2;
    }
}
// ------------------------------------------------------------------------ //
int AliPMDClustering::CrClust(double ave, double cutoff, int nmx1)
{
  // Does crude clustering
  // Finds out only the big patch by just searching the
  // connected cells
  //
  int i,j,k,id1,id2,icl, numcell, clust[2][5000];
  int jd1,jd2, icell, cellcount;
  static int neibx[6]={1,0,-1,-1,0,1}, neiby[6]={0,1,1,0,-1,-1};
  // neibx and neiby define ( incremental ) (i,j) for the neighbours of a
  // cell. There are six neighbours.
  // cellcount --- total number of cells having nonzero ener dep
  // numcell --- number of cells in a given supercluster
  // ofstream ofl0("cells_loc",ios::out);
  // initialize fInfocl[2][kNDIMX][kNDIMY]

  AliDebug(1,Form("kNMX = %d nmx1 = %d kNDIMX = %d kNDIMY = %d ave = %f cutoff = %f",kNMX,nmx1,kNDIMX,kNDIMY,ave,cutoff));
  
  for (j=0; j < kNDIMX; j++){
    for(k=0; k < kNDIMY; k++){
      fInfocl[0][j][k] = 0;
      fInfocl[1][j][k] = 0;
    }
  }
  for(i=0; i < kNMX; i++){
    fInfcl[0][i] = -1;
    id1=fIord[0][i];
    id2=fIord[1][i];
    if(fEdepCell[id1][id2] <= cutoff){fInfocl[0][id1][id2]=-1;}
  }
  // ---------------------------------------------------------------
  // crude clustering begins. Start with cell having largest adc
  // count and loop over the cells in descending order of adc count
  // ---------------------------------------------------------------
  icl=-1;
  cellcount=-1;
  for(icell=0; icell <= nmx1; icell++){
    id1=fIord[0][icell];
    id2=fIord[1][icell];
    if(fInfocl[0][id1][id2] == 0 ){
      // ---------------------------------------------------------------
      // icl -- cluster #, numcell -- # of cells in it, clust -- stores
      // coordinates of the cells in a cluster, fInfocl[0][i1][i2] is 1 for
      // primary and 2 for secondary cells,
      // fInfocl[1][i1][i2] stores cluster #
      // ---------------------------------------------------------------
      icl=icl+1;
      numcell=0;
      cellcount = cellcount + 1;
      fInfocl[0][id1][id2]=1;
      fInfocl[1][id1][id2]=icl;
      fInfcl[0][cellcount]=icl;
      fInfcl[1][cellcount]=id1;
      fInfcl[2][cellcount]=id2;

      clust[0][numcell]=id1;
      clust[1][numcell]=id2;
      for(i=1; i<5000; i++)clust[0][i]=0;
      // ---------------------------------------------------------------
      // check for adc count in neib. cells. If ne 0 put it in this clust
      // ---------------------------------------------------------------
      for(i=0; i<6; i++){
	jd1=id1+neibx[i];
	jd2=id2+neiby[i];
	if( (jd1 >= 0 && jd1 < kNDIMX) && (jd2 >= 0 && jd2 < kNDIMY) &&
	    fInfocl[0][jd1][jd2] == 0){
	  numcell=numcell+1;
	  fInfocl[0][jd1][jd2]=2;
	  fInfocl[1][jd1][jd2]=icl;
	  clust[0][numcell]=jd1;
	  clust[1][numcell]=jd2;
	  cellcount=cellcount+1;
	  fInfcl[0][cellcount]=icl;
	  fInfcl[1][cellcount]=jd1;
	  fInfcl[2][cellcount]=jd2;
	}
      }
      // ---------------------------------------------------------------
      // check adc count for neighbour's neighbours recursively and
      // if nonzero, add these to the cluster.
      // ---------------------------------------------------------------
      for(i=1;i < 5000;i++){
	if(clust[0][i] != 0){
	  id1=clust[0][i];
	  id2=clust[1][i];
	  for(j=0; j<6 ; j++){
	    jd1=id1+neibx[j];
	    jd2=id2+neiby[j];
	    if( (jd1 >= 0 && jd1 < kNDIMX) && (jd2 >= 0 && jd2 < kNDIMY) &&
		fInfocl[0][jd1][jd2] == 0 ){
	      fInfocl[0][jd1][jd2] = 2;
	      fInfocl[1][jd1][jd2] = icl;
	      numcell              = numcell + 1;
	      clust[0][numcell]    = jd1;
	      clust[1][numcell]    = jd2;
	      cellcount            = cellcount+1;
	      fInfcl[0][cellcount] = icl;
	      fInfcl[1][cellcount] = jd1;
	      fInfcl[2][cellcount] = jd2;
	    }
	  }
	}
      }
    }
  }
  //  for(icell=0; icell<=cellcount; icell++){
  //    ofl0 << fInfcl[0][icell] << " " << fInfcl[1][icell] << " " <<
  //      fInfcl[2][icell] << endl;
  //  }
  return cellcount;
}
// ------------------------------------------------------------------------ //
void AliPMDClustering::RefClust(int incr)
{
  // Does the refining of clusters
  // Takes the big patch and does gaussian fitting and
  // finds out the more refined clusters
  //
  int i, j, k, i1, i2, id, icl, ncl[4500], iord[4500], itest;
  int ihld;
  int ig, nsupcl, lev1[20], lev2[20];
  double x[4500], y[4500], z[4500], x1, y1, z1, x2, y2, z2, dist;
  double xc[4500], yc[4500], zc[4500], cells[4500], sum, rc[4500], rr;
  // fClno counts the final clusters
  // nsupcl =  # of superclusters; ncl[i]= # of cells in supercluster i
  // x, y and z store (x,y) coordinates of and energy deposited in a cell
  // xc, yc store (x,y) coordinates of the cluster center
  // zc stores the energy deposited in a cluster
  // rc is cluster radius
  // finally the cluster information is put in 2-dimensional array clusters
  // ofstream ofl1("checking.5",ios::app);
  fClno  = -1;
  nsupcl = -1;
  for(i=0; i<4500; i++){ncl[i]=-1;}
  for(i=0; i<incr; i++){
    if(fInfcl[0][i] != nsupcl){ nsupcl=nsupcl+1; }
    if (nsupcl > 4500) {
      AliWarning("RefClust: Too many superclusters!");
      nsupcl = 4500;
      break;
    }
    ncl[nsupcl]=ncl[nsupcl]+1;
  }

  AliDebug(1,Form("Number of cells = %d Number of Superclusters = %d",
		  incr+1,nsupcl+1));

  id=-1;
  icl=-1;
  for(i=0; i<nsupcl; i++){
    if(ncl[i] == 0){
      id=id+1;
      icl=icl+1;
      // one  cell super-clusters --> single cluster
      // cluster center at the centyer of the cell
      // cluster radius = half cell dimension
      if (fClno >= 5000) {
	AliWarning("RefClust: Too many clusters! more than 5000");
	return;
      }
      fClno = fClno + 1;
      i1 = fInfcl[1][id];
      i2 = fInfcl[2][id];
      fClusters[0][fClno] = fCoord[0][i1][i2];
      fClusters[1][fClno] = fCoord[1][i1][i2];
      fClusters[2][fClno] = fEdepCell[i1][i2];
      fClusters[3][fClno] = 1.;
      fClusters[4][fClno] = 0.5;
      //ofl1 << icl << " " << fCoord[0][i1][i2] << " " << fCoord[1][i1][i2] <<
      //" " << fEdepCell[i1][i2] << " " << fClusters[3][fClno] <<endl;
    }else if(ncl[i] == 1){
      // two cell super-cluster --> single cluster
      // cluster center is at ener. dep.-weighted mean of two cells
      // cluster radius == half cell dimension
      id   = id + 1;
      icl  = icl+1;
      if (fClno >= 5000) {
	AliWarning("RefClust: Too many clusters! more than 5000");
	return;
      }
      fClno = fClno+1;
      i1   = fInfcl[1][id];
      i2   = fInfcl[2][id];
      x1   = fCoord[0][i1][i2];
      y1   = fCoord[1][i1][i2];
      z1   = fEdepCell[i1][i2];
      id   = id+1;
      i1   = fInfcl[1][id];
      i2   = fInfcl[2][id];
      x2   = fCoord[0][i1][i2];
      y2   = fCoord[1][i1][i2];
      z2   = fEdepCell[i1][i2];
      fClusters[0][fClno] = (x1*z1+x2*z2)/(z1+z2);
      fClusters[1][fClno] = (y1*z1+y2*z2)/(z1+z2);
      fClusters[2][fClno] = z1+z2;
      fClusters[3][fClno] = 2.;
      fClusters[4][fClno] = 0.5;
      //ofl1 << icl << " " << fClusters[0][fClno] << " " << fClusters[1][fClno]
      //   << " " << fClusters[2][fClno] << " " <<fClusters[3][fClno] <<endl;
    }
    else{
      id      = id + 1;
      iord[0] = 0;
      // super-cluster of more than two cells - broken up into smaller
      // clusters gaussian centers computed. (peaks separated by > 1 cell)
      // Begin from cell having largest energy deposited This is first
      // cluster center
      i1      = fInfcl[1][id];
      i2      = fInfcl[2][id];
      x[0]    = fCoord[0][i1][i2];
      y[0]    = fCoord[1][i1][i2];
      z[0]    = fEdepCell[i1][i2];
      iord[0] = 0;
      for(j=1;j<=ncl[i];j++){

	id      = id + 1;
	i1      = fInfcl[1][id];
	i2      = fInfcl[2][id];
	iord[j] = j;
	x[j]    = fCoord[0][i1][i2];
	y[j]    = fCoord[1][i1][i2];
	z[j]    = fEdepCell[i1][i2];
      }
      // arranging cells within supercluster in decreasing order
      for(j=1;j<=ncl[i];j++){
	itest=0;
	ihld=iord[j];
	for(i1=0;i1<j;i1++){
	  if(itest == 0 && z[iord[i1]] < z[ihld]){
	    itest=1;
	    for(i2=j-1;i2>=i1;i2--){
	      iord[i2+1]=iord[i2];
	    }
	    iord[i1]=ihld;
	  }
	}
      }

      // compute the number of Gaussians and their centers ( first
      // guess )
      // centers must be separated by cells having smaller ener. dep.
      // neighbouring centers should be either strong or well-separated
      ig=0;
      xc[ig]=x[iord[0]];
      yc[ig]=y[iord[0]];
      zc[ig]=z[iord[0]];
      for(j=1;j<=ncl[i];j++){
	itest=-1;
	x1=x[iord[j]];
	y1=y[iord[j]];
	for(k=0;k<=ig;k++){
	  x2=xc[k]; y2=yc[k];
	  rr=Distance(x1,y1,x2,y2);
	  if( rr >= 1.1 && rr < 1.8 && z[iord[j]] > zc[k]/4.)
	    itest=itest+1;
	  if( rr >= 1.8 && rr < 2.1 && z[iord[j]] > zc[k]/10.)
	    itest=itest+1;
	  if( rr >= 2.1)itest=itest+1;
	}
	if(itest == ig){
	  ig=ig+1;
	  xc[ig]=x1;
	  yc[ig]=y1;
	  zc[ig]=z[iord[j]];
	}
      }
      // for(j=0; j<=ig; j++){
      //ofl1 << icl+j+1 << " " << xc[j] << " " <<yc[j] <<" "<<zc[j]<<endl;
      //}
      // GaussFit to adjust cluster parameters to minimize
      GaussFit(ncl[i], ig, x[0], y[0] ,z[0], xc[0], yc[0], zc[0], rc[0]);
      icl=icl+ig+1;
      // compute the number of cells belonging to each cluster.
      // cell is shared between several clusters ( if they are equidistant
      // from it ) in the ratio of cluster energy deposition
      for(j=0; j<=ig; j++){
	cells[j]=0.;
      }
      if(ig > 0){
	for(j=0; j<=ncl[i]; j++){
	  lev1[0]=0;
	  lev2[0]=0;
	  for(k=0; k<=ig; k++){
	    dist=Distance(x[j], y[j], xc[k], yc[k]);
	    if(dist < sqrt(3.) ){
	      lev1[0]++;
	      i1=lev1[0];
	      lev1[i1]=k;
	    }else{
	      if(dist < 2.1){
		lev2[0]++;
		i1=lev2[0];
		lev2[i1]=k;
	      }
	    }
	  }
	  if(lev1[0] != 0){
	    if(lev1[0] == 1){cells[lev1[1]]=cells[lev1[1]]+1.;}
	    else{
	      sum=0.;
	      for(k=1; k<=lev1[0]; k++){
		sum=sum+zc[lev1[k]];
	      }
	      for(k=1; k<=lev1[0]; k++){
		cells[lev1[k]]=cells[lev1[k]]+zc[lev1[k]]/sum;
	      }
	    }
	  }else{
	    if(lev2[0] == 0){cells[lev2[1]]=cells[lev2[1]]+1.;}
	    else{
	      sum=0.;
	      for(k=1; k<=lev2[0]; k++){
		sum=sum+zc[lev2[k]];
	      }
	      for(k=1; k<=lev2[0]; k++){
		cells[lev2[k]]=cells[lev2[k]]+zc[lev2[k]]/sum;
	      }
	    }
	  }
	}
      }
      for(j=0; j<=ig; j++){
	if (fClno >= 5000) {
	  AliWarning("RefClust: Too many clusters! more than 5000");
	  return;
	}
	fClno               = fClno + 1;
	fClusters[0][fClno] = xc[j];
	fClusters[1][fClno] = yc[j];
	fClusters[2][fClno] = zc[j];
	fClusters[4][fClno] = rc[j];
	if(ig == 0){
	  fClusters[3][fClno] = ncl[i];
	}else{
	  fClusters[3][fClno] = cells[j];
	}
      }
    }
  }
}
// ------------------------------------------------------------------------ //
void AliPMDClustering::GaussFit(Int_t ncell, Int_t nclust, Double_t &x, Double_t &y ,Double_t &z, Double_t &xc, Double_t &yc, Double_t &zc, Double_t &rc)
{
  // Does gaussian fitting
  //
  int i, j, i1, i2, novar, idd, jj;
  double xx[4500], yy[4500], zz[4500], xxc[4500], yyc[4500];
  double a[4500], b[4500], c[4500], d[4500], ha[4500], hb[4500];
  double hc[4500], hd[4500], zzc[4500], rrc[4500];
  int neib[4500][50];
  double sum, dx, dy, str, str1, aint, sum1, rr, dum;
  double x1, x2, y1, y2;
  str   = 0.;
  str1  = 0.;
  rr    = 0.3;
  novar = 0;
  j = 0;  // Just put not to see the compiler warning, BKN

  for(i=0; i<=ncell; i++)
    {
      xx[i] = *(&x+i);
      yy[i] = *(&y+i);
      zz[i] = *(&z+i);
      str   = str + zz[i];
    }
  for(i=0; i<=nclust; i++)
    {
      xxc[i] = *(&xc+i);
      yyc[i] = *(&yc+i);
      zzc[i] = *(&zc+i);
      str1   = str1 + zzc[i];
      rrc[i] = 0.5;
    }
  for(i=0; i<=nclust; i++)
    {
      zzc[i] = str/str1*zzc[i];
      ha[i]  = xxc[i];
      hb[i]  = yyc[i];
      hc[i]  = zzc[i];
      hd[i]  = rrc[i];
      x1     = xxc[i];
      y1     = yyc[i];
    }
  for(i=0; i<=ncell; i++){
    idd=0;
    x1=xx[i];
    y1=yy[i];
    for(j=0; j<=nclust; j++){
      x2=xxc[j];
      y2=yyc[j];
      if(Distance(x1,y1,x2,y2) <= 3.){ idd=idd+1; neib[i][idd]=j; }
    }
    neib[i][0]=idd;
  }
  sum=0.;
  for(i1=0; i1<=ncell; i1++){
    aint=0.;
    idd=neib[i1][0];
    for(i2=1; i2<=idd; i2++){
      jj=neib[i1][i2];
      dx=xx[i1]-xxc[jj];
      dy=yy[i1]-yyc[jj];
      dum=rrc[j]*rrc[jj]+rr*rr;
      aint=aint+exp(-(dx*dx+dy*dy)/dum)*zzc[idd]*rr*rr/dum;
    }
    sum=sum+(aint-zz[i1])*(aint-zz[i1])/str;
  }
//   jmax=nclust*1000;
//   if(nclust > 20)jmax=20000;
//   for(j=0; j<jmax; j++){
    str1=0.;
    for(i=0; i<=nclust; i++){
      a[i]=xxc[i]+0.6*(Ranmar()-0.5);
      b[i]=yyc[i]+0.6*(Ranmar()-0.5);
      c[i]=zzc[i]*(1.+(Ranmar()-0.5)*0.2);
      str1=str1+zzc[i];
      d[i]=rrc[i]*(1.+(Ranmar()-0.5)*0.1);
      if(d[i] < 0.25)d[i]=0.25;
    }
    for(i=0; i<=nclust; i++){ c[i]=c[i]*str/str1; }
    sum1=0.;
    for(i1=0; i1<=ncell; i1++){
      aint=0.;
      idd=neib[i1][0];
      for(i2=1; i2<=idd; i2++){
	jj=neib[i1][i2];
	dx=xx[i1]-a[jj];
	dy=yy[i1]-b[jj];
	dum=d[jj]*d[jj]+rr*rr;
	aint=aint+exp(-(dx*dx+dy*dy)/dum)*c[i2]*rr*rr/dum;
      }
      sum1=sum1+(aint-zz[i1])*(aint-zz[i1])/str;
    }

    if(sum1 < sum){
      for(i2=0; i2<=nclust; i2++){
	xxc[i2]=a[i2];
	yyc[i2]=b[i2];
	zzc[i2]=c[i2];
	rrc[i2]=d[i2];
	sum=sum1;
      }
    }
//   }
  for(j=0; j<=nclust; j++){
    *(&xc+j)=xxc[j];
    *(&yc+j)=yyc[j];
    *(&zc+j)=zzc[j];
    *(&rc+j)=rrc[j];
  }
}
// ------------------------------------------------------------------------ //
double AliPMDClustering::Distance(double x1, double y1, double x2, double y2)
{
  return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
}
// ------------------------------------------------------------------------ //
double AliPMDClustering::Ranmar() const
{
  //  Universal random number generator proposed by Marsaglia and Zaman
  //  in report FSU-SCRI-87-50

  //  clock_t start;
  int ii, jj;
  static int i=96, j=32, itest=0, i1, i2, i3, i4, i5;
  static double u[97], c, cd, cm, s, t;
  static double uni;
  int count1,count2,idum;
  /*    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  */
  if (itest == 0) {
    //*******************************************************
    // following three lines if the seed to be provided by computer
    // start = time(NULL);
    // ii=start;
    // jj=start;
    //*******************************************************
    //following two lines for fixed seed ( during testing only. Else
    //use preceeing three lines
    ii=8263;
    jj=5726;
    if(ii > 31328 ) ii = ii - ( ii / 31328 ) * 31328;
    if(jj > 30081 ) jj = jj - ( jj / 30081 ) * 30081;
    itest=itest+1;
    if((( ii > 0 ) &&  ( ii <= 31328 )) && (( jj > 0 ) &&
					    ( jj <= 30081 ))){
      i1=ii/177+2; i2=ii-(i1-2)*177+2; i3=jj/169+1; i4=jj-(i3-1)*169;
      i4 = jj - (i3-1)*169;
      count1=0;
      while ( count1 < 97 ){
	s=0.;
	t=0.5;
	count2=0;
	while( count2 < 24 ){
	  idum=i1*i2/179;
	  idum=( i1*i2 - (i1*i2/179)*179 ) * i3;
	  i5=idum-(idum/179)*179;
	  i1=i2; i2=i3; i3=i5; idum=53*i4+1; i4=idum-(idum/169)*169;
	  if( i4*i5-((i4*i5)/64)*64 >= 32 ) s=s+t;
	  t=0.5*t;
	  count2=count2+1;
	}
	u[count1] = s;
	count1 = count1 +1;
      }
      c = 362436./16777216.;  cd = 7654321./16777216.;
      cm = 16777213./16777216.;
    }
    else{
      AliWarning("Wrong initialization");
    }
  }
  else{
    uni = u[i] - u[j];
    if( uni < 0.) uni = uni + 1;
    u[i] = uni;
    i = i -1;
    if( i < 0 ) i = 96;
    j = j - 1;
    if ( j < 0 ) j = 96;
    c = c - cd;
    if( c < 0. ) c = c+cm;
    uni = uni-c ;
    if( uni < 0. )uni = uni+1.;
  }
  return uni;
}
// ------------------------------------------------------------------------ //
void AliPMDClustering::SetEdepCut(Float_t decut)
{
  fCutoff = decut;
}
// ------------------------------------------------------------------------ //
 AliPMDClustering.cxx:1
 AliPMDClustering.cxx:2
 AliPMDClustering.cxx:3
 AliPMDClustering.cxx:4
 AliPMDClustering.cxx:5
 AliPMDClustering.cxx:6
 AliPMDClustering.cxx:7
 AliPMDClustering.cxx:8
 AliPMDClustering.cxx:9
 AliPMDClustering.cxx:10
 AliPMDClustering.cxx:11
 AliPMDClustering.cxx:12
 AliPMDClustering.cxx:13
 AliPMDClustering.cxx:14
 AliPMDClustering.cxx:15
 AliPMDClustering.cxx:16
 AliPMDClustering.cxx:17
 AliPMDClustering.cxx:18
 AliPMDClustering.cxx:19
 AliPMDClustering.cxx:20
 AliPMDClustering.cxx:21
 AliPMDClustering.cxx:22
 AliPMDClustering.cxx:23
 AliPMDClustering.cxx:24
 AliPMDClustering.cxx:25
 AliPMDClustering.cxx:26
 AliPMDClustering.cxx:27
 AliPMDClustering.cxx:28
 AliPMDClustering.cxx:29
 AliPMDClustering.cxx:30
 AliPMDClustering.cxx:31
 AliPMDClustering.cxx:32
 AliPMDClustering.cxx:33
 AliPMDClustering.cxx:34
 AliPMDClustering.cxx:35
 AliPMDClustering.cxx:36
 AliPMDClustering.cxx:37
 AliPMDClustering.cxx:38
 AliPMDClustering.cxx:39
 AliPMDClustering.cxx:40
 AliPMDClustering.cxx:41
 AliPMDClustering.cxx:42
 AliPMDClustering.cxx:43
 AliPMDClustering.cxx:44
 AliPMDClustering.cxx:45
 AliPMDClustering.cxx:46
 AliPMDClustering.cxx:47
 AliPMDClustering.cxx:48
 AliPMDClustering.cxx:49
 AliPMDClustering.cxx:50
 AliPMDClustering.cxx:51
 AliPMDClustering.cxx:52
 AliPMDClustering.cxx:53
 AliPMDClustering.cxx:54
 AliPMDClustering.cxx:55
 AliPMDClustering.cxx:56
 AliPMDClustering.cxx:57
 AliPMDClustering.cxx:58
 AliPMDClustering.cxx:59
 AliPMDClustering.cxx:60
 AliPMDClustering.cxx:61
 AliPMDClustering.cxx:62
 AliPMDClustering.cxx:63
 AliPMDClustering.cxx:64
 AliPMDClustering.cxx:65
 AliPMDClustering.cxx:66
 AliPMDClustering.cxx:67
 AliPMDClustering.cxx:68
 AliPMDClustering.cxx:69
 AliPMDClustering.cxx:70
 AliPMDClustering.cxx:71
 AliPMDClustering.cxx:72
 AliPMDClustering.cxx:73
 AliPMDClustering.cxx:74
 AliPMDClustering.cxx:75
 AliPMDClustering.cxx:76
 AliPMDClustering.cxx:77
 AliPMDClustering.cxx:78
 AliPMDClustering.cxx:79
 AliPMDClustering.cxx:80
 AliPMDClustering.cxx:81
 AliPMDClustering.cxx:82
 AliPMDClustering.cxx:83
 AliPMDClustering.cxx:84
 AliPMDClustering.cxx:85
 AliPMDClustering.cxx:86
 AliPMDClustering.cxx:87
 AliPMDClustering.cxx:88
 AliPMDClustering.cxx:89
 AliPMDClustering.cxx:90
 AliPMDClustering.cxx:91
 AliPMDClustering.cxx:92
 AliPMDClustering.cxx:93
 AliPMDClustering.cxx:94
 AliPMDClustering.cxx:95
 AliPMDClustering.cxx:96
 AliPMDClustering.cxx:97
 AliPMDClustering.cxx:98
 AliPMDClustering.cxx:99
 AliPMDClustering.cxx:100
 AliPMDClustering.cxx:101
 AliPMDClustering.cxx:102
 AliPMDClustering.cxx:103
 AliPMDClustering.cxx:104
 AliPMDClustering.cxx:105
 AliPMDClustering.cxx:106
 AliPMDClustering.cxx:107
 AliPMDClustering.cxx:108
 AliPMDClustering.cxx:109
 AliPMDClustering.cxx:110
 AliPMDClustering.cxx:111
 AliPMDClustering.cxx:112
 AliPMDClustering.cxx:113
 AliPMDClustering.cxx:114
 AliPMDClustering.cxx:115
 AliPMDClustering.cxx:116
 AliPMDClustering.cxx:117
 AliPMDClustering.cxx:118
 AliPMDClustering.cxx:119
 AliPMDClustering.cxx:120
 AliPMDClustering.cxx:121
 AliPMDClustering.cxx:122
 AliPMDClustering.cxx:123
 AliPMDClustering.cxx:124
 AliPMDClustering.cxx:125
 AliPMDClustering.cxx:126
 AliPMDClustering.cxx:127
 AliPMDClustering.cxx:128
 AliPMDClustering.cxx:129
 AliPMDClustering.cxx:130
 AliPMDClustering.cxx:131
 AliPMDClustering.cxx:132
 AliPMDClustering.cxx:133
 AliPMDClustering.cxx:134
 AliPMDClustering.cxx:135
 AliPMDClustering.cxx:136
 AliPMDClustering.cxx:137
 AliPMDClustering.cxx:138
 AliPMDClustering.cxx:139
 AliPMDClustering.cxx:140
 AliPMDClustering.cxx:141
 AliPMDClustering.cxx:142
 AliPMDClustering.cxx:143
 AliPMDClustering.cxx:144
 AliPMDClustering.cxx:145
 AliPMDClustering.cxx:146
 AliPMDClustering.cxx:147
 AliPMDClustering.cxx:148
 AliPMDClustering.cxx:149
 AliPMDClustering.cxx:150
 AliPMDClustering.cxx:151
 AliPMDClustering.cxx:152
 AliPMDClustering.cxx:153
 AliPMDClustering.cxx:154
 AliPMDClustering.cxx:155
 AliPMDClustering.cxx:156
 AliPMDClustering.cxx:157
 AliPMDClustering.cxx:158
 AliPMDClustering.cxx:159
 AliPMDClustering.cxx:160
 AliPMDClustering.cxx:161
 AliPMDClustering.cxx:162
 AliPMDClustering.cxx:163
 AliPMDClustering.cxx:164
 AliPMDClustering.cxx:165
 AliPMDClustering.cxx:166
 AliPMDClustering.cxx:167
 AliPMDClustering.cxx:168
 AliPMDClustering.cxx:169
 AliPMDClustering.cxx:170
 AliPMDClustering.cxx:171
 AliPMDClustering.cxx:172
 AliPMDClustering.cxx:173
 AliPMDClustering.cxx:174
 AliPMDClustering.cxx:175
 AliPMDClustering.cxx:176
 AliPMDClustering.cxx:177
 AliPMDClustering.cxx:178
 AliPMDClustering.cxx:179
 AliPMDClustering.cxx:180
 AliPMDClustering.cxx:181
 AliPMDClustering.cxx:182
 AliPMDClustering.cxx:183
 AliPMDClustering.cxx:184
 AliPMDClustering.cxx:185
 AliPMDClustering.cxx:186
 AliPMDClustering.cxx:187
 AliPMDClustering.cxx:188
 AliPMDClustering.cxx:189
 AliPMDClustering.cxx:190
 AliPMDClustering.cxx:191
 AliPMDClustering.cxx:192
 AliPMDClustering.cxx:193
 AliPMDClustering.cxx:194
 AliPMDClustering.cxx:195
 AliPMDClustering.cxx:196
 AliPMDClustering.cxx:197
 AliPMDClustering.cxx:198
 AliPMDClustering.cxx:199
 AliPMDClustering.cxx:200
 AliPMDClustering.cxx:201
 AliPMDClustering.cxx:202
 AliPMDClustering.cxx:203
 AliPMDClustering.cxx:204
 AliPMDClustering.cxx:205
 AliPMDClustering.cxx:206
 AliPMDClustering.cxx:207
 AliPMDClustering.cxx:208
 AliPMDClustering.cxx:209
 AliPMDClustering.cxx:210
 AliPMDClustering.cxx:211
 AliPMDClustering.cxx:212
 AliPMDClustering.cxx:213
 AliPMDClustering.cxx:214
 AliPMDClustering.cxx:215
 AliPMDClustering.cxx:216
 AliPMDClustering.cxx:217
 AliPMDClustering.cxx:218
 AliPMDClustering.cxx:219
 AliPMDClustering.cxx:220
 AliPMDClustering.cxx:221
 AliPMDClustering.cxx:222
 AliPMDClustering.cxx:223
 AliPMDClustering.cxx:224
 AliPMDClustering.cxx:225
 AliPMDClustering.cxx:226
 AliPMDClustering.cxx:227
 AliPMDClustering.cxx:228
 AliPMDClustering.cxx:229
 AliPMDClustering.cxx:230
 AliPMDClustering.cxx:231
 AliPMDClustering.cxx:232
 AliPMDClustering.cxx:233
 AliPMDClustering.cxx:234
 AliPMDClustering.cxx:235
 AliPMDClustering.cxx:236
 AliPMDClustering.cxx:237
 AliPMDClustering.cxx:238
 AliPMDClustering.cxx:239
 AliPMDClustering.cxx:240
 AliPMDClustering.cxx:241
 AliPMDClustering.cxx:242
 AliPMDClustering.cxx:243
 AliPMDClustering.cxx:244
 AliPMDClustering.cxx:245
 AliPMDClustering.cxx:246
 AliPMDClustering.cxx:247
 AliPMDClustering.cxx:248
 AliPMDClustering.cxx:249
 AliPMDClustering.cxx:250
 AliPMDClustering.cxx:251
 AliPMDClustering.cxx:252
 AliPMDClustering.cxx:253
 AliPMDClustering.cxx:254
 AliPMDClustering.cxx:255
 AliPMDClustering.cxx:256
 AliPMDClustering.cxx:257
 AliPMDClustering.cxx:258
 AliPMDClustering.cxx:259
 AliPMDClustering.cxx:260
 AliPMDClustering.cxx:261
 AliPMDClustering.cxx:262
 AliPMDClustering.cxx:263
 AliPMDClustering.cxx:264
 AliPMDClustering.cxx:265
 AliPMDClustering.cxx:266
 AliPMDClustering.cxx:267
 AliPMDClustering.cxx:268
 AliPMDClustering.cxx:269
 AliPMDClustering.cxx:270
 AliPMDClustering.cxx:271
 AliPMDClustering.cxx:272
 AliPMDClustering.cxx:273
 AliPMDClustering.cxx:274
 AliPMDClustering.cxx:275
 AliPMDClustering.cxx:276
 AliPMDClustering.cxx:277
 AliPMDClustering.cxx:278
 AliPMDClustering.cxx:279
 AliPMDClustering.cxx:280
 AliPMDClustering.cxx:281
 AliPMDClustering.cxx:282
 AliPMDClustering.cxx:283
 AliPMDClustering.cxx:284
 AliPMDClustering.cxx:285
 AliPMDClustering.cxx:286
 AliPMDClustering.cxx:287
 AliPMDClustering.cxx:288
 AliPMDClustering.cxx:289
 AliPMDClustering.cxx:290
 AliPMDClustering.cxx:291
 AliPMDClustering.cxx:292
 AliPMDClustering.cxx:293
 AliPMDClustering.cxx:294
 AliPMDClustering.cxx:295
 AliPMDClustering.cxx:296
 AliPMDClustering.cxx:297
 AliPMDClustering.cxx:298
 AliPMDClustering.cxx:299
 AliPMDClustering.cxx:300
 AliPMDClustering.cxx:301
 AliPMDClustering.cxx:302
 AliPMDClustering.cxx:303
 AliPMDClustering.cxx:304
 AliPMDClustering.cxx:305
 AliPMDClustering.cxx:306
 AliPMDClustering.cxx:307
 AliPMDClustering.cxx:308
 AliPMDClustering.cxx:309
 AliPMDClustering.cxx:310
 AliPMDClustering.cxx:311
 AliPMDClustering.cxx:312
 AliPMDClustering.cxx:313
 AliPMDClustering.cxx:314
 AliPMDClustering.cxx:315
 AliPMDClustering.cxx:316
 AliPMDClustering.cxx:317
 AliPMDClustering.cxx:318
 AliPMDClustering.cxx:319
 AliPMDClustering.cxx:320
 AliPMDClustering.cxx:321
 AliPMDClustering.cxx:322
 AliPMDClustering.cxx:323
 AliPMDClustering.cxx:324
 AliPMDClustering.cxx:325
 AliPMDClustering.cxx:326
 AliPMDClustering.cxx:327
 AliPMDClustering.cxx:328
 AliPMDClustering.cxx:329
 AliPMDClustering.cxx:330
 AliPMDClustering.cxx:331
 AliPMDClustering.cxx:332
 AliPMDClustering.cxx:333
 AliPMDClustering.cxx:334
 AliPMDClustering.cxx:335
 AliPMDClustering.cxx:336
 AliPMDClustering.cxx:337
 AliPMDClustering.cxx:338
 AliPMDClustering.cxx:339
 AliPMDClustering.cxx:340
 AliPMDClustering.cxx:341
 AliPMDClustering.cxx:342
 AliPMDClustering.cxx:343
 AliPMDClustering.cxx:344
 AliPMDClustering.cxx:345
 AliPMDClustering.cxx:346
 AliPMDClustering.cxx:347
 AliPMDClustering.cxx:348
 AliPMDClustering.cxx:349
 AliPMDClustering.cxx:350
 AliPMDClustering.cxx:351
 AliPMDClustering.cxx:352
 AliPMDClustering.cxx:353
 AliPMDClustering.cxx:354
 AliPMDClustering.cxx:355
 AliPMDClustering.cxx:356
 AliPMDClustering.cxx:357
 AliPMDClustering.cxx:358
 AliPMDClustering.cxx:359
 AliPMDClustering.cxx:360
 AliPMDClustering.cxx:361
 AliPMDClustering.cxx:362
 AliPMDClustering.cxx:363
 AliPMDClustering.cxx:364
 AliPMDClustering.cxx:365
 AliPMDClustering.cxx:366
 AliPMDClustering.cxx:367
 AliPMDClustering.cxx:368
 AliPMDClustering.cxx:369
 AliPMDClustering.cxx:370
 AliPMDClustering.cxx:371
 AliPMDClustering.cxx:372
 AliPMDClustering.cxx:373
 AliPMDClustering.cxx:374
 AliPMDClustering.cxx:375
 AliPMDClustering.cxx:376
 AliPMDClustering.cxx:377
 AliPMDClustering.cxx:378
 AliPMDClustering.cxx:379
 AliPMDClustering.cxx:380
 AliPMDClustering.cxx:381
 AliPMDClustering.cxx:382
 AliPMDClustering.cxx:383
 AliPMDClustering.cxx:384
 AliPMDClustering.cxx:385
 AliPMDClustering.cxx:386
 AliPMDClustering.cxx:387
 AliPMDClustering.cxx:388
 AliPMDClustering.cxx:389
 AliPMDClustering.cxx:390
 AliPMDClustering.cxx:391
 AliPMDClustering.cxx:392
 AliPMDClustering.cxx:393
 AliPMDClustering.cxx:394
 AliPMDClustering.cxx:395
 AliPMDClustering.cxx:396
 AliPMDClustering.cxx:397
 AliPMDClustering.cxx:398
 AliPMDClustering.cxx:399
 AliPMDClustering.cxx:400
 AliPMDClustering.cxx:401
 AliPMDClustering.cxx:402
 AliPMDClustering.cxx:403
 AliPMDClustering.cxx:404
 AliPMDClustering.cxx:405
 AliPMDClustering.cxx:406
 AliPMDClustering.cxx:407
 AliPMDClustering.cxx:408
 AliPMDClustering.cxx:409
 AliPMDClustering.cxx:410
 AliPMDClustering.cxx:411
 AliPMDClustering.cxx:412
 AliPMDClustering.cxx:413
 AliPMDClustering.cxx:414
 AliPMDClustering.cxx:415
 AliPMDClustering.cxx:416
 AliPMDClustering.cxx:417
 AliPMDClustering.cxx:418
 AliPMDClustering.cxx:419
 AliPMDClustering.cxx:420
 AliPMDClustering.cxx:421
 AliPMDClustering.cxx:422
 AliPMDClustering.cxx:423
 AliPMDClustering.cxx:424
 AliPMDClustering.cxx:425
 AliPMDClustering.cxx:426
 AliPMDClustering.cxx:427
 AliPMDClustering.cxx:428
 AliPMDClustering.cxx:429
 AliPMDClustering.cxx:430
 AliPMDClustering.cxx:431
 AliPMDClustering.cxx:432
 AliPMDClustering.cxx:433
 AliPMDClustering.cxx:434
 AliPMDClustering.cxx:435
 AliPMDClustering.cxx:436
 AliPMDClustering.cxx:437
 AliPMDClustering.cxx:438
 AliPMDClustering.cxx:439
 AliPMDClustering.cxx:440
 AliPMDClustering.cxx:441
 AliPMDClustering.cxx:442
 AliPMDClustering.cxx:443
 AliPMDClustering.cxx:444
 AliPMDClustering.cxx:445
 AliPMDClustering.cxx:446
 AliPMDClustering.cxx:447
 AliPMDClustering.cxx:448
 AliPMDClustering.cxx:449
 AliPMDClustering.cxx:450
 AliPMDClustering.cxx:451
 AliPMDClustering.cxx:452
 AliPMDClustering.cxx:453
 AliPMDClustering.cxx:454
 AliPMDClustering.cxx:455
 AliPMDClustering.cxx:456
 AliPMDClustering.cxx:457
 AliPMDClustering.cxx:458
 AliPMDClustering.cxx:459
 AliPMDClustering.cxx:460
 AliPMDClustering.cxx:461
 AliPMDClustering.cxx:462
 AliPMDClustering.cxx:463
 AliPMDClustering.cxx:464
 AliPMDClustering.cxx:465
 AliPMDClustering.cxx:466
 AliPMDClustering.cxx:467
 AliPMDClustering.cxx:468
 AliPMDClustering.cxx:469
 AliPMDClustering.cxx:470
 AliPMDClustering.cxx:471
 AliPMDClustering.cxx:472
 AliPMDClustering.cxx:473
 AliPMDClustering.cxx:474
 AliPMDClustering.cxx:475
 AliPMDClustering.cxx:476
 AliPMDClustering.cxx:477
 AliPMDClustering.cxx:478
 AliPMDClustering.cxx:479
 AliPMDClustering.cxx:480
 AliPMDClustering.cxx:481
 AliPMDClustering.cxx:482
 AliPMDClustering.cxx:483
 AliPMDClustering.cxx:484
 AliPMDClustering.cxx:485
 AliPMDClustering.cxx:486
 AliPMDClustering.cxx:487
 AliPMDClustering.cxx:488
 AliPMDClustering.cxx:489
 AliPMDClustering.cxx:490
 AliPMDClustering.cxx:491
 AliPMDClustering.cxx:492
 AliPMDClustering.cxx:493
 AliPMDClustering.cxx:494
 AliPMDClustering.cxx:495
 AliPMDClustering.cxx:496
 AliPMDClustering.cxx:497
 AliPMDClustering.cxx:498
 AliPMDClustering.cxx:499
 AliPMDClustering.cxx:500
 AliPMDClustering.cxx:501
 AliPMDClustering.cxx:502
 AliPMDClustering.cxx:503
 AliPMDClustering.cxx:504
 AliPMDClustering.cxx:505
 AliPMDClustering.cxx:506
 AliPMDClustering.cxx:507
 AliPMDClustering.cxx:508
 AliPMDClustering.cxx:509
 AliPMDClustering.cxx:510
 AliPMDClustering.cxx:511
 AliPMDClustering.cxx:512
 AliPMDClustering.cxx:513
 AliPMDClustering.cxx:514
 AliPMDClustering.cxx:515
 AliPMDClustering.cxx:516
 AliPMDClustering.cxx:517
 AliPMDClustering.cxx:518
 AliPMDClustering.cxx:519
 AliPMDClustering.cxx:520
 AliPMDClustering.cxx:521
 AliPMDClustering.cxx:522
 AliPMDClustering.cxx:523
 AliPMDClustering.cxx:524
 AliPMDClustering.cxx:525
 AliPMDClustering.cxx:526
 AliPMDClustering.cxx:527
 AliPMDClustering.cxx:528
 AliPMDClustering.cxx:529
 AliPMDClustering.cxx:530
 AliPMDClustering.cxx:531
 AliPMDClustering.cxx:532
 AliPMDClustering.cxx:533
 AliPMDClustering.cxx:534
 AliPMDClustering.cxx:535
 AliPMDClustering.cxx:536
 AliPMDClustering.cxx:537
 AliPMDClustering.cxx:538
 AliPMDClustering.cxx:539
 AliPMDClustering.cxx:540
 AliPMDClustering.cxx:541
 AliPMDClustering.cxx:542
 AliPMDClustering.cxx:543
 AliPMDClustering.cxx:544
 AliPMDClustering.cxx:545
 AliPMDClustering.cxx:546
 AliPMDClustering.cxx:547
 AliPMDClustering.cxx:548
 AliPMDClustering.cxx:549
 AliPMDClustering.cxx:550
 AliPMDClustering.cxx:551
 AliPMDClustering.cxx:552
 AliPMDClustering.cxx:553
 AliPMDClustering.cxx:554
 AliPMDClustering.cxx:555
 AliPMDClustering.cxx:556
 AliPMDClustering.cxx:557
 AliPMDClustering.cxx:558
 AliPMDClustering.cxx:559
 AliPMDClustering.cxx:560
 AliPMDClustering.cxx:561
 AliPMDClustering.cxx:562
 AliPMDClustering.cxx:563
 AliPMDClustering.cxx:564
 AliPMDClustering.cxx:565
 AliPMDClustering.cxx:566
 AliPMDClustering.cxx:567
 AliPMDClustering.cxx:568
 AliPMDClustering.cxx:569
 AliPMDClustering.cxx:570
 AliPMDClustering.cxx:571
 AliPMDClustering.cxx:572
 AliPMDClustering.cxx:573
 AliPMDClustering.cxx:574
 AliPMDClustering.cxx:575
 AliPMDClustering.cxx:576
 AliPMDClustering.cxx:577
 AliPMDClustering.cxx:578
 AliPMDClustering.cxx:579
 AliPMDClustering.cxx:580
 AliPMDClustering.cxx:581
 AliPMDClustering.cxx:582
 AliPMDClustering.cxx:583
 AliPMDClustering.cxx:584
 AliPMDClustering.cxx:585
 AliPMDClustering.cxx:586
 AliPMDClustering.cxx:587
 AliPMDClustering.cxx:588
 AliPMDClustering.cxx:589
 AliPMDClustering.cxx:590
 AliPMDClustering.cxx:591
 AliPMDClustering.cxx:592
 AliPMDClustering.cxx:593
 AliPMDClustering.cxx:594
 AliPMDClustering.cxx:595
 AliPMDClustering.cxx:596
 AliPMDClustering.cxx:597
 AliPMDClustering.cxx:598
 AliPMDClustering.cxx:599
 AliPMDClustering.cxx:600
 AliPMDClustering.cxx:601
 AliPMDClustering.cxx:602
 AliPMDClustering.cxx:603
 AliPMDClustering.cxx:604
 AliPMDClustering.cxx:605
 AliPMDClustering.cxx:606
 AliPMDClustering.cxx:607
 AliPMDClustering.cxx:608
 AliPMDClustering.cxx:609
 AliPMDClustering.cxx:610
 AliPMDClustering.cxx:611
 AliPMDClustering.cxx:612
 AliPMDClustering.cxx:613
 AliPMDClustering.cxx:614
 AliPMDClustering.cxx:615
 AliPMDClustering.cxx:616
 AliPMDClustering.cxx:617
 AliPMDClustering.cxx:618
 AliPMDClustering.cxx:619
 AliPMDClustering.cxx:620
 AliPMDClustering.cxx:621
 AliPMDClustering.cxx:622
 AliPMDClustering.cxx:623
 AliPMDClustering.cxx:624
 AliPMDClustering.cxx:625
 AliPMDClustering.cxx:626
 AliPMDClustering.cxx:627
 AliPMDClustering.cxx:628
 AliPMDClustering.cxx:629
 AliPMDClustering.cxx:630
 AliPMDClustering.cxx:631
 AliPMDClustering.cxx:632
 AliPMDClustering.cxx:633
 AliPMDClustering.cxx:634
 AliPMDClustering.cxx:635
 AliPMDClustering.cxx:636
 AliPMDClustering.cxx:637
 AliPMDClustering.cxx:638
 AliPMDClustering.cxx:639
 AliPMDClustering.cxx:640
 AliPMDClustering.cxx:641
 AliPMDClustering.cxx:642
 AliPMDClustering.cxx:643
 AliPMDClustering.cxx:644
 AliPMDClustering.cxx:645
 AliPMDClustering.cxx:646
 AliPMDClustering.cxx:647
 AliPMDClustering.cxx:648
 AliPMDClustering.cxx:649
 AliPMDClustering.cxx:650
 AliPMDClustering.cxx:651
 AliPMDClustering.cxx:652
 AliPMDClustering.cxx:653
 AliPMDClustering.cxx:654
 AliPMDClustering.cxx:655
 AliPMDClustering.cxx:656
 AliPMDClustering.cxx:657
 AliPMDClustering.cxx:658
 AliPMDClustering.cxx:659
 AliPMDClustering.cxx:660
 AliPMDClustering.cxx:661
 AliPMDClustering.cxx:662
 AliPMDClustering.cxx:663
 AliPMDClustering.cxx:664
 AliPMDClustering.cxx:665
 AliPMDClustering.cxx:666
 AliPMDClustering.cxx:667
 AliPMDClustering.cxx:668
 AliPMDClustering.cxx:669
 AliPMDClustering.cxx:670
 AliPMDClustering.cxx:671
 AliPMDClustering.cxx:672
 AliPMDClustering.cxx:673
 AliPMDClustering.cxx:674
 AliPMDClustering.cxx:675
 AliPMDClustering.cxx:676
 AliPMDClustering.cxx:677
 AliPMDClustering.cxx:678
 AliPMDClustering.cxx:679
 AliPMDClustering.cxx:680
 AliPMDClustering.cxx:681
 AliPMDClustering.cxx:682
 AliPMDClustering.cxx:683
 AliPMDClustering.cxx:684
 AliPMDClustering.cxx:685
 AliPMDClustering.cxx:686
 AliPMDClustering.cxx:687
 AliPMDClustering.cxx:688
 AliPMDClustering.cxx:689
 AliPMDClustering.cxx:690
 AliPMDClustering.cxx:691
 AliPMDClustering.cxx:692
 AliPMDClustering.cxx:693
 AliPMDClustering.cxx:694
 AliPMDClustering.cxx:695
 AliPMDClustering.cxx:696
 AliPMDClustering.cxx:697
 AliPMDClustering.cxx:698
 AliPMDClustering.cxx:699
 AliPMDClustering.cxx:700
 AliPMDClustering.cxx:701
 AliPMDClustering.cxx:702
 AliPMDClustering.cxx:703
 AliPMDClustering.cxx:704
 AliPMDClustering.cxx:705
 AliPMDClustering.cxx:706
 AliPMDClustering.cxx:707
 AliPMDClustering.cxx:708
 AliPMDClustering.cxx:709
 AliPMDClustering.cxx:710
 AliPMDClustering.cxx:711
 AliPMDClustering.cxx:712
 AliPMDClustering.cxx:713
 AliPMDClustering.cxx:714
 AliPMDClustering.cxx:715
 AliPMDClustering.cxx:716
 AliPMDClustering.cxx:717
 AliPMDClustering.cxx:718
 AliPMDClustering.cxx:719
 AliPMDClustering.cxx:720
 AliPMDClustering.cxx:721
 AliPMDClustering.cxx:722
 AliPMDClustering.cxx:723
 AliPMDClustering.cxx:724
 AliPMDClustering.cxx:725
 AliPMDClustering.cxx:726
 AliPMDClustering.cxx:727
 AliPMDClustering.cxx:728
 AliPMDClustering.cxx:729
 AliPMDClustering.cxx:730
 AliPMDClustering.cxx:731
 AliPMDClustering.cxx:732
 AliPMDClustering.cxx:733
 AliPMDClustering.cxx:734
 AliPMDClustering.cxx:735
 AliPMDClustering.cxx:736
 AliPMDClustering.cxx:737
 AliPMDClustering.cxx:738