Geant4-11
Public Member Functions | Private Types | Private Member Functions | Private Attributes
G4ecpssrBaseLixsModel Class Reference

#include <G4ecpssrBaseLixsModel.hh>

Inheritance diagram for G4ecpssrBaseLixsModel:
G4VecpssrLiModel

Public Member Functions

G4double CalculateL1CrossSection (G4int zTarget, G4double massIncident, G4double energyIncident) override
 
G4double CalculateL2CrossSection (G4int zTarget, G4double massIncident, G4double energyIncident) override
 
G4double CalculateL3CrossSection (G4int zTarget, G4double massIncident, G4double energyIncident) override
 
G4double CalculateVelocity (G4int subShell, G4int zTarget, G4double massIncident, G4double energyIncident)
 
G4double ExpIntFunction (G4int n, G4double x)
 
 G4ecpssrBaseLixsModel ()
 
 G4ecpssrBaseLixsModel (const G4ecpssrBaseLixsModel &)=delete
 
G4ecpssrBaseLixsModeloperator= (const G4ecpssrBaseLixsModel &right)=delete
 
 ~G4ecpssrBaseLixsModel ()
 

Private Types

typedef std::map< G4double, std::map< G4double, G4double > > TriDimensionMap
 
typedef std::map< G4double, std::vector< G4double > > VecMap
 

Private Member Functions

G4double FunctionFL1 (G4double k, G4double theta)
 
G4double FunctionFL2 (G4double k, G4double theta)
 
G4double LinLinInterpolate (G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)
 
G4double LinLogInterpolate (G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)
 
G4double LogLogInterpolate (G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)
 
G4double QuadInterpolator (G4double e11, G4double e12, G4double e21, G4double e22, G4double x11, G4double x12, G4double x21, G4double x22, G4double t1, G4double t2, G4double t, G4double e)
 

Private Attributes

VecMap aVecMap1
 
VecMap aVecMap2
 
std::vector< G4doubledummyVec1
 
std::vector< G4doubledummyVec2
 
TriDimensionMap FL1Data
 
TriDimensionMap FL2Data
 
G4int verboseLevel
 

Detailed Description

Definition at line 52 of file G4ecpssrBaseLixsModel.hh.

Member Typedef Documentation

◆ TriDimensionMap

typedef std::map<G4double, std::map<G4double, G4double> > G4ecpssrBaseLixsModel::TriDimensionMap
private

Definition at line 89 of file G4ecpssrBaseLixsModel.hh.

◆ VecMap

typedef std::map<G4double, std::vector<G4double> > G4ecpssrBaseLixsModel::VecMap
private

Definition at line 95 of file G4ecpssrBaseLixsModel.hh.

Constructor & Destructor Documentation

◆ G4ecpssrBaseLixsModel() [1/2]

G4ecpssrBaseLixsModel::G4ecpssrBaseLixsModel ( )
explicit

Definition at line 41 of file G4ecpssrBaseLixsModel.cc.

42{
44
45 // Storing FLi data needed for 0.2 to 3.0 velocities region
46 char *path = std::getenv("G4LEDATA");
47
48 if (!path) {
49 G4Exception("G4ecpssrLCrossSection::G4ecpssrBaseLixsModel()","em0006", FatalException ,"G4LEDATA environment variable not set");
50 return;
51 }
52 std::ostringstream fileName1;
53 std::ostringstream fileName2;
54
55 fileName1 << path << "/pixe/uf/FL1.dat";
56 fileName2 << path << "/pixe/uf/FL2.dat";
57
58 // Reading of FL1.dat
59 std::ifstream FL1(fileName1.str().c_str());
60 if (!FL1) G4Exception("G4ecpssrLCrossSection::G4ecpssrBaseLixsModel()","em0003",FatalException, "error opening FL1 data file");
61
62 dummyVec1.push_back(0.);
63
64 while(!FL1.eof())
65 {
66 double x1;
67 double y1;
68
69 FL1>>x1>>y1;
70
71 // Mandatory vector initialization
72 if (x1 != dummyVec1.back())
73 {
74 dummyVec1.push_back(x1);
75 aVecMap1[x1].push_back(-1.);
76 }
77
78 FL1>>FL1Data[x1][y1];
79
80 if (y1 != aVecMap1[x1].back()) aVecMap1[x1].push_back(y1);
81 }
82
83 // Reading of FL2.dat
84
85 std::ifstream FL2(fileName2.str().c_str());
86 if (!FL2) G4Exception("G4ecpssrLCrossSection::G4ecpssrBaseLixsModel()","em0003", FatalException," error opening FL2 data file");
87
88 dummyVec2.push_back(0.);
89
90 while(!FL2.eof())
91 {
92 double x2;
93 double y2;
94
95 FL2>>x2>>y2;
96
97 // Mandatory vector initialization
98 if (x2 != dummyVec2.back())
99 {
100 dummyVec2.push_back(x2);
101 aVecMap2[x2].push_back(-1.);
102 }
103
104 FL2>>FL2Data[x2][y2];
105
106 if (y2 != aVecMap2[x2].back()) aVecMap2[x2].push_back(y2);
107 }
108}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::vector< G4double > dummyVec1
std::vector< G4double > dummyVec2

References aVecMap1, aVecMap2, dummyVec1, dummyVec2, FatalException, FL1Data, FL2Data, G4Exception(), and verboseLevel.

◆ ~G4ecpssrBaseLixsModel()

G4ecpssrBaseLixsModel::~G4ecpssrBaseLixsModel ( )

Definition at line 112 of file G4ecpssrBaseLixsModel.cc.

113{}

◆ G4ecpssrBaseLixsModel() [2/2]

G4ecpssrBaseLixsModel::G4ecpssrBaseLixsModel ( const G4ecpssrBaseLixsModel )
delete

Member Function Documentation

◆ CalculateL1CrossSection()

G4double G4ecpssrBaseLixsModel::CalculateL1CrossSection ( G4int  zTarget,
G4double  massIncident,
G4double  energyIncident 
)
overridevirtual

Implements G4VecpssrLiModel.

Definition at line 186 of file G4ecpssrBaseLixsModel.cc.

