00001 /* BDSIM code. Version 1.0 00002 Author: Grahame A. Blair, Royal Holloway, Univ. of London. 00003 Last modified 24.7.2002 00004 Copyright (c) 2002 by G.A.Blair. ALL RIGHTS RESERVED. 00005 */ 00006 #ifndef BDSPlanckScatter_h 00007 #define BDSPlanckScatter_h 1 00008 00009 #include "G4ios.hh" 00010 #include "globals.hh" 00011 #include "G4VEnergyLossProcess.hh" 00012 #include "G4Track.hh" 00013 #include "G4Step.hh" 00014 #include "G4Electron.hh" 00015 #include "G4Positron.hh" 00016 #include "BDSComptonEngine.hh" 00017 #include "BDSPlanckEngine.hh" 00018 00019 class BDSPlanckScatter : public G4VEnergyLossProcess 00020 { 00021 public: 00022 00023 BDSPlanckScatter(); 00024 00025 ~BDSPlanckScatter(); 00026 virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*, const G4ParticleDefinition*); 00027 virtual void PrintInfo(); 00028 00029 G4bool IsApplicable(const G4ParticleDefinition&); 00030 00031 G4double GetMeanFreePath(const G4Track& track, 00032 G4double previousStepSize, 00033 G4ForceCondition* condition ); 00034 00035 G4VParticleChange *PostStepDoIt(const G4Track& track, 00036 const G4Step& step); 00037 00038 inline void SetTemperature(G4double aTemperature); 00039 inline G4double GetTemperature(); 00040 00041 protected: 00042 00043 // virtual G4double SecondaryEnergyThreshold(size_t index); 00044 00045 private: 00046 00047 // assignment and copy constructor not implemented nor used 00048 BDSPlanckScatter & operator=(const BDSPlanckScatter &right); 00049 BDSPlanckScatter(const BDSPlanckScatter&); 00050 00051 // const std::vector<G4double>* secondaryEnergyCuts; 00052 00053 private: 00054 G4double itsTemperature; 00055 BDSComptonEngine* itsComptonEngine; 00056 BDSPlanckEngine* itsPlanckEngine; 00057 G4double itsPlanckMeanFreePath; 00058 }; 00059 inline G4bool BDSPlanckScatter::IsApplicable( 00060 const G4ParticleDefinition& part) 00061 { 00062 return( (&part == G4Electron::Electron()) 00063 ||(&part == G4Positron::Positron()) ); 00064 } 00065 inline G4double BDSPlanckScatter::GetMeanFreePath(const G4Track&, 00066 G4double, 00067 G4ForceCondition* ForceCondition) 00068 { 00069 *ForceCondition= NotForced ; 00070 return itsPlanckMeanFreePath; 00071 } 00072 00073 00074 inline void BDSPlanckScatter::SetTemperature(G4double aTemperature) 00075 {itsTemperature=aTemperature;} 00076 inline G4double BDSPlanckScatter::GetTemperature() 00077 {return itsTemperature;} 00078 00079 // inline G4double BDSPlanckScatter::SecondaryEnergyThreshold(size_t index) 00080 // { 00081 // return (*secondaryEnergyCuts)[index]; 00082 // } 00083 00084 #endif