8 #include "CLHEP/Units/GlobalPhysicalConstants.h"
9 #include "CLHEP/Vector/ThreeVector.h"
10 #include <CLHEP/Vector/LorentzVector.h>
22 #ifdef MUPROPAGATOR_DEBUG
23 cout<<
"MuPropagator::Start propagation"<<endl;
29 double px = p.
x();
double py = p.
y();
double pz = p.
z();
30 double aCharge = fts.
charge();
32 double dfcalc,phnext,zdet;
34 double a = p.
perp()/pz;
38 double phiold=x.
phi();
39 if(x.
phi()<0.) phiold=twopi+x.
phi();
41 #ifdef MUPROPAGATOR_DEBUG
42 cout<<
"MuPropagator::xold=" << x<<
" p="<<p<<endl;
43 cout<<
"MuPropagator::Propagate to cylinder="<<surface.
radius()<<
" pt="<<pt<<
44 " line parameters="<<a<<
" "<<b<<endl;
50 phnext = phiold+dfcalc;
52 if(phnext>twopi) phnext = phnext-twopi;
53 if(phnext<0.) phnext = phnext+twopi;
62 #ifdef MUPROPAGATOR_DEBUG
63 cout<<
"almost empty propagator for the moment phnext,zdet="<<phnext<<
" "<<zdet<<endl;
64 cout<<
"New coordinates="<<xnew<<endl;
65 cout<<
"New momentum="<<pnew<<endl;
77 const Plane& surface)
const
98 double dfcalc,phnext,rdet;
100 #ifdef MUPROPAGATOR_DEBUG
101 cout<<
"MuPropagator::Start propagation"<<endl;
107 double px = p.
x();
double py = p.
y();
double pz = p.
z();
108 double aCharge = fts.
charge();
110 double phiold=x.
phi();
111 if(x.
phi()<0.) phiold=twopi+x.
phi();
113 #ifdef MUPROPAGATOR_DEBUG
114 cout<<
"MuPropagator::xold=" << x<<
" p= "<<p<<endl;
117 double a = p.
perp()/pz;
118 double b = x.
perp()-a*x.
z();
120 #ifdef MUPROPAGATOR_DEBUG
121 cout<<
"MuPropagator::Propagate to disk="<<surface.
position().
z()<<
" pz="<<pz<<
122 " line parameters="<<a<<
" "<<b<<endl;
127 dfcalc = aCharge*0.006*fabs(x.
z()-surface.
position().
z())/fabs(pz);
128 phnext = phiold+dfcalc;
130 if(phnext>twopi) phnext = phnext-twopi;
131 if(phnext<0.) phnext = phnext+twopi;
141 #ifdef MUPROPAGATOR_DEBUG
142 cout<<
"MuPropagator::phiold,phnext,zdet,charge,dfcalc="
143 <<phiold<<
" "<<phnext<<
" "<<
144 surface.
position().
z()<<
" "<<aCharge<<
" "<<dfcalc<<endl;
145 cout<<
"New coordinates="<<xnew<<endl;
146 cout<<
"New momentum="<<pnew<<endl;
const MagneticField * field
const GlobalTrajectoryParameters & parameters() const
TrajectoryStateOnSurface propagate(const FreeTrajectoryState &fts, const Cylinder &cylin) const
Sin< T >::type sin(const T &t)
Geom::Phi< T > phi() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
TrackCharge charge() const
const CurvilinearTrajectoryError & curvilinearError() const
Scalar radius() const
Radius of the cylinder.
GlobalVector momentum() const
Cos< T >::type cos(const T &t)
GlobalPoint position() const
const AlgebraicSymMatrix55 & matrix() const
const PositionType & position() const