Geant4-11
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
G4PAIySection Class Reference

#include <G4PAIySection.hh>

Public Member Functions

void ComputeLowEnergyCof (const G4Material *material)
 
G4double DifPAIySection (G4int intervalNumber, G4double betaGammaSq)
 
 G4PAIySection ()
 
 G4PAIySection (const G4PAIySection &)=delete
 
G4double GetDifPAIySection (G4int i)
 
G4double GetEnergyInterval (G4int i)
 
G4double GetIntegralCerenkov (G4int i) const
 
G4double GetIntegralPAIdEdx (G4int i) const
 
G4double GetIntegralPAIySection (G4int i) const
 
G4double GetIntegralPlasmon (G4int i) const
 
G4int GetIntervalNumber () const
 
G4double GetLorentzFactor (G4int j) const
 
G4double GetMeanCerenkovLoss () const
 
G4double GetMeanEnergyLoss () const
 
G4double GetMeanPlasmonLoss () const
 
G4double GetNormalizationCof () const
 
G4int GetNumberOfGammas () const
 
G4double GetPAIdNdxCrenkov (G4int i)
 
G4double GetPAIdNdxPlasmon (G4int i)
 
G4double GetPAItable (G4int i, G4int j) const
 
G4double GetSplineEnergy (G4int i) const
 
G4int GetSplineSize () const
 
G4double GetStepCerenkovLoss (G4double step)
 
G4double GetStepEnergyLoss (G4double step)
 
G4double GetStepPlasmonLoss (G4double step)
 
G4double ImPartDielectricConst (G4int intervalNumber, G4double energy)
 
