#include <MuonNavigableLayer.h>
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 DetLayer * | detLayer () 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 |
base class for MuonBarrelNavigableLayer and MuonForwardNavigable. trackingRange defines an MuonEtaRange for an FTS, which is used for search compatible DetLayers.
Modification:
base class for MuonBarrelNavigableLayer and MuonForwardNavigableLayer. trackingRange defines an MuonEtaRange for an FTS, which is used for searching compatible DetLayers.
code of trackingRange is from MuonGlobalNavigation in ORCA whose author is Stefano Lacaprara - INFN Padova Modification:
Definition at line 28 of file MuonNavigableLayer.h.
virtual std::vector<const DetLayer*> MuonNavigableLayer::compatibleLayers | ( | NavigationDirection | dir | ) | const [pure virtual] |
Implements NavigableLayer.
Implemented in MuonBarrelNavigableLayer, and MuonForwardNavigableLayer.
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] |
return DetLayer
Implements NavigableLayer.
Implemented in MuonBarrelNavigableLayer, and MuonForwardNavigableLayer.
bool MuonNavigableLayer::isInsideOut | ( | const FreeTrajectoryState & | fts | ) | const |
Definition at line 74 of file MuonNavigableLayer.cc.
References PV3DBase< T, PVType, FrameType >::basicVector(), FreeTrajectoryState::momentum(), and FreeTrajectoryState::position().
{ return (fts.position().basicVector().dot(fts.momentum().basicVector())>0); }
virtual std::vector<const DetLayer*> MuonNavigableLayer::nextLayers | ( | const FreeTrajectoryState & | fts, |
PropagationDirection | dir | ||
) | const [pure virtual] |
NavigableLayer interface.
Implements NavigableLayer.
Implemented in MuonBarrelNavigableLayer, and MuonForwardNavigableLayer.
virtual std::vector<const DetLayer*> MuonNavigableLayer::nextLayers | ( | NavigationDirection | dir | ) | const [pure virtual] |
NavigableLayer interface.
Implements NavigableLayer.
Implemented in MuonBarrelNavigableLayer, and MuonForwardNavigableLayer.
virtual void MuonNavigableLayer::setDetLayer | ( | DetLayer * | ) | [pure virtual] |
set DetLayer
Implements NavigableLayer.
Implemented in MuonBarrelNavigableLayer, and MuonForwardNavigableLayer.
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; }