00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 #ifndef G4MuBetheBlochModel_h
00060 #define G4MuBetheBlochModel_h 1
00061
00062 #include <CLHEP/Units/PhysicalConstants.h>
00063
00064 #include "G4VEmModel.hh"
00065
00066 class G4ParticleChangeForLoss;
00067 class G4EmCorrections;
00068
00069 class G4MuBetheBlochModel : public G4VEmModel
00070 {
00071
00072 public:
00073
00074 G4MuBetheBlochModel(const G4ParticleDefinition* p = 0,
00075 const G4String& nam = "MuBetheBloch");
00076
00077 virtual ~G4MuBetheBlochModel();
00078
00079 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00080
00081 virtual G4double MinEnergyCut(const G4ParticleDefinition*,
00082 const G4MaterialCutsCouple*);
00083
00084 virtual G4double ComputeCrossSectionPerElectron(
00085 const G4ParticleDefinition*,
00086 G4double kineticEnergy,
00087 G4double cutEnergy,
00088 G4double maxEnergy);
00089
00090 virtual G4double ComputeCrossSectionPerAtom(
00091 const G4ParticleDefinition*,
00092 G4double kineticEnergy,
00093 G4double Z, G4double A,
00094 G4double cutEnergy,
00095 G4double maxEnergy);
00096
00097 virtual G4double CrossSectionPerVolume(const G4Material*,
00098 const G4ParticleDefinition*,
00099 G4double kineticEnergy,
00100 G4double cutEnergy,
00101 G4double maxEnergy);
00102
00103 virtual G4double ComputeDEDXPerVolume(const G4Material*,
00104 const G4ParticleDefinition*,
00105 G4double kineticEnergy,
00106 G4double cutEnergy);
00107
00108 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00109 const G4MaterialCutsCouple*,
00110 const G4DynamicParticle*,
00111 G4double tmin,
00112 G4double maxEnergy);
00113
00114 protected:
00115
00116 virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
00117 G4double kinEnergy);
00118
00119 private:
00120
00121 inline void SetParticle(const G4ParticleDefinition* p);
00122
00123
00124 G4MuBetheBlochModel & operator=(const G4MuBetheBlochModel &right);
00125 G4MuBetheBlochModel(const G4MuBetheBlochModel&);
00126
00127 const G4ParticleDefinition* particle;
00128 G4ParticleDefinition* theElectron;
00129 G4ParticleChangeForLoss* fParticleChange;
00130 G4EmCorrections* corr;
00131
00132 G4double limitKinEnergy;
00133 G4double logLimitKinEnergy;
00134 G4double mass;
00135 G4double massSquare;
00136 G4double ratio;
00137 G4double twoln10;
00138 G4double bg2lim;
00139 G4double taulim;
00140 G4double alphaprime;
00141 static G4double xgi[8],wgi[8];
00142 };
00143
00144
00145
00146 inline void G4MuBetheBlochModel::SetParticle(const G4ParticleDefinition* p)
00147 {
00148 if(!particle) {
00149 particle = p;
00150 mass = particle->GetPDGMass();
00151 massSquare = mass*mass;
00152 ratio = CLHEP::electron_mass_c2/mass;
00153 }
00154 }
00155
00156
00157
00158 #endif