File indexing completed on 2024-04-06 12:11:28
0001 #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
0002 #include "DataFormats/HGCalReco/interface/Trackster.h"
0003
0004 #include "TEveTrans.h"
0005 #include "TGeoSphere.h"
0006 #include "TEveGeoShape.h"
0007
0008 class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate<ticl::Trackster> {
0009 public:
0010 FWTracksterProxyBuilder(void) {}
0011 ~FWTracksterProxyBuilder(void) override {}
0012
0013 REGISTER_PROXYBUILDER_METHODS();
0014
0015 FWTracksterProxyBuilder(const FWTracksterProxyBuilder &) = delete;
0016 const FWTracksterProxyBuilder &operator=(const FWTracksterProxyBuilder &) = delete;
0017
0018 private:
0019 void build(const ticl::Trackster &iData,
0020 unsigned int iIndex,
0021 TEveElement &oItemHolder,
0022 const FWViewContext *) override;
0023 };
0024
0025 void FWTracksterProxyBuilder::build(const ticl::Trackster &iData,
0026 unsigned int iIndex,
0027 TEveElement &oItemHolder,
0028 const FWViewContext *) {
0029 const ticl::Trackster &trackster = iData;
0030 const ticl::Trackster::Vector &barycenter = trackster.barycenter();
0031 const std::array<float, 3> &eigenvalues = trackster.eigenvalues();
0032 const double theta = barycenter.Theta();
0033 const double phi = barycenter.Phi();
0034
0035 auto eveEllipsoid = new TEveGeoShape("Ellipsoid");
0036 auto sphere = new TGeoSphere(0., 1.);
0037 eveEllipsoid->SetShape(sphere);
0038 eveEllipsoid->InitMainTrans();
0039 eveEllipsoid->RefMainTrans().Move3PF(barycenter.x(), barycenter.y(), barycenter.z());
0040 eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta, phi, 0., "xzy");
0041 eveEllipsoid->RefMainTrans().SetScale(sqrt(eigenvalues[2]), sqrt(eigenvalues[1]), sqrt(eigenvalues[0]));
0042 setupAddElement(eveEllipsoid, &oItemHolder);
0043 }
0044
0045 REGISTER_FWPROXYBUILDER(FWTracksterProxyBuilder,
0046 ticl::Trackster,
0047 "Trackster",
0048 FWViewType::k3DBit | FWViewType::kAllRPZBits);