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
// -*- C++ -*-
//
// Package:     L1TObjects
// Class  :     L1CaloHcalScale
//
// Implementation:
//     <Notes on implementation>
//
// Author:
// Created:     Wed Sep 27 17:18:27 CEST 2006
// $Id:

#include "CondFormats/L1TObjects/interface/L1CaloHcalScale.h"

using std::endl;
using std::ostream;
using std::vector;

/// construct a linear scale with a particular LSB
L1CaloHcalScale::L1CaloHcalScale(double lsb) {
  for (unsigned i = 0; i < nBinRank; i++) {
    for (unsigned eta = 0; eta < nBinEta; eta++) {
      m_scale[i][eta] = lsb * i;
      m_scale[i][eta + nBinEta] = lsb * i;
    }
  }
}

/// dtor
L1CaloHcalScale::~L1CaloHcalScale() {}

/// set scale bin
void L1CaloHcalScale::setBin(unsigned short rank, unsigned short eta, short etaSign, double et) {
  --eta;  // input eta index starts at 1
  if (rank < nBinRank && eta < nBinEta) {
    if (etaSign < 0)
      eta += nBinEta;
    m_scale[rank][eta] = et;
  } else {
    // throw
  }
}

/// convert from Et in GeV to rank
unsigned short L1CaloHcalScale::rank(double et, unsigned short eta, short etaSign) const {
  --eta;  // input eta index starts at 1
  if (eta < nBinEta) {
    unsigned short out = 0;
    if (etaSign < 0)
      eta += nBinEta;
    for (unsigned i = 0; i < nBinRank; i++) {
      if (et >= m_scale[i][eta]) {
        out = i;
      }
    }
    return out & (nBinRank - 1);
  } else {
    // throw
  }
  return nBinRank;
}

// convert from rank to Et/GeV
double L1CaloHcalScale::et(unsigned short rank, unsigned short eta, short etaSign) const {
  --eta;  // input eta index starts at 1
  if (rank < nBinRank && eta < nBinEta) {
    if (etaSign < 0)
      eta += nBinEta;
    return m_scale[rank][eta];
  } else
    return -1.;
}

// pretty print
void L1CaloHcalScale::print(ostream& s) const {
  s << "L1CaloHcalScaleRcd" << endl;
  s << "Energy for HCAL inputs into the RCT" << endl;
  s << "Each new row is for a given value of 8 bit output of HCAL.  Each column is for the respective eta value "
    << endl;
  for (unsigned rank = 0; rank < nBinRank; rank++) {
    s << "rank " << rank << " ";
    for (unsigned eta = 0; eta < 2 * nBinEta; eta++) {
      s << m_scale[rank][eta] << " ";
    }
    s << endl;
  }
}