CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FWElectronProxyBuilder.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Electrons
4 // Class : FWElectronProxyBuilder
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Chris Jones
10 // Created: Tue Dec 2 14:17:03 EST 2008
11 // $Id: FWElectronProxyBuilder.cc,v 1.19 2010/11/11 20:25:28 amraktad Exp $
12 //
13 #include "TEveCompound.h"
14 #include "TEveTrack.h"
15 #include "TEveScalableStraightLineSet.h"
16 
20 
24 
27 
29 //
30 // 3D and RPZ proxy builder with shared track list
31 //
33 
34 class FWElectronProxyBuilder : public FWSimpleProxyBuilderTemplate<reco::GsfElectron> {
35 
36 public:
38  virtual ~FWElectronProxyBuilder();
39 
40  virtual bool haveSingleProduct() const { return false; }
41  virtual void cleanLocal();
42 
44 
45 private:
46  FWElectronProxyBuilder( const FWElectronProxyBuilder& ); // stop default
47  const FWElectronProxyBuilder& operator=( const FWElectronProxyBuilder& ); // stop default
48 
49  virtual void buildViewType(const reco::GsfElectron& iData, unsigned int iIndex, TEveElement& oItemHolder, FWViewType::EType type , const FWViewContext*);
50 
51  TEveElementList* requestCommon();
52 
53  TEveElementList* m_common;
54 };
55 
56 
58  m_common(0)
59 {
60  m_common = new TEveElementList( "common electron scene" );
61  m_common->IncDenyDestroy();
62 }
63 
65 {
66  m_common->DecDenyDestroy();
67 }
68 
69 TEveElementList*
71 {
72  if( m_common->HasChildren() == false )
73  {
74  for (int i = 0; i < static_cast<int>(item()->size()); ++i)
75  {
77 
78  TEveTrack* track(0);
79  if( electron.gsfTrack().isAvailable() )
80  track = fireworks::prepareTrack( *electron.gsfTrack(),
82  else
83  track = fireworks::prepareCandidate( electron,
84  context().getTrackPropagator());
85  track->MakeTrack();
86  setupElement( track );
87  m_common->AddElement( track );
88  }
89  }
90  return m_common;
91 }
92 
93 void
95 {
96  m_common->DestroyElements();
97 }
98 
99 void
100 FWElectronProxyBuilder::buildViewType(const reco::GsfElectron& electron, unsigned int iIndex, TEveElement& oItemHolder, FWViewType::EType type , const FWViewContext*)
101 {
102  TEveElementList* tracks = requestCommon();
103  TEveElement::List_i trkIt = tracks->BeginChildren();
104  std::advance(trkIt, iIndex);
105  setupAddElement(*trkIt, &oItemHolder );
106 
107  if( type == FWViewType::kRhoPhi || type == FWViewType::kRhoPhiPF )
109  electron.superCluster(),
110  electron.phi(),
111  oItemHolder );
112  else if( type == FWViewType::kRhoZ )
114  electron.superCluster(),
115  electron.phi(),
116  oItemHolder );
117 }
118 
120 
121 
122 
124 //
125 // GLIMPSE specific proxy builder
126 //
128 
130 public:
133 
135 
136 private:
138 
140 
141  virtual void build(const reco::GsfElectron& iData, unsigned int iIndex, TEveElement& oItemHolder, const FWViewContext*);
142 };
143 
144 void
145 FWElectronGlimpseProxyBuilder::build( const reco::GsfElectron& iData, unsigned int iIndex,TEveElement& oItemHolder , const FWViewContext*)
146 {
147  TEveScalableStraightLineSet* marker = new TEveScalableStraightLineSet("", "");
148  marker->SetLineWidth(2);
149  fireworks::addStraightLineSegment( marker, &iData, 1.0 );
150  setupAddElement(marker, &oItemHolder);
151  //add to scaler at end so that it can scale the line after all ends have been added
152  // FIXME: It's not a part of a standard FWSimpleProxyBuilderTemplate: the scaler is not set!
153 // assert(scaler());
154 // scaler()->addElement(marker);
155 }
type
Definition: HCALResponse.h:22
const fireworks::Context & context() const
int i
Definition: DBlmapReader.cc:9
#define REGISTER_PROXYBUILDER_METHODS()
#define REGISTER_FWPROXYBUILDER(_name_, _type_, _purpose_, _view_)
static const int kAllRPZBits
Definition: FWViewType.h:59
TEveTrack * prepareTrack(const reco::Track &track, TEveTrackPropagator *propagator, const std::vector< TEveVector > &extraRefPoints=std::vector< TEveVector >())
Definition: TrackUtils.cc:70
void setupAddElement(TEveElement *el, TEveElement *parent, bool set_color=true) const
virtual bool haveSingleProduct() const
bool isAvailable() const
Definition: Ref.h:276
TEveTrackPropagator * getTrackPropagator() const
Definition: Context.h:74
const FWEventItem * item() const
static const int kAll3DBits
Definition: FWViewType.h:60
const FWElectronGlimpseProxyBuilder & operator=(const FWElectronGlimpseProxyBuilder &)
virtual void buildViewType(const reco::GsfElectron &iData, unsigned int iIndex, TEveElement &oItemHolder, FWViewType::EType type, const FWViewContext *)
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:168
void addStraightLineSegment(TEveStraightLineSet *marker, reco::Candidate const *cand, double scale_factor=2)
bool makeRhoZSuperCluster(FWProxyBuilderBase *, const reco::SuperClusterRef &iCluster, float iPhi, TEveElement &oItemHolder)
TEveElementList * requestCommon()
size_t size() const
Definition: FWEventItem.cc:548
tuple tracks
Definition: testEve_cfg.py:39
bool makeRhoPhiSuperCluster(FWProxyBuilderBase *, const reco::SuperClusterRef &iCluster, float iPhi, TEveElement &oItemHolder)
const FWElectronProxyBuilder & operator=(const FWElectronProxyBuilder &)
TEveTrack * prepareCandidate(const reco::Candidate &track, TEveTrackPropagator *propagator)
virtual double phi() const
momentum azimuthal angle
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:169
void setupElement(TEveElement *el, bool color=true) const