]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/CALO/AliHLTCaloMapper.cxx
adding NULL pointer protection
[u/mrichter/AliRoot.git] / HLT / CALO / AliHLTCaloMapper.cxx
index 1eb67fa5b787571295cf4264bb263dc527617f40..3eae87ad41d58fe9df5a17f5bacefb3ac98f75fa 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: AliHLTCalorimeterMapper.cxx 34622 2009-09-04 13:22:01Z odjuvsla $
+// $Id$
 
 /**************************************************************************
  * This file is property of and copyright by the Experimental Nuclear     *
@@ -52,7 +52,8 @@ AliHLTCaloMapper::AliHLTCaloMapper( const unsigned long  specification , TString
   fCellSize(0),
   fSpecification(specification),
   fIsInitializedMapping(false),
-  fSpecificationMapPtr(0)
+  fSpecificationMapPtr(0),
+  fCaloDet(det)
 {  
   //see header file for class documentation
   fFilepath[0] = '\0';
@@ -61,8 +62,10 @@ AliHLTCaloMapper::AliHLTCaloMapper( const unsigned long  specification , TString
 
 AliHLTCaloMapper::~AliHLTCaloMapper()
 {
-  delete []  fHw2geomapPtr;
-  fHw2geomapPtr = 0;
+  if (fSpecificationMapPtr) delete [] fSpecificationMapPtr;
+  fSpecificationMapPtr = NULL;
+  if (fHw2geomapPtr) delete [] fHw2geomapPtr;
+  fHw2geomapPtr = NULL;
 }
 
 
@@ -93,6 +96,7 @@ AliHLTCaloMapper::GetFilePath()
 int 
 AliHLTCaloMapper::GetChannelID(const AliHLTUInt32_t spec, const Int_t hadd)
 {
+  if (!fSpecificationMapPtr) return -ENODEV;
   Short_t index = GetDDLFromSpec(spec);
   if( index < 0 )
     {
@@ -162,18 +166,50 @@ AliHLTCaloMapper::GetDDLFromSpec( const AliHLTUInt32_t spec )
 
 
 Int_t 
-AliHLTCaloMapper::GetModuleFromSpec(Int_t specification)
+AliHLTCaloMapper::GetModuleFromSpec(UInt_t specification)
 {
-  Int_t module;
-      
-  if(specification & 0xf) module = 0;
-  else if((specification >> 4) & 0xf) module = 1;
-  else if((specification >> 8) & 0xf) module = 2;
-  else if((specification >> 12) & 0xf) module = 3;
-  else if((specification >> 16) & 0xf) module = 4;
-  else {
-    HLTDebug("Specification 0x%X not consistent with single module in PHOS", specification);
-    module = -1;
+
+  Int_t module = -1;
+  // get rid of too much string operations
+  
+  //  if (fCaloDet.CompareTo("PHOS") == 0) {
+  
+  if (fCaloDet[0]=='P') {  
+    // P = is the short for PHOS
+    // 1 module = 4 bits
+    if(specification & 0xf) module = 0;
+    else if((specification >> 4) & 0xf) module = 1;
+    else if((specification >> 8) & 0xf) module = 2;
+    else if((specification >> 12) & 0xf) module = 3;
+    else if((specification >> 16) & 0xf) module = 4;
+    else {
+      HLTDebug("Specification 0x%X not consistent with single module in PHOS", specification);
+    }
+    
+    return module;
+  }
+    //else if (fCaloDet.CompareTo("EMCAL") == 0) {
+  else if (fCaloDet[0]=='E') {  
+
+    // E = is the short for EMCAL 
+    // 1 module = 2 bits
+    if(specification & 0x3) module = 0;
+    else if((specification >> 2) & 0x3) module = 1;
+    else if((specification >> 4) & 0x3) module = 2;
+    else if((specification >> 6) & 0x3) module = 3;
+    else if((specification >> 8) & 0x3) module = 4;
+    else if((specification >> 10) & 0x3) module = 5;
+    else if((specification >> 12) & 0x3) module = 6;
+    else if((specification >> 14) & 0x3) module = 7;
+    else if((specification >> 16) & 0x3) module = 8;
+    else if((specification >> 18) & 0x3) module = 9;
+    else {
+      HLTDebug("Specification 0x%X not consistent with single module in EMCAL", specification);
+    }
+    return module;
+    
+  } else {
+    HLTDebug("Specification 0x%X not consistent with single module in EMCAL or PHOS", specification);
   }
   return module;
 }