L1MuBMAddressArray

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
//-------------------------------------------------
//
/**  \class L1MuBMAddressArray
 *
 *   Array of relative addresses
 *
 *   Array of 4 relative addresses (one per station);<BR>
 *   the valid range of a relative address is 0 - 11
 *   thus a relative address is a 4 bit word;<BR>
 *   address = 15 indicates a negative extrapolation result
 *
 *   \verbatim
 *         ------------------------
 *         |   4    5  |   6   7  |
 *      P  ------------+-----------
 *      H  |   0    1  |   2   3  |
 *      I  ------------+-----------
 *         |   8    9  |  10  11  |
 *         ------------+-----------
 *            my Wheel  next Wheel
 *   \endverbatim
 *
 *
 *
 *   N. Neumeister            CERN EP
 */
//
//--------------------------------------------------
#ifndef L1MUBM_ADDRESS_ARRAY_H
#define L1MUBM_ADDRESS_ARRAY_H

//---------------
// C++ Headers --
//---------------

#include <iosfwd>

//----------------------
// Base Class Headers --
//----------------------

//------------------------------------
// Collaborating Class Declarations --
//------------------------------------

//              ---------------------
//              -- Class Interface --
//              ---------------------

class L1MuBMAddressArray {
public:
  /// default constructor
  L1MuBMAddressArray();

  /// copy constructor
  L1MuBMAddressArray(const L1MuBMAddressArray&);

  /// destructor
  virtual ~L1MuBMAddressArray();

  /// assignment operator
  L1MuBMAddressArray& operator=(const L1MuBMAddressArray&);

  /// equal operator
  bool operator==(const L1MuBMAddressArray&) const;

  /// unequal operator
  bool operator!=(const L1MuBMAddressArray&) const;

  /// reset address array
  void reset();

  /// set address of a given station [1-4]
  void setStation(int stat, int adr);

  /// set addresses of all four stations
  void setStations(int adr1, int adr2, int adr3, int adr4);

  /// get address of a given station [1-4]
  inline unsigned short station(int stat) const { return m_station[stat - 1]; }

  /// get track address code (for eta track finder)
  int trackAddressCode() const;

  /// get converted Addresses
  L1MuBMAddressArray converted() const;

  /// output stream operator for address array
  friend std::ostream& operator<<(std::ostream&, const L1MuBMAddressArray&);

  /// convert address to corresponding VHDL addresse
  static unsigned short int convert(unsigned short int adr);

  /// is it a same wheel address?
  static bool sameWheel(unsigned short int adr);

  /// is it a next wheel address?
  static bool nextWheel(unsigned short int adr);

private:
  unsigned short int m_station[4];
};

#endif