void Initialize (const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
 
void InitPAI ()
 
void IntegralCerenkov ()
 
void IntegralPAIySection ()
 
void IntegralPlasmon ()
 
void NormShift (G4double betaGammaSq)
 
G4PAIySectionoperator= (const G4PAIySection &right)=delete
 
G4double PAIdNdxCerenkov (G4int intervalNumber, G4double betaGammaSq)
 
G4double PAIdNdxPlasmon (G4int intervalNumber, G4double betaGammaSq)
 
G4double RePartDielectricConst (G4double energy)
 
G4double RutherfordIntegral (G4int intervalNumber, G4double limitLow, G4double limitHigh)
 
void SetVerbose (G4int v)
 
void SplainPAI (G4double betaGammaSq)
 
G4double SumOverBordCerenkov (G4int intervalNumber, G4double energy)
 
G4double SumOverBorder (G4int intervalNumber, G4double energy)
 
G4double SumOverBorderdEdx (G4int intervalNumber, G4double energy)
 
G4double SumOverBordPlasmon (G4int intervalNumber, G4double energy)
 
G4double SumOverInterCerenkov (G4int intervalNumber)
 
G4double SumOverInterPlasmon (G4int intervalNumber)
 
G4double SumOverInterval (G4int intervalNumber)
 
G4double SumOverIntervaldEdx (G4int intervalNumber)
 
 ~G4PAIySection ()=default
 

Private Member Functions

void CallError (G4int i, const G4String &methodName) const
 

Private Attributes

G4double betaBohr
 
G4double betaBohr4
 
G4DataVector fA1
 
G4DataVector fA2
 
G4DataVector fA3
 
G4DataVector fA4
 
G4double fDensity
 
G4DataVector fDifPAIySection
 
G4DataVector fdNdxCerenkov
 
G4DataVector fdNdxPlasmon
 
G4double fElectronDensity
 
G4DataVector fEnergyInterval
 
G4DataVector fImPartDielectricConst
 
G4DataVector fIntegralCerenkov
 
G4DataVector fIntegralPAIdEdx
 
G4DataVector fIntegralPAIySection
 
G4DataVector fIntegralPlasmon
 
G4DataVector fIntegralTerm
 
G4int fIntervalNumber
 
G4double fLowEnergyCof
 
G4double fNormalizationCof
 
G4double fPAItable [500][112]
 
G4DataVector fRePartDielectricConst
 
G4SandiaTablefSandia
 
G4DataVector fSplineEnergy
 
G4int fSplineNumber
 
G4int fVerbose
 

Static Private Attributes

static const G4double fDelta = 0.005
 
static const G4double fError = 0.005
 
static const G4double fLorentzFactor [112]
 
static const G4int fMaxSplineSize = 500
 
static G4int fNumberOfGammas = 111
 
static const G4int fRefGammaNumber = 29
 

Detailed Description

Definition at line 48 of file G4PAIySection.hh.

Constructor & Destructor Documentation

◆ G4PAIySection() [1/2]

G4PAIySection::G4PAIySection ( )
explicit

Definition at line 75 of file G4PAIySection.cc.

76{
77 fSandia = 0;
80 fVerbose = 0;
81
83 G4double cofBetaBohr = 4.0;
85 betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr;
86
98
99 for( G4int i = 0; i < 500; ++i )
100 {
101 for( G4int j = 0; j < 112; ++j ) { fPAItable[i][j] = 0.0; }
102 }
103}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
static const G4int fMaxSplineSize
G4DataVector fIntegralPAIdEdx
G4DataVector fImPartDielectricConst
G4DataVector fdNdxCerenkov
G4DataVector fDifPAIySection
G4double betaBohr4
G4DataVector fdNdxPlasmon
G4DataVector fSplineEnergy
G4SandiaTable * fSandia
G4DataVector fIntegralPAIySection
G4double fDensity
G4DataVector fIntegralCerenkov
G4DataVector fIntegralPlasmon
G4DataVector fIntegralTerm
G4double betaBohr
G4DataVector fRePartDielectricConst
G4double fNormalizationCof
G4double fElectronDensity
G4double fPAItable[500][112]
G4double fLowEnergyCof
int fine_structure_const
Definition: hepunit.py:286

References betaBohr, betaBohr4, fDensity, fDifPAIySection, fdNdxCerenkov, fdNdxPlasmon, fElectronDensity, fImPartDielectricConst, source.hepunit::fine_structure_const, fIntegralCerenkov, fIntegralPAIdEdx, fIntegralPAIySection, fIntegralPlasmon, fIntegralTerm, fIntervalNumber, fLowEnergyCof, fMaxSplineSize, fNormalizationCof, fPAItable, fRePartDielectricConst, fSandia, fSplineEnergy, fSplineNumber, and fVerbose.

◆ ~G4PAIySection()

G4PAIySection::~G4PAIySection ( )
default

◆ G4PAIySection() [2/2]

G4PAIySection::G4PAIySection ( const G4PAIySection )
delete

Member Function Documentation

◆ CallError()

void G4PAIySection::CallError ( G4int  i,
const G4String methodName 
) const
private

Definition at line 1348 of file G4PAIySection.cc.

1349{
1350 G4String head = "G4PAIySection::" + methodName + "()";
1352 ed << "Wrong index " << i << " fSplineNumber= " << fSplineNumber;
1353 G4Exception(head,"pai001",FatalException,ed);
1354}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40

References FatalException, fSplineNumber, and G4Exception().

Referenced by GetIntegralCerenkov(), GetIntegralPAIdEdx(), GetIntegralPAIySection(), GetIntegralPlasmon(), and GetSplineEnergy().

◆ ComputeLowEnergyCof()

void G4PAIySection::ComputeLowEnergyCof ( const G4Material material)

Definition at line 245 of file G4PAIySection.cc.

246{
247 G4int i, numberOfElements = material->GetNumberOfElements();
248 G4double sumZ = 0., sumCof = 0.;
249
250 static const G4double p0 = 1.20923e+00;
251 static const G4double p1 = 3.53256e-01;
252 static const G4double p2 = -1.45052e-03;
253
254 G4double* thisMaterialZ = new G4double[numberOfElements];
255 G4double* thisMaterialCof = new G4double[numberOfElements];
256
257 for( i = 0; i < numberOfElements; ++i )
258 {
259 thisMaterialZ[i] = material->GetElement(i)->GetZ();
260 sumZ += thisMaterialZ[i];
261 thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
262 }
263 for( i = 0; i < numberOfElements; ++i )
264 {
265 sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
266 }
267 fLowEnergyCof = sumCof;
268 delete [] thisMaterialZ;
269 delete [] thisMaterialCof;
270 // G4cout<<"fLowEnergyCof = "<<fLowEnergyCof<<G4endl;
271}
string material
Definition: eplot.py:19

References fLowEnergyCof, and eplot::material.

Referenced by Initialize().

◆ DifPAIySection()

G4double G4PAIySection::DifPAIySection ( G4int  intervalNumber,
G4double  betaGammaSq 
)

Definition at line 589 of file G4PAIySection.cc.

591{
592 G4double beta, be2,cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
593 //G4double beta, be4;
594 //G4double be4;
595 // G4double betaBohr2 = fine_structure_const*fine_structure_const;
596 // G4double betaBohr4 = betaBohr2*betaBohr2*4.0;
597 be2 = betaGammaSq/(1 + betaGammaSq);
598 //be4 = be2*be2;
599 beta = sqrt(be2);
600 cof = 1;
601 x1 = log(2*electron_mass_c2/fSplineEnergy[i]);
602
603 if( betaGammaSq < 0.01 ) x2 = log(be2);
604 else
605 {
606 x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
607 (1/betaGammaSq - fRePartDielectricConst[i]) +
609 }
610 if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
611 {
612 x6=0;
613 }
614 else
615 {
616 x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
617 x5 = -1 - fRePartDielectricConst[i] +
618 be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
620
621 x7 = atan2(fImPartDielectricConst[i],x3);
622 x6 = x5 * x7;
623 }
624 // if(fImPartDielectricConst[i] == 0) x6 = 0;
625
626 x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
627 // if( x4 < 0.0 ) x4 = 0.0;
628 x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
630
631 result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
632 result = std::max(result, 1.0e-8);
633 result *= fine_structure_const/be2/pi;
634 // low energy correction
635
636 G4double lowCof = fLowEnergyCof; // 6.0 ; // Ar ~ 4.; -> fLowCof as f(Z1,Z2)?
637
638 result *= (1 - exp(-beta/betaBohr/lowCof));
639
640 // result *= (1-exp(-beta/betaBohr))*(1-exp(-beta/betaBohr));
641 // result *= (1-exp(-be2/betaBohr2));
642 // result *= (1-exp(-be4/betaBohr4));
643 // if(fDensity >= 0.1)
644 if(x8 > 0.)
645 {
646 result /= x8;
647 }
648 return result;
649
650} // end of DifPAIySection
static constexpr double pi
Definition: G4SIunits.hh:55
T max(const T t1, const T t2)
brief Return the largest of the two arguments
float electron_mass_c2
Definition: hepunit.py:273
float hbarc
Definition: hepunit.py:264

References anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, betaBohr, source.hepunit::electron_mass_c2, fImPartDielectricConst, source.hepunit::fine_structure_const, fIntegralTerm, fLowEnergyCof, fRePartDielectricConst, fSplineEnergy, source.hepunit::hbarc, G4INCL::Math::max(), and pi.

Referenced by Initialize(), InitPAI(), NormShift(), and SplainPAI().

◆ GetDifPAIySection()

G4double G4PAIySection::GetDifPAIySection ( G4int  i)
inline

Definition at line 120 of file G4PAIySection.hh.

120{ return fDifPAIySection[i]; }

References fDifPAIySection.

◆ GetEnergyInterval()

G4double G4PAIySection::GetEnergyInterval ( G4int  i)
inline

Definition at line 118 of file G4PAIySection.hh.

118{ return fEnergyInterval[i]; }
G4DataVector fEnergyInterval

References fEnergyInterval.

◆ GetIntegralCerenkov()

G4double G4PAIySection::GetIntegralCerenkov ( G4int  i) const
inline

Definition at line 221 of file G4PAIySection.hh.

222{
223 if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralCerenkov"); }
224 return fIntegralCerenkov[i];
225}
void CallError(G4int i, const G4String &methodName) const

References CallError(), fIntegralCerenkov, and fSplineNumber.

◆ GetIntegralPAIdEdx()

G4double G4PAIySection::GetIntegralPAIdEdx ( G4int  i) const
inline

Definition at line 215 of file G4PAIySection.hh.

216{
217 if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralPAIdEdx"); }
218 return fIntegralPAIdEdx[i];
219}

References CallError(), fIntegralPAIdEdx, and fSplineNumber.

Referenced by G4PAIModelData::Initialise().

◆ GetIntegralPAIySection()

G4double G4PAIySection::GetIntegralPAIySection ( G4int  i) const
inline

Definition at line 209 of file G4PAIySection.hh.

210{
211 if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralPAIySection"); }
212 return fIntegralPAIySection[i];
213}

References CallError(), fIntegralPAIySection, and fSplineNumber.

Referenced by G4PAIModelData::Initialise().

◆ GetIntegralPlasmon()

G4double G4PAIySection::GetIntegralPlasmon ( G4int  i) const
inline

Definition at line 227 of file G4PAIySection.hh.

228{
229 if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralPlasmon"); }
230 return fIntegralPlasmon[i];
231}

References CallError(), fIntegralPlasmon, and fSplineNumber.

◆ GetIntervalNumber()

G4int G4PAIySection::GetIntervalNumber ( ) const
inline

Definition at line 116 of file G4PAIySection.hh.

116{ return fIntervalNumber; }

References fIntervalNumber.

◆ GetLorentzFactor()

G4double G4PAIySection::GetLorentzFactor ( G4int  j) const

Definition at line 109 of file G4PAIySection.cc.

110{
111 return fLorentzFactor[j];
112}
static const G4double fLorentzFactor[112]

References fLorentzFactor.

◆ GetMeanCerenkovLoss()

G4double G4PAIySection::GetMeanCerenkovLoss ( ) const
inline

Definition at line 125 of file G4PAIySection.hh.

125{return fIntegralCerenkov[0]; }

References fIntegralCerenkov.

◆ GetMeanEnergyLoss()

G4double G4PAIySection::GetMeanEnergyLoss ( ) const
inline

Definition at line 124 of file G4PAIySection.hh.

124{return fIntegralPAIySection[0]; }

References fIntegralPAIySection.

Referenced by G4PAIModelData::Initialise().

◆ GetMeanPlasmonLoss()

G4double G4PAIySection::GetMeanPlasmonLoss ( ) const
inline

Definition at line 126 of file G4PAIySection.hh.

126{return fIntegralPlasmon[0]; }

References fIntegralPlasmon.

◆ GetNormalizationCof()

G4double G4PAIySection::GetNormalizationCof ( ) const
inline

Definition at line 128 of file G4PAIySection.hh.

128{ return fNormalizationCof; }

References fNormalizationCof.

◆ GetNumberOfGammas()

G4int G4PAIySection::GetNumberOfGammas ( ) const
inline

Definition at line 112 of file G4PAIySection.hh.

112{ return fNumberOfGammas; }
static G4int fNumberOfGammas

References fNumberOfGammas.

◆ GetPAIdNdxCrenkov()

G4double G4PAIySection::GetPAIdNdxCrenkov ( G4int  i)
inline

Definition at line 121 of file G4PAIySection.hh.

121{ return fdNdxCerenkov[i]; }

References fdNdxCerenkov.

◆ GetPAIdNdxPlasmon()

G4double G4PAIySection::GetPAIdNdxPlasmon ( G4int  i)
inline

Definition at line 122 of file G4PAIySection.hh.

122{ return fdNdxPlasmon[i]; }

References fdNdxPlasmon.

◆ GetPAItable()

G4double G4PAIySection::GetPAItable ( G4int  i,
G4int  j 
) const
inline

Definition at line 198 of file G4PAIySection.hh.

199{
200 return fPAItable[i][j];
201}

References fPAItable.

◆ GetSplineEnergy()

G4double G4PAIySection::GetSplineEnergy ( G4int  i) const
inline

Definition at line 203 of file G4PAIySection.hh.

204{
205 if(i < 1 || i > fSplineNumber) { CallError(i, "GetSplineEnergy"); }
206 return fSplineEnergy[i];
207}

References CallError(), fSplineEnergy, and fSplineNumber.

Referenced by G4PAIModelData::Initialise().

◆ GetSplineSize()

G4int G4PAIySection::GetSplineSize ( ) const
inline

Definition at line 114 of file G4PAIySection.hh.

114{ return fSplineNumber; }

References fSplineNumber.

Referenced by G4PAIModelData::Initialise().

◆ GetStepCerenkovLoss()

G4double G4PAIySection::GetStepCerenkovLoss ( G4double  step)

Definition at line 1275 of file G4PAIySection.cc.

1276{
1277 G4int iTransfer ;
1278 G4long numOfCollisions;
1279 G4double loss = 0.0;
1280 G4double meanNumber, position;
1281
1282 // G4cout<<" G4PAIySection::GetStepCreLosnkovs "<<G4endl;
1283
1284
1285
1286 meanNumber = fIntegralCerenkov[1]*step;
1287 numOfCollisions = G4Poisson(meanNumber);
1288
1289 // G4cout<<"numOfCollisions = "<<numOfCollisions<<G4endl;
1290
1291 while(numOfCollisions)
1292 {
1294
1295 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1296 {
1297 if( position >= fIntegralCerenkov[iTransfer] ) break;
1298 }
1299 loss += fSplineEnergy[iTransfer] ;
1300 numOfCollisions--;
1301 // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
1302 }
1303 // G4cout<<"PAI Cerenkov loss = "<<loss/keV<<" keV"<<G4endl;
1304
1305 return loss;
1306}
G4long G4Poisson(G4double mean)
Definition: G4Poisson.hh:50
long G4long
Definition: G4Types.hh:87
#define G4UniformRand()
Definition: Randomize.hh:52
#define position
Definition: xmlparse.cc:622

References fIntegralCerenkov, fSplineEnergy, fSplineNumber, G4Poisson(), G4UniformRand, and position.

◆ GetStepEnergyLoss()

G4double G4PAIySection::GetStepEnergyLoss ( G4double  step)

Definition at line 1238 of file G4PAIySection.cc.

1239{
1240 G4int iTransfer ;
1241 G4long numOfCollisions;
1242 G4double loss = 0.0;
1243 G4double meanNumber, position;
1244
1245 // G4cout<<" G4PAIySection::GetStepEnergyLoss "<<G4endl;
1246
1247
1248
1249 meanNumber = fIntegralPAIySection[1]*step;
1250 numOfCollisions = G4Poisson(meanNumber);
1251
1252 // G4cout<<"numOfCollisions = "<<numOfCollisions<<G4endl;
1253
1254 while(numOfCollisions)
1255 {
1257
1258 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1259 {
1260 if( position >= fIntegralPAIySection[iTransfer] ) break;
1261 }
1262 loss += fSplineEnergy[iTransfer] ;
1263 numOfCollisions--;
1264 // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
1265 }
1266 // G4cout<<"PAI energy loss = "<<loss/keV<<" keV"<<G4endl;
1267
1268 return loss;
1269}

References fIntegralPAIySection, fSplineEnergy, fSplineNumber, G4Poisson(), G4UniformRand, and position.

◆ GetStepPlasmonLoss()

G4double G4PAIySection::GetStepPlasmonLoss ( G4double  step)

Definition at line 1312 of file G4PAIySection.cc.

1313{
1314 G4int iTransfer ;
1315 G4long numOfCollisions;
1316 G4double loss = 0.0;
1317 G4double meanNumber, position;
1318
1319 // G4cout<<" G4PAIySection::GetStepCreLosnkovs "<<G4endl;
1320
1321
1322
1323 meanNumber = fIntegralPlasmon[1]*step;
1324 numOfCollisions = G4Poisson(meanNumber);
1325
1326 // G4cout<<"numOfCollisions = "<<numOfCollisions<<G4endl;
1327
1328 while(numOfCollisions)
1329 {
1331
1332 for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1333 {
1334 if( position >= fIntegralPlasmon[iTransfer] ) break;
1335 }
1336 loss += fSplineEnergy[iTransfer] ;
1337 numOfCollisions--;
1338 // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
1339 }
1340 // G4cout<<"PAI Plasmon loss = "<<loss/keV<<" keV"<<G4endl;
1341
1342 return loss;
1343}

References fIntegralPlasmon, fSplineEnergy, fSplineNumber, G4Poisson(), G4UniformRand, and position.

◆ ImPartDielectricConst()

G4double G4PAIySection::ImPartDielectricConst ( G4int  intervalNumber,
G4double  energy 
)

Definition at line 511 of file G4PAIySection.cc.

513{
514 G4double energy2,energy3,energy4,result;
515
516 energy2 = energy1*energy1;
517 energy3 = energy2*energy1;
518 energy4 = energy3*energy1;
519
520 result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
521 result *=hbarc/energy1;
522
523 return result;
524
525} // end of ImPartDielectricConst
G4DataVector fA3
G4DataVector fA1
G4DataVector fA2
G4DataVector fA4

References fA1, fA2, fA3, fA4, and source.hepunit::hbarc.

Referenced by NormShift(), and SplainPAI().

◆ Initialize()

void G4PAIySection::Initialize ( const G4Material material,
G4double  maxEnergyTransfer,
G4double  betaGammaSq,
G4SandiaTable sandia 
)

Definition at line 118 of file G4PAIySection.cc.

122{
123 if(fVerbose > 0)
124 {
125 G4cout<<G4endl;
126 G4cout<<"G4PAIySection::Initialize(...,G4SandiaTable* sandia)"<<G4endl;
127 G4cout<<G4endl;
128 }
129 G4int i, j;
130
131 fSandia = sandia;
133 fDensity = material->GetDensity();
134 fElectronDensity = material->GetElectronDensity();
135
136 // fIntervalNumber--;
137
138 if( fVerbose > 0 )
139 {
140 G4cout<<"fDensity = "<<fDensity<<"\t"<<fElectronDensity<<"\t fIntervalNumber = "
141 <<fIntervalNumber<< " (beta*gamma)^2= " << betaGammaSq << G4endl;
142 }
148
149 for( i = 1; i <= fIntervalNumber; ++i )
150 {
151 if ( sandia->GetSandiaMatTablePAI(i-1,0) < 1.*eV )
152 {
154 continue;
155 }
156 if( ( sandia->GetSandiaMatTablePAI(i-1,0) >= maxEnergyTransfer )
157 || i >= fIntervalNumber )
158 {
159 fEnergyInterval[i] = maxEnergyTransfer;
160 fIntervalNumber = i;
161 break;
162 }
163 fEnergyInterval[i] = sandia->GetSandiaMatTablePAI(i-1,0);
164 fA1[i] = sandia->GetSandiaMatTablePAI(i-1,1);
165 fA2[i] = sandia->GetSandiaMatTablePAI(i-1,2);
166 fA3[i] = sandia->GetSandiaMatTablePAI(i-1,3);
167 fA4[i] = sandia->GetSandiaMatTablePAI(i-1,4);
168
169 if( fVerbose > 0 ) {
170 G4cout<<i<<"\t"<<fEnergyInterval[i]/keV<<"\t"<<fA1[i]<<"\t"<<fA2[i]<<"\t"
171 <<fA3[i]<<"\t"<<fA4[i]<<"\t"<<G4endl;
172 }
173 }
174 if( fVerbose > 0 ) {
175 G4cout<<"last i = "<<i<<"; "<<"fIntervalNumber = "
177 }
178 if( fEnergyInterval[fIntervalNumber] != maxEnergyTransfer )
179 {
181 fEnergyInterval[fIntervalNumber] = maxEnergyTransfer;
182 }
183 if( fVerbose > 0 )
184 {
185 for( i = 1; i <= fIntervalNumber; ++i )
186 {
187 G4cout<<i<<"\t"<<fEnergyInterval[i]/keV<<"\t"<<fA1[i]<<"\t"<<fA2[i]<<"\t"
188 <<fA3[i]<<"\t"<<fA4[i]<<"\t"<<G4endl;
189 }
190 }
191 if( fVerbose > 0 ) {
192 G4cout<<"Now checking, if two borders are too close together"<<G4endl;
193 }
194 for( i = 1; i < fIntervalNumber; ++i )
195 {
196 if( fEnergyInterval[i+1]-fEnergyInterval[i] >
197 1.5*fDelta*(fEnergyInterval[i+1]+fEnergyInterval[i]) ) continue;
198 else
199 {
200 for( j = i; j < fIntervalNumber; j++ )
201 {
203 fA1[j] = fA1[j+1];
204 fA2[j] = fA2[j+1];
205 fA3[j] = fA3[j+1];
206 fA4[j] = fA4[j+1];
207 }
209 }
210 }
211 if( fVerbose > 0 )
212 {
213 for( i = 1; i <= fIntervalNumber; ++i )
214 {
215 G4cout<<i<<"\t"<<fEnergyInterval[i]/keV<<"\t"<<fA1[i]<<"\t"<<fA2[i]<<"\t"
216 <<fA3[i]<<"\t"<<fA4[i]<<"\t"<<G4endl;
217 }
218 }
219 // Preparation of fSplineEnergy array corresponding to min ionisation, G~4
220
222
223 G4double betaGammaSqRef =
225
226 NormShift(betaGammaSqRef);
227 SplainPAI(betaGammaSqRef);
228
229 // Preparation of integral PAI cross section for input betaGammaSq
230
231 for( i = 1; i <= fSplineNumber; ++i )
232 {
233 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
234
235 if( fVerbose > 0 ) G4cout<<i<<"; dNdxPAI = "<<fDifPAIySection[i]<<G4endl;
236 }
238}
static constexpr double keV
Definition: G4SIunits.hh:202
static constexpr double eV
Definition: G4SIunits.hh:201
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static const G4double fDelta
void NormShift(G4double betaGammaSq)
void ComputeLowEnergyCof(const G4Material *material)
void IntegralPAIySection()
static const G4int fRefGammaNumber
G4double DifPAIySection(G4int intervalNumber, G4double betaGammaSq)
void SplainPAI(G4double betaGammaSq)
G4int GetMaxInterval() const
G4double GetSandiaMatTablePAI(G4int, G4int) const

References ComputeLowEnergyCof(), DifPAIySection(), eV, fA1, fA2, fA3, fA4, fDelta, fDensity, fDifPAIySection, fElectronDensity, fEnergyInterval, fIntervalNumber, fLorentzFactor, fRefGammaNumber, fSandia, fSplineNumber, fVerbose, G4cout, G4endl, G4SandiaTable::GetMaxInterval(), G4SandiaTable::GetSandiaMatTablePAI(), IntegralPAIySection(), keV, eplot::material, NormShift(), and SplainPAI().

Referenced by G4PAIModelData::Initialise().

◆ InitPAI()

void G4PAIySection::InitPAI ( )

Definition at line 278 of file G4PAIySection.cc.

279{
280 G4int i;
283
284 // Preparation of integral PAI cross section for reference gamma
285
286 NormShift(betaGammaSq);
287 SplainPAI(betaGammaSq);
288
292
293 for( i = 0; i<= fSplineNumber; ++i)
294 {
296
297 if(i != 0) fPAItable[i][0] = fSplineEnergy[i];
298 }
299 fPAItable[0][0] = fSplineNumber;
300
301 for( G4int j = 1; j < 112; ++j) // for other gammas
302 {
303 if( j == fRefGammaNumber ) continue;
304
305 betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
306
307 for(i = 1; i <= fSplineNumber; ++i)
308 {
309 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
310 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
311 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
312 }
316
317 for(i = 0; i <= fSplineNumber; ++i)
318 {
320 }
321 }
322}
void IntegralPlasmon()
void IntegralCerenkov()
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)

