12 TSCPBuilderNoMaterial::operator() (
const FTS& originalFTS,
15 if (positionEqual(referencePoint, originalFTS.
position()))
16 return constructTSCP(originalFTS, referencePoint);
20 PairBoolFTS newStatePair =
21 createFTSatTransverseImpactPoint(originalFTS, referencePoint);
22 if (newStatePair.first) {
23 return constructTSCP(newStatePair.second, referencePoint);
30 TSCPBuilderNoMaterial::operator() (
const TSOS& originalTSOS,
34 return constructTSCP(*originalTSOS.
freeState(), referencePoint);
38 PairBoolFTS newStatePair =
39 createFTSatTransverseImpactPoint(*originalTSOS.
freeState(), referencePoint);
40 if (newStatePair.first) {
41 return constructTSCP(newStatePair.second, referencePoint);
47 TSCPBuilderNoMaterial::PairBoolFTS
48 TSCPBuilderNoMaterial::createFTSatTransverseImpactPoint(
56 return createFTSatTransverseImpactPointNeutral(originalFTS, referencePoint);
58 return createFTSatTransverseImpactPointCharged(originalFTS, referencePoint);
62 TSCPBuilderNoMaterial::PairBoolFTS
63 TSCPBuilderNoMaterial::createFTSatTransverseImpactPointCharged(
70 double pxOrig = pvecOrig.
x();
71 double pyOrig = pvecOrig.
y();
72 double pzOrig = pvecOrig.
z();
73 double xOrig = xvecOrig.
x();
74 double yOrig = xvecOrig.
y();
75 double zOrig = xvecOrig.
z();
78 double fac = 1./originalFTS.
charge()/
80 GlobalVectorDouble xOrig2Centre = GlobalVectorDouble(fac * pyOrig, -fac * pxOrig, 0.);
81 GlobalVectorDouble xOrigProj = GlobalVectorDouble(xOrig, yOrig, 0.);
82 GlobalVectorDouble xRefProj = GlobalVectorDouble(referencePoint.
x(), referencePoint.
y(), 0.);
83 GlobalVectorDouble deltax = xRefProj-xOrigProj-xOrig2Centre;
84 GlobalVectorDouble ndeltax = deltax.unit();
97 HelixBarrelPlaneCrossingByCircle
101 std::pair<bool,double> propResult = planeCrossing.pathLength(*plane);
102 if ( !propResult.first ) {
103 edm::LogWarning (
"TSCPBuilderNoMaterial") <<
"Propagation to perigee plane failed!";
106 double s = propResult.second;
111 pGen *= pvecOrig.
mag()/pGen.mag();
122 return PairBoolFTS(
true,
127 return PairBoolFTS(
true,
135 TSCPBuilderNoMaterial::PairBoolFTS
136 TSCPBuilderNoMaterial::createFTSatTransverseImpactPointNeutral(
const FTS& originalFTS,
143 double xOrig = xvecOrig.
x();
144 double yOrig = xvecOrig.
y();
145 double zOrig = xvecOrig.
z();
146 double xR = referencePoint.
x();
147 double yR = referencePoint.
y();
149 double s2D = (xR - xOrig) *
cos(phi) + (yR - yOrig) *
sin(phi);
150 double s = s2D /
sin(theta);
151 double xGen = xOrig + s2D*
cos(phi);
152 double yGen = yOrig + s2D*
sin(phi);
153 double zGen = zOrig + s2D/
tan(theta);
165 return PairBoolFTS(
true,
170 return PairBoolFTS(
true,
T y() const
Cartesian y coordinate.
T x() const
Cartesian x coordinate.
const GlobalTrajectoryParameters & parameters() const
const AlgebraicMatrix55 & jacobian() const
Sin< T >::type sin(const T &t)
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
Geom::Theta< T > theta() const
GlobalPoint globalPosition() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
TrackCharge charge() const
const CurvilinearTrajectoryError & curvilinearError() const
Geom::Theta< T > theta() const
GlobalVector inInverseGeV(const GlobalPoint &gp) const
Field value ad specified global point, in 1/Gev.
T z() const
Cartesian z coordinate.
FreeTrajectoryState const * freeState(bool withErrors=true) const
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
GlobalVector momentum() const
GlobalPoint position() const
double transverseCurvature() const
const AlgebraicSymMatrix55 & matrix() const
const MagneticField & magneticField() const
static const G4double kappa
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
Global3DVector GlobalVector