X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PMD%2FAliPMDClustering.cxx;h=f9c766413b22785318f5bec30124e1b1ca879b96;hb=f1ce4cc35f8eed566aa80c7c7d42f47ebf8d62fc;hp=d3b6d644e2b0a4e79fe1d9d7b5bd218275a0878f;hpb=2264f225cf720ef970faef1c098979b8f6140f5e;p=u%2Fmrichter%2FAliRoot.git diff --git a/PMD/AliPMDClustering.cxx b/PMD/AliPMDClustering.cxx index d3b6d644e2b..f9c766413b2 100644 --- a/PMD/AliPMDClustering.cxx +++ b/PMD/AliPMDClustering.cxx @@ -1,3 +1,18 @@ +/*************************************************************************** + * 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 // @@ -8,276 +23,414 @@ // // //-----------------------------------------------------// -/* - -------------------------------------------------------------------- - Code developed by S. C. Phatak, Institute of Physics, +/* -------------------------------------------------------------------- + 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 d[ndimx][ndimy] and cluster information is in array - clusters[5][5000]. integer clno gives total number of clusters in the + 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. - d, clno and clusters are the only global ( public ) variables. Others - are local ( private ) to the code. - + 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 #include +#include + #include "AliPMDcluster.h" #include "AliPMDClustering.h" -#include +#include "AliLog.h" ClassImp(AliPMDClustering) -const double AliPMDClustering::pi=3.141593; -const double AliPMDClustering::sqrth=0.8660254; // sqrth = sqrt(3.)/2. - +const Double_t AliPMDClustering::fgkSqroot3by2=0.8660254; // sqrt(3.)/2. -AliPMDClustering::AliPMDClustering() +AliPMDClustering::AliPMDClustering(): + fCutoff(0.0) { - fMessage = 0; - for(int i = 0; i < ndimx; i++) + for(int i = 0; i < kNDIMX; i++) { - for(int j = 0; j < ndimy; j++) + for(int j = 0; j < kNDIMY; j++) { - coord[0][i][j] = i+j/2.; - coord[1][i][j] = sqrth*j; + fCoord[0][i][j] = i+j/2.; + fCoord[1][i][j] = fgkSqroot3by2*j; + fEdepCell[i][j] = 0; } } } +// ------------------------------------------------------------------------ // AliPMDClustering::~AliPMDClustering() { } - -void AliPMDClustering::DoClust(int idet, int isup, double d1[72][72], TObjArray *pmdcont) +// ------------------------------------------------------------------------ // +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 i, i1, i2, j, nmx1, incr; + /* + 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[5]; - - const float twobysqrt3 = 1.1547; // 2./sqrt(3.) + Float_t clusdata[7]; - // if (fMessage == 1) - { - cout << " supermodule no. " << idet << " " << isup << endl; - } + const float ktwobysqrt3 = 1.1547; // 2./sqrt(3.) - for (i = 0; i < ndimx; i++) + for (id = 0; id < kNDIMXr; id++) { - for (j = 0; j < ndimy; j++) + for (jd = 0; jd < kNDIMYr; jd++) { - d[i][j] = d1[i][j]; + j=jd; + i=id+(kNDIMYr/2-1)-(jd/2); + fEdepCell[i][j] = celladc[id][jd]; } } - order(idet); // order the data - cutoff=400.; // cutoff used to discard cells having ener. dep. - ave=0.; + Order(); // order the data + cutoff = fCutoff; // cutoff used to discard cells having ener. dep. + ave=0.; nmx1=-1; - for(j=0;j 0.) {ave=ave+d[i1][i2];} - if (d[i1][i2] >= cutoff ) nmx1 = nmx1 + 1; + 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 - if (fMessage == 1) - { - cout << " nmx1 " << nmx1 << endl; - } - ave=ave/nmx1; - if (fMessage == 1) - { - cout <<"nmx " << nmx << " nmx1 " << nmx1<< " ave "<= %f are %d",cutoff,nmx1)); - refclust(incr, i, idet); - if (fMessage == 1) - { - if(idet == 0)cout <<" supermodule ( pmd ) = "<< isup <<" done " - <Add(pmdcl); } - - delete pmdcl; - } - -void AliPMDClustering::order(int /*idet*/) +// ------------------------------------------------------------------------ // +void AliPMDClustering::Order() { - // using simple sort - double dd[nmx], adum;// matrix d converted into + // 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[nmx], itst, idum; // information of + 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 < ndimx; i1++){ - for(i2=0; i2 < ndimy; i2++){ - i=i1+i2*ndimx; - iord1[i]=i; dd[i]=d[i1][i2]; + 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 dd[i1] && itst == 0){ - itst=1; - for(i2=j-1; i2 >= i1 ; i2=i2--){ - dd[i2+1]=dd[i2]; - iord1[i2+1]=iord1[i2]; + // --------------------------------------------------------------- + // 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; + } + } } - dd[i1]=adum; iord1[i1]=idum; } } } - // store the sorted information in iord for later use - for(i=0; i 4500) { + AliWarning("RefClust: Too many superclusters!"); + nsupcl = 4500; + break; + } ncl[nsupcl]=ncl[nsupcl]+1; } - if (fMessage == 1) - { - cout << " # of cells " < single cluster // cluster center at the centyer of the cell // cluster radius = half cell dimension - clno=clno+1; - i1=infcl[1][id]; - i2=infcl[2][id]; - clusters[0][clno]=coord[0][i1][i2]; - clusters[1][clno]=coord[1][i1][i2]; - clusters[2][clno]=d[i1][i2]; - clusters[3][clno]=1.; - clusters[4][clno]=0.5; - //ofl1 << icl << " " << coord[0][i1][i2] << " " << coord[1][i1][i2] << - //" " << d[i1][i2] << " " << clusters[3][clno] <= 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] < single cluster // cluster center is at ener. dep.-weighted mean of two cells // cluster radius == half cell dimension - id=id+1; - icl=icl+1; - clno=clno+1; - i1=infcl[1][id]; - i2=infcl[2][id]; - x1=coord[0][i1][i2]; - y1=coord[1][i1][i2]; - z1=d[i1][i2]; - id=id+1; - i1=infcl[1][id]; - i2=infcl[2][id]; - x2=coord[0][i1][i2]; - y2=coord[1][i1][i2]; - z2=d[i1][i2]; - clusters[0][clno]=(x1*z1+x2*z2)/(z1+z2); - clusters[1][clno]=(y1*z1+y2*z2)/(z1+z2); - clusters[2][clno]=z1+z2; - clusters[3][clno]=2.; - clusters[4][clno]=0.5; - //ofl1 << icl << " " << clusters[0][clno] << " " << clusters[1][clno] - // << " " << clusters[2][clno] << " " < 1 cell) + 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] << " " < 1 cell) // Begin from cell having largest energy deposited This is first // cluster center - i1=infcl[1][id]; - i2=infcl[2][id]; - x[0]=coord[0][i1][i2]; - y[0]=coord[1][i1][i2]; - z[0]=d[i1][i2]; - iord[0]=0; + 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=infcl[1][id]; - i2=infcl[2][id]; - iord[j]=j; - x[j]=coord[0][i1][i2]; - y[j]=coord[1][i1][i2]; - z[j]=d[i1][i2]; + + 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 + // arranging cells within supercluster in decreasing order for(j=1;j<=ncl[i];j++){ - itest=0; ihld=iord[j]; + itest=0; + ihld=iord[j]; for(i1=0;i1= 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; + 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] << " " < 0){ for(j=0; j<=ncl[i]; j++){ - lev1[0]=0; + lev1[0]=0; lev2[0]=0; for(k=0; k<=ig; k++){ - dist=Dist(x[j], y[j], xc[k], yc[k]); + dist=Distance(x[j], y[j], xc[k], yc[k]); if(dist < sqrt(3.) ){ - lev1[0]++; - i1=lev1[0]; + lev1[0]++; + i1=lev1[0]; lev1[i1]=k; }else{ if(dist < 2.1){ - lev2[0]++; - i1=lev2[0]; + lev2[0]++; + i1=lev2[0]; lev2[i1]=k; } } @@ -372,109 +526,112 @@ void AliPMDClustering::refclust(int incr, int /*supmod*/, int /*idet*/) } } for(j=0; j<=ig; j++){ - clno=clno+1; - clusters[0][clno]=xc[j]; - clusters[1][clno]=yc[j]; - clusters[2][clno]=zc[j]; - clusters[4][clno]=rc[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){ - clusters[3][clno]=ncl[i]; + fClusters[3][fClno] = ncl[i]; }else{ - clusters[3][clno]=cells[j]; + fClusters[3][fClno] = cells[j]; } } } } - } - - -void AliPMDClustering::gaussfit(int ncell, int nclust, double &x, double &y ,double &z, double &xc, double &yc, double &zc, double &rc) +// ------------------------------------------------------------------------ // +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) { - int i, j, i1, i2, jmax, novar, idd, jj; - double xx[4500], yy[4500], zz[4500], xxc[4500], yyc[4500]; + // 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; - + 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++) + { + 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]; + idd=0; + x1=xx[i]; y1=yy[i]; for(j=0; j<=nclust; j++){ - x2=xxc[j]; + x2=xxc[j]; y2=yyc[j]; - if(Dist(x1,y1,x2,y2) <= 3.){ idd=idd+1; neib[i][idd]=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.; + 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]; + 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 20)jmax=20000; +// for(j=0; j= 0 && jd1 < 72) && (jd2 >= 0 && jd2 < 72) && - infocl[0][jd1][jd2] == 0){ - numcell=numcell+1; - infocl[0][jd1][jd2]=2; - infocl[1][jd1][jd2]=icl; - clust[0][numcell]=jd1; - clust[1][numcell]=jd2; - cellcount=cellcount+1; - infcl[0][cellcount]=icl; - infcl[1][cellcount]=jd1; - infcl[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 < 72) && (jd2 >= 0 && jd2 < 72) && - infocl[0][jd1][jd2] == 0 ){ - infocl[0][jd1][jd2]=2; - infocl[1][jd1][jd2]=icl; - numcell=numcell+1; - clust[0][numcell]=jd1; - clust[1][numcell]=jd2; - cellcount=cellcount+1; - infcl[0][cellcount]=icl; - infcl[1][cellcount]=jd1; - infcl[2][cellcount]=jd2; - } - } - } - } - } - } - // for(icell=0; icell<=cellcount; icell++){ - // ofl0 << infcl[0][icell] << " " << infcl[1][icell] << " " << - // infcl[2][icell] << endl; - // } - return cellcount; -} - -double AliPMDClustering::ranmar() +// ------------------------------------------------------------------------ // +double AliPMDClustering::Ranmar() const { - /* C==========================C*/ - /*===================================C==========================*/ - /* Universal random number generator proposed by Marsaglia and Zaman - in report FSU-SCRI-87-50 */ + // Universal random number generator proposed by Marsaglia and Zaman + // in report FSU-SCRI-87-50 // clock_t start; int ii, jj; @@ -639,9 +687,9 @@ double AliPMDClustering::ranmar() 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 ) && + 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; + 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 ){ @@ -660,25 +708,31 @@ double AliPMDClustering::ranmar() u[count1] = s; count1 = count1 +1; } - c = 362436./16777216.; cd = 7654321./16777216.; + c = 362436./16777216.; cd = 7654321./16777216.; cm = 16777213./16777216.; } else{ - cout << " wrong initialization " << endl; + AliWarning("Wrong initialization"); } } else{ - uni = u[i] - u[j]; if( uni < 0.) uni = uni + 1; u[i] = uni; + 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; + 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::SetMessage(Int_t imessage) +} +// ------------------------------------------------------------------------ // +void AliPMDClustering::SetEdepCut(Float_t decut) { - fMessage = imessage; + fCutoff = decut; } +// ------------------------------------------------------------------------ //