CMS 3D CMS Logo

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

#include <MuonNavigableLayer.h>

Inheritance diagram for MuonNavigableLayer:
NavigableLayer MuonBarrelNavigableLayer MuonForwardNavigableLayer

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. More...
 
virtual DetLayerdetLayer () const =0
 return DetLayer More...
 
bool isInsideOut (const FreeTrajectoryState &fts) const
 
virtual std::vector< const
DetLayer * > 
nextLayers (NavigationDirection dir) const =0
 NavigableLayer interface. More...
 
virtual std::vector< const
DetLayer * > 
nextLayers (const FreeTrajectoryState &fts, PropagationDirection dir) const =0
 NavigableLayer interface. More...
 
virtual void setDetLayer (DetLayer *)=0
 set DetLayer More...
 
MuonEtaRange trackingRange (const FreeTrajectoryState &fts) const
 
- Public Member Functions inherited from NavigableLayer
virtual std::vector< const
DetLayer * > 
compatibleLayers (const FreeTrajectoryState &fts, PropagationDirection timeDirection, int &counter) const
 
virtual ~NavigableLayer ()
 

Detailed Description

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

Author
: Chang Liu - Purdue University Chang.nosp@m..Liu.nosp@m.@cern.nosp@m..ch

Modification:

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

Author
: Chang Liu - Purdue University Chang.nosp@m..Liu.nosp@m.@cern.nosp@m..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 26 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

Definition at line 72 of file MuonNavigableLayer.cc.

References PV3DBase< T, PVType, FrameType >::basicVector(), Basic3DVector< T >::dot(), FreeTrajectoryState::momentum(), and FreeTrajectoryState::position().

72  {
73 
74  return (fts.position().basicVector().dot(fts.momentum().basicVector())>0);
75 
76 }
GlobalVector momentum() const
GlobalPoint position() const
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:56
T dot(const Basic3DVector &rh) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
virtual std::vector<const DetLayer*> MuonNavigableLayer::nextLayers ( NavigationDirection  dir) const
pure virtual
virtual std::vector<const DetLayer*> MuonNavigableLayer::nextLayers ( const FreeTrajectoryState fts,
PropagationDirection  dir 
) const
pure virtual
virtual void MuonNavigableLayer::setDetLayer ( DetLayer )
pure virtual
MuonEtaRange MuonNavigableLayer::trackingRange ( const FreeTrajectoryState fts) const

Definition at line 37 of file MuonNavigableLayer.cc.

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

38 {
39  float z = fts.position().z();
40  float r = fts.position().perp();
41  float eta;
42  if ( z>0 ) eta = -log((tan(atan(r/z)/2.)));
43  else eta = log(-(tan(atan(r/z)/2.)));
44 
45  double theta = atan(r/z);
46 
47  double spread = 5.0*sqrt(fts.curvilinearError().matrix()(2,2))/fabs(sin(theta)); //5*sigma(eta)
48 
49  //C.L.: this spread could be too large to use.
50  // convert it to a smaller one by assuming a virtual radius
51  // that transforms the error on angle to error on z axis.
52  // not accurate, but works!
53 
54  double eta_max = 0;
55 
56  if ( z > 0 ) eta_max = calculateEta(r, z+spread);
57  else eta_max = calculateEta(r, z-spread);
58 
59  spread = std::min(0.07, fabs(eta_max-eta));
60 
61  MuonEtaRange range(eta+spread,eta-spread);
62 
63  spread = 0.07;
64  // special treatment for special geometry in overlap region
65 
66  if ( eta > 1.0 && eta < 1.1 ) range = MuonEtaRange(eta+3.0*spread,eta-spread);
67  if ( eta < -1.0 && eta > -1.1 ) range = MuonEtaRange(eta+spread,eta-3.0*spread);
68 
69  return range;
70 }
T perp() const
Definition: PV3DBase.h:72
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
T eta() const
const CurvilinearTrajectoryError & curvilinearError() const
float float float z
T sqrt(T t)
Definition: SSEVec.h:48
T z() const
Definition: PV3DBase.h:64
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
GlobalPoint position() const
float calculateEta(float r, float z)
const AlgebraicSymMatrix55 & matrix() const