42 float dir = (points[1].x() - points[0].x()) * (points[2].
y() - points[1].y()) -
43 (points[1].
y() - points[0].y()) * (points[2].
x() - points[1].x());
53 return (dir > 0) ? -1 : 1;
58 float dz = outer.
z() - inner.
z();
62 inline float phi(
float xC,
float yC,
int charge) {
return (charge > 0) ? std::atan2(xC, -yC) : std::atan2(-xC, yC); }
72 constexpr
float o24 = 1.f / 24.f;
73 float rho2 = curv * curv;
74 float r1s = (pinner - pca).
perp2();
75 double phi1 =
std::sqrt(r1s) * (curv * 0.5f) * (1.
f + r1s * (rho2 * o24));
76 float r2s = (pouter - pca).
perp2();
77 double phi2 =
std::sqrt(r2s) * (curv * 0.5f) * (1.
f + r2s * (rho2 * o24));
78 double z1 = pinner.
z();
79 double z2 = pouter.
z();
81 if (fabs(curv) > 1.
e-5)
82 return z1 - phi1 / (phi1 - phi2) * (z1 - z2);
85 return z1 -
std::sqrt(r1s) * (z2 - z1) / dr;
94 : theTopo(ttopo), theField(field), thescaleErrorsForBPix1(scaleErrorsForBPix1), thescaleFactor(scaleFactor) {}
98 std::unique_ptr<reco::Track>
ret;
100 int nhits = hits.size();
109 auto const& recHit = hits[
i];
111 errors[
i] = recHit->globalPositionError();
112 isBarrel[
i] = recHit->detUnit()->type().isBarrel();
118 float valPhi, valTip, valPt;
120 int iCharge =
charge(points);
125 valPt = (invPt > 1.e-4
f) ? 1.
f / invPt : 1.e4f;
128 valPhi =
phi(center.
x(), center.
y(), iCharge);
133 valTip = -points[0].x() *
sin(valPhi) + points[0].y() *
cos(valPhi);
136 float valCotTheta = cotTheta(points[0], points[1]);
137 float valEta = std::asinh(valCotTheta);
138 float valZip =
zip(valTip, valPhi, curvature, points[0], points[1]);
145 float errFactor = 1.;
151 float errValPt = errFactor * param.
errPt();
152 float errValCot = errFactor * param.
errCot();
153 float errValTip = errFactor * param.
errTip();
154 float errValPhi = errFactor * param.
errPhi();
155 float errValZip = errFactor * param.
errZip();
160 chi2 = rzLine.
chi2();
170 ret.reset(builder.
build(pt, phi, cotTheta, tip, zip, chi2, iCharge, hits,
theField, region.
origin()));
const MagneticField * theField
tuple ret
prodAgent to be discontinued
GlobalPoint const & origin() const
Sin< T >::type sin(const T &t)
Global3DPoint GlobalPoint
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
T curvature(T InversePt, const MagneticField &field)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
Cos< T >::type cos(const T &t)
reco::Track * build(const Measurement1D &pt, const Measurement1D &phi, const Measurement1D &cotTheta, const Measurement1D &tip, const Measurement1D &zip, float chi2, int charge, const std::vector< const TrackingRecHit * > &hits, const MagneticField *mf, const GlobalPoint &reference=GlobalPoint(0, 0, 0)) const
float inverseBzAtOriginInGeV() const
The inverse of field z component for this map in GeV.
Abs< T >::type abs(const T &t)
uint16_t const *__restrict__ x
std::unique_ptr< reco::Track > run(const std::vector< const TrackingRecHit * > &hits, const TrackingRegion ®ion) const override
T inversePt(T curvature, const MagneticField &field)
T y() const
Cartesian y coordinate.
unsigned int pxbLayer(const DetId &id) const
constexpr float fhalfPi()
static constexpr float d0
T perp2() const
Squared magnitude of transverse component.
tuple scaleErrorsForBPix1
const TrackerTopology * theTopo
#define declareDynArray(T, n, x)
const bool thescaleErrorsForBPix1
const BasicVectorType & basicVector() const
PixelFitterByHelixProjections(const TrackerTopology *ttopo, const MagneticField *field, bool scaleErrorsForBPix1, float scaleFactor)
T x() const
Cartesian x coordinate.
const float thescaleFactor