187{
188
189 if (zTarget <=4) return 0.;
190
191 //this L1-CrossSection calculation method is done according to Werner Brandt and Grzegorz Lapicki, Phys.Rev.A20 N2 (1979),
192 //and using data tables of O. Benka et al. At.Data Nucl.Data Tables Vol.22 No.3 (1978).
193
194 G4NistManager* massManager = G4NistManager::Instance();
195
197
198 G4double zIncident = 0;
199 G4Proton* aProtone = G4Proton::Proton();
200 G4Alpha* aAlpha = G4Alpha::Alpha();
201
202 if (massIncident == aProtone->GetPDGMass() )
203 {
204 zIncident = (aProtone->GetPDGCharge())/eplus;
205 }
206 else
207 {
208 if (massIncident == aAlpha->GetPDGMass())
209 {
210 zIncident = (aAlpha->GetPDGCharge())/eplus;
211 }
212 else
213 {
214 G4cout << "*** WARNING in G4ecpssrBaseLixsModel::CalculateL1CrossSection : Proton or Alpha incident particles only. " << G4endl;
215 G4cout << massIncident << ", " << aAlpha->GetPDGMass() << " (alpha)" << aProtone->GetPDGMass() << " (proton)" << G4endl;
216 return 0;
217 }
218 }
219
220 G4double l1BindingEnergy = transitionManager->Shell(zTarget,1)->BindingEnergy(); //Observed binding energy of L1-subshell
221 G4double massTarget = (massManager->GetAtomicMassAmu(zTarget))*amu_c2;
222 G4double systemMass =((massIncident*massTarget)/(massIncident+massTarget))/electron_mass_c2; //Mass of the system (projectile, target)
223 static const G4double zlshell= 4.15;
224 // *** see Benka, ADANDT 22, p 223
225 G4double screenedzTarget = zTarget-zlshell; //Effective nuclear charge as seen by electrons in L1-sub shell
226 static const G4double rydbergMeV= 13.6056923e-6;
227
228 static const G4double nl= 2.;
229 // *** see Benka, ADANDT 22, p 220, f3
230 G4double tetal1 = (l1BindingEnergy*nl*nl)/((screenedzTarget*screenedzTarget)*rydbergMeV); //Screening parameter
231 // *** see Benka, ADANDT 22, p 220, f3
232
233 if (verboseLevel>0) G4cout << " tetal1=" << tetal1<< G4endl;
234
235 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
236 // *** also called etaS
237 // *** see Benka, ADANDT 22, p 220, f3
238
239 static const G4double bohrPow2Barn=(Bohr_radius*Bohr_radius)/barn ; //Bohr radius of hydrogen
240
241 G4double sigma0 = 8.*pi*(zIncident*zIncident)*bohrPow2Barn*std::pow(screenedzTarget,-4.);
242 // *** see Benka, ADANDT 22, p 220, f2, for protons
243 // *** see Basbas, Phys Rev A7, p 1000
244
245 G4double velocityl1 = CalculateVelocity(1, zTarget, massIncident, energyIncident); // Scaled velocity
246
247 if (verboseLevel>0) G4cout << " velocityl1=" << velocityl1<< G4endl;
248
249 static const G4double l1AnalyticalApproximation= 1.5;
250 G4double x1 =(nl*l1AnalyticalApproximation)/velocityl1;
251 // *** 1.5 is cK = cL1 (it is 1.25 for L2 & L3)
252 // *** see Brandt, Phys Rev A20, p 469, f16 in expression of h
253
254 if (verboseLevel>0) G4cout << " x1=" << x1<< G4endl;
255
256 G4double electrIonizationEnergyl1=0.;
257 // *** see Basbas, Phys Rev A17, p1665, f27
258 // *** see Brandt, Phys Rev A20, p469
259 // *** see Liu, Comp Phys Comm 97, p325, f A5
260
261 if ( x1<=0.035) electrIonizationEnergyl1= 0.75*pi*(std::log(1./(x1*x1))-1.);
262 else
263 {
264 if ( x1<=3.)
265 electrIonizationEnergyl1 =G4Exp(-2.*x1)/(0.031+(0.213*std::pow(x1,0.5))+(0.005*x1)-(0.069*std::pow(x1,3./2.))+(0.324*x1*x1));
266 else
267 {if ( x1<=11.) electrIonizationEnergyl1 =2.*G4Exp(-2.*x1)/std::pow(x1,1.6);}
268 }
269
270 G4double hFunctionl1 =(electrIonizationEnergyl1*2.*nl)/(tetal1*std::pow(velocityl1,3)); //takes into account the polarization effect
271 // *** see Brandt, Phys Rev A20, p 469, f16
272
273 if (verboseLevel>0) G4cout << " hFunctionl1=" << hFunctionl1<< G4endl;
274
275 G4double gFunctionl1 = (1.+(9.*velocityl1)+(31.*velocityl1*velocityl1)+(49.*std::pow(velocityl1,3.))+(162.*std::pow(velocityl1,4.))+(63.*std::pow(velocityl1,5.))+(18.*std::pow(velocityl1,6.))+(1.97*std::pow(velocityl1,7.)))/std::pow(1.+velocityl1,9.);//takes into account the reduced binding effect
276 // *** see Brandt, Phys Rev A20, p 469, f19
277
278 if (verboseLevel>0) G4cout << " gFunctionl1=" << gFunctionl1<< G4endl;
279
280 G4double sigmaPSS_l1 = 1.+(((2.*zIncident)/(screenedzTarget*tetal1))*(gFunctionl1-hFunctionl1)); //Binding-polarization factor
281 // *** also called dzeta
282 // *** also called epsilon
283 // *** see Basbas, Phys Rev A17, p1667, f45
284
285 if (verboseLevel>0) G4cout << "sigmaPSS_l1 =" << sigmaPSS_l1<< G4endl;
286
287 const G4double cNaturalUnit= 137.;
288
289 G4double yl1Formula=0.4*(screenedzTarget/cNaturalUnit)*(screenedzTarget/cNaturalUnit)/(nl*velocityl1/sigmaPSS_l1);
290 // *** also called yS
291 // *** see Brandt, Phys Rev A20, p467, f6
292 // *** see Brandt, Phys Rev A23, p1728
293
294 G4double l1relativityCorrection = std::pow((1.+(1.1*yl1Formula*yl1Formula)),0.5)+yl1Formula; // Relativistic correction parameter
295 // *** also called mRS
296 // *** see Brandt, Phys Rev A20, p467, f6
297
298 //G4double reducedVelocity_l1 = velocityl1*std::pow(l1relativityCorrection,0.5); //Reduced velocity parameter
299
300 G4double L1etaOverTheta2;
301
302 G4double universalFunction_l1 = 0.;
303
304 G4double sigmaPSSR_l1;
305
306 // low velocity formula
307 // *****************
308 if ( velocityl1 <20. )
309 {
310
311 L1etaOverTheta2 =(reducedEnergy* l1relativityCorrection)/((tetal1*sigmaPSS_l1)*(tetal1*sigmaPSS_l1));
312 // *** 1) RELATIVISTIC CORRECTION ADDED
313 // *** 2) sigma_PSS_l1 ADDED
314 // *** reducedEnergy is etaS, l1relativityCorrection is mRS
315 // *** see Phys Rev A20, p468, top
316
317 if ( ((tetal1*sigmaPSS_l1) >=0.2) && ((tetal1*sigmaPSS_l1) <=2.6670) && (L1etaOverTheta2>=0.1e-3) && (L1etaOverTheta2<=0.866e2) )
318 universalFunction_l1 = FunctionFL1((tetal1*sigmaPSS_l1),L1etaOverTheta2);
319
320 if (verboseLevel>0) G4cout << "at low velocity range, universalFunction_l1 =" << universalFunction_l1 << G4endl;
321
322 sigmaPSSR_l1 = (sigma0/(tetal1*sigmaPSS_l1))*universalFunction_l1;// Plane-wave Born -Aproximation L1-subshell ionisation Cross Section
323 // *** see Benka, ADANDT 22, p220, f1
324
325 if (verboseLevel>0) G4cout << " at low velocity range, sigma PWBA L1 CS = " << sigmaPSSR_l1<< G4endl;
326 }
327 else
328 {
329 L1etaOverTheta2 = reducedEnergy/(tetal1*tetal1);
330 // Medium & high velocity
331 // *** 1) NO RELATIVISTIC CORRECTION
332 // *** 2) NO sigma_PSS_l1
333 // *** see Benka, ADANDT 22, p223
334
335 if ( (tetal1 >=0.2) && (tetal1 <=2.6670) && (L1etaOverTheta2>=0.1e-3) && (L1etaOverTheta2<=0.866e2) )
336 universalFunction_l1 = FunctionFL1(tetal1,L1etaOverTheta2);
337
338 if (verboseLevel>0) G4cout << "at medium and high velocity range, universalFunction_l1 =" << universalFunction_l1 << G4endl;
339
340 sigmaPSSR_l1 = (sigma0/tetal1)*universalFunction_l1;// Plane-wave Born -Aproximation L1-subshell ionisation Cross Section
341 // *** see Benka, ADANDT 22, p220, f1
342
343 if (verboseLevel>0) G4cout << " sigma PWBA L1 CS at medium and high velocity range = " << sigmaPSSR_l1<< G4endl;
344 }
345
346 G4double pssDeltal1 = (4./(systemMass *sigmaPSS_l1*tetal1))*(sigmaPSS_l1/velocityl1)*(sigmaPSS_l1/velocityl1);
347 // *** also called dzeta*delta
348 // *** see Brandt, Phys Rev A23, p1727, f B2
349
350 if (verboseLevel>0) G4cout << " pssDeltal1=" << pssDeltal1<< G4endl;
351
352 if (pssDeltal1>1) return 0.;
353
354 G4double energyLossl1 = std::pow(1-pssDeltal1,0.5);
355 // *** also called z
356 // *** see Brandt, Phys Rev A23, p1727, after f B2
357
358 if (verboseLevel>0) G4cout << " energyLossl1=" << energyLossl1<< G4endl;
359
360 G4double coulombDeflectionl1 =
361 (8.*pi*zIncident/systemMass)*std::pow(tetal1*sigmaPSS_l1,-2.)*std::pow(velocityl1/sigmaPSS_l1,-3.)*(zTarget/screenedzTarget);
362 // *** see Brandt, Phys Rev A20, v2s and f2 and B2
363 // *** with factor n2 compared to Brandt, Phys Rev A23, p1727, f B3
364
365 G4double cParameterl1 =2.* coulombDeflectionl1/(energyLossl1*(energyLossl1+1.));
366 // *** see Brandt, Phys Rev A23, p1727, f B4
367
368 G4double coulombDeflectionFunction_l1 = 9.*ExpIntFunction(10,cParameterl1); //Coulomb-deflection effect correction
369
370 if (verboseLevel>0) G4cout << " coulombDeflectionFunction_l1 =" << coulombDeflectionFunction_l1 << G4endl;
371
372 G4double crossSection_L1 = coulombDeflectionFunction_l1 * sigmaPSSR_l1;
373
374 //ECPSSR L1 -subshell cross section is estimated at perturbed-stationnairy-state(PSS)
375 //and reduced by the energy-loss(E),the Coulomb deflection(C),and the relativity(R) effects
376
377 if (verboseLevel>0) G4cout << " crossSection_L1 =" << crossSection_L1 << G4endl;
378
379 if (crossSection_L1 >= 0)
380 {
381 return crossSection_L1 * barn;
382 }
383
384 else {return 0;}
385}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
static constexpr double barn
Definition: G4SIunits.hh:85
static constexpr double eplus
Definition: G4SIunits.hh:184
static constexpr double pi
Definition: G4SIunits.hh:55
double G4double
Definition: G4Types.hh:83
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4Alpha * Alpha()
Definition: G4Alpha.cc:88
G4double BindingEnergy() const
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
static G4AtomicTransitionManager * Instance()
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetPDGCharge() const
static G4Proton * Proton()
Definition: G4Proton.cc:92
G4double ExpIntFunction(G4int n, G4double x)
G4double CalculateVelocity(G4int subShell, G4int zTarget, G4double massIncident, G4double energyIncident)
G4double FunctionFL1(G4double k, G4double theta)
float electron_mass_c2
Definition: hepunit.py:273
float Bohr_radius
Definition: hepunit.py:289
float amu_c2
Definition: hepunit.py:276

