225 if(trackdirection.
mag2()<FLT_MIN){
237 LocalVector RPHIpositiononGluedendvector=projectedstripmono.second-projectedstripmono.first;
238 double c1=
sin(RPHIpositiononGluedendvector.
phi());
239 double s1=-
cos(RPHIpositiononGluedendvector.
phi());
242 double sigmap12=errormonoRH.uu()*pitch*pitch;
254 StripPosition projectedstripstereo=
project(partnerstripdet,gluedDet,stripstereo,trackdirection);
259 m(0,0)=-(projectedstripmono.second.y()-projectedstripmono.first.y());
m(0,1)=(projectedstripmono.second.x()-projectedstripmono.first.x());
260 m(1,0)=-(projectedstripstereo.second.y()-projectedstripstereo.first.y());
m(1,1)=(projectedstripstereo.second.x()-projectedstripstereo.first.x());
261 c(0)=
m(0,1)*projectedstripmono.first.y()+
m(0,0)*projectedstripmono.first.x();
262 c(1)=
m(1,1)*projectedstripstereo.first.y()+
m(1,0)*projectedstripstereo.first.x();
263 m.Invert(); solution = m *
c;
275 LocalVector stereopositiononGluedendvector=projectedstripstereo.second-projectedstripstereo.first;
276 double c2=
sin(stereopositiononGluedendvector.
phi());
double s2=-
cos(stereopositiononGluedendvector.
phi());
279 double sigmap22=errorstereoRH.uu()*pitch*pitch;
280 double diff=(c1*s2-c2*s1);
281 double invdet2=1/(diff*
diff);
282 float xx=invdet2*(sigmap12*s2*s2+sigmap22*s1*s1);
283 float xy=-invdet2*(sigmap12*c2*s2+sigmap22*c1*s1);
284 float yy=invdet2*(sigmap12*c2*c2+sigmap22*c1*
c1);
289 if(det.subdetId() > 2) {
290 return std::make_unique<FastMatchedTrackerRecHit>(
position,
error, *gluedDet, *monoRH, *stereoRH,stereoHitFirst);
295 throw cms::Exception(
"FastTrackerRecHitMatcher") <<
"Matched Pixel!?";
Point3DBase< Scalar, LocalTag > LocalPoint
LocalError localPositionError() const final
const GeomDetUnit * monoDet() const
virtual const Topology & topology() const
Sin< T >::type sin(const T &t)
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
const Plane & surface() const
The nominal surface of the GeomDet.
ROOT::Math::SMatrix< double, 2, 2, ROOT::Math::MatRepStd< double, 2, 2 > > AlgebraicMatrix22
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
virtual LocalPoint localPosition(float strip) const =0
Cos< T >::type cos(const T &t)
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
StripPosition project(const GeomDetUnit *det, const GluedGeomDet *glueddet, const StripPosition &strip, const LocalVector &trackdirection) const
virtual float localPitch(const LocalPoint &) const =0
std::pair< LocalPoint, LocalPoint > StripPosition
static int position[264][3]
LocalPoint localPosition() const final
DetId geographicalId() const
virtual MeasurementError measurementError(const LocalPoint &, const LocalError &) const =0
ROOT::Math::SVector< double, 2 > AlgebraicVector2
const GeomDetUnit * stereoDet() const