00001 00002 #ifndef BDSSynchrotronRadiation_h 00003 #define BDSSynchrotronRadiation_h 1 00004 00005 #include "BDSGlobalConstants.hh" 00006 #include "BDSMaterials.hh" 00007 00008 #include "globals.hh" 00009 #include "G4VDiscreteProcess.hh" 00010 #include "G4Track.hh" 00011 #include "G4Step.hh" 00012 #include "G4Electron.hh" 00013 #include "G4Positron.hh" 00014 00015 class BDSSynchrotronRadiation : public G4VDiscreteProcess 00016 { 00017 public: 00018 00019 BDSSynchrotronRadiation(const G4String& processName = "BDSSynchRad"); 00020 00021 ~BDSSynchrotronRadiation(); 00022 00023 G4bool IsApplicable(const G4ParticleDefinition&); 00024 00025 virtual G4double GetMeanFreePath(const G4Track& track, 00026 G4double previousStepSize, 00027 G4ForceCondition* condition ); 00028 00029 virtual G4VParticleChange *PostStepDoIt(const G4Track& track, 00030 const G4Step& step); 00031 00032 G4double SynGenC(G4double xmin); 00033 G4double SynRadC(G4double x); 00034 00035 protected: 00036 00037 private: 00038 00039 // assignment and copy constructor not implemented nor used 00040 BDSSynchrotronRadiation & operator=(const BDSSynchrotronRadiation &right); 00041 BDSSynchrotronRadiation(const BDSSynchrotronRadiation&); 00042 00043 G4double nExpConst; 00044 G4double CritEngFac; 00045 G4int MeanFreePathCounter; 00046 }; 00047 00048 inline G4bool 00049 BDSSynchrotronRadiation::IsApplicable(const G4ParticleDefinition& particle) 00050 { 00051 return( (&particle == G4Electron::Electron()) 00052 ||(&particle == G4Positron::Positron()) ); 00053 } 00054 00055 #endif