3 /**************************************************************************
4 * This file is property of and copyright by the Experimental Nuclear *
5 * Physics Group, Dep. of Physics *
6 * University of Oslo, Norway, 2007 *
8 * Author: Per Thomas Hille <perthi@fys.uio.no> for the ALICE HLT Project.*
9 * Contributors are mentioned in the code where appropriate. *
10 * Please report bugs to perthi@fys.uio.no *
12 * Permission to use, copy, modify and distribute this software and its *
13 * documentation strictly for non-commercial purposes is hereby granted *
14 * without fee, provided that the above copyright notice appears in all *
15 * copies and that both the copyright notice and this permission notice *
16 * appear in the supporting documentation. The authors make no claims *
17 * about the suitability of this software for any purpose. It is *
18 * provided "as is" without express or implied warranty. *
19 **************************************************************************/
21 #include "AliHLTEMCALMapper.h"
23 #include "AliHLTCaloConstants.h"
27 using EMCAL::NXCOLUMNSMOD;
28 using EMCAL::NZROWSMOD;
29 using EMCAL::NMODULES;
30 using EMCAL::NRCUSPERMODULE;
31 using EMCAL::NRCUSPERSECTOR;
32 using EMCAL::MAXHWADDR;
33 using EMCAL::MAXCHANNELS;
35 AliHLTEMCALMapper::AliHLTEMCALMapper(const unsigned long specification ) : AliHLTCaloMapper(specification, "EMCAL")
38 InitAltroMapping(specification);
39 InitDDLSpecificationMapping();
40 fIsInitializedMapping = true; //CRAP PTH, must check if the initilization actually went ok
44 AliHLTEMCALMapper::~AliHLTEMCALMapper()
51 AliHLTEMCALMapper::GetLocalCoord(const int channelId, Float_t* localCoord) const
53 localCoord[0] = ( ( Float_t )(channelId&0x3f) - NXCOLUMNSMOD/2) * fCellSize;
54 localCoord[1] = ( (Float_t)((channelId >> 6)&0x3f) - NZROWSMOD/2) * fCellSize;
59 AliHLTEMCALMapper::InitAltroMapping(const unsigned long specification )
61 TString base(getenv("ALICE_ROOT"));
63 int maxaddr = 0; // keep as dummy for now
69 fIsInitializedMapping = false;
73 snprintf(fFilepath,FILEPATHMAXLENGTH,"%s/EMCAL/mapping/%s", base.Data(), DDL2RcuMapFileName( GetDDLFromSpec( specification ) ) );
74 snprintf(fFilepath, FILEPATHMAXLENGTH,"%s/EMCAL/mapping/%s", base.Data(), DDL2RcuMapFileName( GetDDLFromSpec( specification ) ) );
76 std::auto_ptr<FILE> fp(fopen(fFilepath, "r"));
79 res = fscanf(fp.get(), "%d\n", &nChannels);
80 if (res!=1) return false;
81 res = fscanf(fp.get(), "%d\n", &maxaddr);
82 if (res!=1) return false;
83 // fHw2geomapPtr = new fAltromap[maxaddr +1];
84 fHw2geomapPtr = new fAltromap[MAXHWADDR +1];
86 for(int i=0; i< MAXHWADDR + 1 ; i ++)
87 //for(int i=0; i< maxaddr + 1 ; i ++)
89 fHw2geomapPtr[i].fXCol = 0;
90 fHw2geomapPtr[i].fZRow = 0;
91 fHw2geomapPtr[i].fGain = 0;
94 if( nChannels > 0 && nChannels <= MAXCHANNELS )
96 for(int i=0; i<nChannels; i ++)
98 res = fscanf(fp.get(), "%d %d %d %d\n", &tmpHwaddr, &tmpXCol, &tmpZRow, &tmpGain);
99 if (res!=4) return false;
103 if( tmpHwaddr <= MAXHWADDR && tmpHwaddr >= 0 )
105 fHw2geomapPtr[tmpHwaddr].fXCol = (char)tmpXCol;
106 fHw2geomapPtr[tmpHwaddr].fZRow = (char)tmpZRow;
107 fHw2geomapPtr[tmpHwaddr].fGain = (char)tmpGain;
111 fIsInitializedMapping = true;
115 fIsInitializedMapping = false;
121 fIsInitializedMapping = false;
126 fIsInitializedMapping = false;
129 return fIsInitializedMapping;
134 AliHLTEMCALMapper::InitDDLSpecificationMapping()
136 if (fSpecificationMapPtr) delete [] fSpecificationMapPtr;
137 fSpecificationMapPtr = new fDDLSpecificationMap[NMODULES*NRCUSPERMODULE];
139 for(Int_t ddl = 0; ddl < NMODULES*NRCUSPERMODULE; ddl++)
141 fSpecificationMapPtr[ddl].fModId = ddl/( NRCUSPERMODULE );
146 AliHLTEMCALMapper::DDL2RcuMapFileName(const int ddlIndex) const //0=4608, 1=4607 etc...
148 const int rnamelen=256;
149 static char rname[rnamelen];
152 if ( ddlIndex%NRCUSPERSECTOR <2)
160 int tmprcuindex = ddlIndex%2;
161 snprintf(rname, rnamelen, "RCU%d%c.data", tmprcuindex, tmpSide );
162 //sprintf(rname,"RCU%d%c.data", ddlIndex/NRCUSPERSECTOR, tmpSide );