Back to home page

Project CMSSW displayed by LXR

 
 

    


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 /** \class CaloRecHit
0018  * 
0019  *\author J. Mans - Minnesota
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     // clear out the relevant bits
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