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 #if G4VERSION > 8
00013 #include "G4VEnergyLossProcess.hh"
00014 #include "G4LossTableManager.hh"
00015 #else
00016 #include "G4VeEnergyLoss.hh"
00017 #endif
00018 #include "G4Track.hh"
00019 #include "G4Step.hh"
00020 #include "G4Gamma.hh"
00021 #include "G4Electron.hh"
00022 #include "G4Positron.hh"
00023 #include "G4OrderedTable.hh"
00024 #include "G4PhysicsTable.hh"
00025 #include "G4PhysicsLogVector.hh"
00026 #include "BDSComptonEngine.hh"
00027 #include "BDSPlanckEngine.hh"
00028
00029 #if G4VERSION > 8
00030 class BDSPlanckScatter : public G4VEnergyLossProcess
00031 #else
00032 class BDSPlanckScatter : public G4VeEnergyLoss
00033 #endif
00034 {
00035 public:
00036
00037 BDSPlanckScatter();
00038
00039 ~BDSPlanckScatter();
00040 #if G4VERSION > 8
00041 virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*, const G4ParticleDefinition*);
00042 virtual void PrintInfo();
00043 #endif
00044
00045 G4bool IsApplicable(const G4ParticleDefinition&);
00046
00047 G4double GetMeanFreePath(const G4Track& track,
00048 G4double previousStepSize,
00049 G4ForceCondition* condition );
00050
00051 G4VParticleChange *PostStepDoIt(const G4Track& track,
00052 const G4Step& step);
00053
00054 inline void SetTemperature(G4double aTemperature);
00055 inline G4double GetTemperature();
00056
00057 protected:
00058
00059 virtual G4double SecondaryEnergyThreshold(size_t index);
00060
00061 private:
00062
00063 BDSPlanckScatter & operator=(const BDSPlanckScatter &right);
00064
00065 BDSPlanckScatter(const BDSPlanckScatter&);
00066
00067 const std::vector<G4double>* secondaryEnergyCuts;
00068
00069 private:
00070 G4double itsTemperature;
00071 BDSComptonEngine* itsComptonEngine;
00072 BDSPlanckEngine* itsPlanckEngine;
00073 G4double itsPlanckMeanFreePath;
00074 };
00075 inline G4bool BDSPlanckScatter::IsApplicable(
00076 const G4ParticleDefinition& particle)
00077 {
00078 return( (&particle == G4Electron::Electron())
00079 ||(&particle == G4Positron::Positron()) );
00080 }
00081 inline G4double BDSPlanckScatter::GetMeanFreePath(const G4Track& track,
00082 G4double PreviousStepSize,
00083 G4ForceCondition* ForceCondition)
00084 {
00085 *ForceCondition= NotForced ;
00086 return itsPlanckMeanFreePath;
00087 }
00088
00089
00090 inline void BDSPlanckScatter::SetTemperature(G4double aTemperature)
00091 {itsTemperature=aTemperature;}
00092 inline G4double BDSPlanckScatter::GetTemperature()
00093 {return itsTemperature;}
00094
00095 inline G4double BDSPlanckScatter::SecondaryEnergyThreshold(size_t index)
00096 {
00097 return (*secondaryEnergyCuts)[index];
00098 }
00099
00100
00101 #endif