3 /* Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights
6 * See cxx source for full Copyright notice
12 template <typename Type>
13 class AliFMDMap : public TObject
16 AliFMDMap(size_t maxDet=3, size_t maxRing=2, size_t maxSec=40,
18 virtual ~AliFMDMap() {}
20 Type& operator()(size_t det, Char_t ring, size_t sec, size_t str);
21 const Type& operator()(size_t det, Char_t ring, size_t sec, size_t str)const;
23 typedef std::vector<Type> ValueVector; // Type of container
24 ValueVector fValues; // Contained values
25 size_t fMaxDetectors; // Maximum # of detectors
26 size_t fMaxRings; // Maximum # of rings
27 size_t fMaxSectors; // Maximum # of sectors
28 size_t fMaxStrips; // Maximum # of strips
30 size_t CalcIndex(size_t det, Char_t ring, size_t sec, size_t str) const;
31 ClassDef(AliFMDMap, 0); // Map of FMD index's to values
35 //____________________________________________________________________
36 template <typename Type>
38 AliFMDMap<Type>::AliFMDMap(size_t maxDet,
42 : fValues(maxDet * maxRing * maxSec * maxStr),
43 fMaxDetectors(maxDet),
51 // maxDet Maximum # of detectors
52 // maxRinf Maximum # of rings
53 // maxSec Maximum # of sectors
54 // maxStr Maximum # of strips
58 //____________________________________________________________________
59 template <typename Type>
61 AliFMDMap<Type>::CalcIndex(size_t det, Char_t ring, size_t sec, size_t str) const
63 // Calculate index into storage from arguments.
71 // Returns appropriate index into storage
73 size_t ringi = (ring == 'I' || ring == 'i' ? 0 : 1);
75 (det + fMaxDetectors * (ringi + fMaxRings * (sec + fMaxSectors * str)));
76 if (idx >= fMaxDetectors * fMaxRings * fMaxSectors * fMaxStrips) {
77 Fatal("CalcIndex", "Index (%d,'%c',%d,%d) out of bounds, "
78 "in particular the %s index",
80 (det >= fMaxDetectors ? "Detector" :
81 (ringi >= fMaxRings ? "Ring" :
82 (sec >= fMaxSectors ? "Sector" : "Strip"))));
88 //____________________________________________________________________
89 template <typename Type>
91 AliFMDMap<Type>::Clear()
93 // Resets stored values to the default value for that type
94 for (size_t i = 0; i < fValues.size(); ++i) fValues[i] = Type();
97 //____________________________________________________________________
98 template <typename Type>
100 AliFMDMap<Type>::operator()(size_t det, Char_t ring, size_t sec, size_t str)
108 // Returns data[det][ring][sec][str]
109 return fValues[CalcIndex(det, ring, sec, str)];
112 //____________________________________________________________________
113 template <typename Type>
115 AliFMDMap<Type>::operator()(size_t det, Char_t ring, size_t sec, size_t str)const
123 // Returns data[det][ring][sec][str]
124 return fValues[CalcIndex(det, ring, sec, str)];
130 //____________________________________________________________________