LCOV - code coverage report
Current view: top level - FMD/FMDbase - AliFMDIndex.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 26 7.7 %
Date: 2016-06-14 17:26:59 Functions: 2 42 4.8 %

          Line data    Source code
       1             : #ifndef ALIFMDINDEX_H
       2             : #define ALIFMDINDEX_H
       3             : /** @file    AliFMDIndex.h
       4             :     @author  Christian Holm Christensen <cholm@nbi.dk>
       5             :     @date    Mon Mar 27 12:37:41 2006
       6             :     @brief   FMD detector coordinates
       7             : */
       8             : //___________________________________________________________________
       9             : //
      10             : //  Class that holds an FMD index.  That is, it holds the detector
      11             : //  coordinates for a given strip:
      12             : //
      13             : //     Variable | Type     | Range   | Description
      14             : //     ---------+----------+---------+------------------
      15             : //     detector | UShort_t | 1-3     | Detector number 
      16             : //     ring     | Char_t   | 'I'/'O' | Ring identifier 
      17             : //     sector   | UShort_t | 0-39    | Sector number
      18             : //     strip    | UShort_t | 0-511   | Strip number
      19             : //
      20             : #ifndef ROOT_Rtypes
      21             : # include <Rtypes.h>
      22             : #endif
      23             : #ifndef ROOT_TObject
      24             : # include <TObject.h>
      25             : #endif
      26             : #ifndef ROOT_TString
      27             : # include <TString.h>
      28             : #endif
      29             : #include <iosfwd>
      30             : 
      31             : //____________________________________________________________________
      32             : /** @class AliFMDIndex AliFMDIndex.h <FMD/AliFMDIndex.h>
      33             :     @brief FMD detector coordinates 
      34             :     @ingroup FMD_base
      35             :  */
      36             : class AliFMDIndex 
      37             : {
      38             : public: 
      39             :   /** CTOR */
      40             :   AliFMDIndex();
      41             :   /** Copy CTOR 
      42             :       @param o Object to copy from */
      43             :   AliFMDIndex(const AliFMDIndex& o);
      44             :   /** Constrctor 
      45             :       @param detector Detector 
      46             :       @param ring     Ring
      47             :       @param sector   Sector
      48             :       @param strip    Strip */
      49             :   AliFMDIndex(UShort_t detector, 
      50             :               Char_t   ring='\0', 
      51             :               UShort_t sector=0, 
      52             :               UShort_t strip=0);
      53             :   /** Assignment operator 
      54             :       @param o Object to assign from 
      55             :       @return Reference to this object  */
      56             :   AliFMDIndex& operator=(const AliFMDIndex& o);
      57             :   /** Comparison operator 
      58             :       @param o Object to compare to 
      59             :       @return @c true if these refer to the same index  */
      60             :   bool operator==(const AliFMDIndex& o) const;
      61             :   /** Comparison operator 
      62             :       @param o Object to compare to 
      63             :       @return @c true if this is smaller than @a o */
      64             :   bool operator<(const AliFMDIndex& o) const;
      65             :   /** DTOR */
      66           0 :   virtual ~AliFMDIndex() {}
      67             :   /** @return Detector # */
      68           0 :   UShort_t     Detector()          const { return fDetector; }
      69             :   /** @return Ring ID */
      70           0 :   Char_t       Ring()              const { return fRing;     }
      71             :   /** @return sector # */
      72           0 :   UShort_t     Sector()            const { return fSector;   }
      73             :   /** @return strip # */
      74           0 :   UShort_t     Strip()             const { return fStrip;    }
      75             :   /** @param x Detector # */
      76           0 :   void SetDetector(UShort_t x)     { fHash = -1; fDetector = x; }
      77             :   /** @param x Ring ID */
      78           0 :   void SetRing(Char_t x)           { fHash = -1; fRing = x; }
      79             :   /** @param x sector # */
      80           0 :   void SetSector(UShort_t x)       { fHash = -1; fSector = x; }
      81             :   /** @param x strip # */
      82           0 :   void SetStrip(UShort_t x)        { fHash = -1; fStrip = x; }
      83             :   /** Print information 
      84             :       @param opt Not used */
      85             :   virtual void Print(Option_t* opt="") const;
      86             :   /** @return Name */
      87             :   const char*  Name() const;
      88             : protected:
      89             :   Int_t Hash() const;
      90             :   UShort_t fDetector;      // (Sub) Detector # (1,2, or 3)
      91             :   Char_t   fRing;          // Ring ID ('I' or 'O')
      92             :   UShort_t fSector;        // Sector # (phi division)
      93             :   UShort_t fStrip;         // Strip # (radial division)
      94             :   mutable TString  fName;  //! Cached name
      95             :   mutable Int_t    fHash;  //! Cached hash value
      96          12 :   ClassDef(AliFMDIndex, 1) // Base class for FMD digits 
      97             : };
      98             : 
      99             : //____________________________________________________________________
     100             : class AliFMDObjIndex : public TObject, public AliFMDIndex
     101             : {
     102             : public:
     103             :   /** CTOR */
     104           0 :   AliFMDObjIndex() {}
     105             :   /** Copy CTOR 
     106             :       @param o Object to copy from */
     107           0 :   AliFMDObjIndex(const AliFMDObjIndex& o) : TObject(o), AliFMDIndex(o) {}
     108             :   /** Construct from a pure index
     109             :       @param o Object to copy from */
     110           0 :   explicit AliFMDObjIndex(const AliFMDIndex& o) : AliFMDIndex(o) {}
     111             :   /** Constrctor 
     112             :       @param detector Detector 
     113             :       @param ring     Ring
     114             :       @param sector   Sector
     115             :       @param strip    Strip */
     116           0 :   AliFMDObjIndex(UShort_t detector, 
     117             :                  Char_t   ring='\0', 
     118             :                  UShort_t sector=0, 
     119             :                  UShort_t strip=0) 
     120           0 :     : AliFMDIndex(detector, ring, sector, strip)
     121           0 :   {}
     122             :   /** DTOR */
     123           0 :   virtual ~AliFMDObjIndex() {}
     124             :   AliFMDObjIndex& operator=(const AliFMDObjIndex& o) 
     125             :   {
     126           0 :     if (&o == this) return *this;
     127           0 :     AliFMDIndex::operator=(o);
     128           0 :     return *this; 
     129           0 :   }
     130             :   /** @return name */
     131           0 :   virtual const char* GetName() const { return AliFMDIndex::Name(); }
     132             :   /** sort compare for TCollection's
     133             :       @param o Object to compare to
     134             :       @return  -1 if this is @e smaller than @a o, 0 if @e equal to 
     135             :       @a o, and 1 if this is @e larger than @a o */
     136             :   virtual Int_t Compare(const TObject* o) const;
     137             :   /** @return always true */
     138           0 :   Bool_t IsSortable() const { return kTRUE; }
     139          12 :   ClassDef(AliFMDObjIndex, 1) // Base class for FMD digits 
     140             : };
     141             :  
     142             : //____________________________________________________________________
     143             : inline
     144             : bool
     145             : AliFMDIndex::operator==(const AliFMDIndex& o) const
     146             : {
     147           0 :   return (o.Hash() == Hash());
     148             : }
     149             : 
     150             : //____________________________________________________________________
     151             : inline
     152             : bool
     153             : AliFMDIndex::operator<(const AliFMDIndex& rhs) const
     154             : {
     155           0 :   return (Hash() < rhs.Hash());
     156             : }
     157             : 
     158             : #if 0
     159             : //____________________________________________________________________
     160             : inline
     161             : bool
     162             : operator<(const AliFMDIndex& lhs, const AliFMDIndex& rhs)
     163             : {
     164             :   return (lhs.Detector() < rhs.Detector() ? true : 
     165             :           (lhs.Ring()    < rhs.Ring()     ? true :
     166             :            (lhs.Sector() < rhs.Sector()   ? true :
     167             :             (lhs.Strip() < rhs.Strip()    ? true : false))));
     168             : }
     169             : #endif 
     170             : #endif
     171             : //____________________________________________________________________
     172             : //
     173             : // Local Variables:
     174             : //   mode: C++
     175             : // End:
     176             : //
     177             : //
     178             : // EOF
     179             : //

Generated by: LCOV version 1.11