*
* See cxx source for full Copyright notice
*/
+#ifndef ROOT_TObject
+# include <TObject.h>
+#endif
+//____________________________________________________________________
+//
+// Base class for caches of per-strip information.
+//
+
+class AliFMDMap : public TObject
+{
+public:
+ enum {
+ kMaxDetectors = 3,
+ kMaxRings = 2,
+ kMaxSectors = 20,
+ kMaxStrips = 512
+ };
+ AliFMDMap(size_t maxDet = kMaxDetectors,
+ size_t maxRing= kMaxRings,
+ size_t maxSec = kMaxSectors,
+ size_t maxStr = kMaxStrips);
+ virtual ~AliFMDMap() {}
+protected:
+ size_t CalcIndex(size_t det, Char_t ring, size_t sec, size_t str) const;
+ size_t fMaxDetectors; // Maximum # of detectors
+ size_t fMaxRings; // Maximum # of rings
+ size_t fMaxSectors; // Maximum # of sectors
+ size_t fMaxStrips; // Maximum # of strips
+ ClassDef(AliFMDMap, 1) // Cache of per strip information
+};
+
+#ifdef MAY_USE_TEMPLATES
#ifndef __VECTOR__
# include <vector>
#endif
-
+//____________________________________________________________________
+//
+// Class template for classes that cache per strip information.
+// Access to the data goes via
+//
+// Type& AliFMDMap<Type>::operator()(size_t detector,
+// Char_t ring,
+// size_t sector,
+// size_t strip);
+//
+// (as well as a const version of this member function).
+// The elements can be reset to the default value by calling
+// AliFMDMap<Type>::Clear(). This resets the values to `Type()'.
+//
template <typename Type>
class AliFMDMap : public TObject
{
AliFMDMap(size_t maxDet=3, size_t maxRing=2, size_t maxSec=40,
size_t maxStr=512);
virtual ~AliFMDMap() {}
- void Clear();
+ void Clear(const Type& val=Type());
Type& operator()(size_t det, Char_t ring, size_t sec, size_t str);
const Type& operator()(size_t det, Char_t ring, size_t sec, size_t str)const;
private:
//____________________________________________________________________
template <typename Type>
inline void
-AliFMDMap<Type>::Clear()
+AliFMDMap<Type>::Clear(const Type& val)
{
// Resets stored values to the default value for that type
- for (size_t i = 0; i < fValues.size(); ++i) fValues[i] = Type();
+ for (size_t i = 0; i < fValues.size(); ++i) fValues[i] = val;
}
//____________________________________________________________________
//____________________________________________________________________
template <typename Type>
inline const Type&
-AliFMDMap<Type>::operator()(size_t det, Char_t ring, size_t sec, size_t str)const
+AliFMDMap<Type>::operator()(size_t det,
+ Char_t ring,
+ size_t sec,
+ size_t str) const
{
// Parameters:
// det Detector #
}
+//____________________________________________________________________
+//
+// Some specialisations
+//
+typedef AliFMDMap<UShort_t> AliFMDAdcMap;
+typedef AliFMDMap<std::pair<Float_t, UShort_t> > AliFMDEdepMap;
+#endif
#endif
//____________________________________________________________________
//