51 G4VEmModel(nam), isInitialised(false), fTableData(0)
53 fpMaterialDensity = 0;
55 fExperimentalEnergyLimit= 0;
57 fParticleDefinition = 0;
63 G4cout <<
"Dirac R-matrix excitation model is constructed " <<
G4endl;
74 if (fTableData)
delete fTableData;
86 "Calling G4DNADiracRMatrixExcitationModel::Initialise()"
90 fParticleDefinition = particle;
94 fTableFile =
"dna/sigma_excitation_e_diracrmatrix_Z79";
95 fLowEnergyLimit = 10 * eV;
96 fExperimentalEnergyLimit = 577.* eV;
97 fHighEnergyLimit = 1.0 * GeV;
101 G4Exception(
"G4DNADiracRMatrixExcitationModel::Initialise",
"em0001",
102 FatalException,
"Not defined for other particles than electrons.");
106 G4double scaleFactor = 1. * cm * cm;
113 G4cout <<
"Dirac R-matrix excitation model is initialized " <<
G4endl
120 if (isInitialised){
return;}
122 isInitialised =
true;
134 if (verboseLevel > 3)
137 "Calling CrossSectionPerVolume() of G4DNADiracRMatrixExcitationModel"
149 if(z!=79){
return 0.;}
153 if(atomicNDensity!= 0.0)
155 if (ekin >= fLowEnergyLimit && ekin < fExperimentalEnergyLimit)
159 else if ((fExperimentalEnergyLimit <= ekin) && (ekin < fHighEnergyLimit))
164 if (verboseLevel > 2)
167 G4cout<<
"=== G4DNADiracRMatrixExcitationModel - XS INFO START"<<
G4endl;
168 G4cout<<
"=== Kinetic energy (eV)=" << ekin/eV <<
" particle : "
170 G4cout<<
"=== Cross section per atom for Z="<<z<<
" is (cm^2)"
172 G4cout<<
"=== Cross section per atom for Z="<<z<<
" is (cm^-1)="
173 <<sigma*atomicNDensity/(1./cm) <<
G4endl;
174 G4cout<<
"=== G4DNADiracRMatrixExcitationModel - XS INFO END"<<
G4endl;
178 return sigma*atomicNDensity;
184 (std::vector<G4DynamicParticle*>* ,
190 if (verboseLevel > 3)
193 "Calling SampleSecondaries() of G4DNADiracRMatrixExcitationModel"
202 G4double excitationEnergy = ExcitationEnergyAu[level]*eV;
203 G4double newEnergy = k - excitationEnergy;
227 for(
int i=0;i<(int)
N;i++){
249 value = paramFuncTCS_5dto6s1[0]+paramFuncTCS_5dto6s1[1]
250 /std::pow(kineticEnergy/eV-paramFuncTCS_5dto6s1[2],2);
254 value = paramFuncTCS_5dto6s2[0]+paramFuncTCS_5dto6s2[1]
255 /std::pow(kineticEnergy/eV-paramFuncTCS_5dto6s2[2],2);
259 value = paramFuncTCS_6sto6p1[0]+paramFuncTCS_6sto6p1[1]
260 *
G4Log(kineticEnergy/eV-paramFuncTCS_6sto6p1[2])
261 /(kineticEnergy/eV-paramFuncTCS_6sto6p1[2]);
265 value = paramFuncTCS_6sto6p2[0]+paramFuncTCS_6sto6p2[1]
266 *
G4Log(kineticEnergy/eV-paramFuncTCS_6sto6p2[2])
267 /(kineticEnergy/eV-paramFuncTCS_6sto6p2[2]);
276G4int G4DNADiracRMatrixExcitationModel::RandomSelect
285 auto valuesBuffer =
new G4double[NOfComp];
295 ((fLowEnergyLimit<=kineticEnergy)&&(kineticEnergy<fExperimentalEnergyLimit))
300 ((fExperimentalEnergyLimit<=kineticEnergy)&&(kineticEnergy<fHighEnergyLimit))
305 value += valuesBuffer[i];
312 if (valuesBuffer[i] > value)
314 delete[] valuesBuffer;
317 value -= valuesBuffer[i];
319 if (valuesBuffer)
delete[] valuesBuffer;
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
virtual G4double FindValue(G4double e, G4int componentId=0) const
virtual size_t NumberOfComponents(void) const
virtual const G4VEMDataSet * GetComponent(G4int componentId) const
virtual G4bool LoadData(const G4String &argFileName)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual ~G4DNADiracRMatrixExcitationModel()
G4DNADiracRMatrixExcitationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNADiracRMatrixExcitationModel")
virtual G4double GetExtendedTotalCrossSection(const G4Material *material, const G4ParticleDefinition *, G4double kineticEnergy)
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
virtual G4double GetExtendedPartialCrossSection(const G4Material *material, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
G4ParticleChangeForGamma * fParticleChangeForGamma
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &= *(new G4DataVector()))
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4Material * GetMaterial() const
size_t GetNumberOfElements() const
const G4double * GetAtomicNumDensityVector() 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)