CaloRecHit

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
#ifndef DATAFORMATS_CALORECHIT_CALORECHIT_H
#define DATAFORMATS_CALORECHIT_CALORECHIT_H 1

#include "DataFormats/DetId/interface/DetId.h"
#include <ostream>

#if defined(__CUDA_ARCH__) or defined(__HIP_DEVICE_COMPILE__)
__constant__
#endif
    constexpr uint32_t calo_rechit_masks[] = {
        0x00000000u, 0x00000001u, 0x00000003u, 0x00000007u, 0x0000000fu, 0x0000001fu, 0x0000003fu,
        0x0000007fu, 0x000000ffu, 0x000001ffu, 0x000003ffu, 0x000007ffu, 0x00000fffu, 0x00001fffu,
        0x00003fffu, 0x00007fffu, 0x0000ffffu, 0x0001ffffu, 0x0003ffffu, 0x0007ffffu, 0x000fffffu,
        0x001fffffu, 0x003fffffu, 0x007fffffu, 0x00ffffffu, 0x01ffffffu, 0x03ffffffu, 0x07ffffffu,
        0x0fffffffu, 0x1fffffffu, 0x3fffffffu, 0x7fffffffu, 0xffffffffu};

/** \class CaloRecHit
 * 
 *\author J. Mans - Minnesota
 */
class CaloRecHit {
public:
  constexpr CaloRecHit() : energy_(0), time_(0), flags_(0), aux_(0) {}
  constexpr explicit CaloRecHit(const DetId& id, float energy, float time, uint32_t flags = 0, uint32_t aux = 0)
      : id_(id), energy_(energy), time_(time), flags_(flags), aux_(aux) {}

  constexpr float energy() const { return energy_; }
  constexpr void setEnergy(float energy) { energy_ = energy; }
  constexpr float time() const { return time_; }
  constexpr void setTime(float time) { time_ = time; }
  constexpr const DetId& detid() const { return id_; }
  constexpr uint32_t flags() const { return flags_; }
  constexpr void setFlags(uint32_t flags) { flags_ = flags; }
  constexpr void setFlagField(uint32_t value, int base, int width = 1) {
    value &= calo_rechit_masks[std::max(std::min(width, 32), 0)];
    value <<= std::max(std::min(base, 31), 0);
    // clear out the relevant bits
    uint32_t clear = calo_rechit_masks[std::max(std::min(width, 32), 0)];
    clear = clear << std::max(std::min(base, 31), 0);
    clear ^= 0xFFFFFFFFu;
    flags_ &= clear;
    flags_ |= value;
  }
  constexpr uint32_t flagField(int base, int width = 1) const {
    return (flags_ >> std::max(std::min(base, 31), 0)) & calo_rechit_masks[std::max(std::min(width, 32), 0)];
  }
  constexpr void setAux(uint32_t value) { aux_ = value; }
  constexpr uint32_t aux() const { return aux_; }

private:
  DetId id_;
  float energy_;
  float time_;
  uint32_t flags_;
  uint32_t aux_;
};

std::ostream& operator<<(std::ostream& s, const CaloRecHit& hit);

#endif