CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions
FWMuonBuilder Class Reference

#include <FWMuonBuilder.h>

Public Member Functions

void buildMuon (FWProxyBuilderBase *, const reco::Muon *muon, TEveElement *tList, bool showEndcap, bool onlyTracks=false)
 
 FWMuonBuilder ()
 
virtual ~FWMuonBuilder ()
 

Private Member Functions

void calculateField (const reco::Muon &iData, FWMagField *field)
 
 FWMuonBuilder (const FWMuonBuilder &)
 
const FWMuonBuilderoperator= (const FWMuonBuilder &)
 

Detailed Description

Definition at line 23 of file FWMuonBuilder.h.

Constructor & Destructor Documentation

FWMuonBuilder::FWMuonBuilder ( )

Definition at line 183 of file FWMuonBuilder.cc.

184 {
185 }
FWMuonBuilder::~FWMuonBuilder ( )
virtual

Definition at line 187 of file FWMuonBuilder.cc.

188 {
189 }
FWMuonBuilder::FWMuonBuilder ( const FWMuonBuilder )
private

Member Function Documentation

void FWMuonBuilder::buildMuon ( FWProxyBuilderBase pb,
const reco::Muon muon,
TEveElement *  tList,
bool  showEndcap,
bool  onlyTracks = false 
)

Definition at line 220 of file FWMuonBuilder.cc.

References calculateField(), FWProxyBuilderBase::context(), fireworks::Context::getField(), fireworks::Context::getGeom(), fireworks::Context::getMuonTrackPropagator(), reco::Muon::globalTrack(), reco::Muon::innerTrack(), edm::Ref< C, T, F >::isAvailable(), reco::Muon::isGlobalMuon(), reco::Muon::isMatchesValid(), reco::Muon::isTrackerMuon(), FWProxyBuilderBase::item(), reco::Muon::outerTrack(), fireworks::prepareCandidate(), fireworks::prepareTrack(), and FWProxyBuilderBase::setupAddElement().

Referenced by FWMuonRhoPhiProxyBuilder::build(), and FWMuonProxyBuilder::build().

