103{
104
105 if (verboseLevel > 3)
106 {
107 G4cout <<
"Calling G4DNABornIonisationModel2::Initialise()" <<
G4endl;
108 }
109
110 if(fParticleDef != nullptr && particle != fParticleDef)
111 {
113 description << "You are trying to initialized G4DNABornIonisationModel2 "
114 "for particle "
117 description << "G4DNABornIonisationModel2 was already initialised "
118 "for particle:" << fParticleDef->GetParticleName() <<
G4endl;
119 G4Exception(
"G4DNABornIonisationModel2::Initialise",
"bornIonInit",
121 }
122
123 fParticleDef = particle;
124
125
127
128
129
131 std::ostringstream fullFileName;
132 fullFileName << path;
133
134 if(particleName == "e-")
135 {
136 fTableFile = "dna/sigma_ionisation_e_born";
137 fLowEnergyLimit = 11.*eV;
138 fHighEnergyLimit = 1.*MeV;
139
140 if (fasterCode)
141 {
142 fullFileName << "/dna/sigmadiff_cumulated_ionisation_e_born_hp.dat";
143 }
144 else
145 {
146 fullFileName << "/dna/sigmadiff_ionisation_e_born.dat";
147 }
148 }
149 else if(particleName == "proton")
150 {
151 fTableFile = "dna/sigma_ionisation_p_born";
152 fLowEnergyLimit = 500. * keV;
153 fHighEnergyLimit = 100. * MeV;
154
155 if (fasterCode)
156 {
157 fullFileName << "/dna/sigmadiff_cumulated_ionisation_p_born_hp.dat";
158 }
159 else
160 {
161 fullFileName << "/dna/sigmadiff_ionisation_p_born.dat";
162 }
163 }
164
165
166
167 G4double scaleFactor = (1.e-22 / 3.343) * m*m;
168 fTableData = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV,scaleFactor );
169 fTableData->LoadData(fTableFile);
170
171
172
173 std::ifstream diffCrossSection(fullFileName.str().c_str());
174
175 if (!diffCrossSection)
176 {
178 description <<
"Missing data file:" <<
G4endl << fullFileName.str() <<
G4endl;
179 G4Exception(
"G4DNABornIonisationModel2::Initialise",
"em0003",
181 }
182
183
184
185
186 fTdummyVec.clear();
187 fVecm.clear();
188
189 for (int j=0; j<5; j++)
190 {
191 fProbaShellMap[j].clear();
192 fDiffCrossSectionData[j].clear();
193 fNrjTransfData[j].clear();
194 }
195
196
197
198 fTdummyVec.push_back(0.);
199 while(!diffCrossSection.eof())
200 {
203 diffCrossSection>>tDummy>>eDummy;
204 if (tDummy != fTdummyVec.back()) fTdummyVec.push_back(tDummy);
205
207 for (int j=0; j<5; j++)
208 {
209 diffCrossSection>> tmp;
210
211 fDiffCrossSectionData[j][tDummy][eDummy] = tmp;
212
213 if (fasterCode)
214 {
215 fNrjTransfData[j][tDummy][fDiffCrossSectionData[j][tDummy][eDummy]]=eDummy;
216 fProbaShellMap[j][tDummy].push_back(fDiffCrossSectionData[j][tDummy][eDummy]);
217 }
218
219
220 if (!diffCrossSection.eof() && !fasterCode) fDiffCrossSectionData[j][tDummy][eDummy]*=scaleFactor;
221
222 if (!fasterCode) fVecm[tDummy].push_back(eDummy);
223
224 }
225 }
226
227
230
231 if( verboseLevel>0 )
232 {
233 G4cout <<
"Born ionisation model is initialized " <<
G4endl
234 << "Energy range: "
239 }
240
241
242
245
246 if (isInitialised)
247 { return;}
250
251 if (!statCode)
253
254 isInitialised = true;
255}
const char * G4FindDataDir(const char *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
static G4DNAMolecularMaterial * Instance()
static G4EmParameters * Instance()
G4bool DNAStationary() const
static G4LossTableManager * Instance()
G4VAtomDeexcitation * AtomDeexcitation()
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
const G4String & GetParticleName() const
void SetHighEnergyLimit(G4double)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
G4double HighEnergyLimit() const
void SetLowEnergyLimit(G4double)