00001 #ifndef _CR_ENERGYLOSSUPDATOR_H_
00002 #define _CR_ENERGYLOSSUPDATOR_H_
00003
00017 #include "TrackingTools/MaterialEffects/interface/MaterialEffectsUpdator.h"
00018 #include "DataFormats/GeometryVector/interface/LocalVector.h"
00019
00020 class MediumProperties;
00021
00022 class EnergyLossUpdator : public MaterialEffectsUpdator
00023 {
00024 public:
00025 #ifndef CMS_NO_RELAXED_RETURN_TYPE
00026 virtual EnergyLossUpdator* clone() const
00027 #else
00028 virtual MaterialEffectsUpdator* clone() const
00029 #endif
00030 {
00031 return new EnergyLossUpdator(*this);
00032 }
00033
00034 public:
00035 EnergyLossUpdator( float mass ) :
00036 MaterialEffectsUpdator(mass),
00037 theLastDz(0.),
00038 theLastP(0.),
00039 theLastPropDir(alongMomentum),
00040 theLastXi(0.) {}
00041
00042 private:
00043
00044 virtual void compute (const TrajectoryStateOnSurface&,
00045 const PropagationDirection) const;
00046
00047 void computeBetheBloch (const LocalVector&, const MediumProperties&) const;
00048
00049 void computeElectrons (const LocalVector&, const MediumProperties&,
00050 const PropagationDirection) const;
00051
00052 protected:
00053
00054 virtual bool newArguments (const TrajectoryStateOnSurface&,
00055 const PropagationDirection) const;
00056
00057 virtual void storeArguments (const TrajectoryStateOnSurface&,
00058 const PropagationDirection) const;
00059
00060 private:
00061 mutable float theLastDz;
00062 mutable float theLastP;
00063 mutable PropagationDirection theLastPropDir;
00064 mutable float theLastRl;
00065 mutable float theLastXi;
00066 };
00067
00068 #endif