48 lowEnergyLimit = 2 * eV;
49 highEnergyLimit = 100 * eV;
64 G4cout <<
"Sanche Excitation model is constructed " <<
G4endl
66 << lowEnergyLimit / eV <<
" eV - "
67 << highEnergyLimit / eV <<
" eV"
87 G4cout <<
"Calling G4DNASancheExcitationModel::Initialise()" <<
G4endl;
93 G4cout <<
"G4DNASancheExcitationModel: low energy limit increased from " <<
100 G4cout <<
"G4DNASancheExcitationModel: high energy limit decreased from " <<
107 if (verboseLevel > 0)
109 G4cout <<
"Sanche Excitation model is initialized " <<
G4endl
119 if (isInitialised) {
return; }
121 isInitialised =
true;
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");
138 tdummyVec.push_back(t);
139 input>>map1[t][0]>>map1[t][1]>>map1[t][2]>>map1[t][3]>>map1[t][4]>>map1[t][5]>>map1[t][6]>>map1[t][7]>>map1[t][8];
152 if (verboseLevel > 3)
153 G4cout <<
"Calling CrossSectionPerVolume() of G4DNASancheExcitationModel" <<
G4endl;
161 if(waterDensity!= 0.0)
167 if (ekin >= lowEnergyLimit && ekin < highEnergyLimit)
173 if (verboseLevel > 2)
175 G4cout <<
"__________________________________" <<
G4endl;
176 G4cout <<
"°°° G4DNASancheExcitationModel - XS INFO START" <<
G4endl;
178 G4cout <<
"°°° Cross section per water molecule (cm^2)=" << sigma/cm/cm <<
G4endl;
179 G4cout <<
"°°° Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./cm) <<
G4endl;
181 G4cout <<
"°°° G4DNASancheExcitationModel - XS INFO END" <<
G4endl;
188 return sigma*2*waterDensity;
202 if (verboseLevel > 3)
203 G4cout <<
"Calling SampleSecondaries() of G4DNASancheExcitationModel" <<
G4endl;
206 G4int level = RandomSelect(electronEnergy0);
207 G4double excitationEnergy = VibrationEnergy(level);
208 G4double newEnergy = electronEnergy0 - excitationEnergy;
228 if (electronEnergy0 < highEnergyLimit && newEnergy>0.)
242 std::vector<double>::iterator t2 = std::upper_bound(tdummyVec.begin(),tdummyVec.end(), t/eV);
243 std::vector<double>::iterator t1 = t2-1;
245 double sigma = LinInterpolate((*t1), (*t2), t/eV, map1[*t1][level], map1[*t2][level]);
247 if(sigma==0.)sigma=1e-30;
253G4double G4DNASancheExcitationModel::VibrationEnergy(
G4int level)
255 G4double energies[9] = {0.01, 0.024, 0.061, 0.092, 0.204, 0.417, 0.460, 0.500, 0.835};
256 return(energies[level]*eV);
268 std::deque<double> values;
274 values.push_front(partial);
285 if (values[i] > value)
304 for (
G4int i=0; i<nLevels; i++)
308 return totalCrossSection;
319 G4double a = (xs2 - xs1) / (e2 - e1);
G4DLLIMPORT std::ostream G4cout
static G4DNAMolecularMaterial * Instance()
const std::vector< double > * GetNumMolPerVolTableFor(const G4Material *) const
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual ~G4DNASancheExcitationModel()
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
G4double PartialCrossSection(G4double energy, G4int level)
G4ParticleChangeForGamma * fParticleChangeForGamma
G4DNASancheExcitationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNASancheExcitationModel")
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
static G4Electron * ElectronDefinition()
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4String & GetParticleName() const
void SetHighEnergyLimit(G4double)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
G4double HighEnergyLimit() const
void SetLowEnergyLimit(G4double)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)