CMS 3D CMS Logo

FWVertexCandidateProxyBuilder.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Vertexs
4 // Class : FWVertexCandidateProxyBuilder
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Chris Jones
10 // Created: Tue Dec 2 14:17:03 EST 2008
11 //
12 // user include files// user include files
22 
25 
26 #include "TEvePointSet.h"
27 #include "TMatrixDEigen.h"
28 #include "TMatrixDSym.h"
29 #include "TDecompSVD.h"
30 #include "TVectorD.h"
31 #include "TEveTrans.h"
32 #include "TEveTrack.h"
33 #include "TEveTrackPropagator.h"
34 #include "TEveStraightLineSet.h"
35 #include "TEveBoxSet.h"
36 #include "TGeoSphere.h"
37 #include "TEveGeoNode.h"
38 #include "TEveVSDStructs.h"
39 
40 class FWVertexCandidateProxyBuilder : public FWSimpleProxyBuilderTemplate<reco::VertexCompositePtrCandidate>
41 {
42 public:
45 
46  void setItem(const FWEventItem* iItem) override
47  {
49  if (iItem)
50  {
51  iItem->getConfig()->assertParam("Draw Tracks", false);
52  iItem->getConfig()->assertParam("Draw Pseudo Track", false);
53  iItem->getConfig()->assertParam("Draw Ellipse", false);
54  iItem->getConfig()->assertParam("Scale Ellipse",2l, 1l, 10l);
55  iItem->getConfig()->assertParam("Ellipse Color Index", 6l, 0l, (long)context().colorManager()->numberOfLimitedColors());
56  }
57  }
58 
60 
61 private:
62  FWVertexCandidateProxyBuilder(const FWVertexCandidateProxyBuilder&) = delete; // stop default
63  const FWVertexCandidateProxyBuilder& operator=(const FWVertexCandidateProxyBuilder&) = delete; // stop default
64 
66  void build(const reco::VertexCompositePtrCandidate& iData, unsigned int iIndex,TEveElement& oItemHolder, const FWViewContext*) override;
67 
68  void localModelChanges(const FWModelId& iId, TEveElement* iCompound,
69  FWViewType::EType viewType, const FWViewContext* vc) override;
70 
71 };
72 
73 
74 void
75 FWVertexCandidateProxyBuilder::build(const reco::VertexCompositePtrCandidate& iData, unsigned int iIndex, TEveElement& oItemHolder , const FWViewContext*)
76 {
77  const reco::VertexCompositePtrCandidate & v = iData;
78 
79  // marker
80  TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur());
81  TEvePointSet* pointSet = new TEvePointSet();
82  pointSet->SetNextPoint( v.vx(), v.vy(), v.vz() );
83  setupAddElement(pointSet, &oItemHolder);
84 
85 
86  // ellipse
87  if ( item()->getConfig()->value<bool>("Draw Ellipse"))
88  {
89 
90  TEveEllipsoid* eveEllipsoid = new TEveEllipsoid("Ellipsoid", Form("Ellipsoid %d", iIndex));
91 
92  eveEllipsoid->RefPos().Set(v.vx(),v.vy(),v.vz());
93 
95  TMatrixDSym m(3);
96  for(int i=0;i<3;i++)
97  for(int j=0;j<3;j++)
98  {
99  m(i,j) = e(i,j);
100  eveEllipsoid->RefEMtx()(i+1, j+1) = e(i,j);
101  }
102 
103  // external scaling
104  double ellipseScale = 1.;
105  if ( item()->getConfig()->value<long>("Scale Ellipse"))
106  ellipseScale = item()->getConfig()->value<long>("Scale Ellipse");
107 
108  eveEllipsoid->SetScale(ellipseScale);
109 
110  // cache 3D extend used in eval bbox and render 3D
111  TMatrixDEigen eig(m);
112  TVectorD vv ( eig.GetEigenValuesRe());
113  eveEllipsoid->RefExtent3D().Set(sqrt(vv(0))*ellipseScale,sqrt(vv(1))*ellipseScale,sqrt(vv(2))*ellipseScale);
114 
115  eveEllipsoid->SetLineWidth(2);
116  setupAddElement(eveEllipsoid, &oItemHolder);
117  eveEllipsoid->SetMainTransparency(TMath::Min(100, 80 + item()->defaultDisplayProperties().transparency() / 5));
118 
119 
120 
121  Color_t color = item()->getConfig()->value<long>("Ellipse Color Index");
122  // eveEllipsoid->SetFillColor(item()->defaultDisplayProperties().color());
123  // eveEllipsoid->SetLineColor(item()->defaultDisplayProperties().color());
124  eveEllipsoid->SetMainColor(color + context().colorManager()->offsetOfLimitedColors());
125  }
126 
127  // tracks
128  if ( item()->getConfig()->value<bool>("Draw Tracks"))
129  {
130  for(unsigned int j=0;j<v.numberOfDaughters();j++)
131  {
132  const reco::Candidate * c = v.daughter(j);
133  std::cout << c << std::endl;
134  TEveTrack* trk = fireworks::prepareCandidate( *c, context().getTrackPropagator() );
135 
136  trk->SetMainColor(item()->defaultDisplayProperties().color());
137  trk->MakeTrack();
138  setupAddElement(trk, &oItemHolder);
139  }
140  }
141  if ( item()->getConfig()->value<bool>("Draw Pseudo Track"))
142  {
143  TEveRecTrack t;
144  t.fBeta = 1.;
145  t.fV = TEveVector(v.vx(),v.vy(),v.vz());
146  t.fP = TEveVector(-v.p4().px(), -v.p4().py(), -v.p4().pz());
147  t.fSign = 1;
148  TEveTrack* trk = new TEveTrack(&t, context().getTrackPropagator());
149  trk->SetLineStyle(7);
150  trk->MakeTrack();
151  setupAddElement(trk, &oItemHolder);
152 
153  }
154 }
155 
156 void
158  FWViewType::EType viewType, const FWViewContext* vc)
159 {
160  increaseComponentTransparency(iId.index(), iCompound, "Ellipsoid", 80);
161  TEveElement* el = iCompound->FindChild("Ellipsoid");
162  if (el)
163  el->SetMainColor(item()->getConfig()->value<long>("Ellipse Color Index") + context().colorManager()->offsetOfLimitedColors());
164 }
165 
166 //
167 // static member functions
168 //
const fireworks::Context & context() const
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:169
TEveVector & RefPos()
Definition: TEveEllipsoid.h:38
#define REGISTER_PROXYBUILDER_METHODS()
#define REGISTER_FWPROXYBUILDER(_name_, _type_, _purpose_, _view_)
static const int kAllRPZBits
Definition: FWViewType.h:58
double vy() const override
y coordinate of vertex position
void setupAddElement(TEveElement *el, TEveElement *parent, bool set_color=true) const
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
T Min(T a, T b)
Definition: MathUtil.h:39
const FWEventItem * item() const
void SetScale(float x)
Definition: TEveEllipsoid.h:42
size_t numberOfDaughters() const override
number of daughters
void setItem(const FWEventItem *iItem) override
int index() const
Definition: FWModelId.h:49
T sqrt(T t)
Definition: SSEVec.h:18
virtual void setItem(const FWEventItem *iItem)
TEveTrans & RefEMtx()
Definition: TEveEllipsoid.h:40
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
double vz() const override
z coordinate of vertex position
FWGenericParameter< T > * assertParam(const std::string &name, T def)
TEveVector & RefExtent3D()
Definition: TEveEllipsoid.h:39
const Candidate * daughter(size_type) const override
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
const FWVertexCandidateProxyBuilder & operator=(const FWVertexCandidateProxyBuilder &)=delete
TEveTrack * prepareCandidate(const reco::Candidate &track, TEveTrackPropagator *propagator)
void localModelChanges(const FWModelId &iId, TEveElement *iCompound, FWViewType::EType viewType, const FWViewContext *vc) override
void increaseComponentTransparency(unsigned int index, TEveElement *holder, const std::string &name, Char_t transpOffset)
double vx() const override
x coordinate of vertex position