File indexing completed on 2025-01-04 00:29:30
0001 #ifndef DATAFORMATS_CALORECHIT_CALORECHIT_H
0002 #define DATAFORMATS_CALORECHIT_CALORECHIT_H 1
0003
0004 #include "DataFormats/DetId/interface/DetId.h"
0005 #include <ostream>
0006
0007 #if defined(__CUDA_ARCH__) or defined(__HIP_DEVICE_COMPILE__)
0008 __constant__
0009 #endif
0010 constexpr uint32_t calo_rechit_masks[] = {
0011 0x00000000u, 0x00000001u, 0x00000003u, 0x00000007u, 0x0000000fu, 0x0000001fu, 0x0000003fu,
0012 0x0000007fu, 0x000000ffu, 0x000001ffu, 0x000003ffu, 0x000007ffu, 0x00000fffu, 0x00001fffu,
0013 0x00003fffu, 0x00007fffu, 0x0000ffffu, 0x0001ffffu, 0x0003ffffu, 0x0007ffffu, 0x000fffffu,
0014 0x001fffffu, 0x003fffffu, 0x007fffffu, 0x00ffffffu, 0x01ffffffu, 0x03ffffffu, 0x07ffffffu,
0015 0x0fffffffu, 0x1fffffffu, 0x3fffffffu, 0x7fffffffu, 0xffffffffu};
0016
0017
0018
0019
0020
0021 class CaloRecHit {
0022 public:
0023 constexpr CaloRecHit() : energy_(0), time_(0), flags_(0), aux_(0) {}
0024 constexpr explicit CaloRecHit(const DetId& id, float energy, float time, uint32_t flags = 0, uint32_t aux = 0)
0025 : id_(id), energy_(energy), time_(time), flags_(flags), aux_(aux) {}
0026
0027 constexpr float energy() const { return energy_; }
0028 constexpr void setEnergy(float energy) { energy_ = energy; }
0029 constexpr float time() const { return time_; }
0030 constexpr void setTime(float time) { time_ = time; }
0031 constexpr const DetId& detid() const { return id_; }
0032 constexpr uint32_t flags() const { return flags_; }
0033 constexpr void setFlags(uint32_t flags) { flags_ = flags; }
0034 constexpr void setFlagField(uint32_t value, int base, int width = 1) {
0035 value &= calo_rechit_masks[std::max(std::min(width, 32), 0)];
0036 value <<= std::max(std::min(base, 31), 0);
0037
0038 uint32_t clear = calo_rechit_masks[std::max(std::min(width, 32), 0)];
0039 clear = clear << std::max(std::min(base, 31), 0);
0040 clear ^= 0xFFFFFFFFu;
0041 flags_ &= clear;
0042 flags_ |= value;
0043 }
0044 constexpr uint32_t flagField(int base, int width = 1) const {
0045 return (flags_ >> std::max(std::min(base, 31), 0)) & calo_rechit_masks[std::max(std::min(width, 32), 0)];
0046 }
0047 constexpr void setAux(uint32_t value) { aux_ = value; }
0048 constexpr uint32_t aux() const { return aux_; }
0049
0050 private:
0051 DetId id_;
0052 float energy_;
0053 float time_;
0054 uint32_t flags_;
0055 uint32_t aux_;
0056 };
0057
0058 std::ostream& operator<<(std::ostream& s, const CaloRecHit& hit);
0059
0060 #endif