CMS 3D CMS Logo

CylindricalState.h
Go to the documentation of this file.
1 #ifndef CylindricalState_H
2 #define CylindricalState_H
3 
7 #include "RKSmallVector.h"
8 
9 #include <iostream>
10 
24 public:
25  typedef double Scalar;
27 
29 
30  CylindricalState(const LocalPoint& pos, const LocalVector& mom, Scalar ch) {
31  rho_ = pos.perp();
32  Scalar cosphi = pos.x() / rho_;
33  Scalar sinphi = pos.y() / rho_;
34  Scalar p_rho = mom.x() * cosphi + mom.y() * sinphi;
35  Scalar p_phi = -mom.x() * sinphi + mom.y() * cosphi;
36 
37  par_(0) = pos.phi();
38  par_(1) = pos.z();
39  par_(2) = p_phi / (p_rho * rho_);
40  par_(3) = mom.z() / p_rho;
41  par_(4) = ch / mom.mag();
42 
43  prSign_ = p_rho > 0 ? 1.0 : -1.0;
44 
45  std::cout << "CylindricalState built from pos " << pos << " mom " << mom << " charge " << ch << std::endl;
46  std::cout << "p_rho " << p_rho << " p_phi " << p_phi << " dphi_drho " << par_(2) << std::endl;
47  std::cout << "Which results in " << position() << " mom " << momentum() << " charge " << charge()
48  << std::endl;
49  }
50 
51  CylindricalState(Scalar rho, const Vector& par, Scalar prSign) : par_(par), rho_(rho), prSign_(prSign) {}
52 
53  const LocalPoint position() const { return LocalPoint(LocalPoint::Cylindrical(rho_, par_(0), par_(1))); }
54 
55  const LocalVector momentum() const {
56  Scalar cosphi = cos(par_(0));
57  Scalar sinphi = sin(par_(0));
58  Scalar Q = sqrt(1 + rho_ * rho_ * par_(2) * par_(2) + par_(3) * par_(3));
59  Scalar P = std::abs(1. / par_(4));
60  Scalar p_rho = prSign_ * P / Q;
61  Scalar p_phi = rho_ * par_(2) * p_rho;
62  Scalar p_z = par_(3) * p_rho;
63  LocalVector result(p_rho * cosphi - p_phi * sinphi, p_rho * sinphi + p_phi * cosphi, p_z);
64  return result;
65  }
66 
67  const Vector& parameters() const { return par_; }
68 
69  Scalar charge() const { return par_(4) > 0 ? 1 : -1; }
70 
71  Scalar rho() const { return rho_; }
72 
73  double prSign() const { return prSign_; }
74 
75 private:
79 };
80 
81 #endif
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
RKSmallVector< Scalar, 5 > Vector
T z() const
Definition: PV3DBase.h:61
ROOT::Math::SVector< T, N > RKSmallVector
Definition: RKSmallVector.h:13
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
CylindricalState(Scalar rho, const Vector &par, Scalar prSign)
Scalar prSign_
sign of local p_r
Scalar rho() const
double prSign() const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
const LocalPoint position() const
T sqrt(T t)
Definition: SSEVec.h:19
CylindricalState(const LocalPoint &pos, const LocalVector &mom, Scalar ch)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
T mag() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define dso_internal
Definition: Visibility.h:13
std::pair< OmniClusterRef, TrackingParticleRef > P
const LocalVector momentum() const
static int position[264][3]
Definition: ReadPGInfo.cc:289
Scalar charge() const
const Vector & parameters() const