CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/FastSimulation/ParticlePropagator/interface/ParticlePropagator.h

Go to the documentation of this file.
00001 /*Emacs: -*- C++ -*- */
00002 #ifndef PARTICLEPROPAGATOR_H
00003 #define PARTICLEPROPAGATOR_H
00004 
00019 // FAMOS Headers
00020 #include "FastSimulation/BaseParticlePropagator/interface/BaseParticlePropagator.h"
00021 
00022 class TrackerLayer;
00023 class FSimTrack;
00024 class RandomEngine;
00025 class MagneticFieldMap;
00026 
00027 class ParticlePropagator : public BaseParticlePropagator {
00028   
00029 public:
00031   ParticlePropagator();
00032 
00036   ParticlePropagator(const RawParticle& myPart, 
00037                      double R, double Z,
00038                      const MagneticFieldMap* aFieldMap,
00039                      const RandomEngine* engine);
00040   
00043   ParticlePropagator(const RawParticle& myPart,
00044                      const MagneticFieldMap* aFieldMap,
00045                      const RandomEngine* engine);
00046 
00049   ParticlePropagator(const XYZTLorentzVector& p, 
00050                      const XYZTLorentzVector& v, 
00051                      float q,
00052                      const MagneticFieldMap* aFieldMap);
00053 
00056   ParticlePropagator(const XYZTLorentzVector& p, 
00057                      const XYZVector& v, float q,
00058                      const MagneticFieldMap* aFieldMap);
00059 
00061   ParticlePropagator(const FSimTrack& simTrack,
00062                      const MagneticFieldMap* aFieldMap,
00063                      const RandomEngine* engine);
00064 
00066   ParticlePropagator(const ParticlePropagator& myPropPart);
00067   //  ParticlePropagator(BaseParticlePropagator myPropPart);
00068   ParticlePropagator(const BaseParticlePropagator &myPropPart,
00069                      const MagneticFieldMap* aFieldMap);
00070 
00072   void initProperDecayTime();
00073 
00076   ParticlePropagator propagated() const;
00077 
00082   bool propagateToClosestApproach(double x0=0., double y0=0., bool first=true);
00083   bool propagateToNominalVertex(const XYZTLorentzVector& hit2=
00084                                       XYZTLorentzVector(0.,0.,0.,0.));
00085 
00087   double fieldMap(double x,double y,double z);
00088   double fieldMap(const TrackerLayer& layer, double coord, int success);
00089  
00090   bool propagateToBoundSurface(const TrackerLayer&);
00091   void setPropagationConditions(const TrackerLayer&, 
00092                                 bool firstLoop=true);
00093 
00094 private:
00095 
00096   const MagneticFieldMap* theFieldMap;
00097   const RandomEngine* random;
00098 
00099 };
00100 
00101 #endif