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
#include "CondFormats/HcalObjects/interface/HcalDetIdTransform.h"
#include "DataFormats/HcalDetId/interface/HcalDetId.h"

#include "FWCore/Utilities/interface/Exception.h"

namespace HcalDetIdTransform {
  unsigned transform(const HcalDetId& id, const unsigned transformCode) {
    static const int ietaShift = 1024;
    static const int maxHcalDepth = 64;

    if (transformCode >= N_TRANSFORMS)
      throw cms::Exception(
          "In HcalDetIdTransform::transform:"
          " invalid transform code");
    unsigned t = 0;
    switch (transformCode) {
      case RAWID:
        t = id.rawId();
        break;

      case IETA:
        t = id.ieta() + ietaShift;
        break;

      case IETAABS:
        t = id.ietaAbs();
        break;

      case SUBDET:
        t = id.subdetId();
        break;

      case IETADEPTH:
        t = (id.ieta() + ietaShift) * maxHcalDepth + id.depth();
        break;

      case IETAABSDEPTH:
        t = id.ietaAbs() * maxHcalDepth + id.depth();
        break;

      default:
        throw cms::Exception(
            "In HcalDetIdTransform::transform:"
            " unhandled switch clause. This is a bug."
            " Please report.");
    }
    return t;
  }

  void validateCode(const unsigned transformCode) {
    if (transformCode >= N_TRANSFORMS)
      throw cms::Exception(
          "In HcalDetIdTransform::validateCode:"
          " invalid transform code");
  }
}  // namespace HcalDetIdTransform