45 fpMolWaterDensity = 0;
57 G4cout <<
"Born excitation model is constructed " <<
G4endl;
68 std::map< G4String,G4DNACrossSectionDataSet*,std::less<G4String> >::iterator pos;
69 for (pos = tableData.begin(); pos != tableData.end(); ++pos)
84 G4cout <<
"Calling G4DNABornExcitationModel::Initialise()" <<
G4endl;
86 G4String fileElectron(
"dna/sigma_excitation_e_born");
87 G4String fileProton(
"dna/sigma_excitation_p_born");
95 G4double scaleFactor = (1.e-22 / 3.343) * m*m;
101 tableFile[electron] = fileElectron;
103 lowEnergyLimit[electron] = 9. * eV;
104 highEnergyLimit[electron] = 1. * MeV;
111 tableData[electron] = tableE;
117 tableFile[proton] = fileProton;
119 lowEnergyLimit[proton] = 500. * keV;
120 highEnergyLimit[proton] = 100. * MeV;
127 tableData[proton] = tableP;
131 if (particle==electronDef)
137 if (particle==protonDef)
145 G4cout <<
"Born excitation model is initialized " <<
G4endl
156 if (isInitialised) {
return; }
158 isInitialised =
true;
169 if (verboseLevel > 3)
170 G4cout <<
"Calling CrossSectionPerVolume() of G4DNABornExcitationModel" <<
G4endl;
188 if(waterDensity!= 0.0)
193 std::map< G4String,G4double,std::less<G4String> >::iterator pos1;
194 pos1 = lowEnergyLimit.find(particleName);
195 if (pos1 != lowEnergyLimit.end())
197 lowLim = pos1->second;
200 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
201 pos2 = highEnergyLimit.find(particleName);
202 if (pos2 != highEnergyLimit.end())
204 highLim = pos2->second;
207 if (ekin >= lowLim && ekin < highLim)
209 std::map< G4String,G4DNACrossSectionDataSet*,std::less<G4String> >::iterator pos;
210 pos = tableData.find(particleName);
212 if (pos != tableData.end())
222 G4Exception(
"G4DNABornExcitationModel::CrossSectionPerVolume",
"em0002",
227 if (verboseLevel > 2)
229 G4cout <<
"__________________________________" <<
G4endl;
230 G4cout <<
"°°° G4DNABornExcitationModel - XS INFO START" <<
G4endl;
231 G4cout <<
"°°° Kinetic energy(eV)=" << ekin/eV <<
" particle : " << particleName <<
G4endl;
232 G4cout <<
"°°° Cross section per water molecule (cm^2)=" << sigma/cm/cm <<
G4endl;
233 G4cout <<
"°°° Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./cm) <<
G4endl;
235 G4cout <<
"°°° G4DNABornExcitationModel - XS INFO END" <<
G4endl;
240 return sigma*waterDensity;
253 if (verboseLevel > 3)
254 G4cout <<
"Calling SampleSecondaries() of G4DNABornExcitationModel" <<
G4endl;
260 G4int level = RandomSelect(k,particleName);
262 G4double newEnergy = k - excitationEnergy;
283 std::map< G4String,G4DNACrossSectionDataSet*,std::less<G4String> >::iterator pos;
284 pos = tableData.find(particle);
286 if (pos != tableData.end())
301 value += valuesBuffer[i];
312 if (valuesBuffer[i] > value)
314 delete[] valuesBuffer;
317 value -= valuesBuffer[i];
320 if (valuesBuffer)
delete[] valuesBuffer;
326 G4Exception(
"G4DNABornExcitationModel::RandomSelect",
"em0002",
G4DLLIMPORT std::ostream G4cout
G4DNABornExcitationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNABornExcitationModel")
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &= *(new G4DataVector()))
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
G4ParticleChangeForGamma * fParticleChangeForGamma
virtual ~G4DNABornExcitationModel()
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
static G4DNAChemistryManager * Instance()
void CreateWaterMolecule(ElectronicModification, G4int, const G4Track *)
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)
static G4DNAMolecularMaterial * Instance()
const std::vector< double > * GetNumMolPerVolTableFor(const G4Material *) const
G4double ExcitationEnergy(G4int level)
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4Electron * ElectronDefinition()
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
const G4Track * GetCurrentTrack() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4String & GetParticleName() const
static G4Proton * ProtonDefinition()
virtual G4double FindValue(G4double x, G4int componentId=0) const =0
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)