References G4Alpha::Alpha(), source.hepunit::amu_c2, barn, G4AtomicShell::BindingEnergy(), source.hepunit::Bohr_radius, CalculateVelocity(), source.hepunit::electron_mass_c2, eplus, ExpIntFunction(), FunctionFL1(), G4cout, G4endl, G4Exp(), G4NistManager::GetAtomicMassAmu(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), G4NistManager::Instance(), G4AtomicTransitionManager::Instance(), pi, G4Proton::Proton(), G4AtomicTransitionManager::Shell(), and verboseLevel.

◆ CalculateL2CrossSection()

G4double G4ecpssrBaseLixsModel::CalculateL2CrossSection ( G4int  zTarget,
G4double  massIncident,
G4double  energyIncident 
)
overridevirtual

Implements G4VecpssrLiModel.

Definition at line 389 of file G4ecpssrBaseLixsModel.cc.

391{
392 if (zTarget <=13 ) return 0.;
393
394 // this L2-CrossSection calculation method is done according to Werner Brandt and Grzegorz Lapicki, Phys.Rev.A20 N2 (1979),
395 // and using data tables of O. Benka et al. At.Data Nucl.Data Tables Vol.22 No.3 (1978).
396
397 G4NistManager* massManager = G4NistManager::Instance();
398
400
401 G4double zIncident = 0;
402
403 G4Proton* aProtone = G4Proton::Proton();
404 G4Alpha* aAlpha = G4Alpha::Alpha();
405
406 if (massIncident == aProtone->GetPDGMass() )
407 zIncident = (aProtone->GetPDGCharge())/eplus;
408
409 else
410 {
411 if (massIncident == aAlpha->GetPDGMass())
412 zIncident = (aAlpha->GetPDGCharge())/eplus;
413
414 else
415 {
416 G4cout << "*** WARNING in G4ecpssrBaseLixsModel::CalculateL2CrossSection : Proton or Alpha incident particles only. " << G4endl;
417 G4cout << massIncident << ", " << aAlpha->GetPDGMass() << " (alpha)" << aProtone->GetPDGMass() << " (proton)" << G4endl;
418 return 0;
419 }
420 }
421
422 G4double l2BindingEnergy = transitionManager->Shell(zTarget,2)->BindingEnergy(); //Observed binding energy of L2-subshell
423
424 G4double massTarget = (massManager->GetAtomicMassAmu(zTarget))*amu_c2;
425
426 G4double systemMass =((massIncident*massTarget)/(massIncident+massTarget))/electron_mass_c2; //Mass of the system (projectile, target)
427
428 const G4double zlshell= 4.15;
429
430 G4double screenedzTarget = zTarget-zlshell; //Effective nuclear charge as seen by electrons in L2-subshell
431
432 const G4double rydbergMeV= 13.6056923e-6;
433
434 const G4double nl= 2.;
435
436 G4double tetal2 = (l2BindingEnergy*nl*nl)/((screenedzTarget*screenedzTarget)*rydbergMeV); //Screening parameter
437
438 if (verboseLevel>0) G4cout << " tetal2=" << tetal2<< G4endl;
439
440 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
441
442 const G4double bohrPow2Barn=(Bohr_radius*Bohr_radius)/barn ; //Bohr radius of hydrogen
443
444 G4double sigma0 = 8.*pi*(zIncident*zIncident)*bohrPow2Barn*std::pow(screenedzTarget,-4.);
445
446 G4double velocityl2 = CalculateVelocity(2, zTarget, massIncident, energyIncident); // Scaled velocity
447
448 if (verboseLevel>0) G4cout << " velocityl2=" << velocityl2<< G4endl;
449
450 const G4double l23AnalyticalApproximation= 1.25;
451
452 G4double x2 = (nl*l23AnalyticalApproximation)/velocityl2;
453
454 if (verboseLevel>0) G4cout << " x2=" << x2<< G4endl;
455
456 G4double electrIonizationEnergyl2=0.;
457
458 if ( x2<=0.035) electrIonizationEnergyl2= 0.75*pi*(std::log(1./(x2*x2))-1.);
459 else
460 {
461 if ( x2<=3.)
462 electrIonizationEnergyl2 =G4Exp(-2.*x2)/(0.031+(0.213*std::pow(x2,0.5))+(0.005*x2)-(0.069*std::pow(x2,3./2.))+(0.324*x2*x2));
463 else
464 {if ( x2<=11.) electrIonizationEnergyl2 =2.*G4Exp(-2.*x2)/std::pow(x2,1.6); }
465 }
466
467 G4double hFunctionl2 =(electrIonizationEnergyl2*2.*nl)/(tetal2*std::pow(velocityl2,3)); //takes into account the polarization effect
468
469 if (verboseLevel>0) G4cout << " hFunctionl2=" << hFunctionl2<< G4endl;
470
471 G4double gFunctionl2 = (1.+(10.*velocityl2)+(45.*velocityl2*velocityl2)+(102.*std::pow(velocityl2,3.))+(331.*std::pow(velocityl2,4.))+(6.7*std::pow(velocityl2,5.))+(58.*std::pow(velocityl2,6.))+(7.8*std::pow(velocityl2,7.))+ (0.888*std::pow(velocityl2,8.)) )/std::pow(1.+velocityl2,10.);
472 //takes into account the reduced binding effect
473
474 if (verboseLevel>0) G4cout << " gFunctionl2=" << gFunctionl2<< G4endl;
475
476 G4double sigmaPSS_l2 = 1.+(((2.*zIncident)/(screenedzTarget*tetal2))*(gFunctionl2-hFunctionl2)); //Binding-polarization factor
477
478 if (verboseLevel>0) G4cout << " sigmaPSS_l2=" << sigmaPSS_l2<< G4endl;
479
480 const G4double cNaturalUnit= 137.;
481
482 G4double yl2Formula=0.15*(screenedzTarget/cNaturalUnit)*(screenedzTarget/cNaturalUnit)/(velocityl2/sigmaPSS_l2);
483
484 G4double l2relativityCorrection = std::pow((1.+(1.1*yl2Formula*yl2Formula)),0.5)+yl2Formula; // Relativistic correction parameter
485
486 G4double L2etaOverTheta2;
487
488 G4double universalFunction_l2 = 0.;
489
490 G4double sigmaPSSR_l2 ;
491
492 if ( velocityl2 < 20. )
493 {
494
495 L2etaOverTheta2 = (reducedEnergy*l2relativityCorrection)/((sigmaPSS_l2*tetal2)*(sigmaPSS_l2*tetal2));
496
497 if ( (tetal2*sigmaPSS_l2>=0.2) && (tetal2*sigmaPSS_l2<=2.6670) && (L2etaOverTheta2>=0.1e-3) && (L2etaOverTheta2<=0.866e2) )
498 universalFunction_l2 = FunctionFL2((tetal2*sigmaPSS_l2),L2etaOverTheta2);
499
500 sigmaPSSR_l2 = (sigma0/(tetal2*sigmaPSS_l2))*universalFunction_l2;
501
502 if (verboseLevel>0) G4cout << " sigma PWBA L2 CS at low velocity range = " << sigmaPSSR_l2<< G4endl;
503 }
504 else
505 {
506
507 L2etaOverTheta2 = reducedEnergy /(tetal2*tetal2);
508
509 if ( (tetal2>=0.2) && (tetal2<=2.6670) && (L2etaOverTheta2>=0.1e-3) && (L2etaOverTheta2<=0.866e2) )
510 universalFunction_l2 = FunctionFL2((tetal2),L2etaOverTheta2);
511
512 sigmaPSSR_l2 = (sigma0/tetal2)*universalFunction_l2;
513
514 if (verboseLevel>0) G4cout << " sigma PWBA L2 CS at medium and high velocity range = " << sigmaPSSR_l2<< G4endl;
515
516 }
517
518 G4double pssDeltal2 = (4./(systemMass*sigmaPSS_l2*tetal2))*(sigmaPSS_l2/velocityl2)*(sigmaPSS_l2/velocityl2);
519
520 if (pssDeltal2>1) return 0.;
521
522 G4double energyLossl2 = std::pow(1-pssDeltal2,0.5);
523
524 if (verboseLevel>0) G4cout << " energyLossl2=" << energyLossl2<< G4endl;
525
526 G4double coulombDeflectionl2
527 =(8.*pi*zIncident/systemMass)*std::pow(tetal2*sigmaPSS_l2,-2.)*std::pow(velocityl2/sigmaPSS_l2,-3.)*(zTarget/screenedzTarget);
528
529 G4double cParameterl2 = 2.*coulombDeflectionl2/(energyLossl2*(energyLossl2+1.));
530
531 G4double coulombDeflectionFunction_l2 = 11.*ExpIntFunction(12,cParameterl2); //Coulomb-deflection effect correction
532 // *** see Brandt, Phys Rev A10, p477, f25
533
534 if (verboseLevel>0) G4cout << " coulombDeflectionFunction_l2 =" << coulombDeflectionFunction_l2 << G4endl;
535
536 G4double crossSection_L2 = coulombDeflectionFunction_l2 * sigmaPSSR_l2;
537 //ECPSSR L2 -subshell cross section is estimated at perturbed-stationnairy-state(PSS)
538 //and reduced by the energy-loss(E),the Coulomb deflection(C),and the relativity(R) effects
539
540 if (verboseLevel>0) G4cout << " crossSection_L2 =" << crossSection_L2 << G4endl;
541
542 if (crossSection_L2 >= 0)
543 {
544 return crossSection_L2 * barn;
545 }
546 else {return 0;}
547}
G4double FunctionFL2(G4double k, G4double theta)

