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
#include "DataFormats/L1GlobalCaloTrigger/interface/L1GctInternJetData.h"

L1GctInternJetData::L1GctInternJetData() : capBlock_(0), capIndex_(0), bx_(0), type_(null), data_(0) {}

/// construct from individual quantities
L1GctInternJetData::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)
    : regionId_(rgn), capBlock_(capBlock), capIndex_(capIndex), bx_(bx), type_(null), data_(0) {
  setData(sgnEta, oflow, et, eta, phi, tauVeto, rank);
}

// 'named' constructors to avoid confusion

// emulator calibrated jet ctor
L1GctInternJetData L1GctInternJetData::fromEmulator(
    L1CaloRegionDetId rgn, int16_t bx, uint16_t et, bool oflow, bool tauVeto, uint8_t eta, uint8_t phi, uint16_t rank) {
  L1GctInternJetData d;

  d.setType(emulator);
  d.setRegionId(rgn);
  d.setData(0, (oflow ? 1 : 0), et, eta, phi, (tauVeto ? 1 : 0), rank);
  d.setBx(bx);

  return d;
}

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

  d.setRegionId(rgn);
  d.setCapBlock(capBlock);
  d.setCapIndex(capIndex);
  d.setBx(bx);
  d.setType(jet_cluster);
  d.setRawData(data & 0x1fffffff);

  return d;
}

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

  d.setRegionId(rgn);
  d.setCapBlock(capBlock);
  d.setCapIndex(capIndex);
  d.setBx(bx);
  d.setType(jet_precluster);
  d.setData(0, (data >> 10) & 0x1, data & 0x3ff, (data >> 12) & 0xf, 0, (data >> 11) & 0x1, 0);

  return d;
}

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

  d.setRegionId(rgn);
  d.setCapBlock(capBlock);
  d.setCapIndex(capIndex);
  d.setBx(bx);
  d.setType(jet_cluster_minimal);
  d.setData(0, (data >> 10) & 0x1, 0, (data >> 6) & 0xf, (data >> 12) & 0x1, (data >> 11) & 0x1, data & 0x3f);

  return d;
}

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

  d.setRegionId(rgn);
  d.setCapBlock(capBlock);
  d.setCapIndex(capIndex);
  d.setBx(bx);
  d.setType(gct_trig_object);
  d.setData((data >> 10) & 0x1, 0, 0, (data >> 6) & 0xf, (data >> 11) & 0x1f, 0, data & 0x3f);

  return d;
}

/// destructor (virtual to prevent compiler warnings)
L1GctInternJetData::~L1GctInternJetData() {}

/// construct
void L1GctInternJetData::setData(
    uint8_t sgnEta, uint8_t oflow, uint16_t et, uint8_t eta, uint8_t phi, uint8_t tauVeto, uint8_t rank) {
  data_ = 0;
  data_ = rank & 0x3f;
  data_ |= (tauVeto & 0x1) << 6;
  data_ |= (phi & 0x1f) << 7;
  data_ |= (eta & 0xf) << 12;
  data_ |= (et & 0xfff) << 16;
  data_ |= (oflow & 0x1) << 28;
  data_ |= (sgnEta & 0x1) << 29;
}

/// operators

/// equality operator
bool L1GctInternJetData::operator==(const L1GctInternJetData& c) const {
  return (type_ == c.type() && data_ == c.raw() && regionId_ == c.regionId() && bx_ == c.bx());
}

/// pretty print
std::ostream& operator<<(std::ostream& s, const L1GctInternJetData& c) {
  s << "L1GctInternJetData :";
  if (c.empty()) {
    s << " empty!";
  }
  if (c.type() == L1GctInternJetData::jet_cluster) {
    s << " type=jet_cluster";
    s << " oflow=" << c.oflow();
    s << " et=" << c.et();
    s << " eta=" << c.eta();
    s << " phi=" << c.phi();
    s << " tauVeto=" << c.tauVeto();
    s << " rank=" << c.rank();
  } else if (c.type() == L1GctInternJetData::jet_precluster) {
    s << " type=jet_precluster";
    s << " oflow=" << c.oflow();
    s << " et=" << c.et();
    s << " eta=" << c.eta();
    s << " tauVeto=" << c.tauVeto();
  } else if (c.type() == L1GctInternJetData::jet_cluster_minimal) {
    s << " type=jet_cluster_minimal";
    s << " oflow=" << c.oflow();
    s << " eta=" << c.eta();
    s << " phi=" << c.phi();
    s << " tauVeto=" << c.tauVeto();
    s << " rank=" << c.rank();
  } else if (c.type() == L1GctInternJetData::gct_trig_object) {
    s << " type=gct_trig_object";
    s << " eta=" << c.eta();
    s << " phi=" << c.phi();
    s << " rank=" << c.rank();
  }
  s << " cap block=" << std::hex << c.capBlock();
  s << " index=" << std::dec << c.capIndex();
  s << " BX=" << c.bx();

  return s;
}