File indexing completed on 2023-03-17 11:01:44
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Fireworks/Core/interface/FWDigitSetProxyBuilder.h"
0010 #include "Fireworks/Core/interface/FWGeometry.h"
0011 #include "Fireworks/Core/interface/FWEventItem.h"
0012 #include "Fireworks/Core/interface/BuilderUtils.h"
0013 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
0014 #include "SimDataFormats/CaloHit/interface/PCaloHit.h"
0015 #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h"
0016
0017 class FWPCaloHitProxyBuilder : public FWDigitSetProxyBuilder {
0018 public:
0019 FWPCaloHitProxyBuilder(void) {}
0020 ~FWPCaloHitProxyBuilder(void) override {}
0021
0022 REGISTER_PROXYBUILDER_METHODS();
0023
0024 FWPCaloHitProxyBuilder(const FWPCaloHitProxyBuilder&) = delete;
0025 const FWPCaloHitProxyBuilder& operator=(const FWPCaloHitProxyBuilder&) = delete;
0026
0027 private:
0028 using FWDigitSetProxyBuilder::build;
0029 void build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*) override;
0030 };
0031
0032 void FWPCaloHitProxyBuilder::build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*) {
0033 const edm::PCaloHitContainer* collection = nullptr;
0034 iItem->get(collection);
0035 if (!collection)
0036 return;
0037
0038 TEveBoxSet* boxSet = addBoxSetToProduct(product);
0039 int index = 0;
0040 for (std::vector<PCaloHit>::const_iterator it = collection->begin(); it != collection->end(); ++it) {
0041 const float* corners = item()->getGeom()->getCorners((*it).id());
0042
0043 std::vector<float> scaledCorners(24);
0044 if (corners)
0045 fireworks::energyTower3DCorners(corners, (*it).energy() * 10, scaledCorners);
0046
0047 addBox(boxSet, &scaledCorners[0], iItem->modelInfo(index++).displayProperties());
0048 }
0049 }
0050
0051
0052 REGISTER_FWPROXYBUILDER(FWPCaloHitProxyBuilder,
0053 edm::PCaloHitContainer,
0054 "PCaloHits",
0055 FWViewType::kAll3DBits | FWViewType::kAllRPZBits);