References DifPAIySection(), fDifPAIySection, fdNdxCerenkov, fdNdxPlasmon, fIntegralPAIySection, fLorentzFactor, fPAItable, fRefGammaNumber, fSplineEnergy, fSplineNumber, IntegralCerenkov(), IntegralPAIySection(), IntegralPlasmon(), NormShift(), PAIdNdxCerenkov(), PAIdNdxPlasmon(), and SplainPAI().

◆ IntegralCerenkov()

void G4PAIySection::IntegralCerenkov ( )

Definition at line 785 of file G4PAIySection.cc.

786{
787 G4int i, k;
789 fIntegralCerenkov[0] = 0;
790 k = fIntervalNumber -1;
791
792 for( i = fSplineNumber-1; i >= 1; i-- )
793 {
794 if(fSplineEnergy[i] >= fEnergyInterval[k])
795 {
797 // G4cout<<"int: i = "<<i<<"; sumC = "<<fIntegralCerenkov[i]<<G4endl;
798 }
799 else
800 {
803 k--;
804 // G4cout<<"bord: i = "<<i<<"; sumC = "<<fIntegralCerenkov[i]<<G4endl;
805 }
806 }
807
808} // end of IntegralCerenkov
G4double SumOverInterCerenkov(G4int intervalNumber)
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)

