performance optimization of raw data clusterization
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 22 Mar 2005 09:56:36 +0000 (09:56 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 22 Mar 2005 09:56:36 +0000 (09:56 +0000)
ITS/AliITSClusterFinderV2SDD.cxx
ITS/AliITSClusterFinderV2SPD.cxx

index 8707538..b87e0a2 100644 (file)
@@ -274,6 +274,9 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input,
   Int_t nClustersSDD = 0;
   Int_t kNzBins = fNzSDD + 2;
   Int_t kMaxBin = kNzBins * (fNySDD+2);
+  AliBin *binsSDDInit = new AliBin[kMaxBin];
+  AliBin *binsSDD1 = new AliBin[kMaxBin];
+  AliBin *binsSDD2 = new AliBin[kMaxBin];
   AliBin* bins[2] = {NULL, NULL};
 
   // read raw data input stream
@@ -289,13 +292,16 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input,
        FindClustersSDD(bins, kMaxBin, kNzBins, NULL, clusters[iModule]);
        Int_t nClusters = clusters[iModule]->GetEntriesFast();
        nClustersSDD += nClusters;
-       delete[] bins[0];
-       delete[] bins[1];
+       bins[0] = bins[1] = NULL;
+       
       }
 
       if (!next) break;
-      bins[0] = new AliBin[kMaxBin];
-      bins[1] = new AliBin[kMaxBin];
+      bins[0]=binsSDD1;
+      bins[1]=binsSDD2;
+      memcpy(binsSDD1,binsSDDInit,sizeof(AliBin)*kMaxBin);
+      memcpy(binsSDD2,binsSDDInit,sizeof(AliBin)*kMaxBin);
+
     }
 
     // fill the current digit into the bins array
@@ -309,6 +315,9 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input,
       bins[side][index].SetIndex(index);
     }
   }
+  delete[] binsSDD1;
+  delete[] binsSDD2;
+  delete[] binsSDDInit;
 
   Info("FindClustersSDD", "found clusters in ITS SDD: %d", nClustersSDD);
 
index f6349be..476a36f 100644 (file)
@@ -229,6 +229,8 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStream* input,
   Int_t kNzBins = fNzSPD + 2;
   Int_t kNyBins = fNySPD + 2;
   Int_t kMaxBin = kNzBins * kNyBins;
+  AliBin *binsSPD = new AliBin[kMaxBin];
+  AliBin *binsSPDInit = new AliBin[kMaxBin];  
   AliBin* bins = NULL;
 
   // read raw data input stream
@@ -242,11 +244,12 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStream* input,
        clusters[iModule] = new TClonesArray("AliITSclusterV2");
        Int_t nClusters = ClustersSPD(bins,0,clusters[iModule],kMaxBin,kNzBins,iModule,kTRUE);
        nClustersSPD += nClusters;
-       delete bins;
+       bins = NULL;
       }
 
       if (!next) break;
-      bins = new AliBin[kMaxBin];
+      bins = binsSPD;
+      memcpy(binsSPD,binsSPDInit,sizeof(AliBin)*kMaxBin);
     }
 
     // fill the current digit into the bins array
@@ -256,6 +259,9 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStream* input,
     bins[index].SetQ(1);
   }
 
+  delete [] binsSPDInit;
+  delete [] binsSPD;
+  
   Info("FindClustersSPD", "found clusters in ITS SPD: %d", nClustersSPD);
 }