CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ForwardMeasurementEstimator.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: EgammaElectronAlgos
4 // Class: ForwardMeasurementEstimator
5 //
13 //
14 // Original Author: Ursula Berthon, Claude Charlot
15 // Created: Mon Mar 27 13:22:06 CEST 2006
16 //
17 //
24 
25 // zero value indicates incompatible ts - hit pair
27  const TrackingRecHit& hit) const {
28  LocalPoint lp = hit.localPosition();
29  GlobalPoint gp = hit.det()->surface().toGlobal( lp);
30  return estimate(ts,gp);
31 }
32 
33 std::pair<bool,double> ForwardMeasurementEstimator::estimate( const TrajectoryStateOnSurface& ts, const GlobalPoint &gp) const {
34 
35  float tsR = ts.globalParameters().position().perp();
36  float rhR = gp.perp();
37  float rDiff = tsR - rhR;
38  float rMin = theRMin;
39  float rMax = theRMax;
40  float myZ = gp.z();
41  if( (std::abs(myZ)> 70.f) & (std::abs(myZ)<170.f)) {
42  rMin = theRMinI;
43  rMax = theRMaxI;
44  }
45  if( rDiff >= rMax || rDiff <= rMin ) return std::pair<bool,double>(false,0.);
46 
47  float tsPhi = ts.globalParameters().position().barePhi();
48  float rhPhi = gp.barePhi();
49 
50  float myPhimin = thePhiMin;
51  float myPhimax = thePhiMax;
52 
53  float phiDiff = tsPhi - rhPhi;
54  if (phiDiff > pi) phiDiff -= twopi;
55  if (phiDiff < -pi) phiDiff += twopi;
56 
57  if ( (phiDiff < myPhimax) & (phiDiff > myPhimin) ) {
58  return std::pair<bool,double>(true,1.);
59  } else {
60  return std::pair<bool,double>(false,0.);
61  }
62 }
63 
64 std::pair<bool,double> ForwardMeasurementEstimator::estimate
65  ( const GlobalPoint& vprim,
66  const TrajectoryStateOnSurface& absolute_ts,
67  const GlobalPoint & absolute_gp ) const
68  {
69  GlobalVector ts = absolute_ts.globalParameters().position() - vprim ;
70  GlobalVector gp = absolute_gp - vprim ;
71 
72  float rhR = gp.perp();
73  float tsR = ts.perp();
74  float rDiff = rhR - tsR;
75  float rMin = theRMin;
76  float rMax = theRMax;
77  float myZ = gp.z();
78  if( (std::abs(myZ)> 70.f) & (std::abs(myZ)<170.f) ) {
79  rMin = theRMinI;
80  rMax = theRMaxI;
81  }
82 
83  if( (rDiff >= rMax) | (rDiff <= rMin) ) return std::pair<bool,double>(false,0.);
84 
85  float tsPhi = ts.barePhi();
86  float rhPhi = gp.barePhi();
87 
88  float myPhimin = thePhiMin;
89  float myPhimax = thePhiMax;
90 
91  float phiDiff = normalized_phi(rhPhi - tsPhi) ;
92 
93  if ( phiDiff < myPhimax && phiDiff > myPhimin )
94  { return std::pair<bool,double>(true,1.) ; }
95  else
96  { return std::pair<bool,double>(false,0.) ; }
97 }
98 
101  const BoundPlane & plane ) const
102  {
103  typedef std::pair<float,float> Range ;
104 
105  GlobalPoint trajPos(ts.globalParameters().position());
106 
107  float r1 = 0.;
108  float r2 = 40.;
109 
110  Range trajRRange(trajPos.perp() - r1, trajPos.perp() + r2);
111  Range trajPhiRange(trajPos.phi() - std::abs(thePhiMin), trajPos.phi() + std::abs(thePhiMax));
112 
113  if(rangesIntersect(trajRRange, plane.rSpan()) &&
114  rangesIntersect(trajPhiRange, plane.phiSpan(), PhiLess()))
115  { return true ; }
116  else
117  { return false ; }
118 }
119 
123  const BoundPlane & plane) const
124  {
125  float nSigmaCut = 3.;
126  if ( ts.hasError())
127  {
128  LocalError le = ts.localError().positionError();
129  return Local2DVector( std::sqrt(le.xx())*nSigmaCut, std::sqrt(le.yy())*nSigmaCut);
130  }
131  else
132  return Local2DVector(999999,999999) ;
133  }
134 
135 
136 
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:106
float xx() const
Definition: LocalError.h:24
T perp() const
Definition: PV3DBase.h:72
Vector2DBase< float, LocalTag > Local2DVector
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
LocalError positionError() const
const Double_t pi
T barePhi() const
Definition: PV3DBase.h:68
PixelRecoRange< float > Range
float yy() const
Definition: LocalError.h:26
const GeomDet * det() const
RealType normalized_phi(RealType phi)
T sqrt(T t)
Definition: SSEVec.h:18
bool rangesIntersect(const Range &a, const Range &b)
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
const LocalTrajectoryError & localError() const
virtual std::pair< bool, double > estimate(const TrajectoryStateOnSurface &ts, const TrackingRecHit &hit) const
MeasurementEstimator::Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const BoundPlane &plane) const
const GlobalTrajectoryParameters & globalParameters() const
volatile std::atomic< bool > shutdown_flag false
virtual LocalPoint localPosition() const =0