CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FreeTrajectoryState.cc
Go to the documentation of this file.
4 
6 
8 
9 #include <cmath>
10 #include<sstream>
11 
12 
14  std::stringstream form;
15  form<< "FreeTrajectoryState: attempt to access errors when none available" <<
16  "\nCurvilinear error valid/values :"<< theCurvilinearError.valid() << "\n"
18  edm::LogWarning("FreeTrajectoryState") << "(was exception) " << form.str();
19 // throw TrajectoryStateException(form.str());
20 }
21 
22 // implementation of non-trivial methods of FreeTrajectoryState
23 
24 // Warning: these methods violate constness
25 
26 // convert curvilinear errors to cartesian
28 
30  const AlgebraicMatrix65& jac = curv2Cart.jacobian();
31 
32  aCartesianError =
33  ROOT::Math::Similarity(jac, theCurvilinearError.matrix());
34 }
35 
36 // convert cartesian errors to curvilinear
38 
40  const AlgebraicMatrix56& jac = cart2Curv.jacobian();
41 
43  ROOT::Math::Similarity(jac, aCartesianError.matrix());
44 
45 }
46 
47 
48 void FreeTrajectoryState::rescaleError(double factor) {
49  if unlikely(!hasError()) return;
50  bool zeroField = (parameters().magneticField().nominalValue()==0);
51  if unlikely(zeroField) theCurvilinearError.zeroFieldScaling(factor*factor);
52  else theCurvilinearError *= (factor*factor);
53 }
54 
55 // check if trajectory can reach given radius
56 
60  double rho = transverseCurvature()*p.perp();
61  double rx = rho*x.x();
62  double ry = rho*x.y();
63  double rr = rho*radius;
64  double ax = p.x()*rx + p.y()*ry;
65  double ay = p.x()*ry - p.y()*rx + p.perp2();
66  double cospsi = (.5*(rx*rx + ry*ry - rr*rr) + ay)/sqrt(ax*ax + ay*ay);
67  return fabs(cospsi) <= 1.;
68 }
69 
70 
71 
72 
73 
74 
75 
T perp() const
Definition: PV3DBase.h:71
ROOT::Math::SMatrix< double, 5, 6, ROOT::Math::MatRepStd< double, 5, 6 > > AlgebraicMatrix56
const GlobalTrajectoryParameters & parameters() const
int nominalValue() const
The nominal field value for this map in kGauss.
Definition: MagneticField.h:57
Definition: DDAxes.h:10
T y() const
Definition: PV3DBase.h:62
const AlgebraicMatrix56 & jacobian() const
CurvilinearTrajectoryError theCurvilinearError
T perp2() const
Definition: PV3DBase.h:70
#define unlikely(x)
Definition: Likely.h:21
GlobalTrajectoryParameters theGlobalParameters
void createCurvilinearError(CartesianTrajectoryError const &aCartesianError) const
T sqrt(T t)
Definition: SSEVec.h:46
GlobalVector momentum() const
const AlgebraicSymMatrix66 & matrix() const
Vector3DBase unit() const
Definition: Vector3DBase.h:57
GlobalPoint position() const
void rescaleError(double factor)
const AlgebraicMatrix65 & jacobian() const
void createCartesianError(CartesianTrajectoryError &aCartesianError) const
bool canReach(double radius) const
double transverseCurvature() const
ROOT::Math::SMatrix< double, 6, 5, ROOT::Math::MatRepStd< double, 6, 5 > > AlgebraicMatrix65
const AlgebraicSymMatrix55 & matrix() const
const MagneticField & magneticField() const
Definition: DDAxes.h:10
T x() const
Definition: PV3DBase.h:61