References fEnergyInterval, fIntegralCerenkov, fIntervalNumber, fSplineEnergy, fSplineNumber, SumOverBordCerenkov(), and SumOverInterCerenkov().

Referenced by InitPAI().

◆ IntegralPAIySection()

void G4PAIySection::IntegralPAIySection ( )

Definition at line 754 of file G4PAIySection.cc.

755{
759 G4int k = fIntervalNumber -1;
760
761 for(G4int i = fSplineNumber-1; i >= 1; i--)
762 {
763 if(fSplineEnergy[i] >= fEnergyInterval[k])
764 {
767 }
768 else
769 {
774 k--;
775 }
776 }
777} // end of IntegralPAIySection
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
G4double SumOverInterval(G4int intervalNumber)
G4double SumOverBorder(G4int intervalNumber, G4double energy)
G4double SumOverIntervaldEdx(G4int intervalNumber)

References fEnergyInterval, fIntegralPAIdEdx, fIntegralPAIySection, fIntervalNumber, fSplineEnergy, fSplineNumber, SumOverBorder(), SumOverBorderdEdx(), SumOverInterval(), and SumOverIntervaldEdx().

Referenced by Initialize(), and InitPAI().

◆ IntegralPlasmon()

void G4PAIySection::IntegralPlasmon ( )

Definition at line 816 of file G4PAIySection.cc.

817{
819 fIntegralPlasmon[0] = 0;
820 G4int k = fIntervalNumber -1;
821 for(G4int i=fSplineNumber-1;i>=1;i--)
822 {
823 if(fSplineEnergy[i] >= fEnergyInterval[k])
824 {
826 }
827 else
828 {
831 k--;
832 }
833 }
834
835} // end of IntegralPlasmon
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4double SumOverInterPlasmon(G4int intervalNumber)

References fEnergyInterval, fIntegralPlasmon, fIntervalNumber, fSplineEnergy, fSplineNumber, SumOverBordPlasmon(), and SumOverInterPlasmon().

Referenced by InitPAI().

◆ NormShift()

void G4PAIySection::NormShift ( G4double  betaGammaSq)

Definition at line 329 of file G4PAIySection.cc.