References G4Alpha::Alpha(), source.hepunit::amu_c2, barn, G4AtomicShell::BindingEnergy(), source.hepunit::Bohr_radius, CalculateVelocity(), source.hepunit::electron_mass_c2, eplus, ExpIntFunction(), FunctionFL2(), G4cout, G4endl, G4Exp(), G4NistManager::GetAtomicMassAmu(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), G4NistManager::Instance(), G4AtomicTransitionManager::Instance(), pi, G4Proton::Proton(), G4AtomicTransitionManager::Shell(), and verboseLevel.

◆ CalculateL3CrossSection()

G4double G4ecpssrBaseLixsModel::CalculateL3CrossSection ( G4int  zTarget,
G4double  massIncident,
G4double  energyIncident 
)
overridevirtual

Implements G4VecpssrLiModel.

Definition at line 552 of file G4ecpssrBaseLixsModel.cc.

554{
555 if (zTarget <=13) return 0.;
556
557 //this L3-CrossSection calculation method is done according to Werner Brandt and Grzegorz Lapicki, Phys.Rev.A20 N2 (1979),
558 //and using data tables of O. Benka et al. At.Data Nucl.Data Tables Vol.22 No.3 (1978).
559
560 G4NistManager* massManager = G4NistManager::Instance();
561
563
564 G4double zIncident = 0;
565
566 G4Proton* aProtone = G4Proton::Proton();
567 G4Alpha* aAlpha = G4Alpha::Alpha();
568
569 if (massIncident == aProtone->GetPDGMass() )
570
571 zIncident = (aProtone->GetPDGCharge())/eplus;
572
573 else
574 {
575 if (massIncident == aAlpha->GetPDGMass())
576
577 zIncident = (aAlpha->GetPDGCharge())/eplus;
578
579 else
580 {
581 G4cout << "*** WARNING in G4ecpssrBaseLixsModel::CalculateL3CrossSection : Proton or Alpha incident particles only. " << G4endl;
582 G4cout << massIncident << ", " << aAlpha->GetPDGMass() << " (alpha)" << aProtone->GetPDGMass() << " (proton)" << G4endl;
583 return 0;
584 }
585 }
586
587 G4double l3BindingEnergy = transitionManager->Shell(zTarget,3)->BindingEnergy();
588
589 G4double massTarget = (massManager->GetAtomicMassAmu(zTarget))*amu_c2;
590
591 G4double systemMass =((massIncident*massTarget)/(massIncident+massTarget))/electron_mass_c2;//Mass of the system (projectile, target)
592
593 const G4double zlshell= 4.15;
594
595 G4double screenedzTarget = zTarget-zlshell;//Effective nuclear charge as seen by electrons in L3-subshell
596
597 const G4double rydbergMeV= 13.6056923e-6;
598
599 const G4double nl= 2.;
600
601 G4double tetal3 = (l3BindingEnergy*nl*nl)/((screenedzTarget*screenedzTarget)*rydbergMeV);//Screening parameter
602
603 if (verboseLevel>0) G4cout << " tetal3=" << tetal3<< G4endl;
604
605 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
606
607 const G4double bohrPow2Barn=(Bohr_radius*Bohr_radius)/barn ;//Bohr radius of hydrogen
608
609 G4double sigma0 = 8.*pi*(zIncident*zIncident)*bohrPow2Barn*std::pow(screenedzTarget,-4.);
610
611 G4double velocityl3 = CalculateVelocity(3, zTarget, massIncident, energyIncident);// Scaled velocity
612
613 if (verboseLevel>0) G4cout << " velocityl3=" << velocityl3<< G4endl;
614
615 const G4double l23AnalyticalApproximation= 1.25;
616
617 G4double x3 = (nl*l23AnalyticalApproximation)/velocityl3;
618
619 if (verboseLevel>0) G4cout << " x3=" << x3<< G4endl;
620
621 G4double electrIonizationEnergyl3=0.;
622
623 if ( x3<=0.035) electrIonizationEnergyl3= 0.75*pi*(std::log(1./(x3*x3))-1.);
624 else
625 {
626 if ( x3<=3.) electrIonizationEnergyl3 =G4Exp(-2.*x3)/(0.031+(0.213*std::pow(x3,0.5))+(0.005*x3)-(0.069*std::pow(x3,3./2.))+(0.324*x3*x3));
627 else
628 {
629 if ( x3<=11.) electrIonizationEnergyl3 =2.*G4Exp(-2.*x3)/std::pow(x3,1.6);}
630 }
631
632 G4double hFunctionl3 =(electrIonizationEnergyl3*2.*nl)/(tetal3*std::pow(velocityl3,3));//takes into account the polarization effect
633
634 if (verboseLevel>0) G4cout << " hFunctionl3=" << hFunctionl3<< G4endl;
635
636 G4double gFunctionl3 = (1.+(10.*velocityl3)+(45.*velocityl3*velocityl3)+(102.*std::pow(velocityl3,3.))+(331.*std::pow(velocityl3,4.))+(6.7*std::pow(velocityl3,5.))+(58.*std::pow(velocityl3,6.))+(7.8*std::pow(velocityl3,7.))+ (0.888*std::pow(velocityl3,8.)) )/std::pow(1.+velocityl3,10.);
637 //takes into account the reduced binding effect
638
639 if (verboseLevel>0) G4cout << " gFunctionl3=" << gFunctionl3<< G4endl;
640
641 G4double sigmaPSS_l3 = 1.+(((2.*zIncident)/(screenedzTarget*tetal3))*(gFunctionl3-hFunctionl3));//Binding-polarization factor
642
643 if (verboseLevel>0) G4cout << "sigmaPSS_l3 =" << sigmaPSS_l3<< G4endl;
644
645 const G4double cNaturalUnit= 137.;
646
647 G4double yl3Formula=0.15*(screenedzTarget/cNaturalUnit)*(screenedzTarget/cNaturalUnit)/(velocityl3/sigmaPSS_l3);
648
649 G4double l3relativityCorrection = std::pow((1.+(1.1*yl3Formula*yl3Formula)),0.5)+yl3Formula; // Relativistic correction parameter
650
651 G4double L3etaOverTheta2;
652
653 G4double universalFunction_l3 = 0.;
654
655 G4double sigmaPSSR_l3;
656
657 if ( velocityl3 < 20. )
658 {
659
660 L3etaOverTheta2 = (reducedEnergy* l3relativityCorrection)/((sigmaPSS_l3*tetal3)*(sigmaPSS_l3*tetal3));
661
662 if ( (tetal3*sigmaPSS_l3>=0.2) && (tetal3*sigmaPSS_l3<=2.6670) && (L3etaOverTheta2>=0.1e-3) && (L3etaOverTheta2<=0.866e2) )
663
664 universalFunction_l3 = 2.*FunctionFL2((tetal3*sigmaPSS_l3), L3etaOverTheta2 );
665
666 sigmaPSSR_l3 = (sigma0/(tetal3*sigmaPSS_l3))*universalFunction_l3;
667
668 if (verboseLevel>0) G4cout << " sigma PWBA L3 CS at low velocity range = " << sigmaPSSR_l3<< G4endl;
669
670 }
671
672 else
673
674 {
675
676 L3etaOverTheta2 = reducedEnergy/(tetal3*tetal3);
677
678 if ( (tetal3>=0.2) && (tetal3<=2.6670) && (L3etaOverTheta2>=0.1e-3) && (L3etaOverTheta2<=0.866e2) )
679
680 universalFunction_l3 = 2.*FunctionFL2(tetal3, L3etaOverTheta2 );
681
682 sigmaPSSR_l3 = (sigma0/tetal3)*universalFunction_l3;
683
684 if (verboseLevel>0) G4cout << " sigma PWBA L3 CS at medium and high velocity range = " << sigmaPSSR_l3<< G4endl;
685 }
686
687 G4double pssDeltal3 = (4./(systemMass*sigmaPSS_l3*tetal3))*(sigmaPSS_l3/velocityl3)*(sigmaPSS_l3/velocityl3);
688
689 if (verboseLevel>0) G4cout << " pssDeltal3=" << pssDeltal3<< G4endl;
690
691 if (pssDeltal3>1) return 0.;
692
693 G4double energyLossl3 = std::pow(1-pssDeltal3,0.5);
694
695 if (verboseLevel>0) G4cout << " energyLossl3=" << energyLossl3<< G4endl;
696
697 G4double coulombDeflectionl3 =
698 (8.*pi*zIncident/systemMass)*std::pow(tetal3*sigmaPSS_l3,-2.)*std::pow(velocityl3/sigmaPSS_l3,-3.)*(zTarget/screenedzTarget);
699
700 G4double cParameterl3 = 2.*coulombDeflectionl3/(energyLossl3*(energyLossl3+1.));
701
702 G4double coulombDeflectionFunction_l3 = 11.*ExpIntFunction(12,cParameterl3);//Coulomb-deflection effect correction
703 // *** see Brandt, Phys Rev A10, p477, f25
704
705 if (verboseLevel>0) G4cout << " coulombDeflectionFunction_l3 =" << coulombDeflectionFunction_l3 << G4endl;
706
707 G4double crossSection_L3 = coulombDeflectionFunction_l3 * sigmaPSSR_l3;
708 //ECPSSR L3 -subshell cross section is estimated at perturbed-stationnairy-state(PSS)
709 //and reduced by the energy-loss(E),the Coulomb deflection(C),and the relativity(R) effects
710
711 if (verboseLevel>0) G4cout << " crossSection_L3 =" << crossSection_L3 << G4endl;
712
713 if (crossSection_L3 >= 0)
714 {
715 return crossSection_L3 * barn;
716 }
717 else {return 0;}
718}

