CMS 3D CMS Logo

FWHeatmapProxyBuilderTemplate.h
Go to the documentation of this file.
1 #ifndef Fireworks_Core_FWHeatmapProxyBuilderTemplate_h
2 #define Fireworks_Core_FWHeatmapProxyBuilderTemplate_h
3 // -*- C++ -*-
4 //
5 // Package: Core
6 // Class : FWHeatmapProxyBuilderTemplate
7 //
16 //
17 // Original Author: Alex Mourtziapis
18 // Created: Wed Jan 23 14:50:00 EST 2019
19 //
20 
21 // system include files
22 #include <cmath>
23 
24 // user include files
30 
31 // forward declarations
32 
33 template <typename T>
35 public:
37 
38  //virtual ~FWHeatmapProxyBuilderTemplate();
39 
40  // ---------- const member functions ---------------------
41 
42  // ---------- static member functions --------------------
43 
44  // ---------- member functions ---------------------------
45 
46 protected:
47  std::map<DetId, const HGCRecHit*> hitmap;
48 
49  static constexpr uint8_t gradient_steps = 9;
50  static constexpr uint8_t gradient[3][gradient_steps] = {{static_cast<uint8_t>(0.2082 * 255),
51  static_cast<uint8_t>(0.0592 * 255),
52  static_cast<uint8_t>(0.0780 * 255),
53  static_cast<uint8_t>(0.0232 * 255),
54  static_cast<uint8_t>(0.1802 * 255),
55  static_cast<uint8_t>(0.5301 * 255),
56  static_cast<uint8_t>(0.8186 * 255),
57  static_cast<uint8_t>(0.9956 * 255),
58  static_cast<uint8_t>(0.9764 * 255)},
59 
60  {static_cast<uint8_t>(0.1664 * 255),
61  static_cast<uint8_t>(0.3599 * 255),
62  static_cast<uint8_t>(0.5041 * 255),
63  static_cast<uint8_t>(0.6419 * 255),
64  static_cast<uint8_t>(0.7178 * 255),
65  static_cast<uint8_t>(0.7492 * 255),
66  static_cast<uint8_t>(0.7328 * 255),
67  static_cast<uint8_t>(0.7862 * 255),
68  static_cast<uint8_t>(0.9832 * 255)},
69 
70  {static_cast<uint8_t>(0.5293 * 255),
71  static_cast<uint8_t>(0.8684 * 255),
72  static_cast<uint8_t>(0.8385 * 255),
73  static_cast<uint8_t>(0.7914 * 255),
74  static_cast<uint8_t>(0.6425 * 255),
75  static_cast<uint8_t>(0.4662 * 255),
76  static_cast<uint8_t>(0.3499 * 255),
77  static_cast<uint8_t>(0.1968 * 255),
78  static_cast<uint8_t>(0.0539 * 255)}};
79 
80  const T& modelData(int index) { return *reinterpret_cast<const T*>(m_helper.offsetObject(item()->modelData(index))); }
81 
82  void setItem(const FWEventItem* iItem) override {
84  if (iItem) {
85  iItem->getConfig()->keepEntries(true);
86  iItem->getConfig()->assertParam("Layer", 0L, 0L, 52L);
87  iItem->getConfig()->assertParam("EnergyCutOff", 0.5, 0.2, 5.0);
88  iItem->getConfig()->assertParam("Heatmap", true);
89  iItem->getConfig()->assertParam("Z+", true);
90  iItem->getConfig()->assertParam("Z-", true);
91  }
92  }
93 
94  void build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext* vc) override {
95  if (item()->getConfig()->template value<bool>("Heatmap")) {
96  hitmap.clear();
97 
98  edm::Handle<HGCRecHitCollection> recHitHandleEE;
99  edm::Handle<HGCRecHitCollection> recHitHandleFH;
100  edm::Handle<HGCRecHitCollection> recHitHandleBH;
101 
102  const edm::EventBase* event = iItem->getEvent();
103  event->getByLabel(edm::InputTag("HGCalRecHit", "HGCEERecHits"), recHitHandleEE);
104  event->getByLabel(edm::InputTag("HGCalRecHit", "HGCHEFRecHits"), recHitHandleFH);
105  event->getByLabel(edm::InputTag("HGCalRecHit", "HGCHEBRecHits"), recHitHandleBH);
106 
107  if (recHitHandleEE.isValid()) {
108  const auto& rechitsEE = *recHitHandleEE;
109 
110  for (unsigned int i = 0; i < rechitsEE.size(); ++i) {
111  hitmap[rechitsEE[i].detid().rawId()] = &rechitsEE[i];
112  }
113  }
114 
115  if (recHitHandleFH.isValid()) {
116  const auto& rechitsFH = *recHitHandleFH;
117 
118  for (unsigned int i = 0; i < rechitsFH.size(); ++i) {
119  hitmap[rechitsFH[i].detid().rawId()] = &rechitsFH[i];
120  }
121  }
122 
123  if (recHitHandleBH.isValid()) {
124  const auto& rechitsBH = *recHitHandleBH;
125 
126  for (unsigned int i = 0; i < rechitsBH.size(); ++i) {
127  hitmap[rechitsBH[i].detid().rawId()] = &rechitsBH[i];
128  }
129  }
130  }
131 
132  FWSimpleProxyBuilder::build(iItem, product, vc);
133  }
134 
136  void build(const void* iData, unsigned int iIndex, TEveElement& oItemHolder, const FWViewContext* context) override {
137  if (nullptr != iData) {
138  build(*reinterpret_cast<const T*>(iData), iIndex, oItemHolder, context);
139  }
140  }
141 
143  void buildViewType(const void* iData,
144  unsigned int iIndex,
145  TEveElement& oItemHolder,
146  FWViewType::EType viewType,
147  const FWViewContext* context) override {
148  if (nullptr != iData) {
149  buildViewType(*reinterpret_cast<const T*>(iData), iIndex, oItemHolder, viewType, context);
150  }
151  }
155  virtual void build(const T& iData, unsigned int iIndex, TEveElement& oItemHolder, const FWViewContext*) {
156  throw std::runtime_error(
157  "virtual build(const T&, unsigned int, TEveElement&, const FWViewContext*) not implemented by inherited "
158  "class.");
159  }
160 
161  virtual void buildViewType(
162  const T& iData, unsigned int iIndex, TEveElement& oItemHolder, FWViewType::EType viewType, const FWViewContext*) {
163  throw std::runtime_error(
164  "virtual buildViewType(const T&, unsigned int, TEveElement&, FWViewType::EType, const FWViewContext*) not "
165  "implemented by inherited class");
166  };
167 
168 private:
169  FWHeatmapProxyBuilderTemplate(const FWHeatmapProxyBuilderTemplate&) = delete; // stop default
170 
171  const FWHeatmapProxyBuilderTemplate& operator=(const FWHeatmapProxyBuilderTemplate&) = delete; // stop default
172 
173  // ---------- member data --------------------------------
174 };
175 
176 #endif
const fireworks::Context & context() const
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:150
std::map< DetId, const HGCRecHit * > hitmap
void setItem(const FWEventItem *iItem) override
static uint8_t gradient[3][gradient_steps]
void build(const void *iData, unsigned int iIndex, TEveElement &oItemHolder, const FWViewContext *context) override
void build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) override
virtual void buildViewType(const T &iData, unsigned int iIndex, TEveElement &oItemHolder, FWViewType::EType viewType, const FWViewContext *)
const void * offsetObject(const void *iObj) const
const FWEventItem * item() const
const FWHeatmapProxyBuilderTemplate & operator=(const FWHeatmapProxyBuilderTemplate &)=delete
void buildViewType(const void *iData, unsigned int iIndex, TEveElement &oItemHolder, FWViewType::EType viewType, const FWViewContext *context) override
virtual void setItem(const FWEventItem *iItem)
bool isValid() const
Definition: HandleBase.h:70
FWGenericParameter< T > * assertParam(const std::string &name, T def)
const edm::EventBase * getEvent() const
Definition: FWEventItem.h:131
FWSimpleProxyHelper m_helper
void buildViewType(const FWEventItem *iItem, TEveElementList *product, FWViewType::EType viewType, const FWViewContext *) override
bool getByLabel(InputTag const &, Handle< T > &) const
Definition: EventBase.h:92
virtual void build(const T &iData, unsigned int iIndex, TEveElement &oItemHolder, const FWViewContext *)
long double T
#define constexpr