63 G4cout <<
"Sanche Excitation model is constructed " <<
G4endl<<
"Energy range: " 85 G4cout <<
"Calling G4DNASancheExcitationModel::Initialise()" <<
G4endl;
91 G4cout <<
"G4DNASancheExcitationModel: low energy limit increased from " <<
98 G4cout <<
"G4DNASancheExcitationModel: high energy limit decreased from " <<
107 G4cout <<
"Sanche Excitation model is initialized " << G4endl
123 char *path = getenv(
"G4LEDATA");
124 std::ostringstream eFullFileName;
125 eFullFileName << path <<
"/dna/sigma_excitationvib_e_sanche.dat";
126 std::ifstream input(eFullFileName.str().c_str());
130 G4Exception(
"G4DNASancheExcitationModel::Initialise",
"em0003",
131 FatalException,
"Missing data file:/dna/sigma_excitationvib_e_sanche.dat");
154 for(
size_t i = 0 ; i < 9 ;++i)
157 levelXS.push_back(xs);
175 G4cout <<
"Calling CrossSectionPerVolume() of G4DNASancheExcitationModel" 184 if(waterDensity!= 0.0)
199 G4cout <<
"__________________________________" <<
G4endl;
200 G4cout <<
"=== G4DNASancheExcitationModel - XS INFO START" <<
G4endl;
202 G4cout <<
"=== Cross section per water molecule (cm^2)=" << sigma/
cm/
cm <<
G4endl;
203 G4cout <<
"=== Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./
cm) << G4endl;
204 G4cout <<
"=== G4DNASancheExcitationModel - XS INFO END" <<
G4endl;
209 return sigma*2*waterDensity;
225 G4cout <<
"Calling SampleSecondaries() of G4DNASancheExcitationModel" 231 G4double newEnergy = electronEnergy0 - excitationEnergy;
251 if (electronEnergy0 < highEnergyLimit && newEnergy>0.)
266 std::vector<double>::iterator
t2 = std::upper_bound(
tdummyVec.begin(),
268 std::vector<double>::iterator
t1 = t2 - 1;
278 static const double conv_factor = 1
e-16 *
cm *
cm;
280 sigma *= conv_factor;
281 if (sigma == 0.) sigma = 1
e-30;
289 std::vector<double>::iterator
t2 = std::upper_bound(
tdummyVec.begin(),
291 std::vector<double>::iterator
t1 = t2 - 1;
301 static const double conv_factor = 1
e-16 *
cm *
cm;
303 sigma *= conv_factor;
304 if (sigma == 0.) sigma = 1
e-30;
312 static G4double energies[9] = { 0.01, 0.024, 0.061, 0.092, 0.204, 0.417, 0.460,
314 return (energies[level] *
eV);
326 std::deque<double> values;
332 values.push_front(partial);
343 if (values[i] > value)
367 return totalCrossSection;
G4double LowEnergyLimit() const
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
G4DNASancheExcitationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNASancheExcitationModel")
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4double PartialCrossSection(G4double energy, G4int level)
std::vector< double > fEnergyTotalXS
G4double TotalCrossSection(G4double t)
void SetHighEnergyLimit(G4double)
G4double LinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
G4double GetKineticEnergy() const
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const std::vector< G4double > * fpWaterDensity
G4double HighEnergyLimit() const
G4ParticleChangeForGamma * fParticleChangeForGamma
virtual ~G4DNASancheExcitationModel()
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double VibrationEnergy(G4int level)
static G4DNAMolecularMaterial * Instance()
const G4ThreeVector & GetMomentumDirection() const
G4int RandomSelect(G4double energy)
std::vector< double > tdummyVec
void SetLowEnergyLimit(G4double)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
std::vector< std::vector< double > > fEnergyLevelXS