00001
00002
00003
00004
00005
00006 #ifndef BDSPlanckScatter_h
00007 #define BDSPlanckScatter_h 1
00008
00009 #include "G4ios.hh"
00010 #include "globals.hh"
00011 #include "Randomize.hh"
00012 #include "G4Version.hh"
00013 #if G4VERSION_NUMBER > 899
00014 #include "G4VEnergyLossProcess.hh"
00015 #include "G4LossTableManager.hh"
00016 #else
00017 #include "G4VeEnergyLoss.hh"
00018 #endif
00019 #include "G4Track.hh"
00020 #include "G4Step.hh"
00021 #include "G4Gamma.hh"
00022 #include "G4Electron.hh"
00023 #include "G4Positron.hh"
00024 #include "G4OrderedTable.hh"
00025 #include "G4PhysicsTable.hh"
00026 #include "G4PhysicsLogVector.hh"
00027 #include "BDSComptonEngine.hh"
00028 #include "BDSPlanckEngine.hh"
00029
00030 #if G4VERSION_NUMBER > 899
00031 class BDSPlanckScatter : public G4VEnergyLossProcess
00032 #else
00033 class BDSPlanckScatter : public G4VeEnergyLoss
00034 #endif
00035 {
00036 public:
00037
00038 BDSPlanckScatter();
00039
00040 ~BDSPlanckScatter();
00041 #if G4VERSION_NUMBER > 899
00042 virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*, const G4ParticleDefinition*);
00043 virtual void PrintInfo();
00044 #endif
00045
00046 G4bool IsApplicable(const G4ParticleDefinition&);
00047
00048 G4double GetMeanFreePath(const G4Track& track,
00049 G4double previousStepSize,
00050 G4ForceCondition* condition );
00051
00052 G4VParticleChange *PostStepDoIt(const G4Track& track,
00053 const G4Step& step);
00054
00055 inline void SetTemperature(G4double aTemperature);
00056 inline G4double GetTemperature();
00057
00058 protected:
00059
00060
00061
00062 private:
00063
00064
00065 BDSPlanckScatter & operator=(const BDSPlanckScatter &right);
00066 BDSPlanckScatter(const BDSPlanckScatter&);
00067
00068
00069
00070 private:
00071 G4double itsTemperature;
00072 BDSComptonEngine* itsComptonEngine;
00073 BDSPlanckEngine* itsPlanckEngine;
00074 G4double itsPlanckMeanFreePath;
00075 };
00076 inline G4bool BDSPlanckScatter::IsApplicable(
00077 const G4ParticleDefinition& part)
00078 {
00079 return( (&part == G4Electron::Electron())
00080 ||(&part == G4Positron::Positron()) );
00081 }
00082 inline G4double BDSPlanckScatter::GetMeanFreePath(const G4Track&,
00083 G4double,
00084 G4ForceCondition* ForceCondition)
00085 {
00086 *ForceCondition= NotForced ;
00087 return itsPlanckMeanFreePath;
00088 }
00089
00090
00091 inline void BDSPlanckScatter::SetTemperature(G4double aTemperature)
00092 {itsTemperature=aTemperature;}
00093 inline G4double BDSPlanckScatter::GetTemperature()
00094 {return itsTemperature;}
00095
00096
00097
00098
00099
00100
00101 #endif