2 #ifndef BASEPARTICLEPROPAGATOR_H
3 #define BASEPARTICLEPROPAGATOR_H
93 double r,
double z,
double B);
95 double r,
double z,
double B,
double t);
151 inline double c_light()
const {
return 299.792458; }
177 return Z() - Pz() *
std::sqrt( ((
X()-x0)*(
X()-x0) + (
Y()-y0)*(
Y()-y0) ) / Perp2());
201 return Px() == 0.0 && Py() == 0.0 ? 0.0 : std::atan2(Py(),Px());
244 return xC == 0.0 && yC == 0.0 ? 0.0 : std::atan2(yC,xC);
249 return xC == 0.0 && yC == 0.0 ? 0.0 : std::atan2(yC,xC);
281 return ( fabs(fabs(
Z())-
zCyl) < 0.00001 &&
R2() <=
rCyl2 );
285 return ( fabs(fabs(
Z())-
zCyl) < 0.00001 && rPos2 <=
rCyl2 );
bool hasDecayed() const
Has the particle decayed while propagated ?
bool onSurface(double rPos2) const
double zCyl
Half-height of the cylinder (centred at 0,0,0) to which propagation is done.
double helixRadius() const
The helix Radius.
double zImpactParameter(double x0=0, double y0=0.) const
Longitudinal impact parameter.
double helixCentrePhi() const
The azimuth if the vector joining the cylinder and the helix axes.
bool propagateToPreshowerLayer1(bool first=true)
bool inside(double rPos2) const
double rCyl
Simulated particle that is to be resp has been propagated.
bool propagateToNominalVertex(const XYZTLorentzVector &hit2=XYZTLorentzVector(0., 0., 0., 0.))
void init()
Initialize internal switches and quantities.
void increaseRCyl(double delta)
Just an internal trick.
double z() const
z of vertex
bool firstLoop
Do only the first half-loop.
int success
0:propagation still be done, 1:reached 'barrel', 2:reached 'endcaps'
double properTime
The proper time of the particle.
Sin< T >::type sin(const T &t)
BaseParticlePropagator()
Default c'tor.
int getSuccess() const
Has propagation been performed and was barrel or endcap reached ?
bool propagateToBeamCylinder(const XYZTLorentzVector &v, double radius=0.)
void setPropagationConditions(double r, double z, bool firstLoop=true)
Set the propagation characteristics (rCyl, zCyl and first loop only)
void setMagneticField(double b)
Set the magnetic field.
double helixCentrePhi(double xC, double yC) const
double c_light() const
The speed of light in mm/ns (!) without clhep (yeaaahhh!)
double R2() const
vertex radius**2
bool propagateToEcal(bool first=true)
bool propagateToClosestApproach(double x0=0., double y0=0, bool first=true)
double helixCentreX() const
The x coordinate of the helix axis.
bool propagateToVFcalEntrance(bool first=true)
double helixCentreDistToAxis() const
The distance between the cylinder and the helix axes.
double t() const
vertex time
void setDebug()
Set the debug leve;.
double properDecayTime
The proper decay time of the particle.
bool propagateToHcalExit(bool first=true)
Cos< T >::type cos(const T &t)
double Y() const
y of vertex
double Z() const
z of vertex
bool onEndcap(double rPos2) const
double charge() const
get the MEASURED charge
double helixCentreY(double radius, double phi) const
int propDir
The propagation direction.
bool propagateToEcalEntrance(bool first=true)
double helixCentreX(double radius, double phi) const
bool onEndcap() const
Is the vertex already on the cylinder endcap ?
bool decayed
The particle decayed while propagated !
BaseParticlePropagator propagated() const
double helixCentreY() const
The y coordinate of the helix axis.
bool inside() const
Is the vertex inside the cylinder ? (stricly inside : true)
bool onSurface() const
Is the vertex already on the cylinder surface ?
double r() const
vertex radius
double X() const
x of vertex
bool debug
The debug level.
double helixStartPhi() const
The azimuth of the momentum at the vertex.
double getMagneticField() const
Get the magnetic field.
bool propagateToHcalEntrance(bool first=true)
double helixRadius(double pT) const
void setProperDecayTime(double t)
Set the proper decay time.
double bField
Magnetic field in the cylinder, oriented along the Z axis.
bool onFiducial() const
Is the vertex on some material ?
bool onBarrel(double rPos2) const
bool onBarrel() const
Is the vertex already on the cylinder barrel ?
bool propagateToPreshowerLayer2(bool first=true)
double helixCentreDistToAxis(double xC, double yC) const
double xyImpactParameter(double x0=0., double y0=0.) const
Transverse impact parameter.
bool fiducial
The particle traverses some real material.
math::XYZTLorentzVector XYZTLorentzVector