]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALTriggerBoard.cxx
ATO-98 AddCorrectionCompact - to make corrections compact in memory + UnitTests...
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALTriggerBoard.cxx
index 246f305fe5711eea18fe716b60813510792c31b1..7bbf405098a5468f5806869fbe11019f6e0d5061 100644 (file)
@@ -23,9 +23,9 @@ Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
 
 #include "AliEMCALTriggerBoard.h"
 #include "AliEMCALTriggerPatch.h"
+#include "AliLog.h"
 
 #include <TClonesArray.h>
-
 #include <iostream>
 #include <cstdlib>
 
@@ -40,13 +40,13 @@ fMap(0x0),
 fRegionSize(0x0),
 fSubRegionSize(0x0),
 fPatchSize(0x0),
-fPatches( new TClonesArray("AliEMCALTriggerPatch",10) )
+fPatches(0x0)
 {
        
 }      
 
 //_______________
-AliEMCALTriggerBoard::AliEMCALTriggerBoard(const AliEMCALCalibData */*calibData*/, const TVector2& RS) : TObject(),
+AliEMCALTriggerBoard::AliEMCALTriggerBoard(const TVector2& RS) : TObject(),
 fRegion(0x0),
 fMap(0x0),
 fRegionSize(    new TVector2( RS ) ),
@@ -54,87 +54,96 @@ fSubRegionSize( new TVector2() ),
 fPatchSize(     new TVector2() ),
 fPatches( new TClonesArray("AliEMCALTriggerPatch",10) )
 {
-   fRegion = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );  
-
-   if (!fRegion) printf("Error: malloc could not allocate %d bytes for fRegion\n",
-                        int(fRegionSize->X() * sizeof( int* )));
-
-      fMap = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
-
-      if (!fMap) printf("Error: malloc could not allocate %d bytes for fMap\n",
-                        int(fRegionSize->X() * sizeof( int* )));
-
-   for (Int_t i=0;i<fRegionSize->X();i++)
-   {
+       // Ctor
+       
+  fRegion = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );  
+  
+  if (!fRegion) printf("Error: malloc could not allocate %d bytes for fRegion\n",
+                       int(fRegionSize->X() * sizeof( int* )));
+  
+  fMap = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
+  
+  if (!fMap) printf("Error: malloc could not allocate %d bytes for fMap\n",
+                    int(fRegionSize->X() * sizeof( int* )));
+  
+  for (Int_t i=0;i<fRegionSize->X();i++)
+  {
+    if(fRegion){
       fRegion[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
-      
+    
       if (!fRegion[i]) printf("Error: malloc could not allocate %d bytes for fRegion[%d]\n",
-                              i,int(fRegionSize->Y() * sizeof( int )));
-
-         fMap[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
-
-            if (!fMap[i]) printf("Error: malloc could not allocate %d bytes for fMap[%d]\n",
-                              i,int(fRegionSize->Y() * sizeof( int )));
-   }
-
+                            i,int(fRegionSize->Y() * sizeof( int )));
+    }
+    if(fMap){
+      fMap[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
+    
+      if (!fMap[i]) printf("Error: malloc could not allocate %d bytes for fMap[%d]\n",
+                           i,int(fRegionSize->Y() * sizeof( int )));
+    }
+  }
+  
        // Initialize region matrix
        ZeroRegion();
-       
+       if(fMap){
        for (int i=0; i<fRegionSize->X(); ++i)
                for (int j=0; j<fRegionSize->Y(); ++j) fMap[i][j] = 0;
+  }
 }
 
 //_______________
 AliEMCALTriggerBoard::~AliEMCALTriggerBoard()
 {
+       // Dtor
+       
    for (Int_t i=0;i<fRegionSize->X();i++) 
    {
-      if (fRegion[i]) {delete fRegion[i]; fRegion[i] = 0;}
-      if (   fMap[i]) {delete    fMap[i];    fMap[i] = 0;}
+      if (fRegion[i]) {free(fRegion[i]); fRegion[i] = 0;}
+      if (   fMap[i]) {free(fMap[i]);    fMap[i] = 0;}
    }
    
-   delete [] fRegion; fRegion = 0x0;
-   delete []    fMap;    fMap = 0x0;
+   free(fRegion); fRegion = 0x0;
+   free(fMap);    fMap = 0x0;
    
    if(fPatches)fPatches->Delete();
+   
    delete fPatches;
 }
 
 //_______________
 void AliEMCALTriggerBoard::ZeroRegion()
 {
-       //
-       for (Int_t i=0;i<int(fRegionSize->X());i++) for (Int_t j=0;j<int(fRegionSize->Y());j++) fRegion[i][j] = 0;
+       // Initilize fRegion
+  
+  if(fRegion){
+    for (Int_t i=0;i<int(fRegionSize->X());i++) for (Int_t j=0;j<int(fRegionSize->Y());j++) fRegion[i][j] = 0;
+  }
+  else {
+    AliFatal("fRegion was not previously initialized");
+  }
+
 }
 
 //_______________
