//
//
-#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");
}
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)
{
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);
}
}
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;
-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;
}
Int_t
-AliHLTPHOSMapper::GetModuleFromSpec(Int_t specification)
+AliHLTPHOSMapper::GetModuleFromSpec(AliHLTUInt32_t specification)
{
Int_t module = -1;