330{
331 G4int i, j;
332
333 for( i = 1; i <= fIntervalNumber-1; ++i)
334 {
335 for( j = 1; j <= 2; ++j)
336 {
337 fSplineNumber = (i-1)*2 + j;
338
339 if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
341 // G4cout<<"cn = "<<fSplineNumber<<"; "<<"energy = "
342 // <<fSplineEnergy[fSplineNumber]<<G4endl;
343 }
344 }
346
347 j = 1;
348
349 for(i=2;i<=fSplineNumber;++i)
350 {
352 {
353 fIntegralTerm[i] = fIntegralTerm[i-1] +
355 fSplineEnergy[i] );
356 }
357 else
358 {
360 fEnergyInterval[j+1] );
361 j++;
362 fIntegralTerm[i] = fIntegralTerm[i-1] + x +
364 fSplineEnergy[i] );
365 }
366 // G4cout<<i<<"\t"<<fSplineEnergy[i]<<"\t"<<fIntegralTerm[i]<<"\n"<<G4endl;
367 }
368 static const G4double nfactor =
371
372 // G4cout<<"fNormalizationCof = "<<fNormalizationCof<<G4endl;
373
374 // Calculation of PAI differrential cross-section (1/(keV*cm))
375 // in the energy points near borders of energy intervals
376
377 for(G4int k=1; k<=fIntervalNumber-1; ++k)
378 {
379 for(j=1; j<=2; ++j)
380 {
381 i = (k-1)*2 + j;
387
388 fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
389 fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
390 fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
391 }
392 }
393
394} // end of NormShift
G4double RePartDielectricConst(G4double energy)
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)

References DifPAIySection(), source.hepunit::electron_mass_c2, fDelta, fDifPAIySection, fdNdxCerenkov, fdNdxPlasmon, fElectronDensity, fEnergyInterval, fImPartDielectricConst, source.hepunit::fine_structure_const, fIntegralTerm, fIntervalNumber, fNormalizationCof, fRePartDielectricConst, fSplineEnergy, fSplineNumber, source.hepunit::hbarc, ImPartDielectricConst(), PAIdNdxCerenkov(), PAIdNdxPlasmon(), pi, RePartDielectricConst(), and RutherfordIntegral().

Referenced by Initialize(), and InitPAI().

◆ operator=()

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

◆ PAIdNdxCerenkov()

G4double G4PAIySection::PAIdNdxCerenkov ( G4int  intervalNumber,
G4double  betaGammaSq 
)

Definition at line 656 of file G4PAIySection.cc.

658{
659 G4double logarithm, x3, x5, argument, modul2, dNdxC;
660 G4double be2, be4;
661
662 //G4double cof = 1.0;
663
664 be2 = betaGammaSq/(1 + betaGammaSq);
665 be4 = be2*be2;
666
667 if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq); // 0.0;
668 else
669 {
670 logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
671 (1/betaGammaSq - fRePartDielectricConst[i]) +
673 logarithm += log(1+1.0/betaGammaSq);
674 }
675
676 if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
677 {
678 argument = 0.0;
679 }
680 else
681 {
682 x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
683 x5 = -1.0 - fRePartDielectricConst[i] +
684 be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
686 if( x3 == 0.0 ) argument = 0.5*pi;
687 else argument = atan2(fImPartDielectricConst[i],x3);
688 argument *= x5 ;
689 }
690 dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
691
692 if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
693
694 dNdxC *= fine_structure_const/be2/pi;
695
696 dNdxC *= (1-exp(-be4/betaBohr4));
697
698 // if(fDensity >= 0.1)
699 // {
700 modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
702 if(modul2 > 0.)
703 {
704 dNdxC /= modul2;
705 }
706 return dNdxC;
707
708} // end of PAIdNdxCerenkov

References betaBohr4, fImPartDielectricConst, source.hepunit::fine_structure_const, fRePartDielectricConst, source.hepunit::hbarc, and pi.

Referenced by InitPAI(), NormShift(), and SplainPAI().

◆ PAIdNdxPlasmon()

G4double G4PAIySection::PAIdNdxPlasmon ( G4int  intervalNumber,
G4double  betaGammaSq 
)

Definition at line 715 of file G4PAIySection.cc.

717{
718 G4double cof, resonance, modul2, dNdxP;
719 G4double be2, be4;
720
721 cof = 1;
722
723 be2 = betaGammaSq/(1 + betaGammaSq);
724 be4 = be2*be2;
725
726 resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
727 resonance *= fImPartDielectricConst[i]/hbarc;
728
729 dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
730
731 dNdxP = std::max(dNdxP, 1.0e-8);
732
733 dNdxP *= fine_structure_const/be2/pi;
734 dNdxP *= (1-exp(-be4/betaBohr4));
735
736// if( fDensity >= 0.1 )
737// {
738 modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
740 if(modul2 > 0.)
741 {
742 dNdxP /= modul2;
743 }
744 return dNdxP;
745
746} // end of PAIdNdxPlasmon

References betaBohr4, source.hepunit::electron_mass_c2, fImPartDielectricConst, source.hepunit::fine_structure_const, fIntegralTerm, fRePartDielectricConst, fSplineEnergy, source.hepunit::hbarc, G4INCL::Math::max(), and pi.

Referenced by InitPAI(), NormShift(), and SplainPAI().

◆ RePartDielectricConst()

G4double G4PAIySection::RePartDielectricConst ( G4double  energy)

Definition at line 534 of file G4PAIySection.cc.

535{
536 G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
537 c1, c2, c3, cof1, cof2, xln1, xln2, xln3, result;
538
539 x0 = enb;
540 result = 0;
541
542 for(G4int i=1;i<=fIntervalNumber-1;++i)
543 {
544 x1 = fEnergyInterval[i];
545 x2 = fEnergyInterval[i+1];
546 xx1 = x1 - x0;
547 xx2 = x2 - x0;
548 xx12 = xx2/xx1;
549
550 if(xx12<0)
551 {
552 xx12 = -xx12;
553 }
554 xln1 = log(x2/x1);
555 xln2 = log(xx12);
556 xln3 = log((x2 + x0)/(x1 + x0));
557 x02 = x0*x0;
558 x03 = x02*x0;
559 x04 = x03*x0;
560 x05 = x04*x0;
561 G4double x12 = x1*x2;
562 c1 = (x2 - x1)/x12;
563 c2 = (x2 - x1)*(x2 +x1)/(x12*x12);
564 c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/(x12*x12*x12);
565
566 result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
567 result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
568 result -= fA3[i]*c2/2/x02;
569 result -= fA4[i]*c3/3/x02;
570
571 cof1 = fA1[i]/x02 + fA3[i]/x04;
572 cof2 = fA2[i]/x03 + fA4[i]/x05;
573
574 result += 0.5*(cof1 +cof2)*xln2;
575 result += 0.5*(cof1 - cof2)*xln3;
576 }
577 result *= 2*hbarc/pi;
578
579 return result;
580
581} // end of RePartDielectricConst

References fA1, fA2, fA3, fA4, fEnergyInterval, fIntervalNumber, source.hepunit::hbarc, and pi.

Referenced by NormShift(), and SplainPAI().

◆ RutherfordIntegral()

G4double G4PAIySection::RutherfordIntegral ( G4int  intervalNumber,
G4double  limitLow,
G4double  limitHigh 
)

Definition at line 489 of file G4PAIySection.cc.

492{
493 G4double c1, c2, c3;
494 // G4cout<<"RI: x1 = "<<x1<<"; "<<"x2 = "<<x2<<G4endl;
495 G4double x12 = x1*x2;
496 c1 = (x2 - x1)/x12;
497 c2 = (x2 - x1)*(x2 + x1)/(x12*x12);
498 c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/(x12*x12*x12);
499 // G4cout<<" RI: c1 = "<<c1<<"; "<<"c2 = "<<c2<<"; "<<"c3 = "<<c3<<G4endl;
500
501 return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
502
503} // end of RutherfordIntegral

References fA1, fA2, fA3, and fA4.

Referenced by NormShift(), and SplainPAI().

◆ SetVerbose()

void G4PAIySection::SetVerbose ( G4int  v)
inline

Definition at line 139 of file G4PAIySection.hh.

139{ fVerbose = v; };

References fVerbose.

Referenced by G4PAIModelData::G4PAIModelData().

◆ SplainPAI()

void G4PAIySection::SplainPAI ( G4double  betaGammaSq)