-void AliEMCALTriggerBoard::SlidingWindow( L1TriggerType_t /*type*/, Int_t thres )
+void AliEMCALTriggerBoard::SlidingWindow(Int_t thres)
 {
-       //
-       Int_t ipatch = 0;
-       
-       for (Int_t i=0; i<=int(fRegionSize->X()-fPatchSize->X()*fSubRegionSize->X()); i+=int(fSubRegionSize->X()))
-       {
-               for (Int_t j=0; j<=int(fRegionSize->Y()-fPatchSize->Y()*fSubRegionSize->Y()); j+=int(fSubRegionSize->Y()))
-               {
-                       ipatch++;
-                       
-                       Int_t sum = 0;
+       // Sliding window       
+       for (int i = 0; i <= int(fRegionSize->X() - fPatchSize->X() * fSubRegionSize->X()); i += int(fSubRegionSize->X())) {
+               for (int j = 0; j <= int(fRegionSize->Y() - fPatchSize->Y() * fSubRegionSize->Y()); j += int(fSubRegionSize->Y())) {
+                       //
+                       AliDebug(999, Form("--- Current window at (%2d,%2d) ---",i,j));
+                       int sum = 0;
                        
-                       for (Int_t k=0; k<int(fPatchSize->X()*fSubRegionSize->X()); k++)
-                       {
-                               for (Int_t l=0; l<int(fPatchSize->Y()*fSubRegionSize->Y()); l++)
-                               {
-                                       sum += fRegion[i+k][j+l];
+                       for (int k = 0; k < int(fPatchSize->X() * fSubRegionSize->X()); k++) {
+                               for (int l = 0; l < int(fPatchSize->Y() * fSubRegionSize->Y()); l++) {
+                                       //
+                                       sum += fRegion[i + k][j + l]; 
+                                       AliDebug(999, Form("Adding fRegion[%2d + %2d][%2d + %2d]: %d and sum is %d",i,k,j,l,fRegion[i + k][j + l],sum));
                                }
                        }
-
-                       if ( sum > thres ) 
-                       {
-                               //if ( type == kJet ) sum /= 4; // truncate patch sum for jet case
-                               
-                               new((*fPatches)[fPatches->GetLast()+1]) 
-                                               AliEMCALTriggerPatch( int(i/fSubRegionSize->X()), int(j/fSubRegionSize->Y()), int(sum) );
+                       
+                       if (sum > thres) {
+                         AliDebug(999, Form("Adding new patch at (%2d,%2d) w/ amplitude %d", i, j, sum));
+                               new((*fPatches)[fPatches->GetEntriesFast()]) AliEMCALTriggerPatch(i, j, sum);
                        }
                }
        }
@@ -143,7 +152,8 @@ void AliEMCALTriggerBoard::SlidingWindow( L1TriggerType_t /*type*/, Int_t thres
 //__________
 void AliEMCALTriggerBoard::Scan()
 {
-       //
+       // Dump
+       
        cout << "     ";
        for (Int_t i=0; i<int(fRegionSize->X()); i++) printf("%8d ",i);
        cout << "\n";