]>
Commit | Line | Data |
---|---|---|
e570ebf1 | 1 | // $Id$ |
178dd351 | 2 | |
3 | /************************************************************************** | |
4 | * This file is property of and copyright by the Experimental Nuclear * | |
5 | * Physics Group, Dep. of Physics * | |
6 | * University of Oslo, Norway, 2006 * | |
7 | * * | |
8 | * Author: Per Thomas Hille perthi@fys.uio.no for the ALICE DCS Project. * | |
9 | * Contributors are mentioned in the code where appropriate. * | |
10 | * Please report bugs to perthi@fys.uio.no * | |
11 | * * | |
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 | **************************************************************************/ | |
20 | ||
21 | // | |
22 | // Mapping class fro mapping | |
23 | // from hardware address to geometrical address | |
24 | // | |
25 | // | |
26 | ||
27 | #include "AliHLTCaloMapper.h" | |
28 | #include "AliHLTLogging.h" | |
29 | #include "Rtypes.h" | |
30 | #include "unistd.h" | |
31 | #include <iostream> | |
32 | #include "AliHLTCaloCoordinate.h" | |
4f4b7ba4 | 33 | #include "AliHLTCaloConstantsHandler.h" |
76ffc0ce | 34 | |
35 | //#include "AliHLTCaloConstants.h" | |
36 | ||
37 | ||
38 | //typedef AliHLTCaloConstantsHandler::fCaloConstants->GetCELLSTEP() CELLSTEP; | |
39 | ||
40 | //#define fCaloConstants->GetCELLSTEP() CELLSTEP | |
41 | ||
42 | ||
43 | ||
44 | //typedef CELLSTEP fCaloConstants->GetCELLSTEP(); | |
178dd351 | 45 | |
4f4b7ba4 | 46 | ClassImp(AliHLTCaloMapper); |
178dd351 | 47 | |
77f350f7 | 48 | AliHLTCaloMapper::AliHLTCaloMapper( const unsigned long specification , TString det) : |
4f4b7ba4 | 49 | AliHLTCaloConstantsHandler(det), |
f92dcf21 | 50 | AliHLTLogging(), |
77f350f7 | 51 | fHw2geomapPtr(0), |
52 | fCellSize(0), | |
53 | fSpecification(specification), | |
54 | fIsInitializedMapping(false), | |
4d2d113d | 55 | fSpecificationMapPtr(0), |
56 | fCaloDet(det) | |
178dd351 | 57 | { |
58 | //see header file for class documentation | |
fe4e0365 | 59 | fFilepath[0] = '\0'; |
178dd351 | 60 | } |
61 | ||
62 | ||
63 | AliHLTCaloMapper::~AliHLTCaloMapper() | |
64 | { | |
3a5885ee | 65 | if (fSpecificationMapPtr) delete [] fSpecificationMapPtr; |
66 | fSpecificationMapPtr = NULL; | |
67 | if (fHw2geomapPtr) delete [] fHw2geomapPtr; | |
68 | fHw2geomapPtr = NULL; | |
178dd351 | 69 | } |
70 | ||
71 | ||
72 | //void AliHLTCaloMapper::InitAltroMapping(){ | |
73 | //Virtual base class | |
74 | //} | |
75 | ||
76 | //void AliHLTCaloMapper::InitDDLSpecificationMapping() { | |
77 | //Virtual base class | |
78 | //} | |
79 | ||
80 | ||
81 | ||
82 | bool | |
83 | AliHLTCaloMapper::GetIsInitializedMapping() | |
84 | { | |
178dd351 | 85 | return fIsInitializedMapping; |
86 | } | |
87 | ||
88 | ||
89 | char* | |
90 | AliHLTCaloMapper::GetFilePath() | |
91 | { | |
178dd351 | 92 | return fFilepath; |
93 | } | |
94 | ||
95 | ||
77f350f7 | 96 | int |
97 | AliHLTCaloMapper::GetChannelID(const AliHLTUInt32_t spec, const Int_t hadd) | |
98 | { | |
e570ebf1 | 99 | if (!fSpecificationMapPtr) return -ENODEV; |
77f350f7 | 100 | Short_t index = GetDDLFromSpec(spec); |
101 | if( index < 0 ) | |
102 | { | |
f137c3c5 | 103 | HLTError("Specification 0x%X not consistent with single DDL in PHOS", spec); |
77f350f7 | 104 | return index; |
105 | } | |
106 | else | |
107 | { | |
108 | return ((fHw2geomapPtr[hadd].fXCol ) | | |
109 | ((fHw2geomapPtr[hadd].fZRow ) << 6) | | |
110 | (fHw2geomapPtr[hadd].fGain << 12) | | |
111 | fSpecificationMapPtr[index].fModId << 13); | |
112 | } | |
113 | } | |
114 | ||
115 | ||
77f350f7 | 116 | void |
117 | AliHLTCaloMapper::GetChannelCoord(const UShort_t channelId, UShort_t* channelCoord) | |
118 | { | |
119 | channelCoord[0] = channelId&0x3f; | |
120 | channelCoord[1] = (channelId >> 6)&0x3f; | |
121 | channelCoord[2] = (channelId >> 12)&0x1; | |
122 | channelCoord[3] = (channelId >> 13)&0x1f; | |
ad44d760 | 123 | // printf("Channel ID: 0x%X Coordinates: x = %d, z = %d, gain = %d\n", channelId, channelCoord[0], channelCoord[1], channelCoord[2]); |
77f350f7 | 124 | } |
125 | ||
178dd351 | 126 | void |
b850c417 | 127 | AliHLTCaloMapper::ChannelId2Coordinate(const int channelId, AliHLTCaloCoordinate &channelCoord) |
178dd351 | 128 | { |
178dd351 | 129 | channelCoord.fX = channelId&0x3f; |
130 | channelCoord.fZ = (channelId >> 6)&0x3f; | |
131 | channelCoord.fGain = (channelId >> 12)&0x1; | |
132 | channelCoord.fModuleId = (channelId >> 13)&0x1f; | |
133 | // printf("Channel ID: 0x%X Coordinates: x = %d, z = %d, gain = %d\n", channelId, channelCoord[0], channelCoord[1], channelCoord[2]); | |
134 | } | |
3800a654 | 135 | |
136 | ||
77f350f7 | 137 | void |
138 | AliHLTCaloMapper::GetLocalCoord(const int channelId, Float_t* localCoord) const | |
139 | { | |
140 | localCoord[0] = (static_cast<Float_t>(channelId&0x3f) - fCaloConstants->GetNXCOLUMNSMOD()/2)* fCaloConstants->GetCELLSTEP(); | |
76ffc0ce | 141 | // localCoord[0] = (static_cast<Float_t>(channelId&0x3f) - fCaloConstants->GetNXCOLUMNSMOD()/2)*CELLSTEP; |
77f350f7 | 142 | localCoord[1] = (static_cast<Float_t>((channelId >> 6)&0x3f) - fCaloConstants->GetNZROWSMOD()/2) * fCaloConstants->GetCELLSTEP(); |
143 | // printf("Local coordinates: x = %f, z = %f\n", channelCoord[0], channelCoord[1]); | |
144 | } | |
145 | ||
146 | ||
3800a654 | 147 | int |
148 | AliHLTCaloMapper::GetDDLFromSpec( const AliHLTUInt32_t spec ) | |
149 | { | |
150 | int tmpIndex = -1; | |
151 | for(int i=0; i < 32; i++ ) | |
152 | { | |
153 | if (spec >> i ==1) | |
154 | { | |
155 | tmpIndex = i; | |
156 | break; | |
157 | } | |
158 | } | |
159 | if( tmpIndex < 0) | |
160 | { | |
161 | // HLTError("Specification %d, not consistent with any DDL in PHOS or EMCAL", spec ); | |
162 | } | |
f137c3c5 | 163 | |
3800a654 | 164 | return tmpIndex; |
165 | } | |
166 | ||
b850c417 | 167 | |
77f350f7 | 168 | Int_t |
4d2d113d | 169 | AliHLTCaloMapper::GetModuleFromSpec(UInt_t specification) |
3800a654 | 170 | { |
4d2d113d | 171 | |
172 | Int_t module = -1; | |
723e5d31 | 173 | // get rid of too much string operations |
174 | ||
175 | // if (fCaloDet.CompareTo("PHOS") == 0) { | |
176 | ||
177 | if (fCaloDet[0]=='P') { | |
178 | // P = is the short for PHOS | |
4d2d113d | 179 | // 1 module = 4 bits |
180 | if(specification & 0xf) module = 0; | |
181 | else if((specification >> 4) & 0xf) module = 1; | |
182 | else if((specification >> 8) & 0xf) module = 2; | |
183 | else if((specification >> 12) & 0xf) module = 3; | |
184 | else if((specification >> 16) & 0xf) module = 4; | |
185 | else { | |
186 | HLTDebug("Specification 0x%X not consistent with single module in PHOS", specification); | |
187 | } | |
188 | ||
189 | return module; | |
62b6c2f0 | 190 | } |
723e5d31 | 191 | //else if (fCaloDet.CompareTo("EMCAL") == 0) { |
192 | else if (fCaloDet[0]=='E') { | |
193 | ||
194 | // E = is the short for EMCAL | |
4d2d113d | 195 | // 1 module = 2 bits |
196 | if(specification & 0x3) module = 0; | |
197 | else if((specification >> 2) & 0x3) module = 1; | |
198 | else if((specification >> 4) & 0x3) module = 2; | |
199 | else if((specification >> 6) & 0x3) module = 3; | |
200 | else if((specification >> 8) & 0x3) module = 4; | |
201 | else if((specification >> 10) & 0x3) module = 5; | |
202 | else if((specification >> 12) & 0x3) module = 6; | |
203 | else if((specification >> 14) & 0x3) module = 7; | |
204 | else if((specification >> 16) & 0x3) module = 8; | |
205 | else if((specification >> 18) & 0x3) module = 9; | |
206 | else { | |
207 | HLTDebug("Specification 0x%X not consistent with single module in EMCAL", specification); | |
208 | } | |
209 | return module; | |
210 | ||
211 | } else { | |
212 | HLTDebug("Specification 0x%X not consistent with single module in EMCAL or PHOS", specification); | |
213 | } | |
723e5d31 | 214 | return module; |
3800a654 | 215 | } |
216 | ||
217 | ||
3800a654 | 218 | unsigned long |
219 | AliHLTCaloMapper::GetSpecFromDDLIndex( const int ddlindex ) | |
220 | { | |
221 | int iret = (unsigned long)1 << ddlindex; | |
222 | ||
223 | // return ((unsigned long)1) << ddlindex ) ; | |
224 | ||
225 | return iret; | |
226 | ||
227 | } | |
228 |