CMS 3D CMS Logo

List of all members | Public Member Functions
MuonNavigableLayer Class Referenceabstract

#include <MuonNavigableLayer.h>

Inheritance diagram for MuonNavigableLayer:
NavigableLayer MuonBarrelNavigableLayer MuonForwardNavigableLayer

Public Member Functions

std::vector< const DetLayer * > compatibleLayers (NavigationDirection dir) const override=0
 
std::vector< const DetLayer * > compatibleLayers (const FreeTrajectoryState &fts, PropagationDirection dir) const override=0
 NavigableLayer interface. More...
 
const DetLayerdetLayer () const override=0
 return DetLayer More...
 
bool isInsideOut (const FreeTrajectoryState &fts) const
 
std::vector< const DetLayer * > nextLayers (NavigationDirection dir) const override=0
 NavigableLayer interface. More...
 
std::vector< const DetLayer * > nextLayers (const FreeTrajectoryState &fts, PropagationDirection dir) const override=0
 NavigableLayer interface. More...
 
void setDetLayer (const DetLayer *) override=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
 
void setSchool (NavigationSchool const *sh)
 
virtual ~NavigableLayer ()
 

Additional Inherited Members

- Protected Attributes inherited from NavigableLayer
NavigationSchool const * school = nullptr
 

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 25 of file MuonNavigableLayer.h.

Member Function Documentation

◆ compatibleLayers() [1/2]

std::vector<const DetLayer*> MuonNavigableLayer::compatibleLayers ( NavigationDirection  dir) const
overridepure virtual

◆ compatibleLayers() [2/2]

std::vector<const DetLayer*> MuonNavigableLayer::compatibleLayers ( const FreeTrajectoryState fts,
PropagationDirection  dir 
) const
overridepure virtual

NavigableLayer interface.

Reimplemented from NavigableLayer.

Implemented in MuonBarrelNavigableLayer, and MuonForwardNavigableLayer.

◆ detLayer()

const DetLayer* MuonNavigableLayer::detLayer ( ) const
overridepure virtual

◆ isInsideOut()

bool MuonNavigableLayer::isInsideOut ( const FreeTrajectoryState fts) const

Definition at line 76 of file MuonNavigableLayer.cc.

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

76  {
77  return (fts.position().basicVector().dot(fts.momentum().basicVector()) > 0);
78 }
GlobalPoint position() const
GlobalVector momentum() const
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:53
T dot(const Basic3DVector &rh) const
Scalar product, or "dot" product, with a vector of same type.

◆ nextLayers() [1/2]

std::vector<const DetLayer*> MuonNavigableLayer::nextLayers ( NavigationDirection  dir) const
overridepure virtual

◆ nextLayers() [2/2]

std::vector<const DetLayer*> MuonNavigableLayer::nextLayers ( const FreeTrajectoryState fts,
PropagationDirection  dir 
) const
overridepure virtual

◆ setDetLayer()

void MuonNavigableLayer::setDetLayer ( const DetLayer )
overridepure virtual

◆ trackingRange()

MuonEtaRange MuonNavigableLayer::trackingRange ( const FreeTrajectoryState fts) const

Definition at line 36 of file MuonNavigableLayer.cc.

References calculateEta(), FreeTrajectoryState::curvilinearError(), PVValHelper::eta, egammaIdentification::eta_max, dqm-mbProfile::log, CurvilinearTrajectoryError::matrix(), SiStripPI::min, PV3DBase< T, PVType, FrameType >::perp(), FreeTrajectoryState::position(), FastTimerService_cff::range, funct::sin(), mathSSE::sqrt(), funct::tan(), theta(), and PV3DBase< T, PVType, FrameType >::z().

36  {
37  float z = fts.position().z();
38  float r = fts.position().perp();
39  float eta;
40  if (z > 0)
41  eta = -log((tan(atan(r / z) / 2.)));
42  else
43  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)
57  eta_max = calculateEta(r, z + spread);
58  else
59  eta_max = calculateEta(r, z - spread);
60 
61  spread = std::min(0.07, fabs(eta_max - eta));
62 
63  MuonEtaRange range(eta + spread, eta - spread);
64 
65  spread = 0.07;
66  // special treatment for special geometry in overlap region
67 
68  if (eta > 1.0 && eta < 1.1)
69  range = MuonEtaRange(eta + 3.0 * spread, eta - spread);
70  if (eta < -1.0 && eta > -1.1)
71  range = MuonEtaRange(eta + spread, eta - 3.0 * spread);
72 
73  return range;
74 }
T perp() const
Definition: PV3DBase.h:69
const CurvilinearTrajectoryError & curvilinearError() const
T z() const
Definition: PV3DBase.h:61
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
GlobalPoint position() const
T sqrt(T t)
Definition: SSEVec.h:23
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
const AlgebraicSymMatrix55 & matrix() const
float calculateEta(float r, float z)
Geom::Theta< T > theta() const