File indexing completed on 2024-04-06 12:11:52
0001 #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
0002 #include "Fireworks/Core/interface/Context.h"
0003 #include "Fireworks/Core/interface/FWGeometry.h"
0004 #include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h"
0005 #include "SimDataFormats/CaloAnalysis/interface/CaloParticleFwd.h"
0006 #include "SimDataFormats/CaloAnalysis/interface/SimCluster.h"
0007
0008 #include "TEveBoxSet.h"
0009
0010 class FWECaloParticleProxyBuilder : public FWSimpleProxyBuilderTemplate<CaloParticle> {
0011 public:
0012 FWECaloParticleProxyBuilder(void) {}
0013 ~FWECaloParticleProxyBuilder(void) override {}
0014
0015 REGISTER_PROXYBUILDER_METHODS();
0016
0017
0018 FWECaloParticleProxyBuilder(const FWECaloParticleProxyBuilder &) = delete;
0019
0020 const FWECaloParticleProxyBuilder &operator=(const FWECaloParticleProxyBuilder &) = delete;
0021
0022 private:
0023 void build(const CaloParticle &iData, unsigned int iIndex, TEveElement &oItemHolder, const FWViewContext *) override;
0024 };
0025
0026 void FWECaloParticleProxyBuilder::build(const CaloParticle &iData,
0027 unsigned int iIndex,
0028 TEveElement &oItemHolder,
0029 const FWViewContext *) {
0030 TEveBoxSet *boxset = new TEveBoxSet();
0031 boxset->UseSingleColor();
0032 boxset->SetPickable(true);
0033 boxset->Reset(TEveBoxSet::kBT_FreeBox, true, 64);
0034 boxset->SetAntiFlick(true);
0035
0036 for (const auto &c : iData.simClusters()) {
0037 for (const auto &it : (*c).hits_and_fractions()) {
0038 if (DetId(it.first).det() != DetId::Detector::Ecal) {
0039 std::cerr << "this proxy should be used only for ECAL";
0040 return;
0041 }
0042
0043 const float *corners = item()->getGeom()->getCorners(it.first);
0044 if (corners == nullptr)
0045 continue;
0046
0047 boxset->AddBox(corners);
0048 }
0049 }
0050
0051 boxset->RefitPlex();
0052 boxset->CSCTakeAnyParentAsMaster();
0053 boxset->CSCApplyMainColorToMatchingChildren();
0054 boxset->CSCApplyMainTransparencyToMatchingChildren();
0055 boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
0056 boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
0057 oItemHolder.AddElement(boxset);
0058 }
0059
0060 REGISTER_FWPROXYBUILDER(FWECaloParticleProxyBuilder,
0061 CaloParticle,
0062 "ECaloParticle",
0063 FWViewType::kAll3DBits | FWViewType::kAllRPZBits);