]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/PHOS/AliHLTPHOSMapper.cxx
- porting the PHOS raw analyzers to the CALO library
[u/mrichter/AliRoot.git] / HLT / PHOS / AliHLTPHOSMapper.cxx
index 7fef002484b9692959710c634514df90e6603d27..4b0b6fe33b8c8466c15598427b2d55e60082cfb4 100644 (file)
 //
 //
 
-#include "AliPHOSEMCAGeometry.h"
 #include "AliHLTPHOSMapper.h"
-#include "AliHLTPHOSConstant.h"
-#include "AliHLTLogging.h"
-#include "Rtypes.h"
 #include "unistd.h"
 #include <iostream>
 #include "AliHLTPHOSCoordinate.h"
 
-using namespace PhosHLTConst;
-AliHLTPHOSMapper::AliHLTPHOSMapper():  AliHLTLogging(), 
-                                      fHw2geomapPtr(0),
-                                      fIsInitializedMapping(false),
-                                      fSpecificationMapPtr(0)
-                                      //                              fPHOSGeometry(0)
+AliHLTPHOSMapper::AliHLTPHOSMapper():  
+   AliHLTCaloMapper(0,"PHOS") 
+   ,fDDLId(-1)
+   ,fModuleId(-1)
 {
-  InitAltroMapping(); 
   InitDDLSpecificationMapping();
-  //  fPHOSGeometry = new AliPHOSEMCAGeometry();
-
+  sprintf(fFilepath, "\0");
 }
 
 
@@ -53,70 +45,88 @@ AliHLTPHOSMapper::~AliHLTPHOSMapper()
   fHw2geomapPtr = 0;
 }
 
