File indexing completed on 2024-04-06 12:11:19
0001
0002 #ifndef PARTICLEPROPAGATOR_H
0003 #define PARTICLEPROPAGATOR_H
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include "CommonTools/BaseParticlePropagator/interface/BaseParticlePropagator.h"
0021 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h"
0022
0023 class TrackerLayer;
0024 class FSimTrack;
0025 class RandomEngineAndDistribution;
0026 class MagneticFieldMap;
0027
0028 class ParticlePropagator : public BaseParticlePropagator {
0029 public:
0030
0031 ParticlePropagator();
0032
0033
0034
0035
0036 ParticlePropagator(const RawParticle& myPart,
0037 double R,
0038 double Z,
0039 const MagneticFieldMap* aFieldMap,
0040 const RandomEngineAndDistribution* engine,
0041 const HepPDT::ParticleDataTable* table);
0042
0043
0044
0045 ParticlePropagator(const RawParticle& myPart,
0046 const MagneticFieldMap* aFieldMap,
0047 const RandomEngineAndDistribution* engine,
0048 const HepPDT::ParticleDataTable* table);
0049
0050
0051
0052 ParticlePropagator(const XYZTLorentzVector& p,
0053 const XYZTLorentzVector& v,
0054 float q,
0055 const MagneticFieldMap* aFieldMap,
0056 const HepPDT::ParticleDataTable* table);
0057
0058
0059
0060 ParticlePropagator(const XYZTLorentzVector& p,
0061 const XYZVector& v,
0062 float q,
0063 const MagneticFieldMap* aFieldMap,
0064 const HepPDT::ParticleDataTable* table);
0065
0066
0067 ParticlePropagator(const FSimTrack& simTrack,
0068 const MagneticFieldMap* aFieldMap,
0069 const RandomEngineAndDistribution* engine,
0070 const HepPDT::ParticleDataTable* table);
0071
0072
0073 ParticlePropagator(const ParticlePropagator& myPropPart);
0074
0075 ParticlePropagator(const BaseParticlePropagator& myPropPart,
0076 const MagneticFieldMap* aFieldMap,
0077 const HepPDT::ParticleDataTable* table);
0078
0079
0080 void initProperDecayTime();
0081
0082
0083
0084 ParticlePropagator propagated() const;
0085
0086
0087
0088
0089
0090 bool propagateToClosestApproach(double x0 = 0., double y0 = 0., bool first = true);
0091 bool propagateToNominalVertex(const XYZTLorentzVector& hit2 = XYZTLorentzVector(0., 0., 0., 0.));
0092
0093
0094 double fieldMap(double x, double y, double z);
0095 double fieldMap(const TrackerLayer& layer, double coord, int success);
0096
0097 bool propagateToBoundSurface(const TrackerLayer&);
0098 void setPropagationConditions(const TrackerLayer&, bool firstLoop = true);
0099
0100 const HepPDT::ParticleDataTable* particleDataTable() const { return theTable; }
0101
0102 private:
0103 const MagneticFieldMap* theFieldMap;
0104 const RandomEngineAndDistribution* random;
0105 const HepPDT::ParticleDataTable* theTable = nullptr;
0106 };
0107
0108 #endif