51 fpMaterialDensity =
nullptr;
53 fExperimentalEnergyLimit= 0;
55 fParticleDefinition =
nullptr;
61 G4cout <<
"Dirac R-matrix excitation model is constructed " <<
G4endl;
84 "Calling G4DNADiracRMatrixExcitationModel::Initialise()"
88 fParticleDefinition = particle;
92 fTableFile =
"dna/sigma_excitation_e_diracrmatrix_Z79";
93 fLowEnergyLimit = 10 * eV;
94 fExperimentalEnergyLimit = 577.* eV;
95 fHighEnergyLimit = 1.0 * GeV;
99 G4Exception(
"G4DNADiracRMatrixExcitationModel::Initialise",
"em0001",
100 FatalException,
"Not defined for other particles than electrons.");
104 G4double scaleFactor = 1. * cm * cm;
111 G4cout <<
"Dirac R-matrix excitation model is initialized " <<
G4endl
118 if (isInitialised){
return;}
120 isInitialised =
true;
132 if (verboseLevel > 3)
135 "Calling CrossSectionPerVolume() of G4DNADiracRMatrixExcitationModel"
147 if(z!=79){
return 0.;}
151 if(atomicNDensity!= 0.0)
153 if (ekin >= fLowEnergyLimit && ekin < fExperimentalEnergyLimit)
157 else if ((fExperimentalEnergyLimit <= ekin) && (ekin < fHighEnergyLimit))
162 if (verboseLevel > 2)
165 G4cout<<
"=== G4DNADiracRMatrixExcitationModel - XS INFO START"<<
G4endl;
166 G4cout<<
"=== Kinetic energy (eV)=" << ekin/eV <<
" particle : "
168 G4cout<<
"=== Cross section per atom for Z="<<z<<
" is (cm^2)"
170 G4cout<<
"=== Cross section per atom for Z="<<z<<
" is (cm^-1)="
171 <<sigma*atomicNDensity/(1./cm) <<
G4endl;
172 G4cout<<
"=== G4DNADiracRMatrixExcitationModel - XS INFO END"<<
G4endl;
176 return sigma*atomicNDensity;
182 (std::vector<G4DynamicParticle*>* ,
188 if (verboseLevel > 3)
191 "Calling SampleSecondaries() of G4DNADiracRMatrixExcitationModel"
200 G4double excitationEnergy = ExcitationEnergyAu[level]*eV;
201 G4double newEnergy = k - excitationEnergy;
225 for(
int i=0;i<(int)
N;i++){
247 value = paramFuncTCS_5dto6s1[0]+paramFuncTCS_5dto6s1[1]
248 /std::pow(kineticEnergy/eV-paramFuncTCS_5dto6s1[2],2);
252 value = paramFuncTCS_5dto6s2[0]+paramFuncTCS_5dto6s2[1]
253 /std::pow(kineticEnergy/eV-paramFuncTCS_5dto6s2[2],2);
257 value = paramFuncTCS_6sto6p1[0]+paramFuncTCS_6sto6p1[1]
258 *
G4Log(kineticEnergy/eV-paramFuncTCS_6sto6p1[2])
259 /(kineticEnergy/eV-paramFuncTCS_6sto6p1[2]);
263 value = paramFuncTCS_6sto6p2[0]+paramFuncTCS_6sto6p2[1]
264 *
G4Log(kineticEnergy/eV-paramFuncTCS_6sto6p2[2])
265 /(kineticEnergy/eV-paramFuncTCS_6sto6p2[2]);
274G4int G4DNADiracRMatrixExcitationModel::RandomSelect
283 std::vector<G4double> valuesBuffer(NOfComp, 0.0);
293 ((fLowEnergyLimit<=kineticEnergy)&&(kineticEnergy<fExperimentalEnergyLimit))
298 ((fExperimentalEnergyLimit<=kineticEnergy)&&(kineticEnergy<fHighEnergyLimit))
303 value += valuesBuffer[i];
310 if (valuesBuffer[i] > value)
314 value -= valuesBuffer[i];
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
G4bool LoadData(const G4String &argFileName) override
size_t NumberOfComponents() const override
const G4VEMDataSet * GetComponent(G4int componentId) const override
G4double FindValue(G4double e, G4int componentId=0) const override
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4DNADiracRMatrixExcitationModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="DNADiracRMatrixExcitationModel")
void Initialise(const G4ParticleDefinition *, const G4DataVector &= *(new G4DataVector())) override
G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax) override
virtual G4double GetExtendedTotalCrossSection(const G4Material *material, const G4ParticleDefinition *, G4double kineticEnergy)
virtual G4double GetExtendedPartialCrossSection(const G4Material *material, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
G4ParticleChangeForGamma * fParticleChangeForGamma
~G4DNADiracRMatrixExcitationModel() override
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4Material * GetMaterial() const
const G4double * GetAtomicNumDensityVector() const
std::size_t GetNumberOfElements() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
const G4String & GetParticleName() const
virtual G4double FindValue(G4double x, G4int componentId=0) const =0
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
G4double HighEnergyLimit() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)