CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonNavigableLayer.cc
Go to the documentation of this file.
1 
20 
21 /* Collaborating Class Header */
27 /* C++ Headers */
28 #include <algorithm>
29 
30 
31 using namespace std;
32 
33 extern float calculateEta(float r, float z) {
34  if ( z > 0 ) return -log((tan(atan(r/z)/2.)));
35  return log(-(tan(atan(r/z)/2.)));
36 
37 }
38 
40 {
41  float z = fts.position().z();
42  float r = fts.position().perp();
43  float eta;
44  if ( z>0 ) eta = -log((tan(atan(r/z)/2.)));
45  else eta = log(-(tan(atan(r/z)/2.)));
46 
47  double theta = atan(r/z);
48 
49  double spread = 5.0*sqrt(fts.curvilinearError().matrix()(2,2))/fabs(sin(theta)); //5*sigma(eta)
50 
51  //C.L.: this spread could be too large to use.
52  // convert it to a smaller one by assuming a virtual radius
53  // that transforms the error on angle to error on z axis.
54  // not accurate, but works!
55 
56  double eta_max = 0;
57 
58  if ( z > 0 ) eta_max = calculateEta(r, z+spread);
59  else 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 ) range = MuonEtaRange(eta+3.0*spread,eta-spread);
69  if ( eta < -1.0 && eta > -1.1 ) range = MuonEtaRange(eta+spread,eta-3.0*spread);
70 
71  return range;
72 }
73 
75 
76  return (fts.position().basicVector().dot(fts.momentum().basicVector())>0);
77 
78 }
79 
T perp() const
Definition: PV3DBase.h:72
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
#define min(a, b)
Definition: mlp_lapack.h:161
T eta() const
const CurvilinearTrajectoryError & curvilinearError() const
float float float z
bool isInsideOut(const FreeTrajectoryState &fts) const
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
GlobalVector momentum() const
GlobalPoint position() const
float calculateEta(float r, float z)
const AlgebraicSymMatrix55 & matrix() const
MuonEtaRange trackingRange(const FreeTrajectoryState &fts) 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.