References G4Alpha::Alpha(), source.hepunit::amu_c2, barn, G4AtomicShell::BindingEnergy(), source.hepunit::Bohr_radius, CalculateVelocity(), source.hepunit::electron_mass_c2, eplus, ExpIntFunction(), FunctionFL2(), G4cout, G4endl, G4Exp(), G4NistManager::GetAtomicMassAmu(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), G4NistManager::Instance(), G4AtomicTransitionManager::Instance(), pi, G4Proton::Proton(), G4AtomicTransitionManager::Shell(), and verboseLevel.

◆ CalculateVelocity()

G4double G4ecpssrBaseLixsModel::CalculateVelocity ( G4int  subShell,
G4int  zTarget,
G4double  massIncident,
G4double  energyIncident 
)

Definition at line 722 of file G4ecpssrBaseLixsModel.cc.

724{
725
727
728 G4double liBindingEnergy = transitionManager->Shell(zTarget,subShell)->BindingEnergy();
729
730 G4Proton* aProtone = G4Proton::Proton();
731 G4Alpha* aAlpha = G4Alpha::Alpha();
732
733 if (!((massIncident == aProtone->GetPDGMass()) || (massIncident == aAlpha->GetPDGMass())))
734 {
735 G4cout << "*** WARNING in G4ecpssrBaseLixsModel::CalculateVelocity : Proton or Alpha incident particles only. " << G4endl;
736 G4cout << massIncident << ", " << aAlpha->GetPDGMass() << " (alpha)" << aProtone->GetPDGMass() << " (proton)" << G4endl;
737 return 0;
738 }
739
740 constexpr G4double zlshell= 4.15;
741
742 G4double screenedzTarget = zTarget- zlshell;
743
744 constexpr G4double rydbergMeV= 13.6056923e-6;
745
746 constexpr G4double nl= 2.;
747
748 G4double tetali = (liBindingEnergy*nl*nl)/(screenedzTarget*screenedzTarget*rydbergMeV);
749
750 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
751
752 G4double velocity = 2.*nl*std::pow(reducedEnergy,0.5)/tetali;
753 // *** see Brandt, Phys Rev A10, p10, f4
754
755 return velocity;
756}