-void
-AliHLTPHOSMapper::InitAltroMapping()
+
+Bool_t
+AliHLTPHOSMapper::InitAltroMapping(const unsigned long specification)
 {
   // Loads mapping between Altro addresses and geometrical addresses from file
+   
+  fDDLId = GetDDLFromSpec(specification);
+  Int_t modId = GetModuleFromSpec(specification);
 
-  //  char filename[256];
   char *base =  getenv("ALICE_ROOT");
-  int nChannels = 0;
-  int maxaddr = 0;
-  int tmpHwaddr = 0;
-  int tmpZRow = 0;
-  int tmpXCol = 0;
-  int tmpGain = 0;
-  int res = 0; 
-  if(base !=0)
-    {
-      sprintf(fFilepath,"%s/PHOS/mapping/RCU0.data", base);
-      
-      FILE *fp = fopen(fFilepath, "r");
-      if(fp != 0)
-       {
-         res = fscanf(fp, "%d", &nChannels);
-         res = fscanf(fp, "%d", &maxaddr);
-         fHw2geomapPtr = new fAltromap[maxaddr +1]; 
-
-         for(int i=0; i< maxaddr + 1 ; i ++)
-           {
-             fHw2geomapPtr[i].fXCol = 0;
-             fHw2geomapPtr[i].fZRow = 0;
-             fHw2geomapPtr[i].fGain = 0;
-           }
 
-         for(int i=0; i<nChannels; i ++)
-           {
-             res = fscanf(fp, "%d %d %d %d\n", &tmpHwaddr, &tmpXCol, &tmpZRow,  &tmpGain);
-             if(tmpGain < 2)
-               {
-                 fHw2geomapPtr[tmpHwaddr].fXCol   = tmpXCol;
-                 fHw2geomapPtr[tmpHwaddr].fZRow   = tmpZRow;
-                 fHw2geomapPtr[tmpHwaddr].fGain  = tmpGain;
-               } 
+  if ( base )
+    {
+      if ( modId != fModuleId )
+        {
+          fModuleId = modId;
+          if ( base )
+            {
+              sprintf ( fFilepath,"%s/PHOS/mapping/Mod%dRCU0.data", base, GetModuleFromSpec ( specification ) );
+              int nChannels = 0;
+              int maxaddr = 0;
+              int tmpHwaddr = 0;
+              int tmpZRow = 0;
+              int tmpXCol = 0;
+              int tmpGain = 0;
+              int res = 0;
+
+              FILE *fp = fopen ( fFilepath, "r" );
+              if ( fp != 0 )
+                {
+                  res = fscanf ( fp, "%d", &nChannels );
+                  res = fscanf ( fp, "%d", &maxaddr );
+                  if (fHw2geomapPtr)
+                    {
+                      delete fHw2geomapPtr;
+                    }
+                  fHw2geomapPtr = new fAltromap[maxaddr +1];
+
+                  for ( int i=0; i< maxaddr + 1 ; i ++ )
+                    {
+                      fHw2geomapPtr[i].fXCol = 0;
+                      fHw2geomapPtr[i].fZRow = 0;
+                      fHw2geomapPtr[i].fGain = 0;
+                    }
+
+                  for ( int i=0; i<nChannels; i ++ )
+                    {
+                      res = fscanf ( fp, "%d %d %d %d\n", &tmpHwaddr, &tmpXCol, &tmpZRow,  &tmpGain );
+                      if ( tmpGain < 2 )
+                        {
+                          fHw2geomapPtr[tmpHwaddr].fXCol   = tmpXCol;
+                          fHw2geomapPtr[tmpHwaddr].fZRow   = tmpZRow;
+                          fHw2geomapPtr[tmpHwaddr].fGain  = tmpGain;
+                        }
+                    }
+                  fIsInitializedMapping = true;
+                  fclose ( fp );
+                }
+              else
+                {
+                  fIsInitializedMapping = false;
+                }
            }
-         fIsInitializedMapping = true;   
-         fclose(fp);
-       }
-      else
-       {
-         fIsInitializedMapping = false;          
        }
     }
-  else
-    {
+   else 
+   {
       fIsInitializedMapping = false;
-    }
-} 
+   }
+   
+   return fIsInitializedMapping;
+}
+   
 
 void
 AliHLTPHOSMapper::InitDDLSpecificationMapping()
 {
-  fSpecificationMapPtr = new fDDLSpecificationMap[PhosHLTConst::NMODULES*PhosHLTConst::NRCUSPERMODULE];
-  for(Int_t ddl = 0; ddl < PhosHLTConst::NMODULES*PhosHLTConst::NRCUSPERMODULE; ddl++)
+  fSpecificationMapPtr = new fDDLSpecificationMap[fCaloConstants->GetNMODULES()*fCaloConstants->GetNRCUSPERMODULE()];
+  for(Int_t ddl = 0; ddl < fCaloConstants->GetNMODULES()*fCaloConstants->GetNRCUSPERMODULE(); ddl++)
     {
       
-      fSpecificationMapPtr[ddl].fModId = ddl/PhosHLTConst::NRCUSPERMODULE;
+      fSpecificationMapPtr[ddl].fModId = ddl/fCaloConstants->GetNRCUSPERMODULE();
       
       if(ddl%4 == 0)
        {
@@ -141,8 +151,8 @@ AliHLTPHOSMapper::InitDDLSpecificationMapping()
          fSpecificationMapPtr[ddl].fRcuZ = 0;
        }
       
-      fSpecificationMapPtr[ddl].fRcuZOffset = NZROWSRCU*(fSpecificationMapPtr[ddl].fRcuZ);
-      fSpecificationMapPtr[ddl].fRcuXOffset = NXCOLUMNSRCU*(fSpecificationMapPtr[ddl].fRcuX);
+      fSpecificationMapPtr[ddl].fRcuZOffset = fCaloConstants->GetNZROWSRCU()*(fSpecificationMapPtr[ddl].fRcuZ);
+      fSpecificationMapPtr[ddl].fRcuXOffset = fCaloConstants->GetNXCOLUMNSMOD()*(fSpecificationMapPtr[ddl].fRcuX);
     }
 }
 
@@ -153,15 +163,18 @@ AliHLTPHOSMapper::GetIsInitializedMapping()
   return  fIsInitializedMapping;
 }
 
-
-char* 
-AliHLTPHOSMapper::GetFilePath()
+Int_t
+AliHLTPHOSMapper::GetChannelID(Int_t hwAddress)
 {
-  return  fFilepath;
+  
+  return ((fHw2geomapPtr[hwAddress].fXCol + fSpecificationMapPtr[fDDLId].fRcuXOffset) |
+         ((fHw2geomapPtr[hwAddress].fZRow + fSpecificationMapPtr[fDDLId].fRcuZOffset) << 6) |
+         (fHw2geomapPtr[hwAddress].fGain << 12) |
+         fSpecificationMapPtr[fDDLId].fModId << 13);
 }
 
-UShort_t
-AliHLTPHOSMapper::GetChannelID(Int_t specification, Int_t hwAddress)
+Int_t
+AliHLTPHOSMapper::GetChannelID(AliHLTUInt32_t specification, Int_t hwAddress)
 {
   
   Short_t index = 0;
@@ -204,41 +217,40 @@ AliHLTPHOSMapper::GetChannelID(Int_t specification, Int_t hwAddress)
 
 
 
-void
-AliHLTPHOSMapper::GetChannelCoord(const UShort_t channelId, UShort_t* channelCoord)
-{
-  channelCoord[0] = channelId&0x3f;
-  channelCoord[1] = (channelId >> 6)&0x3f;
-  channelCoord[2] = (channelId >> 12)&0x1;
-  channelCoord[3] = (channelId >> 13)&0x1f;
-  //  printf("Channel ID: 0x%X Coordinates: x = %d, z = %d, gain = %d\n", channelId, channelCoord[0], channelCoord[1], channelCoord[2]);
-}
-
-
-
-void
-//AliHLTPHOSMapper::GetChannelCoord(const UShort_t channelId,    &AliHLTPHOSCoordinate channelCoord)
-AliHLTPHOSMapper::ChannelId2Coordinate(const UShort_t channelId,    AliHLTPHOSCoordinate &channelCoord)
-{
-  channelCoord.fX = channelId&0x3f;
-  channelCoord.fZ = (channelId >> 6)&0x3f;
-  channelCoord.fGain = (channelId >> 12)&0x1;
-  channelCoord.fModuleId  = (channelId >> 13)&0x1f;
-  //  printf("Channel ID: 0x%X Coordinates: x = %d, z = %d, gain = %d\n", channelId, channelCoord[0], channelCoord[1], channelCoord[2]);
-}
-
-
-
-void
-AliHLTPHOSMapper::GetLocalCoord(const UShort_t channelId, Float_t* channelCoord)
-{
-  channelCoord[0] = (static_cast<Float_t>(channelId&0x3f) - NXCOLUMNSMOD/2)* fCellStep;
-  channelCoord[1] = (static_cast<Float_t>((channelId >> 6)&0x3f) - NZROWSMOD/2) * fCellStep;
-  //  printf("Local coordinates: x = %f, z = %f\n", channelCoord[0], channelCoord[1]);
-}
+// void
+// AliHLTPHOSMapper::GetChannelCoord(const UShort_t channelId, UShort_t* channelCoord)
+// {
+//   channelCoord[0] = channelId&0x3f;
+//   channelCoord[1] = (channelId >> 6)&0x3f;
+//   channelCoord[2] = (channelId >> 12)&0x1;
+//   channelCoord[3] = (channelId >> 13)&0x1f;
+//   //  printf("Channel ID: 0x%X Coordinates: x = %d, z = %d, gain = %d\n", channelId, channelCoord[0], channelCoord[1], channelCoord[2]);
+// }
+// 
+// 
+// 
+// void
+// AliHLTPHOSMapper::ChannelId2Coordinate(const UShort_t channelId,    AliHLTPHOSCoordinate &channelCoord)
+// {
+//   channelCoord.fX = channelId&0x3f;
+//   channelCoord.fZ = (channelId >> 6)&0x3f;
+//   channelCoord.fGain = (channelId >> 12)&0x1;
+//   channelCoord.fModuleId  = (channelId >> 13)&0x1f;
+//   //  printf("Channel ID: 0x%X Coordinates: x = %d, z = %d, gain = %d\n", channelId, channelCoord[0], channelCoord[1], channelCoord[2]);
+// }
+// 
+// 
+// 
+// void
+// AliHLTPHOSMapper::GetLocalCoord(const UShort_t channelId, Float_t* channelCoord)
+// {
+//   channelCoord[0] = (static_cast<Float_t>(channelId&0x3f) - NXCOLUMNSMOD/2)* fCellStep;
+//   channelCoord[1] = (static_cast<Float_t>((channelId >> 6)&0x3f) - NZROWSMOD/2) * fCellStep;
+//   //  printf("Local coordinates: x = %f, z = %f\n", channelCoord[0], channelCoord[1]);
+// }
 
 Int_t 
-AliHLTPHOSMapper::GetDDLFromSpec(Int_t specification)
+AliHLTPHOSMapper::GetDDLFromSpec(AliHLTUInt32_t specification)
 {
   Int_t index = -1;
   if(specification == 0x00001) index = 0;
@@ -272,7 +284,7 @@ AliHLTPHOSMapper::GetDDLFromSpec(Int_t specification)
 }
 
 Int_t 
-AliHLTPHOSMapper::GetModuleFromSpec(Int_t specification)
+AliHLTPHOSMapper::GetModuleFromSpec(AliHLTUInt32_t specification)
 {
   Int_t module = -1;