]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - JETAN/AliDAJetFinder.cxx
https://savannah.cern.ch/bugs/index.php?98544
[u/mrichter/AliRoot.git] / JETAN / AliDAJetFinder.cxx
index c60b1b95cd38aecbe889b41e3379ff4ef4025582..16685f22930191e0c6a0f8c5dd981c5de8cdc57f 100644 (file)
@@ -70,8 +70,14 @@ void AliDAJetFinder::FindJets()
        TMatrixD *mPyx= new TMatrixD();
        TMatrixD *mY  = new TMatrixD();
        InitDetAnn(dEtSum,xData,vPx,vPy,mPyx,mY);
-       if (fNin < fNclustMax) return;
-
+       if (fNin < fNclustMax){
+         delete [] xData[0], delete [] xData[1];
+         delete vPx;
+         delete vPy;
+         delete mPyx;
+         delete mY;
+         return;
+       }
        Int_t nc=1, nk;
        DoubleClusters(nc,nk,vPy,mY);
        do{                                     //loop over beta
@@ -81,6 +87,8 @@ void AliDAJetFinder::FindJets()
        }while((fBeta<betaStop || nc<4) && nc<fNclustMax);
 
        Int_t *xx=new Int_t[fNeff];
+       for (Int_t i = 0; i < fNeff; i++) xx[i] = 0;
+       
        EndDetAnn(nk,xData,xx,dEtSum,vPx,vPy,mPyx,mY);
        StoreJets(nk,xData,xx,mY);
        delete [] xx;
@@ -125,7 +133,7 @@ void AliDAJetFinder::InitDetAnn(Double_t &dEtSum,Double_t **xData,TVectorD *vPx,
        }
        TRandom2 r;
        r.SetSeed(0);
-       for (Int_t iIn=fNin; iIn<fNeff; iIn++){
+       for (iIn=fNin; iIn<fNeff; iIn++){
                xEta[iIn]=r.Uniform(-1*etaEff,etaEff);
                xPhi[iIn]=r.Uniform(0.,2*TMath::Pi());
                (*vPx)(iIn)=r.Uniform(0.01,0.02);
@@ -150,8 +158,9 @@ void AliDAJetFinder::InitDetAnn(Double_t &dEtSum,Double_t **xData,TVectorD *vPx,
 }
 
 //-----------------------------------------------------------------------------------
-void AliDAJetFinder::DoubleClusters(Int_t nc,Int_t &nk,  TVectorD *vPy,  TMatrixD *mY) const
+void AliDAJetFinder::DoubleClusters(Int_t nc,Int_t &nk,  TVectorD *vPy, TMatrixD *mY) const
 {
+// Return double clusters
        for(Int_t iClust=0; iClust<nc; iClust++){
                (*vPy)(iClust)=(*vPy)(iClust)/2;
                (*vPy)(nc+iClust)=(*vPy)(iClust);
@@ -258,6 +267,7 @@ void AliDAJetFinder::Annealing(Int_t nk,Double_t **xData,  TVectorD *vPx,  TVect
 //-----------------------------------------------------------------------------------
 void AliDAJetFinder::NumCl(Int_t &nc,Int_t &nk,TVectorD *vPy,  TMatrixD *mPyx,TMatrixD *mY)
 {
+    // Number of clusters
        static Bool_t growcl=true;
        
        if (nk==2) growcl=true;
@@ -266,7 +276,11 @@ void AliDAJetFinder::NumCl(Int_t &nc,Int_t &nk,TVectorD *vPy,  TMatrixD *mPyx,TM
                Int_t *nSame = new Int_t[nk];
                Int_t **iSame = new Int_t*[nk];
                Int_t **cont = new Int_t*[nk];
-               for (Int_t iClust=0; iClust<nk; iClust++) cont[iClust]=new Int_t[nk],iSame[iClust]=new Int_t[nk];
+               for (Int_t iClust=0; iClust<nk; iClust++) {
+                   cont[iClust] =new Int_t[nk];
+                   iSame[iClust]=new Int_t[nk];
+               }
+               
                for (Int_t iClust=0; iClust<nk; iClust++){
                        iSame[iClust][iClust]=1;
                        for (Int_t iClust1=iClust+1; iClust1<nk; iClust1++){
@@ -315,6 +329,7 @@ void AliDAJetFinder::NumCl(Int_t &nc,Int_t &nk,TVectorD *vPy,  TMatrixD *mPyx,TM
 //-----------------------------------------------------------------------------------
 void AliDAJetFinder::ReduceClusters(Int_t **iSame,Int_t nc,Int_t &ncout,Int_t **cont,Int_t *nSameOut) const
 {
+// Reduction step
        Int_t *nSame = new Int_t[nc];
        Int_t *iperm = new Int_t[nc];
        Int_t *go = new Int_t[nc];
@@ -403,7 +418,9 @@ void AliDAJetFinder::StoreJets(Int_t nk, Double_t **xData, Int_t *xx, TMatrixD *
        Double_t *xPhi = xData[1];
        Int_t nEff = 0;
        for (Int_t i=0; i<fNeff; i++) if (xEta[i]<dFidEtaMax && xEta[i]>dFidEtaMin) nEff++;
-       Double_t dMeanDist=TMath::Sqrt(2*dFiducialEta*pi/nEff);
+       Double_t dMeanDist=0.;
+       if (nEff > 0) 
+           dMeanDist=TMath::Sqrt(2*dFiducialEta*pi/nEff);
        Bool_t   *isJet = new Bool_t[nk];
        Double_t *etNoBg= new Double_t[nk];
        Double_t *dDeltaEta=new Double_t[nk];