/home/cern/BDSIM_new/include/BDSPlanckScatter.hh

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 "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

Generated on Wed Mar 5 17:25:22 2008 for BDSIM by  doxygen 1.5.3