CMS 3D CMS Logo

Public Member Functions

MuonNavigableLayer Class Reference

#include <MuonNavigableLayer.h>

Inheritance diagram for MuonNavigableLayer:
NavigableLayer MuonBarrelNavigableLayer MuonForwardNavigableLayer

List of all members.

Public Member Functions

virtual std::vector< const
DetLayer * > 
compatibleLayers (NavigationDirection dir) const =0
virtual std::vector< const
DetLayer * > 
compatibleLayers (const FreeTrajectoryState &fts, PropagationDirection dir) const =0
 NavigableLayer interface.
virtual DetLayerdetLayer () const =0
 return DetLayer
bool isInsideOut (const FreeTrajectoryState &fts) const
virtual std::vector< const
DetLayer * > 
nextLayers (const FreeTrajectoryState &fts, PropagationDirection dir) const =0
 NavigableLayer interface.
virtual std::vector< const
DetLayer * > 
nextLayers (NavigationDirection dir) const =0
 NavigableLayer interface.
virtual void setDetLayer (DetLayer *)=0
 set DetLayer
MuonEtaRange trackingRange (const FreeTrajectoryState &fts) const

Detailed Description

base class for MuonBarrelNavigableLayer and MuonForwardNavigable. trackingRange defines an MuonEtaRange for an FTS, which is used for search compatible DetLayers.

Date:
2007/01/29 16:24:17
Revision:
1.8
Author:
: Chang Liu - Purdue University <Chang.Liu@cern.ch>

Modification:

base class for MuonBarrelNavigableLayer and MuonForwardNavigableLayer. trackingRange defines an MuonEtaRange for an FTS, which is used for searching compatible DetLayers.

Date:
2007/01/29 16:25:21
Revision:
1.9
Author:
: Chang Liu - Purdue University <Chang.Liu@cern.ch> with contributions from: R. Bellan - INFN Torino

code of trackingRange is from MuonGlobalNavigation in ORCA whose author is Stefano Lacaprara - INFN Padova Modification:

Definition at line 28 of file MuonNavigableLayer.h.


Member Function Documentation

virtual std::vector<const DetLayer*> MuonNavigableLayer::compatibleLayers ( NavigationDirection  dir) const [pure virtual]
virtual std::vector<const DetLayer*> MuonNavigableLayer::compatibleLayers ( const FreeTrajectoryState fts,
PropagationDirection  dir 
) const [pure virtual]

NavigableLayer interface.

Reimplemented from NavigableLayer.

Implemented in MuonBarrelNavigableLayer, and MuonForwardNavigableLayer.

virtual DetLayer* MuonNavigableLayer::detLayer ( ) const [pure virtual]
bool MuonNavigableLayer::isInsideOut ( const FreeTrajectoryState fts) const
virtual std::vector<const DetLayer*> MuonNavigableLayer::nextLayers ( const FreeTrajectoryState fts,
PropagationDirection  dir 
) const [pure virtual]
virtual std::vector<const DetLayer*> MuonNavigableLayer::nextLayers ( NavigationDirection  dir) const [pure virtual]
virtual void MuonNavigableLayer::setDetLayer ( DetLayer ) [pure virtual]
MuonEtaRange MuonNavigableLayer::trackingRange ( const FreeTrajectoryState fts) const

Definition at line 39 of file MuonNavigableLayer.cc.

References calculateEta(), FreeTrajectoryState::curvilinearError(), eta(), funct::log(), CurvilinearTrajectoryError::matrix(), min, PV3DBase< T, PVType, FrameType >::perp(), FreeTrajectoryState::position(), csvReporter::r, funct::sin(), mathSSE::sqrt(), funct::tan(), theta(), PV3DBase< T, PVType, FrameType >::z(), and z.

{  
  float z = fts.position().z();
  float r = fts.position().perp();
  float eta;
  if ( z>0 ) eta = -log((tan(atan(r/z)/2.)));
  else eta = log(-(tan(atan(r/z)/2.)));

  double theta = atan(r/z);

  double spread = 5.0*sqrt(fts.curvilinearError().matrix()(2,2))/fabs(sin(theta));  //5*sigma(eta)

  //C.L.: this spread could be too large to use.
  // convert it to a smaller one by assuming a virtual radius
  // that transforms the error on angle to error on z axis.
  // not accurate, but works!

  double eta_max = 0;

  if ( z > 0 ) eta_max = calculateEta(r, z+spread); 
  else eta_max = calculateEta(r, z-spread); 

  spread = std::min(0.07, fabs(eta_max-eta));

  MuonEtaRange range(eta+spread,eta-spread);

  spread = 0.07; 
  // special treatment for special geometry in overlap region
  
  if ( eta > 1.0 && eta < 1.1 )  range = MuonEtaRange(eta+3.0*spread,eta-spread);
  if ( eta < -1.0 && eta > -1.1 ) range = MuonEtaRange(eta+spread,eta-3.0*spread);

  return range;
}