30 float dphi = v32.
phi() - v21.
phi();
35 return (dphi > 0) ? -1 : 1;
41 std::unique_ptr<reco::Track>
TrackFitter::run(
const std::vector<const TrackingRecHit*>& hits,
43 std::unique_ptr<reco::Track>
ret;
45 int nhits = hits.size();
54 for (
auto const& ih : hits) {
55 auto recHit = theTTRecHitBuilder->build(ih);
57 points[
i] = recHit->globalPosition();
58 errors[
i] = recHit->globalPositionError();
59 isBarrel[++
i] = recHit->detUnit()->type().isBarrel();
70 float valPt = (invPt > 1.e-4) ? 1. / invPt : 1.e4;
71 float errPt = 0.055 * valPt + 0.017 * valPt * valPt;
78 float valZip = getZip(valTip, curvature, points[0], points[1]);
80 float valPhi = getPhi(center.
x(), center.
y(),
charge);
82 float valCotTheta = getCotThetaAndUpdateZip(points[0], points[1], 1 / curvature, valPhi, valTip, valZip);
86 getErrTipAndErrZip(valPt, points.back().eta(), errTip, errZip);
88 float errCotTheta = 0.002;
105 ret.reset(builder.
build(pt, phi, cotTheta, tip, zip, chi2, charge, hits, theField));
115 float phi1 = 2 * asin(0.5 * (inner - IP).
perp() / radius);
116 float phi2 = 2 * asin(0.5 * (outer - IP).
perp() / radius);
118 float dr = radius * (phi2 - phi1);
119 float dz = outer.
z() - inner.
z();
122 zip = (inner.
z() * phi2 - outer.
z() * phi1) / (phi2 - phi1);
124 return (fabs(dr) > 1.e-3) ? dz / dr : 0;
132 phiC = atan2(xC, -yC);
134 phiC = atan2(-xC, yC);
142 float rho3 = curv * curv * curv;
145 double phi1 = r1 * curv / 2 + inner.
perp2() * r1 * rho3 / 48.;
148 double phi2 = r2 * curv / 2 + outer.
perp2() * r2 * rho3 / 48.;
150 double z1 = inner.
z();
151 double z2 = outer.
z();
153 return z1 - phi1 / (phi1 - phi2) * (z1 - z2);
158 float coshEta = cosh(eta);
163 float s_ms2 = c_ms * c_ms / (pt *
pt) * coshEta;
165 errTip =
sqrt(s_le * s_le + s_ms2);
172 errZip =
sqrt((s_le * s_le + c_ms * c_ms / (pt * pt)) * coshEta * coshEta * coshEta);
tuple ret
prodAgent to be discontinued
Sin< T >::type sin(const T &t)
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
void getErrTipAndErrZip(float pt, float eta, float &errZip, float &errTip) const
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
T curvature(T InversePt, const MagneticField &field)
float getZip(float d0, float curv, const GlobalPoint &inner, const GlobalPoint &outer) const
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 getCotThetaAndUpdateZip(const GlobalPoint &inner, const GlobalPoint &outer, float radius, float phi, float d0, float &zip) const
T inversePt(T curvature, const MagneticField &field)
T y() const
Cartesian y coordinate.
static constexpr float d0
T perp() const
Magnitude of transverse component.
#define declareDynArray(T, n, x)
float getPhi(float xC, float yC, int charge) const
T x() const
Cartesian x coordinate.
std::unique_ptr< reco::Track > run(const std::vector< const TrackingRecHit * > &hits, const TrackingRegion ®ion) const override