Definition at line 402 of file G4PAIySection.cc.

403{
404 G4int k = 1;
405 G4int i = 1;
406
407 while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
408 {
409 if(fSplineEnergy[i+1] > fEnergyInterval[k+1])
410 {
411 k++; // Here next energy point is in next energy interval
412 ++i;
413 continue;
414 }
415 // Shifting of arrayes for inserting the geometrical
416 // average of 'i' and 'i+1' energy points to 'i+1' place
418
419 for(G4int j = fSplineNumber; j >= i+2; j-- )
420 {
425
428 fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
429 }
430 G4double x1 = fSplineEnergy[i];
431 G4double x2 = fSplineEnergy[i+1];
432 G4double yy1 = fDifPAIySection[i];
433 G4double y2 = fDifPAIySection[i+1];
434
435 G4double en1 = sqrt(x1*x2);
436 fSplineEnergy[i+1] = en1;
437
438 // Calculation of logarithmic linear approximation
439 // in this (enr) energy point, which number is 'i+1' now
440
441 G4double a = log10(y2/yy1)/log10(x2/x1);
442 G4double b = log10(yy1) - a*log10(x1);
443 G4double y = a*log10(en1) + b;
444 y = pow(10.,y);
445
446 // Calculation of the PAI dif. cross-section at this point
447
454 fSplineEnergy[i+1]);
455
456 fDifPAIySection[i+1] = DifPAIySection(i+1,betaGammaSq);
457 fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
458 fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
459
460 // Condition for next division of this segment or to pass
461 // to higher energies
462
463 G4double x = 2*(fDifPAIySection[i+1] - y)/(fDifPAIySection[i+1] + y);
464
465 G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])
466 /(fSplineEnergy[i+1]+fSplineEnergy[i]);
467
468 if( x < 0 )
469 {
470 x = -x;
471 }
472 if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
473 {
474 continue; // next division
475 }
476 i += 2; // pass to next segment
477
478 // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
479 } // close 'while'
480
481} // end of SplainPAI
static const G4double fError

References DifPAIySection(), fDelta, fDifPAIySection, fdNdxCerenkov, fdNdxPlasmon, fEnergyInterval, fError, fImPartDielectricConst, fIntegralTerm, fMaxSplineSize, fNormalizationCof, fRePartDielectricConst, fSplineEnergy, fSplineNumber, ImPartDielectricConst(), PAIdNdxCerenkov(), PAIdNdxPlasmon(), RePartDielectricConst(), and RutherfordIntegral().

Referenced by Initialize(), and InitPAI().

◆ SumOverBordCerenkov()

G4double G4PAIySection::SumOverBordCerenkov ( G4int  intervalNumber,
G4double  energy 
)

Definition at line 1116 of file G4PAIySection.cc.

