L1GctInternJetData

L1GctInternJetType

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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
#ifndef L1GCTINTERNJETDATA_H
#define L1GCTINTERNJETDATA_H

#include <string>

#include "DataFormats/L1CaloTrigger/interface/L1CaloRegionDetId.h"

/// \class L1GctInternJetData
/// \brief L1 GCT internal jet candidate
/// \author Jim Brooke
/// \date June 2006
///

class L1GctInternJetData {
public:
  enum L1GctInternJetType { null, emulator, jet_cluster, jet_cluster_minimal, jet_precluster, gct_trig_object };

public:
  /// default constructor (for vector initialisation etc.)
  L1GctInternJetData();

  /// construct from individual quantities
  L1GctInternJetData(L1CaloRegionDetId rgn,
                     uint16_t capBlock,
                     uint16_t capIndex,
                     int16_t bx,
                     uint8_t sgnEta,
                     uint8_t oflow,
                     uint16_t et,
                     uint8_t eta,
                     uint8_t phi,
                     uint8_t tauVeto,
                     uint8_t rank);

  // 'named' constructors to avoid confusion

  // emulator calibrated jet ctor
  static L1GctInternJetData fromEmulator(L1CaloRegionDetId rgn,
                                         int16_t bx,
                                         uint16_t et,
                                         bool overFlow,
                                         bool tauVeto,
                                         uint8_t eta,
                                         uint8_t phi,
                                         uint16_t rank);

  /// construct from "jet_cluster"
  static L1GctInternJetData fromJetCluster(
      L1CaloRegionDetId rgn, uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);

  /// construct from "jet_precluster"
  static L1GctInternJetData fromJetPreCluster(
      L1CaloRegionDetId rgn, uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);

  /// construct from "jet_cluster_minimal"
  static L1GctInternJetData fromJetClusterMinimal(
      L1CaloRegionDetId rgn, uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);

  /// construct from "gct_trig_object"
  static L1GctInternJetData fromGctTrigObject(
      L1CaloRegionDetId rgn, uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);

  /// destructor (virtual to prevent compiler warnings)
  virtual ~L1GctInternJetData();

  // getters

  /// 'type' of object
  L1GctInternJetData::L1GctInternJetType type() const { return type_; }

  /// region associated with the candidate
  L1CaloRegionDetId regionId() const { return regionId_; }

  /// was an object really found?
  bool empty() const { return (data_ == 0); }

  /// get capture block
  uint16_t capBlock() const { return capBlock_; }

  /// get index within capture block
  uint16_t capIndex() const { return capIndex_; }

  /// get BX number
  int16_t bx() const { return bx_; }

  /// get the raw data
  uint32_t raw() const { return data_; }

  /// get rank bits
  uint16_t rank() const { return data_ & 0x3f; }

  /// get tau veto
  uint16_t tauVeto() const { return (data_ >> 6) & 0x1; }

  /// get phi
  uint16_t phi() const { return (data_ >> 7) & 0x1f; }

  /// get eta
  uint16_t eta() const { return (data_ >> 12) & 0xf; }

  /// get et
  uint16_t et() const { return (data_ >> 16) & 0xfff; }

  /// get oflow
  uint16_t oflow() const { return (data_ >> 28) & 0x1; }

  /// get sign of eta
  uint16_t sgnEta() const { return (data_ >> 29) & 0x1; }

  // setters

  /// set region
  void setRegionId(L1CaloRegionDetId rgn) { regionId_ = rgn; }

  /// set cap block
  void setCapBlock(uint16_t capBlock) { capBlock_ = capBlock; }

  /// set cap index
  void setCapIndex(uint16_t capIndex) { capIndex_ = capIndex; }

  /// set bx
  void setBx(uint16_t bx) { bx_ = bx; }

  /// set type
  void setType(L1GctInternJetType type) { type_ = type; }

  /// set data
  void setRawData(uint32_t data) { data_ = data; }

  /// construct data word from  components
  void setData(uint8_t sgnEta, uint8_t oflow, uint16_t et, uint8_t eta, uint8_t phi, uint8_t tauVeto, uint8_t rank);

  // operators

  /// equality operator
  bool operator==(const L1GctInternJetData& c) const;

  /// inequality operator
  bool operator!=(const L1GctInternJetData& c) const { return !(*this == c); }

private:
  // location in calorimeter (optionally set by unpacker)
  L1CaloRegionDetId regionId_;

  // source of the data
  uint16_t capBlock_;
  uint16_t capIndex_;
  int16_t bx_;

  // type of data
  L1GctInternJetType type_;

  // the captured data
  uint32_t data_;
};

std::ostream& operator<<(std::ostream& s, const L1GctInternJetData& cand);

#endif