225 {
226  calculateField( *muon, pb->context().getField());
227 
228  TEveRecTrack recTrack;
229  recTrack.fBeta = 1.;
230 
231  // If we deal with a tracker muon we use the inner track and guide it
232  // through the trajectory points from the reconstruction. Segments
233  // represent hits. Matching between hits and the trajectory shows
234  // how well the inner track matches with the muon hypothesis.
235  //
236  // In other cases we use a global muon track with a few states from
237  // the inner and outer tracks or just the outer track if it's the
238  // only option
239 
240  if( muon->isTrackerMuon() &&
241  muon->innerTrack().isAvailable() &&
242  muon->isMatchesValid() &&
243  !buggyMuon( &*muon, pb->context().getGeom()))
244  {
245  TEveTrack* trk = fireworks::prepareTrack( *(muon->innerTrack()),
247  getRecoTrajectoryPoints( muon, pb->item()));
248  trk->MakeTrack();
249  pb->setupAddElement( trk, tList );
250  if( ! tracksOnly )
251  addMatchInformation( &(*muon), pb, tList, showEndcap );
252  return;
253  }
254 
255  if( muon->isGlobalMuon() &&
256  muon->globalTrack().isAvailable())
257  {
258  std::vector<TEveVector> extraPoints;
259  if( muon->innerTrack().isAvailable() && muon->innerTrack()->extra().isAvailable())
260  {
261  extraPoints.push_back( TEveVector( muon->innerTrack()->innerPosition().x(),
262  muon->innerTrack()->innerPosition().y(),
263  muon->innerTrack()->innerPosition().z()));
264  extraPoints.push_back( TEveVector( muon->innerTrack()->outerPosition().x(),
265  muon->innerTrack()->outerPosition().y(),
266  muon->innerTrack()->outerPosition().z()));
267  }
268  if( muon->outerTrack().isAvailable() && muon->outerTrack()->extra().isAvailable())
269  {
270  extraPoints.push_back( TEveVector( muon->outerTrack()->innerPosition().x(),
271  muon->outerTrack()->innerPosition().y(),
272  muon->outerTrack()->innerPosition().z()));
273  extraPoints.push_back( TEveVector( muon->outerTrack()->outerPosition().x(),
274  muon->outerTrack()->outerPosition().y(),
275  muon->outerTrack()->outerPosition().z()));
276  }
277  TEveTrack* trk = fireworks::prepareTrack( *( muon->globalTrack()),
279  extraPoints );
280  trk->MakeTrack();
281  pb->setupAddElement( trk, tList );
282  return;
283  }
284 
285  if( muon->innerTrack().isAvailable())
286  {
287  TEveTrack* trk = fireworks::prepareTrack( *( muon->innerTrack()), pb->context().getMuonTrackPropagator());
288  trk->MakeTrack();
289  pb->setupAddElement( trk, tList );
290  return;
291  }
292 
293  if( muon->outerTrack().isAvailable())
294  {
295  TEveTrack* trk = fireworks::prepareTrack( *( muon->outerTrack()), pb->context().getMuonTrackPropagator());
296  trk->MakeTrack();
297  pb->setupAddElement( trk, tList );
298  return;
299  }
300 
301  // if got that far it means we have nothing but a candidate
302  // show it anyway.
303  TEveTrack* trk = fireworks::prepareCandidate( *muon, pb->context().getMuonTrackPropagator());
304  trk->MakeTrack();
305  pb->setupAddElement( trk, tList );
306 }
const fireworks::Context & context() const
TEveTrack * prepareTrack(const reco::Track &track, TEveTrackPropagator *propagator, const std::vector< TEveVector > &extraRefPoints=std::vector< TEveVector >())
Definition: TrackUtils.cc:70
virtual TrackRef innerTrack() const
Definition: Muon.h:38
bool isTrackerMuon() const
Definition: Muon.h:149
const FWGeometry * getGeom() const
Definition: Context.h:84
void setupAddElement(TEveElement *el, TEveElement *parent, bool set_color=true) const
bool isGlobalMuon() const
Definition: Muon.h:148
bool isMatchesValid() const
Definition: Muon.h:89
bool isAvailable() const
Definition: Ref.h:275
const FWEventItem * item() const
void calculateField(const reco::Muon &iData, FWMagField *field)
FWMagField * getField() const
Definition: Context.h:78
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
Definition: Muon.h:41
TEveTrackPropagator * getMuonTrackPropagator() const
Definition: Context.h:76
TEveTrack * prepareCandidate(const reco::Candidate &track, TEveTrackPropagator *propagator)
virtual TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector
Definition: Muon.h:44
void FWMuonBuilder::calculateField ( const reco::Muon iData,
FWMagField field 
)
private

Definition at line 197 of file FWMuonBuilder.cc.

References fw::estimate_field(), reco::LeafCandidate::eta(), FWMagField::getSource(), FWMagField::guessField(), FWMagField::guessFieldIsOn(), reco::Muon::innerTrack(), edm::Ref< C, T, F >::isAvailable(), FWMagField::kNone, reco::Muon::outerTrack(), and reco::LeafCandidate::pt().

Referenced by buildMuon().

198 {
199  // if auto field estimation mode, do extra loop over muons.
200  // use both inner and outer track if available
201  if( field->getSource() == FWMagField::kNone )
202  {
203  if( fabs( iData.eta() ) > 2.0 || iData.pt() < 3 ) return;
204  if( iData.innerTrack().isAvailable())
205  {
206  double estimate = fw::estimate_field( *( iData.innerTrack()), true );
207  if( estimate >= 0 ) field->guessField( estimate );
208  }
209  if( iData.outerTrack().isAvailable() )
210  {
211  double estimate = fw::estimate_field( *( iData.outerTrack()));
212  if( estimate >= 0 ) field->guessFieldIsOn( estimate > 0.5 );
213  }
214  }
215 }
virtual TrackRef innerTrack() const
Definition: Muon.h:38
bool isAvailable() const
Definition: Ref.h:275
virtual double eta() const
momentum pseudorapidity
double estimate_field(const reco::Track &track, bool highQuality=false)
void guessField(float estimate) const
Definition: FWMagField.cc:155
ESource getSource() const
Definition: FWMagField.h:34
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
Definition: Muon.h:41
virtual double pt() const
transverse momentum
void guessFieldIsOn(bool guess) const
Definition: FWMagField.cc:148
const FWMuonBuilder& FWMuonBuilder::operator= ( const FWMuonBuilder )
private