2 /**************************************************************************
3 * This file is property of and copyright by the ALICE HLT Project *
4 * ALICE Experiment at CERN, All rights reserved. *
6 * Primary Authors: Kenneth Aamodt <kenneth@ift.uib.no> *
7 * for The ALICE HLT Project. *
9 * Permission to use, copy, modify and distribute this software and its *
10 * documentation strictly for non-commercial purposes is hereby granted *
11 * without fee, provided that the above copyright notice appears in all *
12 * copies and that both the copyright notice and this permission notice *
13 * appear in the supporting documentation. The authors make no claims *
14 * about the suitability of this software for any purpose. It is *
15 * provided "as is" without express or implied warranty. *
16 **************************************************************************/
18 /** @file AliHLTTPCMapping.cxx
19 @author Kenneth Aamodt
21 @brief A mapping class for the TPC.
24 // see header file for class documentation //
26 // refer to README to build package //
28 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt //
34 #include "AliHLTTPCMapping.h"
35 #include "AliHLTTPCTransform.h"
37 ClassImp(AliHLTTPCMapping)
39 AliHLTTPCMapping::AliHLTTPCMapping(UInt_t patch)
41 fCurrentRowMapping(NULL),
42 fCurrentPadMapping(NULL),
47 // see header file for class documentation
49 // refer to README to build package
51 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
55 if(!fgMapping0IsDone){
56 memset(fgRowMapping0, 0, fgkMapping0Size*sizeof(UInt_t));
57 memset(fgPadMapping0, 0, fgkMapping0Size*sizeof(UInt_t));
60 fCurrentRowMapping=fgRowMapping0;
61 fCurrentPadMapping=fgPadMapping0;
62 fMaxHWAdd=fgkMapping0Size;
63 fRowOffset=AliHLTTPCTransform::GetFirstRow(patch);
66 if(!fgMapping1IsDone){
67 memset(fgRowMapping1, 0, fgkMapping1Size*sizeof(UInt_t));
68 memset(fgPadMapping1, 0, fgkMapping1Size*sizeof(UInt_t));
71 fCurrentRowMapping=fgRowMapping1;
72 fCurrentPadMapping=fgPadMapping1;
73 fMaxHWAdd=fgkMapping1Size;
74 fRowOffset=AliHLTTPCTransform::GetFirstRow(patch);
77 if(!fgMapping2IsDone){
78 memset(fgRowMapping2, 0, fgkMapping2Size*sizeof(UInt_t));
79 memset(fgPadMapping2, 0, fgkMapping2Size*sizeof(UInt_t));
82 fCurrentRowMapping=fgRowMapping2;
83 fCurrentPadMapping=fgPadMapping2;
84 fMaxHWAdd=fgkMapping2Size;
85 fRowOffset=AliHLTTPCTransform::GetFirstRow(patch);
88 if(!fgMapping3IsDone){
89 memset(fgRowMapping3, 0, fgkMapping3Size*sizeof(UInt_t));
90 memset(fgPadMapping3, 0, fgkMapping3Size*sizeof(UInt_t));
93 fCurrentRowMapping=fgRowMapping3;
94 fCurrentPadMapping=fgPadMapping3;
95 fMaxHWAdd=fgkMapping3Size;
96 fRowOffset=AliHLTTPCTransform::GetFirstRow(patch);
99 if(!fgMapping4IsDone){
100 memset(fgRowMapping4, 0, fgkMapping4Size*sizeof(UInt_t));
101 memset(fgPadMapping4, 0, fgkMapping4Size*sizeof(UInt_t));
102 InitializeMap(patch);
104 fCurrentRowMapping=fgRowMapping4;
105 fCurrentPadMapping=fgPadMapping4;
106 fMaxHWAdd=fgkMapping4Size;
107 fRowOffset=AliHLTTPCTransform::GetFirstRow(patch);
110 if(!fgMapping5IsDone){
111 memset(fgRowMapping5, 0, fgkMapping5Size*sizeof(UInt_t));
112 memset(fgPadMapping5, 0, fgkMapping5Size*sizeof(UInt_t));
113 InitializeMap(patch);
115 fCurrentRowMapping=fgRowMapping5;
116 fCurrentPadMapping=fgPadMapping5;
117 fMaxHWAdd=fgkMapping5Size;
118 fRowOffset=AliHLTTPCTransform::GetFirstRow(patch);
123 Bool_t AliHLTTPCMapping::fgMapping0IsDone=kFALSE;
124 Bool_t AliHLTTPCMapping::fgMapping1IsDone=kFALSE;
125 Bool_t AliHLTTPCMapping::fgMapping2IsDone=kFALSE;
126 Bool_t AliHLTTPCMapping::fgMapping3IsDone=kFALSE;
127 Bool_t AliHLTTPCMapping::fgMapping4IsDone=kFALSE;
128 Bool_t AliHLTTPCMapping::fgMapping5IsDone=kFALSE;
129 UInt_t AliHLTTPCMapping::fgRowMapping0[fgkMapping0Size];
130 UInt_t AliHLTTPCMapping::fgPadMapping0[fgkMapping0Size];
131 UInt_t AliHLTTPCMapping::fgRowMapping1[fgkMapping1Size];
132 UInt_t AliHLTTPCMapping::fgPadMapping1[fgkMapping1Size];
133 UInt_t AliHLTTPCMapping::fgRowMapping2[fgkMapping2Size];
134 UInt_t AliHLTTPCMapping::fgPadMapping2[fgkMapping2Size];
135 UInt_t AliHLTTPCMapping::fgRowMapping3[fgkMapping3Size];
136 UInt_t AliHLTTPCMapping::fgPadMapping3[fgkMapping3Size];
137 UInt_t AliHLTTPCMapping::fgRowMapping4[fgkMapping4Size];
138 UInt_t AliHLTTPCMapping::fgPadMapping4[fgkMapping4Size];
139 UInt_t AliHLTTPCMapping::fgRowMapping5[fgkMapping5Size];
140 UInt_t AliHLTTPCMapping::fgPadMapping5[fgkMapping5Size];
142 AliHLTTPCMapping::~AliHLTTPCMapping(){
143 // see header file for class documentation
146 void AliHLTTPCMapping::InitializeMap(UInt_t patch)
148 // see header file for class documentation
150 UInt_t fNRowsToSubtract=0;
151 //The row numbers returned by digit readers used are not from zero always
173 //Making mapping arrays for the given patch
176 const char* basePath=getenv("ALICE_ROOT");
178 filename.Form("%s/TPC/mapping/Patch%d.data", basePath,patch);
180 inFile.open(filename.Data());
182 HLTFatal("Unable to open file: %s This means no mapping is provided.", filename.Data());
186 if(inFile >> fNHWAdd){
187 if(inFile >> fMaxHWAdd){
193 if(fgkMapping0Size<fMaxHWAdd){
194 HLTFatal("Max hardware address exceeded for patch %d, max number is %d, number from mapping file is %d.",patch,fgkMapping0Size ,fMaxHWAdd);
197 while(inFile>>hwAdd && inFile>>row && inFile>>pad){
198 if (hwAdd>fMaxHWAdd) {
199 HLTFatal("hardware address exceeds max hwAddress %d, mapping file %s corrupted?", fMaxHWAdd);
202 fgRowMapping0[hwAdd]=row-fNRowsToSubtract;
203 fgPadMapping0[hwAdd]=pad;
205 fgMapping0IsDone=kTRUE;
208 if(fgkMapping1Size<fMaxHWAdd){
209 HLTFatal("Max hardware address exceeded for patch %d, max number is %d, number from mapping file is %d.",patch,fgkMapping1Size ,fMaxHWAdd);
212 while(inFile>>hwAdd && inFile>>row && inFile>>pad){
213 if (hwAdd>fMaxHWAdd) {
214 HLTFatal("hardware address exceeds max hwAddress %d, mapping file %s corrupted?", fMaxHWAdd);
217 fgRowMapping1[hwAdd]=row-fNRowsToSubtract;
218 fgPadMapping1[hwAdd]=pad;
220 fgMapping1IsDone=kTRUE;
223 if(fgkMapping2Size<fMaxHWAdd){
224 HLTFatal("Max hardware address exceeded for patch %d, max number is %d number from mapping file is %d.",patch,fgkMapping2Size ,fMaxHWAdd);
227 while(inFile>>hwAdd && inFile>>row && inFile>>pad){
228 if (hwAdd>fMaxHWAdd) {
229 HLTFatal("hardware address exceeds max hwAddress %d, mapping file %s corrupted?", fMaxHWAdd);
232 fgRowMapping2[hwAdd]=row-fNRowsToSubtract;
233 fgPadMapping2[hwAdd]=pad;
235 fgMapping2IsDone=kTRUE;
238 if(fgkMapping3Size<fMaxHWAdd){
239 HLTFatal("Max hardware address exceeded for patch %d, max number is %d number from mapping file is %d.",patch,fgkMapping3Size ,fMaxHWAdd);
242 while(inFile>>hwAdd && inFile>>row && inFile>>pad){
243 if (hwAdd>fMaxHWAdd) {
244 HLTFatal("hardware address exceeds max hwAddress %d, mapping file %s corrupted?", fMaxHWAdd);
247 fgRowMapping3[hwAdd]=row-fNRowsToSubtract;
248 fgPadMapping3[hwAdd]=pad;
250 fgMapping3IsDone=kTRUE;
253 if(fgkMapping4Size<fMaxHWAdd){
254 HLTFatal("Max hardware address exceeded for patch %d, max number is %d number from mapping file is %d.",patch,fgkMapping4Size ,fMaxHWAdd);
257 while(inFile>>hwAdd && inFile>>row && inFile>>pad){
258 if (hwAdd>fMaxHWAdd) {
259 HLTFatal("hardware address exceeds max hwAddress %d, mapping file %s corrupted?", fMaxHWAdd);
262 fgRowMapping4[hwAdd]=row-fNRowsToSubtract;
263 fgPadMapping4[(UInt_t)hwAdd]=(UInt_t)pad;
265 fgMapping4IsDone=kTRUE;
268 if(fgkMapping5Size<fMaxHWAdd){
269 HLTFatal("Max hardware address exceeded for patch %d, max number is %d number from mapping file is %d.",patch,fgkMapping5Size ,fMaxHWAdd);
272 while(inFile>>hwAdd && inFile>>row && inFile>>pad){
273 if (hwAdd>fMaxHWAdd) {
274 HLTFatal("hardware address exceeds max hwAddress %d, mapping file %s corrupted?", fMaxHWAdd);
277 fgRowMapping5[hwAdd]=row-fNRowsToSubtract;
278 fgPadMapping5[hwAdd]=pad;
280 fgMapping5IsDone=kTRUE;
289 UInt_t AliHLTTPCMapping::GetRow(UInt_t hwadd) const
291 // see header file for class documentation
292 assert(fCurrentRowMapping);
293 // assert(hwadd<=fMaxHWAdd);
294 if (!fCurrentRowMapping) return 0;
295 if (hwadd>fMaxHWAdd) return 0;
296 return fCurrentRowMapping[hwadd];
299 UInt_t AliHLTTPCMapping::GetPad(UInt_t hwadd) const
301 // see header file for class documentation
302 assert(fCurrentPadMapping);
303 // assert(hwadd<=fMaxHWAdd);
304 if (!fCurrentPadMapping) return 0;
305 if (hwadd>fMaxHWAdd) return 0;
306 return fCurrentPadMapping[hwadd];
309 Bool_t AliHLTTPCMapping::IsValidHWAddress(UInt_t hwadd) const
311 if (hwadd>fMaxHWAdd){