35 theHit1 = hits[0]->globalPosition();
36 theHit1 = hits[1]->globalPosition();
40 const std::vector<const TrackingRecHit*>& hits,
44 const auto& field = *fieldESH;
51 int charge = (invPt > 0.) ? 1 : -1;
64 double valPt = (fabs(invPt) > 1.e-4) ? 1. / fabs(invPt) : 1.e4;
66 double eta = asinh(valCotTheta);
92 return builder.
build(pt, phi, cotTheta, tip, zip, chi2, charge, hits, &field);
109 int ieta = int(10 * fabs(eta));
217 return p0 + p1 * fabs(invPt);
227 int ieta = int(10 * fabs(eta));
335 return p0 + p1 * fabs(invPt);
342 return radius - 1. / fabs(curvature);
350 int ieta = int(10 * fabs(eta));
458 return p0 + p1 * fabs(invPt);
465 double rho3 = curv * curv * curv;
466 double r1 = pinner.
perp();
467 double phi1 = r1 * curv / 2 + pinner.
perp2() * r1 * rho3 / 48.;
468 double r2 = pouter.
perp();
469 double phi2 = r2 * curv / 2 + pouter.
perp2() * r2 * rho3 / 48.;
470 double z1 = pinner.
z();
471 double z2 = pouter.
z();
473 return z1 - phi1 / (phi1 - phi2) * (z1 - z2);
481 int ieta = int(10 * fabs(eta));
589 return p0 + p1 * fabs(invPt);
601 param(eta, p1, p2, p3);
603 double dphi =
deltaPhi(phiL1, phi0);
604 if (fabs(dphi) < 0.01) {
607 double q = dphi / 2. / p3;
608 double p = p1 / 3. / p3;
609 double D = q * q + p * p *
p;
610 double u =
pow(-q +
sqrt(D), 1. / 3.);
611 double v = -
pow(q +
sqrt(D), 1. / 3.);
622 int ieta = int(10 * fabs(eta));
730 return p1 + p0 * fabs(invPt);
734 double dphi_min = fabs(
deltaPhi(phi0, phiL1));
737 while (pt_cur < 10000.) {
738 double phi_exp = phi0 +
getBending(1. / pt_cur, eta, charge);
739 double dphi = fabs(
deltaPhi(phi_exp, phiL1));
740 if (dphi < dphi_min) {
746 else if (pt_cur < 20.)
748 else if (pt_cur < 100.)
758 param(eta, p1, p2, p3);
759 return charge * p1 * invPt + charge * p2 * invPt * invPt + charge * p3 * invPt * invPt * invPt;
763 int ieta = int(10 * fabs(eta));
872 return p0 + p1 *
sqr(invPt);
876 int ieta = int(10 * fabs(eta));
1008 while (phi1 >= 2 *
M_PI)
1010 while (phi2 >= 2 *
M_PI)
1016 double dPhi = phi2 - phi1;
double errZip(double invPt, double eta) const
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
double errTip(double invPt, double eta) const
void setPxConstraint(const SeedingHitSet &hits)
double findPt(double phi0, double phiL1, double eta, int charge) const
double valTip(const Circle &c, double curvature) const
const Point & center() const
Geom::Phi< T > phi() const
static double getBendingError(double invPt, double eta)
T curvature(T InversePt, const MagneticField &field)
double valPhi(const Circle &c, int charge) const
static void param(double eta, double &p1, double &p2, double &p3)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
virtual reco::Track * run(const edm::EventSetup &es, const std::vector< const TrackingRecHit * > &hits, const TrackingRegion ®ion) const
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
double valZip(double curvature, const GlobalPoint &p0, const GlobalPoint &p1) const
static double getBending(double invPt, double eta, int charge)
const double phiErrorScale
const double zipErrorScale
edm::ParameterSet theConfig
double deltaPhi(double phi1, double phi2) const
DecomposeProduct< arg, typename Div::arg > D
double valInversePt(double phi0, double phiL1, double eta) const
const double cotThetaErrorScale
T getParameter(std::string const &) const
double errInversePt(double invPt, double eta) const
void setL1Constraint(const L1MuGMTCand &muon)
const double invPtErrorScale
double valCotTheta(const PixelRecoLineRZ &line) const
double errPhi(double invPt, double eta) const
const double tipErrorScale
L1MuonPixelTrackFitter(const edm::ParameterSet &cfg)
Power< A, B >::type pow(const A &a, const B &b)
double errCotTheta(double invPt, double eta) const
int charge() const
get charge (+1 -1)