86 G4cout <<
"Calling G4DNAPTBExcitationModel::Initialise()" <<
G4endl;
90 std::ostringstream oss;
91 oss <<
" Model is not applied for this particle " << particle->
GetParticleName();
95 G4double scaleFactor = 1e-16 * cm * cm;
96 G4double scaleFactorBorn = (1.e-22 / 3.343) * m * m;
102 if (fpTHF !=
nullptr) {
103 index = fpTHF->GetIndex();
108 if (fpPY !=
nullptr) {
109 index = fpPY->GetIndex();
115 if (fpPU !=
nullptr) {
116 index = fpPU->GetIndex();
122 if (fpTMP !=
nullptr) {
123 index = fpTMP->GetIndex();
128 if (fpG4_WATER !=
nullptr) {
129 index = fpG4_WATER->GetIndex();
136 if (fpBackbone_THF !=
nullptr) {
137 index = fpBackbone_THF->GetIndex();
138 AddCrossSectionData(index, particle,
"dna/sigma_excitation_e-_PTB_THF", scaleFactor * 33. / 30);
142 if (fpCytosine_PY !=
nullptr) {
143 index = fpCytosine_PY->GetIndex();
144 AddCrossSectionData(index, particle,
"dna/sigma_excitation_e-_PTB_PY", scaleFactor * 42. / 30);
148 if (fpThymine_PY !=
nullptr) {
149 index = fpThymine_PY->GetIndex();
150 AddCrossSectionData(index, particle,
"dna/sigma_excitation_e-_PTB_PY", scaleFactor * 48. / 30);
154 if (fpAdenine_PU !=
nullptr) {
155 index = fpAdenine_PU->GetIndex();
156 AddCrossSectionData(index, particle,
"dna/sigma_excitation_e-_PTB_PU", scaleFactor * 50. / 44);
160 if (fpGuanine_PU !=
nullptr) {
161 index = fpGuanine_PU->GetIndex();
162 AddCrossSectionData(index, particle,
"dna/sigma_excitation_e-_PTB_PU", scaleFactor * 56. / 44);
166 if (fpBackbone_TMP !=
nullptr) {
167 index = fpBackbone_TMP->GetIndex();
168 AddCrossSectionData(index, particle,
"dna/sigma_excitation_e-_PTB_TMP", scaleFactor * 33. / 50);
173 if (fpN2 !=
nullptr) {
174 index = fpN2->GetIndex();
188 if (dataModel ==
nullptr) {
189 G4cout <<
"G4DNAPTBExcitationModel::Initialise:: not good modelData" <<
G4endl;
191 "not good modelData");
194 fpModelData = dataModel;
265 G4double lowLim = fpModelData->GetLowELimit(materialID, particle);
266 G4double highLim = fpModelData->GetHighELimit(materialID, particle);
269 if (k >= lowLim && k < highLim) {
270 if (fpN2 !=
nullptr && materialID == fpN2->GetIndex()) {
272 G4int level = fpModelData->RandomSelectShell(k, particle, materialID);
273 G4double excitationEnergy = ptbExcitationStructure.ExcitationEnergy(level, fpN2->GetIndex());
276 G4double newEnergy = k - excitationEnergy;
284 G4double ioniThres = ptbIonisationStructure.IonisationEnergy(0, fpN2->GetIndex());
286 if ((excitationEnergy > ioniThres) && (
G4UniformRand() < 0.5)) {
289 G4double secondaryKinetic = excitationEnergy - ioniThres;
292 G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta);
293 G4double ux = sinTheta * std::cos(phi), uy = sinTheta * std::sin(phi), uz = cosTheta;
297 fvect->push_back(dp);
302 description <<
"Kinetic energy <= 0 at " << fpN2->GetName() <<
" material !!!";
306 else if (fpG4_WATER ==
nullptr || materialID != fpG4_WATER->GetIndex()) {
308 G4double excitationEnergy = fTableMeanEnergyPTB[materialID];
310 G4double newEnergy = k - excitationEnergy;
320 description <<
"Kinetic energy <= 0 at " << materialID <<
" index material !!!";
326 G4double excitationEnergy = waterStructure.ExcitationEnergy(level);
327 G4double newEnergy = k - excitationEnergy;
339 description <<
"Kinetic energy <= 0 at " << materialID <<
" ID material !!!";
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4String & GetParticleName() const
void AddCrossSectionData(const size_t &materialName, const G4ParticleDefinition *particleName, const G4String &fileCS, const G4String &fileDiffCS, const G4double &scaleFactor)
AddCrossSectionData Method used during the initialization of the model class to add a new material....