46 G4VEmModel(nam), isInitialised(false), fTableData(0)
63 G4cout <<
"Born excitation model is constructed " <<
G4endl;
92 G4cout <<
"Calling G4DNABornExcitationModel2::Initialise()" <<
G4endl;
97 G4Exception(
"G4DNABornExcitationModel2::Initialise",
"em0001",
98 FatalException,
"Model already initialized for another particle type.");
103 std::ostringstream fullFileName;
104 char *path = getenv(
"G4LEDATA");
108 G4Exception(
"G4DNABornExcitationModel2::Initialise",
"G4LEDATA-CHECK",
112 fullFileName << path;
116 fullFileName <<
"/dna/bornExcitation-e.dat";
122 fullFileName <<
"/dna/bornExcitation-p.dat";
134 for(
size_t level = 0; level<
fTableData->size(); ++level)
137 (*fTableData)(level)->SetSpline(
true);
140 size_t finalBin_i = 2000;
148 for(
size_t energy_i = 0; energy_i < finalBin_i; ++energy_i)
153 for(
size_t level = 0; level<
fTableData->size(); ++level)
155 finalXS += (*fTableData)(level)->
Value(energy);
169 G4cout <<
"Born excitation model is initialized " <<
G4endl
196 G4cout <<
"Calling CrossSectionPerVolume() of G4DNABornExcitationModel2"
208 if(waterDensity!= 0.0)
225 G4cout <<
"__________________________________" <<
G4endl;
226 G4cout <<
"G4DNABornExcitationModel2 - XS INFO START" <<
G4endl;
228 G4cout <<
"Cross section per water molecule (cm^2)=" << sigma/
cm/
cm <<
G4endl;
229 G4cout <<
"Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./
cm) << G4endl;
230 G4cout <<
"G4DNABornExcitationModel2 - XS INFO END" <<
G4endl;
238 return sigma*waterDensity;
252 G4cout <<
"Calling SampleSecondaries() of G4DNABornExcitationModel2"
260 G4double newEnergy = k - excitationEnergy;
287 G4Exception(
"G4DNABornExcitationModel2::GetPartialCrossSection",
290 "Model initialized for another particle type.");
314 partialXS = (*fTableData)(i)->
Value(k);
315 if (partialXS > value)
G4double Energy(size_t index) const
G4int RandomSelect(G4double energy)
static constexpr double MeV
void SetHighEnergyLimit(G4double)
static constexpr double keV
const G4ThreeVector & GetMomentumDirection() const
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
const G4String & GetParticleName() const
G4DNABornExcitationModel2(const G4ParticleDefinition *p=0, const G4String &nam="DNABornExcitationModel")
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4double Value(G4double theEnergy, size_t &lastidx) const
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4PhysicsTable * fTableData
const std::vector< G4double > * fpMolWaterDensity
G4double LowEnergyLimit() const
const std::vector< double > * GetNumMolPerVolTableFor(const G4Material *) const
Retrieve a table of molecular densities (number of molecules per unit volume) in the G4 unit system f...
G4DNAWaterExcitationStructure waterStructure
const XML_Char int const XML_Char * value
G4double ExcitationEnergy(G4int level)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &=*(new G4DataVector()))
static G4DNAMolecularMaterial * Instance()
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
void CreateWaterMolecule(ElectronicModification, G4int, const G4Track *)
G4PhysicsVector * fTotalXS
static constexpr double eV
const G4Track * GetCurrentTrack() const
G4GLOB_DLL std::ostream G4cerr
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4bool RetrievePhysicsTable(const G4String &filename, G4bool ascii=false)
void SetLowEnergyLimit(G4double)
size_t fLastBinCallForFinalXS
G4ParticleChangeForGamma * fParticleChangeForGamma
G4double GetKineticEnergy() const
static constexpr double cm
G4GLOB_DLL std::ostream G4cout
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
const G4ParticleDefinition * fParticleDefinition
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4double HighEnergyLimit() const
virtual ~G4DNABornExcitationModel2()
virtual G4double GetPartialCrossSection(const G4Material *, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
static G4DNAChemistryManager * Instance()
virtual G4double Value(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
void PutValue(size_t index, G4double theValue)