References G4Alpha::Alpha(), G4AtomicShell::BindingEnergy(), source.hepunit::electron_mass_c2, G4cout, G4endl, G4ParticleDefinition::GetPDGMass(), G4AtomicTransitionManager::Instance(), G4Proton::Proton(), and G4AtomicTransitionManager::Shell().

Referenced by CalculateL1CrossSection(), CalculateL2CrossSection(), and CalculateL3CrossSection().

◆ ExpIntFunction()

G4double G4ecpssrBaseLixsModel::ExpIntFunction ( G4int  n,
G4double  x 
)

Definition at line 117 of file G4ecpssrBaseLixsModel.cc.

119{
120// this function allows fast evaluation of the n order exponential integral function En(x)
121 G4int i;
122 G4int ii;
123 G4int nm1;
124 G4double a;
125 G4double b;
126 G4double c;
127 G4double d;
128 G4double del;
129 G4double fact;
130 G4double h;
131 G4double psi;
132 G4double ans = 0;
133 static const G4double euler= 0.5772156649;
134 static const G4int maxit= 100;
135 static const G4double fpmin = 1.0e-30;
136 static const G4double eps = 1.0e-7;
137 nm1=n-1;
138 if (n<0 || x<0.0 || (x==0.0 && (n==0 || n==1)))
139 G4cout << "*** WARNING in G4ecpssrBaseLixsModel::ExpIntFunction: bad arguments in ExpIntFunction"
140 << G4endl;
141 else {
142 if (n==0) ans=G4Exp(-x)/x;
143 else {
144 if (x==0.0) ans=1.0/nm1;
145 else {
146 if (x > 1.0) {
147 b=x+n;
148 c=1.0/fpmin;
149 d=1.0/b;
150 h=d;
151 for (i=1;i<=maxit;i++) {
152 a=-i*(nm1+i);
153 b +=2.0;
154 d=1.0/(a*d+b);
155 c=b+a/c;
156 del=c*d;
157 h *=del;
158 if (std::fabs(del-1.0) < eps) {
159 ans=h*G4Exp(-x);
160 return ans;
161 }
162 }
163 } else {
164 ans = (nm1!=0 ? 1.0/nm1 : -std::log(x)-euler);
165 fact=1.0;
166 for (i=1;i<=maxit;i++) {
167 fact *=-x/i;
168 if (i !=nm1) del = -fact/(i-nm1);
169 else {
170 psi = -euler;
171 for (ii=1;ii<=nm1;ii++) psi +=1.0/ii;
172 del=fact*(-std::log(x)+psi);
173 }
174 ans += del;
175 if (std::fabs(del) < std::fabs(ans)*eps) return ans;
176 }
177 }
178 }
179 }
180 }
181 return ans;
182}
static const G4double eps
int G4int
Definition: G4Types.hh:85

