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 #ifndef G4BoldyshevTripletModel_h
00031 #define G4BoldyshevTripletModel_h 1
00032
00033 #include "G4VEmModel.hh"
00034 #include "G4Electron.hh"
00035 #include "G4Positron.hh"
00036 #include "G4ParticleChangeForGamma.hh"
00037 #include "G4CrossSectionHandler.hh"
00038 #include "G4ForceCondition.hh"
00039 #include "G4CompositeEMDataSet.hh"
00040 #include "G4Gamma.hh"
00041
00042 class G4BoldyshevTripletModel : public G4VEmModel
00043 {
00044
00045 public:
00046
00047 G4BoldyshevTripletModel(const G4ParticleDefinition* p = 0,
00048 const G4String& nam = "BoldyshevTriplet");
00049
00050 virtual ~G4BoldyshevTripletModel();
00051
00052 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
00053
00054 virtual G4double ComputeCrossSectionPerAtom(
00055 const G4ParticleDefinition*,
00056 G4double kinEnergy,
00057 G4double Z,
00058 G4double A=0,
00059 G4double cut=0,
00060 G4double emax=DBL_MAX);
00061
00062 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
00063 const G4MaterialCutsCouple*,
00064 const G4DynamicParticle*,
00065 G4double tmin,
00066 G4double maxEnergy);
00067
00068 protected:
00069
00070 G4ParticleChangeForGamma* fParticleChange;
00071
00072 G4double GetMeanFreePath(const G4Track& aTrack,
00073 G4double previousStepSize,
00074 G4ForceCondition* condition);
00075 private:
00076
00077 const G4double smallEnergy;
00078 G4double lowEnergyLimit;
00079 G4double highEnergyLimit;
00080
00081 G4int verboseLevel;
00082 G4bool isInitialised;
00083
00084 G4VCrossSectionHandler* crossSectionHandler;
00085 G4VEMDataSet* meanFreePathTable;
00086
00087 G4BoldyshevTripletModel & operator=(const G4BoldyshevTripletModel &right);
00088 G4BoldyshevTripletModel(const G4BoldyshevTripletModel&);
00089
00090 G4double asinh (G4double value);
00091 };
00092
00093
00094
00095 inline G4double G4BoldyshevTripletModel::asinh (G4double value)
00096 {
00097 G4double out;
00098
00099 if (value>0)
00100 out = std::log(value+std::sqrt(value*value+1));
00101 else
00102 out = -std::log(-value+std::sqrt(value*value+1));
00103
00104 return out;
00105 }
00106
00107
00108
00109 #endif