1118{
1119 G4double x0,x1,y0,yy1,a,e0,c,d,result;
1120
1121 e0 = en0;
1122 x0 = fSplineEnergy[i];
1123 x1 = fSplineEnergy[i+1];
1124 y0 = fdNdxCerenkov[i];
1125 yy1 = fdNdxCerenkov[i+1];
1126
1127 // G4cout<<G4endl;
1128 //G4cout<<"SumBordC, i = "<<i<<"; en0 = "<<en0<<"; x0 ="<<x0<<"; x1 = "<<x1
1129 // <<"; y0 = "<<y0<<"; yy1 = "<<yy1<<G4endl;
1130 c = x1/x0;
1131 d = e0/x0;
1132 a = log10(yy1/y0)/log10(c);
1133
1134 G4double b = 0.0;
1135 if(a < 20.) b = y0/pow(x0,a);
1136
1137 a += 1.0;
1138 if( a == 0 ) result = b*log(x0/e0);
1139 else result = y0*(x0 - e0*pow(d,a-1))/a;
1140 a += 1.0;
1141
1142 if( a == 0 ) fIntegralCerenkov[0] += b*log(x0/e0);
1143 else fIntegralCerenkov[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1144
1145 //G4cout<<"a = "<<a<<"; b = "<<b<<"; result = "<<result<<G4endl;
1146
1147 x0 = fSplineEnergy[i - 1];
1148 x1 = fSplineEnergy[i - 2];
1149 y0 = fdNdxCerenkov[i - 1];
1150 yy1 = fdNdxCerenkov[i - 2];
1151
1152 //G4cout<<"x0 ="<<x0<<"; x1 = "<<x1
1153 // <<"; y0 = "<<y0<<"; yy1 = "<<yy1<<G4endl;
1154
1155 c = x1/x0;
1156 d = e0/x0;
1157 a = log10(yy1/y0)/log10(x1/x0);
1158
1159 // G4cout << "a= " << a << G4endl;
1160 if(a > 20.0) b = 0.0;
1161 else b = y0/pow(x0,a);
1162
1163 //G4cout << "b= " << b << G4endl;
1164
1165 a += 1.0;
1166 if( a == 0 ) result += b*log(e0/x0);
1167 else result += y0*(e0*pow(d,a-1) - x0 )/a;
1168 a += 1.0;
1169 //G4cout << "result= " << result << G4endl;
1170
1171 if( a == 0 ) fIntegralCerenkov[0] += b*log(e0/x0);
1172 else fIntegralCerenkov[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1173
1174 //G4cout<<"a = "<<a<<"; b = "<<b<<"; result = "<<result<<G4endl;
1175
1176 return result;
1177
1178}

References fdNdxCerenkov, fIntegralCerenkov, and fSplineEnergy.

Referenced by IntegralCerenkov().

◆ SumOverBorder()

G4double G4PAIySection::SumOverBorder ( G4int  intervalNumber,
G4double  energy 
)

Definition at line 990 of file G4PAIySection.cc.

992{
993 G4double x0,x1,y0,yy1,a,/*c,*/d,e0,result;
994
995 e0 = en0;
996 x0 = fSplineEnergy[i];
997 x1 = fSplineEnergy[i+1];
998 y0 = fDifPAIySection[i];
999 yy1 = fDifPAIySection[i+1];
1000
1001 //c = x1/x0;
1002 d = e0/x0;
1003 a = log10(yy1/y0)/log10(x1/x0);
1004
1005 G4double b = 0.0;
1006 if(a < 20.) b = y0/pow(x0,a);
1007
1008 a += 1;
1009 if(a == 0)
1010 {
1011 result = b*log(x0/e0);
1012 }
1013 else
1014 {
1015 result = y0*(x0 - e0*pow(d,a-1))/a;
1016 }
1017 a++;
1018 if(a == 0)
1019 {
1020 fIntegralPAIySection[0] += b*log(x0/e0);
1021 }
1022 else
1023 {
1024 fIntegralPAIySection[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1025 }
1026 x0 = fSplineEnergy[i - 1];
1027 x1 = fSplineEnergy[i - 2];
1028 y0 = fDifPAIySection[i - 1];
1029 yy1 = fDifPAIySection[i - 2];
1030
1031 //c = x1/x0;
1032 d = e0/x0;
1033 a = log10(yy1/y0)/log10(x1/x0);
1034 // b0 = log10(y0) - a*log10(x0);
1035 b = y0/pow(x0,a);
1036 a += 1;
1037 if(a == 0)
1038 {
1039 result += b*log(e0/x0);
1040 }
1041 else
1042 {
1043 result += y0*(e0*pow(d,a-1) - x0)/a;
1044 }
1045 a++;
1046 if(a == 0)
1047 {
1048 fIntegralPAIySection[0] += b*log(e0/x0);
1049 }
1050 else
1051 {
1052 fIntegralPAIySection[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1053 }
1054 return result;
1055
1056}

References fDifPAIySection, fIntegralPAIySection, and fSplineEnergy.

Referenced by IntegralPAIySection().

◆ SumOverBorderdEdx()

G4double G4PAIySection::SumOverBorderdEdx ( G4int  intervalNumber,
G4double  energy 
)

Definition at line 1060 of file G4PAIySection.cc.

1062{
1063 G4double x0,x1,y0,yy1,a,/*c,*/d,e0,result;
1064
1065 e0 = en0;
1066 x0 = fSplineEnergy[i];
1067 x1 = fSplineEnergy[i+1];
1068 y0 = fDifPAIySection[i];
1069 yy1 = fDifPAIySection[i+1];
1070
1071 //c = x1/x0;
1072 d = e0/x0;
1073 a = log10(yy1/y0)/log10(x1/x0);
1074
1075 G4double b = 0.0;
1076 if(a < 20.) b = y0/pow(x0,a);
1077
1078 a += 2;
1079 if(a == 0)
1080 {
1081 result = b*log(x0/e0);
1082 }
1083 else
1084 {
1085 result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1086 }
1087 x0 = fSplineEnergy[i - 1];
1088 x1 = fSplineEnergy[i - 2];
1089 y0 = fDifPAIySection[i - 1];
1090 yy1 = fDifPAIySection[i - 2];
1091
1092 //c = x1/x0;
1093 d = e0/x0;
1094 a = log10(yy1/y0)/log10(x1/x0);
1095
1096 if(a < 20.) b = y0/pow(x0,a);
1097
1098 a += 2;
1099 if(a == 0)
1100 {
1101 result += b*log(e0/x0);
1102 }
1103 else
1104 {
1105 result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1106 }
1107 return result;
1108
1109}

References fDifPAIySection, and fSplineEnergy.

Referenced by IntegralPAIySection().

◆ SumOverBordPlasmon()

G4double G4PAIySection::SumOverBordPlasmon ( G4int  intervalNumber,
G4double  energy 
)

Definition at line 1185 of file G4PAIySection.cc.

1187{
1188 G4double x0,x1,y0,yy1,a,c,d,e0,result;
1189
1190 e0 = en0;
1191 x0 = fSplineEnergy[i];
1192 x1 = fSplineEnergy[i+1];
1193 y0 = fdNdxPlasmon[i];
1194 yy1 = fdNdxPlasmon[i+1];
1195
1196 c = x1/x0;
1197 d = e0/x0;
1198 a = log10(yy1/y0)/log10(c);
1199
1200 G4double b = 0.0;
1201 if(a < 20.) b = y0/pow(x0,a);
1202
1203 a += 1.0;
1204 if( a == 0 ) result = b*log(x0/e0);
1205 else result = y0*(x0 - e0*pow(d,a-1))/a;
1206 a += 1.0;
1207
1208 if( a == 0 ) fIntegralPlasmon[0] += b*log(x0/e0);
1209 else fIntegralPlasmon[0] += y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1210
1211 x0 = fSplineEnergy[i - 1];
1212 x1 = fSplineEnergy[i - 2];
1213 y0 = fdNdxPlasmon[i - 1];
1214 yy1 = fdNdxPlasmon[i - 2];
1215
1216 c = x1/x0;
1217 d = e0/x0;
1218 a = log10(yy1/y0)/log10(c);
1219
1220 if(a < 20.) b = y0/pow(x0,a);
1221
1222 a += 1.0;
1223 if( a == 0 ) result += b*log(e0/x0);
1224 else result += y0*(e0*pow(d,a-1) - x0)/a;
1225 a += 1.0;
1226
1227 if( a == 0 ) fIntegralPlasmon[0] += b*log(e0/x0);
1228 else fIntegralPlasmon[0] += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1229
1230 return result;
1231
1232}

References fdNdxPlasmon, fIntegralPlasmon, and fSplineEnergy.

Referenced by IntegralPlasmon().

◆ SumOverInterCerenkov()

G4double G4PAIySection::SumOverInterCerenkov ( G4int  intervalNumber)

Definition at line 919 of file G4PAIySection.cc.

920{
921 G4double x0,x1,y0,yy1,a,c,result;
922
923 x0 = fSplineEnergy[i];
924 x1 = fSplineEnergy[i+1];
925
926 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
927
928 y0 = fdNdxCerenkov[i];
929 yy1 = fdNdxCerenkov[i+1];
930 // G4cout<<"SumC, i = "<<i<<"; x0 ="<<x0<<"; x1 = "<<x1
931 // <<"; y0 = "<<y0<<"; yy1 = "<<yy1<<G4endl;
932
933 c = x1/x0;
934 a = log10(yy1/y0)/log10(c);
935 G4double b = 0.0;
936 if(a < 20.) b = y0/pow(x0,a);
937
938 a += 1.0;
939 if(a == 0) result = b*log(c);
940 else result = y0*(x1*pow(c,a-1) - x0)/a;
941 a += 1.0;
942
943 if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
944 else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
945 // G4cout<<"a = "<<a<<"; b = "<<b<<"; result = "<<result<<G4endl;
946 return result;
947
948} // end of SumOverInterCerenkov

References fdNdxCerenkov, fIntegralCerenkov, and fSplineEnergy.

Referenced by IntegralCerenkov().

◆ SumOverInterPlasmon()

G4double G4PAIySection::SumOverInterPlasmon ( G4int  intervalNumber)

Definition at line 956 of file G4PAIySection.cc.

957{
958 G4double x0,x1,y0,yy1,a,c,result;
959
960 x0 = fSplineEnergy[i];
961 x1 = fSplineEnergy[i+1];
962
963 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
964
965 y0 = fdNdxPlasmon[i];
966 yy1 = fdNdxPlasmon[i+1];
967 c = x1/x0;
968 a = log10(yy1/y0)/log10(c);
969
970 G4double b = 0.0;
971 if(a < 20.) b = y0/pow(x0,a);
972
973 a += 1.0;
974 if(a == 0) result = b*log(x1/x0);
975 else result = y0*(x1*pow(c,a-1) - x0)/a;
976 a += 1.0;
977
978 if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
979 else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
980
981 return result;
982
983} // end of SumOverInterPlasmon

References fdNdxPlasmon, fIntegralPlasmon, and fSplineEnergy.

Referenced by IntegralPlasmon().

◆ SumOverInterval()

G4double G4PAIySection::SumOverInterval ( G4int  intervalNumber)

Definition at line 843 of file G4PAIySection.cc.

844{
845 G4double x0,x1,y0,yy1,a,b,c,result;
846
847 x0 = fSplineEnergy[i];
848 x1 = fSplineEnergy[i+1];
849
850 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
851
852 y0 = fDifPAIySection[i];
853 yy1 = fDifPAIySection[i+1];
854 //G4cout << "## x0= " << x0 << " x1= " << x1 << G4endl;
855 c = x1/x0;
856 //G4cout << "c= " << c << " y0= " << y0 << " yy1= " << yy1 << G4endl;
857 a = log10(yy1/y0)/log10(c);
858 //G4cout << "a= " << a << G4endl;
859 // b = log10(y0) - a*log10(x0);
860 b = y0/pow(x0,a);
861 a += 1;
862 if(a == 0)
863 {
864 result = b*log(x1/x0);
865 }
866 else
867 {
868 result = y0*(x1*pow(c,a-1) - x0)/a;
869 }
870 a++;
871 if(a == 0)
872 {
873 fIntegralPAIySection[0] += b*log(x1/x0);
874 }
875 else
876 {
877 fIntegralPAIySection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
878 }
879 return result;
880
881} // end of SumOverInterval

References fDifPAIySection, fIntegralPAIySection, and fSplineEnergy.

Referenced by IntegralPAIySection().

◆ SumOverIntervaldEdx()

G4double G4PAIySection::SumOverIntervaldEdx ( G4int  intervalNumber)

Definition at line 885 of file G4PAIySection.cc.

886{
887 G4double x0,x1,y0,yy1,a,b,c,result;
888
889 x0 = fSplineEnergy[i];
890 x1 = fSplineEnergy[i+1];
891
892 if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
893
894 y0 = fDifPAIySection[i];
895 yy1 = fDifPAIySection[i+1];
896 c = x1/x0;
897 a = log10(yy1/y0)/log10(c);
898 // b = log10(y0) - a*log10(x0);
899 b = y0/pow(x0,a);
900 a += 2;
901 if(a == 0)
902 {
903 result = b*log(x1/x0);
904 }
905 else
906 {
907 result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
908 }
909 return result;
910
911} // end of SumOverInterval

References fDifPAIySection, and fSplineEnergy.

Referenced by IntegralPAIySection().

Field Documentation

◆ betaBohr

G4double G4PAIySection::betaBohr
private

Definition at line 162 of file G4PAIySection.hh.

Referenced by DifPAIySection(), and G4PAIySection().

◆ betaBohr4

G4double G4PAIySection::betaBohr4
private

Definition at line 163 of file G4PAIySection.hh.

Referenced by G4PAIySection(), PAIdNdxCerenkov(), and PAIdNdxPlasmon().

◆ fA1

G4DataVector G4PAIySection::fA1
private

◆ fA2

G4DataVector G4PAIySection::fA2
private

◆ fA3

G4DataVector G4PAIySection::fA3
private

◆ fA4

G4DataVector G4PAIySection::fA4
private

◆ fDelta

const G4double G4PAIySection::fDelta = 0.005
staticprivate

Definition at line 150 of file G4PAIySection.hh.

Referenced by Initialize(), NormShift(), and SplainPAI().

◆ fDensity

G4double G4PAIySection::fDensity
private

Definition at line 165 of file G4PAIySection.hh.

Referenced by G4PAIySection(), and Initialize().

◆ fDifPAIySection

G4DataVector G4PAIySection::fDifPAIySection
private

◆ fdNdxCerenkov

G4DataVector G4PAIySection::fdNdxCerenkov
private

◆ fdNdxPlasmon

G4DataVector G4PAIySection::fdNdxPlasmon
private

◆ fElectronDensity

G4double G4PAIySection::fElectronDensity
private

Definition at line 166 of file G4PAIySection.hh.

Referenced by G4PAIySection(), Initialize(), and NormShift().

◆ fEnergyInterval

G4DataVector G4PAIySection::fEnergyInterval
private

◆ fError

const G4double G4PAIySection::fError = 0.005
staticprivate

Definition at line 151 of file G4PAIySection.hh.

Referenced by SplainPAI().

◆ fImPartDielectricConst

G4DataVector G4PAIySection::fImPartDielectricConst
private

◆ fIntegralCerenkov

G4DataVector G4PAIySection::fIntegralCerenkov
private

◆ fIntegralPAIdEdx

G4DataVector G4PAIySection::fIntegralPAIdEdx
private

Definition at line 191 of file G4PAIySection.hh.

Referenced by G4PAIySection(), GetIntegralPAIdEdx(), and IntegralPAIySection().

◆ fIntegralPAIySection

G4DataVector G4PAIySection::fIntegralPAIySection
private

◆ fIntegralPlasmon

G4DataVector G4PAIySection::fIntegralPlasmon
private

◆ fIntegralTerm

G4DataVector G4PAIySection::fIntegralTerm
private

Definition at line 185 of file G4PAIySection.hh.

Referenced by DifPAIySection(), G4PAIySection(), NormShift(), PAIdNdxPlasmon(), and SplainPAI().

◆ fIntervalNumber

G4int G4PAIySection::fIntervalNumber
private

◆ fLorentzFactor

const G4double G4PAIySection::fLorentzFactor
staticprivate
Initial value:
=
{
0.0,
1.094989e+00, 1.107813e+00, 1.122369e+00, 1.138890e+00, 1.157642e+00,
1.178925e+00, 1.203082e+00, 1.230500e+00, 1.261620e+00, 1.296942e+00,
1.337032e+00, 1.382535e+00, 1.434181e+00, 1.492800e+00, 1.559334e+00,
1.634850e+00, 1.720562e+00, 1.817845e+00, 1.928263e+00, 2.053589e+00,
2.195835e+00, 2.357285e+00, 2.540533e+00, 2.748522e+00, 2.984591e+00,
3.252533e+00, 3.556649e+00, 3.901824e+00, 4.293602e+00, 4.738274e+00,
5.242981e+00, 5.815829e+00, 6.466019e+00, 7.203990e+00, 8.041596e+00,
8.992288e+00, 1.007133e+01, 1.129606e+01, 1.268614e+01, 1.426390e+01,
1.605467e+01, 1.808721e+01, 2.039417e+01, 2.301259e+01, 2.598453e+01,
2.935771e+01, 3.318630e+01, 3.753180e+01, 4.246399e+01, 4.806208e+01,
5.441597e+01, 6.162770e+01, 6.981310e+01, 7.910361e+01, 8.964844e+01,
1.016169e+02, 1.152013e+02, 1.306197e+02, 1.481198e+02, 1.679826e+02,
1.905270e+02, 2.161152e+02, 2.451581e+02, 2.781221e+02, 3.155365e+02,
3.580024e+02, 4.062016e+02, 4.609081e+02, 5.230007e+02, 5.934765e+02,
6.734672e+02, 7.642575e+02, 8.673056e+02, 9.842662e+02, 1.117018e+03,
1.267692e+03, 1.438709e+03, 1.632816e+03, 1.853128e+03, 2.103186e+03,
2.387004e+03, 2.709140e+03, 3.074768e+03, 3.489760e+03, 3.960780e+03,
4.495394e+03, 5.102185e+03, 5.790900e+03, 6.572600e+03, 7.459837e+03,
8.466860e+03, 9.609843e+03, 1.090714e+04, 1.237959e+04, 1.405083e+04,
1.594771e+04, 1.810069e+04, 2.054434e+04, 2.331792e+04, 2.646595e+04,
3.003901e+04, 3.409446e+04, 3.869745e+04, 4.392189e+04, 4.985168e+04,
5.658206e+04, 6.422112e+04, 7.289153e+04, 8.273254e+04, 9.390219e+04,
1.065799e+05
}

Definition at line 154 of file G4PAIySection.hh.

Referenced by GetLorentzFactor(), Initialize(), and InitPAI().

◆ fLowEnergyCof

G4double G4PAIySection::fLowEnergyCof
private

Definition at line 167 of file G4PAIySection.hh.

Referenced by ComputeLowEnergyCof(), DifPAIySection(), and G4PAIySection().

◆ fMaxSplineSize

const G4int G4PAIySection::fMaxSplineSize = 500
staticprivate

Definition at line 180 of file G4PAIySection.hh.

Referenced by G4PAIySection(), and SplainPAI().

◆ fNormalizationCof

G4double G4PAIySection::fNormalizationCof
private

Definition at line 160 of file G4PAIySection.hh.

Referenced by G4PAIySection(), GetNormalizationCof(), NormShift(), and SplainPAI().

◆ fNumberOfGammas

G4int G4PAIySection::fNumberOfGammas = 111
staticprivate

Definition at line 153 of file G4PAIySection.hh.

Referenced by GetNumberOfGammas().

◆ fPAItable

G4double G4PAIySection::fPAItable[500][112]
private

Definition at line 195 of file G4PAIySection.hh.

Referenced by G4PAIySection(), GetPAItable(), and InitPAI().

◆ fRefGammaNumber

const G4int G4PAIySection::fRefGammaNumber = 29
staticprivate

Definition at line 157 of file G4PAIySection.hh.

Referenced by Initialize(), and InitPAI().

◆ fRePartDielectricConst

G4DataVector G4PAIySection::fRePartDielectricConst
private

◆ fSandia

G4SandiaTable* G4PAIySection::fSandia
private

Definition at line 171 of file G4PAIySection.hh.

Referenced by G4PAIySection(), and Initialize().

◆ fSplineEnergy

G4DataVector G4PAIySection::fSplineEnergy
private

◆ fSplineNumber

G4int G4PAIySection::fSplineNumber
private

◆ fVerbose

G4int G4PAIySection::fVerbose
private

Definition at line 169 of file G4PAIySection.hh.

Referenced by G4PAIySection(), Initialize(), and SetVerbose().


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