References eps, G4cout, G4endl, G4Exp(), and CLHEP::detail::n.

Referenced by CalculateL1CrossSection(), CalculateL2CrossSection(), and CalculateL3CrossSection().

◆ FunctionFL1()

G4double G4ecpssrBaseLixsModel::FunctionFL1 ( G4double  k,
G4double  theta 
)
private

Definition at line 760 of file G4ecpssrBaseLixsModel.cc.

761{
762 G4double sigma = 0.;
763 G4double valueT1 = 0;
764 G4double valueT2 = 0;
765 G4double valueE21 = 0;
766 G4double valueE22 = 0;
767 G4double valueE12 = 0;
768 G4double valueE11 = 0;
769 G4double xs11 = 0;
770 G4double xs12 = 0;
771 G4double xs21 = 0;
772 G4double xs22 = 0;
773
774 // PROTECTION TO ALLOW INTERPOLATION AT MINIMUM AND MAXIMUM Eta/Theta2 values
775
776 if (
777 theta==8.66e-4 ||
778 theta==8.66e-3 ||
779 theta==8.66e-2 ||
780 theta==8.66e-1 ||
781 theta==8.66e+00 ||
782 theta==8.66e+01
783 ) theta=theta-1e-12;
784
785 if (
786 theta==1.e-4 ||
787 theta==1.e-3 ||
788 theta==1.e-2 ||
789 theta==1.e-1 ||
790 theta==1.e+00 ||
791 theta==1.e+01
792 ) theta=theta+1e-12;
793
794 // END PROTECTION
795
796 auto t2 = std::upper_bound(dummyVec1.begin(),dummyVec1.end(), k);
797 auto t1 = t2-1;
798
799 auto e12 = std::upper_bound(aVecMap1[(*t1)].begin(),aVecMap1[(*t1)].end(), theta);
800 auto e11 = e12-1;
801
802 auto e22 = std::upper_bound(aVecMap1[(*t2)].begin(),aVecMap1[(*t2)].end(), theta);
803 auto e21 = e22-1;
804
805 valueT1 =*t1;
806 valueT2 =*t2;
807 valueE21 =*e21;
808 valueE22 =*e22;
809 valueE12 =*e12;
810 valueE11 =*e11;
811
812 xs11 = FL1Data[valueT1][valueE11];
813 xs12 = FL1Data[valueT1][valueE12];
814 xs21 = FL1Data[valueT2][valueE21];
815 xs22 = FL1Data[valueT2][valueE22];
816
817 if (verboseLevel>0)
818 G4cout
819 << valueT1 << " "
820 << valueT2 << " "
821 << valueE11 << " "
822 << valueE12 << " "
823 << valueE21 << " "
824 << valueE22 << " "
825 << xs11 << " "
826 << xs12 << " "
827 << xs21 << " "
828 << xs22 << " "
829 << G4endl;
830
831 G4double xsProduct = xs11 * xs12 * xs21 * xs22;
832
833 if (xs11==0 || xs12==0 ||xs21==0 ||xs22==0) return (0.);
834
835 if (xsProduct != 0.)
836 {
837 sigma = QuadInterpolator( valueE11, valueE12,
838 valueE21, valueE22,
839 xs11, xs12,
840 xs21, xs22,
841 valueT1, valueT2,
842 k, theta );
843 }
844
845 return sigma;
846}
G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double x11, G4double x12, G4double x21, G4double x22, G4double t1, G4double t2, G4double t, G4double e)

References aVecMap1, dummyVec1, FL1Data, G4cout, G4endl, QuadInterpolator(), and verboseLevel.

Referenced by CalculateL1CrossSection().

◆ FunctionFL2()

G4double G4ecpssrBaseLixsModel::FunctionFL2 ( G4double  k,
G4double  theta 
)
private

Definition at line 850 of file G4ecpssrBaseLixsModel.cc.

