]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSClusterFinderV2SPD.cxx
Fixes for report #68312: Improper usage of TClonesArrays in ITS
[u/mrichter/AliRoot.git] / ITS / AliITSClusterFinderV2SPD.cxx
index ae991069f0f5cdbfde8fec15a3a0ca346ad27b33..75e1dac79628d09b0a23128996a6159526f68d62 100644 (file)
@@ -32,6 +32,7 @@
 #include <TClonesArray.h>
 #include "AliITSdigitSPD.h"
 #include "AliITSFOSignalsSPD.h"
+#include "AliITSRecPointContainer.h"
 
 ClassImp(AliITSClusterFinderV2SPD)
 
@@ -73,13 +74,13 @@ void AliITSClusterFinderV2SPD::FindRawClusters(Int_t mod){
 
 }
 //__________________________________________________________________________
-void AliITSClusterFinderV2SPD::RawdataToClusters(AliRawReader* rawReader, TClonesArray** clusters){
+void AliITSClusterFinderV2SPD::RawdataToClusters(AliRawReader* rawReader){
   //------------------------------------------------------------
   // This function creates ITS clusters from raw data
   //------------------------------------------------------------
   rawReader->Reset();
   AliITSRawStreamSPD inputSPD(rawReader);
-  FindClustersSPD(&inputSPD, clusters);
+  FindClustersSPD(&inputSPD);
 
 }
 //__________________________________________________________________________
@@ -104,7 +105,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
     for(Int_t ipix = 0; ipix<cal->GetNrBad(); ipix++){
       Int_t row, col;
       cal->GetBadPixel(ipix,row,col);
-      printf(" module %d   row %d  col %d \n",iModule,row,col);
+      //PH      printf(" module %d   row %d  col %d \n",iModule,row,col);
       Int_t index = (row+1) * nzbins + (col+1);
       
       bins[index].SetQ(0);
@@ -129,7 +130,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
   Int_t nclu=0;
   for(Int_t iBin =0; iBin < maxBins;iBin++){
     if(bins[iBin].IsUsed()) continue;
-    Int_t nBins = 0;
+    Int_t nBins = 0; 
     Int_t idxBins[200];
     FindCluster(iBin,nzbins,bins,nBins,idxBins);
     if (nBins == 200){
@@ -157,7 +158,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
       zmin=dig->GetCoord1();
       zmax=zmin;
     }
-     if(iModule == 24 || iModule == 25)  printf("\n");
+    //PH     if(iModule == 24 || iModule == 25)  printf("\n");
     for (Int_t idx = 0; idx < nBins; idx++) {
       Int_t iy;
       Int_t iz; 
@@ -200,7 +201,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
       idy=ymax-ymin+1;
       idz=zmax-zmin+1;
     }
+    
     for(Int_t iiz=zmin; iiz<=zmax;iiz+=idz){
       for(Int_t iiy=ymin;iiy<=ymax;iiy+=idy){
 
@@ -234,6 +235,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
          q+= qBin;     
        }// for idx
        if(ndigits==0) continue;
+         
        y /= q;
        z /= q;
        y -= fHwSPD;
@@ -254,12 +256,15 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
        Int_t info[3] = {ymax-ymin+1,zmax-zmin+1,fNlayer[iModule]};
        if(!rawdata){
         AliITSRecPoint cl(milab,hit,info);
+         cl.SetType(nBins);
         fDetTypeRec->AddRecPoint(cl);
        }
         else{
          Int_t label[4]={milab[0],milab[1],milab[2],milab[3]};
+          AliITSRecPoint cl(label, hit,info);
+          cl.SetType(nBins);
          new (clusters->AddrAt(nclu)) 
-               AliITSRecPoint(label, hit,info);
+         AliITSRecPoint(cl);
        } 
        nclu++;
       }// for iiy
@@ -269,14 +274,14 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
   
 }
 //__________________________________________________________________________
-void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStreamSPD* input, 
-                                       TClonesArray** clusters) 
+void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStreamSPD* input) 
 {
   //------------------------------------------------------------
   // SPD cluster finder for raw data (this method is called once per event)
   // Now also fills fast-or fired map
   //------------------------------------------------------------
-  
+
+  AliITSRecPointContainer* rpc = AliITSRecPointContainer::Instance();  
   Int_t nClustersSPD = 0;
   Int_t kNzBins = fNzSPD + 2;
   Int_t kNyBins = fNySPD + 2;
@@ -293,8 +298,8 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStreamSPD* input,
 
       // when all data from a module was read, search for clusters
       if (bins) { 
-       clusters[iModule] = new TClonesArray("AliITSRecPoint");
-       Int_t nClusters = ClustersSPD(bins,0,clusters[iModule],kMaxBin,kNzBins,iModule,kTRUE);
+       TClonesArray* clusters = rpc->UncheckedGetClusters(iModule);
+       Int_t nClusters = ClustersSPD(bins,0,clusters,kMaxBin,kNzBins,iModule,kTRUE);
        nClustersSPD += nClusters;
        bins = NULL;
       }
@@ -304,7 +309,7 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStreamSPD* input,
       memcpy(binsSPD,binsSPDInit,sizeof(AliBin)*kMaxBin);
     }
 
-    if (next) {
+    if (next && bins) {
       // fill the current digit into the bins array
       Int_t index = (input->GetCoord2()+1) * kNzBins + (input->GetCoord1()+1);
       bins[index].SetIndex(index);
@@ -316,8 +321,8 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStreamSPD* input,
   delete [] binsSPDInit;
   delete [] binsSPD;
   
-  // AliDebug(1,Form("found clusters in ITS SPD: %d", nClustersSPD));
-  Info("FindClustersSPD", "found clusters in ITS SPD: %d", nClustersSPD);
+  AliDebug(1,Form("found clusters in ITS SPD: %d", nClustersSPD));
+  
  
     // Fill the FastOr fired map
   for (UInt_t eq=0; eq<20; eq++) {