851{
852
853 G4double sigma = 0.;
854 G4double valueT1 = 0;
855 G4double valueT2 = 0;
856 G4double valueE21 = 0;
857 G4double valueE22 = 0;
858 G4double valueE12 = 0;
859 G4double valueE11 = 0;
860 G4double xs11 = 0;
861 G4double xs12 = 0;
862 G4double xs21 = 0;
863 G4double xs22 = 0;
864
865 // PROTECTION TO ALLOW INTERPOLATION AT MINIMUM AND MAXIMUM Eta/Theta2 values
866
867 if (
868 theta==8.66e-4 ||
869 theta==8.66e-3 ||
870 theta==8.66e-2 ||
871 theta==8.66e-1 ||
872 theta==8.66e+00 ||
873 theta==8.66e+01
874 ) theta=theta-1e-12;
875
876 if (
877 theta==1.e-4 ||
878 theta==1.e-3 ||
879 theta==1.e-2 ||
880 theta==1.e-1 ||
881 theta==1.e+00 ||
882 theta==1.e+01
883 ) theta=theta+1e-12;
884
885 // END PROTECTION
886
887 auto t2 = std::upper_bound(dummyVec2.begin(),dummyVec2.end(), k);
888 auto t1 = t2-1;
889 auto e12 = std::upper_bound(aVecMap2[(*t1)].begin(),aVecMap2[(*t1)].end(), theta);
890 auto e11 = e12-1;
891 auto e22 = std::upper_bound(aVecMap2[(*t2)].begin(),aVecMap2[(*t2)].end(), theta);
892 auto e21 = e22-1;
893
894 valueT1 =*t1;
895 valueT2 =*t2;
896 valueE21 =*e21;
897 valueE22 =*e22;
898 valueE12 =*e12;
899 valueE11 =*e11;
900
901 xs11 = FL2Data[valueT1][valueE11];
902 xs12 = FL2Data[valueT1][valueE12];
903 xs21 = FL2Data[valueT2][valueE21];
904 xs22 = FL2Data[valueT2][valueE22];
905
906 if (verboseLevel>0)
907 G4cout
908 << valueT1 << " "
909 << valueT2 << " "
910 << valueE11 << " "
911 << valueE12 << " "
912 << valueE21 << " "
913 << valueE22 << " "
914 << xs11 << " "
915 << xs12 << " "
916 << xs21 << " "
917 << xs22 << " "
918 << G4endl;
919
920 G4double xsProduct = xs11 * xs12 * xs21 * xs22;
921
922 if (xs11==0 || xs12==0 ||xs21==0 ||xs22==0) return (0.);
923
924 if (xsProduct != 0.)
925 {
926 sigma = QuadInterpolator( valueE11, valueE12,
927 valueE21, valueE22,
928 xs11, xs12,
929 xs21, xs22,
930 valueT1, valueT2,
931 k, theta );
932 }
933
934 return sigma;
935}

References aVecMap2, dummyVec2, FL2Data, G4cout, G4endl, QuadInterpolator(), and verboseLevel.

Referenced by CalculateL2CrossSection(), and CalculateL3CrossSection().

◆ LinLinInterpolate()

G4double G4ecpssrBaseLixsModel::LinLinInterpolate ( G4double  e1,
G4double  e2,
G4double  e,
G4double  xs1,
G4double  xs2 
)
private

Definition at line 939 of file G4ecpssrBaseLixsModel.cc.

944{
945 G4double value = xs1 + (xs2 - xs1)*(e - e1)/ (e2 - e1);
946 return value;
947}
static const G4double e1[44]
static const G4double e2[44]

References e1, and e2.

◆ LinLogInterpolate()

G4double G4ecpssrBaseLixsModel::LinLogInterpolate ( G4double  e1,
G4double  e2,
G4double  e,
G4double  xs1,
G4double  xs2 
)
private

Definition at line 951 of file G4ecpssrBaseLixsModel.cc.

956{
957 G4double d1 = std::log(xs1);
958 G4double d2 = std::log(xs2);
959 G4double value = G4Exp(d1 + (d2 - d1)*(e - e1)/ (e2 - e1));
960 return value;
961}
static const G4double d1
static const G4double d2

References d1, d2, e1, e2, and G4Exp().

◆ LogLogInterpolate()

G4double G4ecpssrBaseLixsModel::LogLogInterpolate ( G4double  e1,
G4double  e2,
G4double  e,
G4double  xs1,
G4double  xs2 
)
private

Definition at line 965 of file G4ecpssrBaseLixsModel.cc.

970{
971 G4double a = (std::log10(xs2)-std::log10(xs1)) / (std::log10(e2)-std::log10(e1));
972 G4double b = std::log10(xs2) - a*std::log10(e2);
973 G4double sigma = a*std::log10(e) + b;
974 G4double value = (std::pow(10.,sigma));
975 return value;
976}

References e1, and e2.

Referenced by QuadInterpolator().

◆ operator=()

G4ecpssrBaseLixsModel & G4ecpssrBaseLixsModel::operator= ( const G4ecpssrBaseLixsModel right)
delete

◆ QuadInterpolator()

G4double G4ecpssrBaseLixsModel::QuadInterpolator ( G4double  e11,
G4double  e12,
G4double  e21,
G4double  e22,
G4double  x11,
G4double  x12,
G4double  x21,
G4double  x22,
G4double  t1,
G4double  t2,
G4double  t,
G4double  e 
)
private

Definition at line 980 of file G4ecpssrBaseLixsModel.cc.

986{
987 // Log-Log
988 G4double interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12);
989 G4double interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22);
990 G4double value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2);
991 return value;
992
993}
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)

References LogLogInterpolate().

Referenced by FunctionFL1(), and FunctionFL2().

Field Documentation

◆ aVecMap1

VecMap G4ecpssrBaseLixsModel::aVecMap1
private

Definition at line 96 of file G4ecpssrBaseLixsModel.hh.

Referenced by FunctionFL1(), and G4ecpssrBaseLixsModel().

◆ aVecMap2

VecMap G4ecpssrBaseLixsModel::aVecMap2
private

Definition at line 97 of file G4ecpssrBaseLixsModel.hh.

Referenced by FunctionFL2(), and G4ecpssrBaseLixsModel().

◆ dummyVec1

std::vector<G4double> G4ecpssrBaseLixsModel::dummyVec1
private

Definition at line 92 of file G4ecpssrBaseLixsModel.hh.

Referenced by FunctionFL1(), and G4ecpssrBaseLixsModel().

◆ dummyVec2

std::vector<G4double> G4ecpssrBaseLixsModel::dummyVec2
private

Definition at line 93 of file G4ecpssrBaseLixsModel.hh.

Referenced by FunctionFL2(), and G4ecpssrBaseLixsModel().

◆ FL1Data

TriDimensionMap G4ecpssrBaseLixsModel::FL1Data
private

Definition at line 90 of file G4ecpssrBaseLixsModel.hh.

Referenced by FunctionFL1(), and G4ecpssrBaseLixsModel().

◆ FL2Data

TriDimensionMap G4ecpssrBaseLixsModel::FL2Data
private

Definition at line 91 of file G4ecpssrBaseLixsModel.hh.

Referenced by FunctionFL2(), and G4ecpssrBaseLixsModel().

◆ verboseLevel

G4int G4ecpssrBaseLixsModel::verboseLevel
private

The documentation for this class was generated from the following files: