Geant4  10.02.p03
G4PAIySection Class Reference

#include <G4PAIySection.hh>

Collaboration diagram for G4PAIySection:

Public Member Functions

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

Private Member Functions

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

Private Attributes

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

Static Private Attributes

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

Detailed Description

Definition at line 52 of file G4PAIySection.hh.

Constructor & Destructor Documentation

◆ G4PAIySection()

G4PAIySection::G4PAIySection ( )

Definition at line 79 of file G4PAIySection.cc.

80 {
81  fSandia = 0;
84  fVerbose = 0;
85 
97 
98  for( G4int i = 0; i < 500; ++i )
99  {
100  for( G4int j = 0; j < 112; ++j ) fPAItable[i][j] = 0.0;
101  }
102 }
G4DataVector fDifPAIySection
static const G4int fMaxSplineSize
G4DataVector fImPartDielectricConst
G4DataVector fRePartDielectricConst
G4double fDensity
G4double fNormalizationCof
G4DataVector fIntegralPlasmon
int G4int
Definition: G4Types.hh:78
G4DataVector fIntegralTerm
G4double fPAItable[500][112]
G4double fLowEnergyCof
G4DataVector fdNdxPlasmon
G4SandiaTable * fSandia
G4DataVector fIntegralPAIySection
G4DataVector fIntegralPAIdEdx
G4DataVector fSplineEnergy
G4double fElectronDensity
G4DataVector fdNdxCerenkov
G4DataVector fIntegralCerenkov

◆ ~G4PAIySection()

G4PAIySection::~G4PAIySection ( )

Definition at line 108 of file G4PAIySection.cc.

109 {}

Member Function Documentation

◆ CallError()

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

Definition at line 1343 of file G4PAIySection.cc.

1344 {
1345  G4String head = "G4PAIySection::" + methodName + "()";
1347  ed << "Wrong index " << i << " fSplineNumber= " << fSplineNumber;
1348  G4Exception(head,"pai001",FatalException,ed);
1349 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeLowEnergyCof()

void G4PAIySection::ComputeLowEnergyCof ( const G4Material material)

Definition at line 242 of file G4PAIySection.cc.

243 {
244  G4int i, numberOfElements = material->GetNumberOfElements();
245  G4double sumZ = 0., sumCof = 0.;
246 
247  static const G4double p0 = 1.20923e+00;
248  static const G4double p1 = 3.53256e-01;
249  static const G4double p2 = -1.45052e-03;
250 
251  G4double* thisMaterialZ = new G4double[numberOfElements];
252  G4double* thisMaterialCof = new G4double[numberOfElements];
253 
254  for( i = 0; i < numberOfElements; i++ )
255  {
256  thisMaterialZ[i] = material->GetElement(i)->GetZ();
257  sumZ += thisMaterialZ[i];
258  thisMaterialCof[i] = p0+p1*thisMaterialZ[i]+p2*thisMaterialZ[i]*thisMaterialZ[i];
259  }
260  for( i = 0; i < numberOfElements; i++ )
261  {
262  sumCof += thisMaterialCof[i]*thisMaterialZ[i]/sumZ;
263  }
264  fLowEnergyCof = sumCof;
265  delete [] thisMaterialZ;
266  delete [] thisMaterialCof;
267  // G4cout<<"fLowEnergyCof = "<<fLowEnergyCof<<G4endl;
268 }
int G4int
Definition: G4Types.hh:78
G4double fLowEnergyCof
const G4Element * GetElement(G4int iel) const
Definition: G4Material.hh:202
size_t GetNumberOfElements() const
Definition: G4Material.hh:186
double G4double
Definition: G4Types.hh:76
G4double GetZ() const
Definition: G4Element.hh:131
Here is the call graph for this function:

◆ DifPAIySection()

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

Definition at line 582 of file G4PAIySection.cc.

584 {
585  G4double beta, be2,cof,x1,x2,x3,x4,x5,x6,x7,x8,result;
586  //G4double beta, be4;
587  //G4double be4;
588  // G4double betaBohr2 = fine_structure_const*fine_structure_const;
589  // G4double betaBohr4 = betaBohr2*betaBohr2*4.0;
590  be2 = betaGammaSq/(1 + betaGammaSq);
591  //be4 = be2*be2;
592  beta = sqrt(be2);
593  cof = 1;
594  x1 = log(2*electron_mass_c2/fSplineEnergy[i]);
595 
596  if( betaGammaSq < 0.01 ) x2 = log(be2);
597  else
598  {
599  x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
600  (1/betaGammaSq - fRePartDielectricConst[i]) +
602  }
603  if( fImPartDielectricConst[i] == 0.0 ||betaGammaSq < 0.01 )
604  {
605  x6=0;
606  }
607  else
608  {
609  x3 = -fRePartDielectricConst[i] + 1/betaGammaSq;
610  x5 = -1 - fRePartDielectricConst[i] +
611  be2*((1 +fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
613 
614  x7 = atan2(fImPartDielectricConst[i],x3);
615  x6 = x5 * x7;
616  }
617  // if(fImPartDielectricConst[i] == 0) x6 = 0;
618 
619  x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc;
620  // if( x4 < 0.0 ) x4 = 0.0;
621  x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
623 
624  result = (x4 + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i]);
625  if(result < 1.0e-8) result = 1.0e-8;
626  result *= fine_structure_const/be2/pi;
627  // low energy correction
628 
629  G4double lowCof = fLowEnergyCof; // 6.0 ; // Ar ~ 4.; -> fLowCof as f(Z1,Z2)?
630 
631  result *= (1 - exp(-beta/betaBohr/lowCof));
632 
633  // result *= (1-exp(-beta/betaBohr))*(1-exp(-beta/betaBohr));
634  // result *= (1-exp(-be2/betaBohr2));
635  // result *= (1-exp(-be4/betaBohr4));
636  // if(fDensity >= 0.1)
637  if(x8 > 0.)
638  {
639  result /= x8;
640  }
641  return result;
642 
643 } // end of DifPAIySection
Double_t x2[nxs]
static const G4double betaBohr
G4DataVector fImPartDielectricConst
G4DataVector fRePartDielectricConst
G4DataVector fIntegralTerm
int fine_structure_const
Definition: hepunit.py:287
float hbarc
Definition: hepunit.py:265
G4double fLowEnergyCof
Double_t x1[nxs]
float electron_mass_c2
Definition: hepunit.py:274
static const double pi
Definition: G4SIunits.hh:74
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76

◆ GetDifPAIySection()

G4double G4PAIySection::GetDifPAIySection ( G4int  i)
inline

Definition at line 122 of file G4PAIySection.hh.

122 { return fDifPAIySection[i]; }
G4DataVector fDifPAIySection

◆ GetEnergyInterval()

G4double G4PAIySection::GetEnergyInterval ( G4int  i)
inline

Definition at line 120 of file G4PAIySection.hh.

120 { return fEnergyInterval[i]; }
G4DataVector fEnergyInterval

◆ GetIntegralCerenkov()

G4double G4PAIySection::GetIntegralCerenkov ( G4int  i) const
inline

Definition at line 229 of file G4PAIySection.hh.

230 {
231  if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralCerenkov"); }
232  return fIntegralCerenkov[i];
233 }
void CallError(G4int i, const G4String &methodName) const
G4DataVector fIntegralCerenkov
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIntegralPAIdEdx()

G4double G4PAIySection::GetIntegralPAIdEdx ( G4int  i) const
inline

Definition at line 223 of file G4PAIySection.hh.

224 {
225  if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralPAIdEdx"); }
226  return fIntegralPAIdEdx[i];
227 }
void CallError(G4int i, const G4String &methodName) const
G4DataVector fIntegralPAIdEdx
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIntegralPAIySection()

G4double G4PAIySection::GetIntegralPAIySection ( G4int  i) const
inline

Definition at line 217 of file G4PAIySection.hh.

218 {
219  if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralPAIySection"); }
220  return fIntegralPAIySection[i];
221 }
void CallError(G4int i, const G4String &methodName) const
G4DataVector fIntegralPAIySection
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIntegralPlasmon()

G4double G4PAIySection::GetIntegralPlasmon ( G4int  i) const
inline

Definition at line 235 of file G4PAIySection.hh.

236 {
237  if(i < 1 || i > fSplineNumber) { CallError(i, "GetIntegralPlasmon"); }
238  return fIntegralPlasmon[i];
239 }
void CallError(G4int i, const G4String &methodName) const
G4DataVector fIntegralPlasmon
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIntervalNumber()

G4int G4PAIySection::GetIntervalNumber ( ) const
inline

Definition at line 118 of file G4PAIySection.hh.

118 { return fIntervalNumber; }

◆ GetLorentzFactor()

G4double G4PAIySection::GetLorentzFactor ( G4int  i) const
inline

Definition at line 206 of file G4PAIySection.hh.

207 {
208  return fLorentzFactor[j];
209 }
static const G4double fLorentzFactor[112]
Here is the caller graph for this function:

◆ GetMeanCerenkovLoss()

G4double G4PAIySection::GetMeanCerenkovLoss ( ) const
inline

Definition at line 127 of file G4PAIySection.hh.

127 {return fIntegralCerenkov[0]; }
G4DataVector fIntegralCerenkov

◆ GetMeanEnergyLoss()

G4double G4PAIySection::GetMeanEnergyLoss ( ) const
inline

Definition at line 126 of file G4PAIySection.hh.

126 {return fIntegralPAIySection[0]; }
G4DataVector fIntegralPAIySection

◆ GetMeanPlasmonLoss()

G4double G4PAIySection::GetMeanPlasmonLoss ( ) const
inline

Definition at line 128 of file G4PAIySection.hh.

128 {return fIntegralPlasmon[0]; }
G4DataVector fIntegralPlasmon

◆ GetNormalizationCof()

G4double G4PAIySection::GetNormalizationCof ( ) const
inline

Definition at line 130 of file G4PAIySection.hh.

130 { return fNormalizationCof; }
G4double fNormalizationCof
Here is the call graph for this function:

◆ GetNumberOfGammas()

G4int G4PAIySection::GetNumberOfGammas ( ) const
inline

Definition at line 114 of file G4PAIySection.hh.

114 { return fNumberOfGammas; }
static G4int fNumberOfGammas

◆ GetPAIdNdxCrenkov()

G4double G4PAIySection::GetPAIdNdxCrenkov ( G4int  i)
inline

Definition at line 123 of file G4PAIySection.hh.

123 { return fdNdxCerenkov[i]; }
G4DataVector fdNdxCerenkov

◆ GetPAIdNdxPlasmon()

G4double G4PAIySection::GetPAIdNdxPlasmon ( G4int  i)
inline

Definition at line 124 of file G4PAIySection.hh.

124 { return fdNdxPlasmon[i]; }
G4DataVector fdNdxPlasmon

◆ GetPAItable()

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

Definition at line 201 of file G4PAIySection.hh.

202 {
203  return fPAItable[i][j];
204 }
G4double fPAItable[500][112]
Here is the caller graph for this function:

◆ GetSplineEnergy()

G4double G4PAIySection::GetSplineEnergy ( G4int  i) const
inline

Definition at line 211 of file G4PAIySection.hh.

212 {
213  if(i < 1 || i > fSplineNumber) { CallError(i, "GetSplineEnergy"); }
214  return fSplineEnergy[i];
215 }
void CallError(G4int i, const G4String &methodName) const
G4DataVector fSplineEnergy
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSplineSize()

G4int G4PAIySection::GetSplineSize ( ) const
inline

Definition at line 116 of file G4PAIySection.hh.

116 { return fSplineNumber; }

◆ GetStepCerenkovLoss()

G4double G4PAIySection::GetStepCerenkovLoss ( G4double  step)

Definition at line 1270 of file G4PAIySection.cc.

1271 {
1272  G4int iTransfer ;
1273  G4long numOfCollisions;
1274  G4double loss = 0.0;
1275  G4double meanNumber, position;
1276 
1277  // G4cout<<" G4PAIySection::GetStepCreLosnkovs "<<G4endl;
1278 
1279 
1280 
1281  meanNumber = fIntegralCerenkov[1]*step;
1282  numOfCollisions = G4Poisson(meanNumber);
1283 
1284  // G4cout<<"numOfCollisions = "<<numOfCollisions<<G4endl;
1285 
1286  while(numOfCollisions)
1287  {
1288  position = fIntegralCerenkov[1]*G4UniformRand();
1289 
1290  for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1291  {
1292  if( position >= fIntegralCerenkov[iTransfer] ) break;
1293  }
1294  loss += fSplineEnergy[iTransfer] ;
1295  numOfCollisions--;
1296  // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
1297  }
1298  // G4cout<<"PAI Cerenkov loss = "<<loss/keV<<" keV"<<G4endl;
1299 
1300  return loss;
1301 }
G4long G4Poisson(G4double mean)
Definition: G4Poisson.hh:51
long G4long
Definition: G4Types.hh:80
int G4int
Definition: G4Types.hh:78
#define position
Definition: xmlparse.cc:622
#define G4UniformRand()
Definition: Randomize.hh:97
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76
G4DataVector fIntegralCerenkov
Here is the call graph for this function:

◆ GetStepEnergyLoss()

G4double G4PAIySection::GetStepEnergyLoss ( G4double  step)

Definition at line 1233 of file G4PAIySection.cc.

1234 {
1235  G4int iTransfer ;
1236  G4long numOfCollisions;
1237  G4double loss = 0.0;
1238  G4double meanNumber, position;
1239 
1240  // G4cout<<" G4PAIySection::GetStepEnergyLoss "<<G4endl;
1241 
1242 
1243 
1244  meanNumber = fIntegralPAIySection[1]*step;
1245  numOfCollisions = G4Poisson(meanNumber);
1246 
1247  // G4cout<<"numOfCollisions = "<<numOfCollisions<<G4endl;
1248 
1249  while(numOfCollisions)
1250  {
1251  position = fIntegralPAIySection[1]*G4UniformRand();
1252 
1253  for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1254  {
1255  if( position >= fIntegralPAIySection[iTransfer] ) break;
1256  }
1257  loss += fSplineEnergy[iTransfer] ;
1258  numOfCollisions--;
1259  // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
1260  }
1261  // G4cout<<"PAI energy loss = "<<loss/keV<<" keV"<<G4endl;
1262 
1263  return loss;
1264 }
G4long G4Poisson(G4double mean)
Definition: G4Poisson.hh:51
long G4long
Definition: G4Types.hh:80
int G4int
Definition: G4Types.hh:78
#define position
Definition: xmlparse.cc:622
#define G4UniformRand()
Definition: Randomize.hh:97
G4DataVector fIntegralPAIySection
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ GetStepPlasmonLoss()

G4double G4PAIySection::GetStepPlasmonLoss ( G4double  step)

Definition at line 1307 of file G4PAIySection.cc.

1308 {
1309  G4int iTransfer ;
1310  G4long numOfCollisions;
1311  G4double loss = 0.0;
1312  G4double meanNumber, position;
1313 
1314  // G4cout<<" G4PAIySection::GetStepCreLosnkovs "<<G4endl;
1315 
1316 
1317 
1318  meanNumber = fIntegralPlasmon[1]*step;
1319  numOfCollisions = G4Poisson(meanNumber);
1320 
1321  // G4cout<<"numOfCollisions = "<<numOfCollisions<<G4endl;
1322 
1323  while(numOfCollisions)
1324  {
1325  position = fIntegralPlasmon[1]*G4UniformRand();
1326 
1327  for( iTransfer=1; iTransfer<=fSplineNumber; iTransfer++ )
1328  {
1329  if( position >= fIntegralPlasmon[iTransfer] ) break;
1330  }
1331  loss += fSplineEnergy[iTransfer] ;
1332  numOfCollisions--;
1333  // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
1334  }
1335  // G4cout<<"PAI Plasmon loss = "<<loss/keV<<" keV"<<G4endl;
1336 
1337  return loss;
1338 }
G4long G4Poisson(G4double mean)
Definition: G4Poisson.hh:51
long G4long
Definition: G4Types.hh:80
G4DataVector fIntegralPlasmon
int G4int
Definition: G4Types.hh:78
#define position
Definition: xmlparse.cc:622
#define G4UniformRand()
Definition: Randomize.hh:97
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ ImPartDielectricConst()

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

Definition at line 505 of file G4PAIySection.cc.

507 {
508  G4double energy2,energy3,energy4,result;
509 
510  energy2 = energy1*energy1;
511  energy3 = energy2*energy1;
512  energy4 = energy3*energy1;
513 
514  result = fA1[k]/energy1+fA2[k]/energy2+fA3[k]/energy3+fA4[k]/energy4;
515  result *=hbarc/energy1;
516 
517  return result;
518 
519 } // end of ImPartDielectricConst
G4DataVector fA3
G4DataVector fA2
G4DataVector fA1
float hbarc
Definition: hepunit.py:265
double G4double
Definition: G4Types.hh:76
G4DataVector fA4

◆ Initialize()

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

Definition at line 115 of file G4PAIySection.cc.

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

◆ InitPAI()

void G4PAIySection::InitPAI ( )

Definition at line 275 of file G4PAIySection.cc.

276 {
277  G4int i;
278  G4double betaGammaSq = fLorentzFactor[fRefGammaNumber]*
280 
281  // Preparation of integral PAI cross section for reference gamma
282 
283  NormShift(betaGammaSq);
284  SplainPAI(betaGammaSq);
285 
288  IntegralPlasmon();
289 
290  for( i = 0; i<= fSplineNumber; i++)
291  {
293 
294  if(i != 0) fPAItable[i][0] = fSplineEnergy[i];
295  }
296  fPAItable[0][0] = fSplineNumber;
297 
298  for( G4int j = 1; j < 112; j++) // for other gammas
299  {
300  if( j == fRefGammaNumber ) continue;
301 
302  betaGammaSq = fLorentzFactor[j]*fLorentzFactor[j] - 1;
303 
304  for(i = 1; i <= fSplineNumber; i++)
305  {
306  fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
307  fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
308  fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
309  }
312  IntegralPlasmon();
313 
314  for(i = 0; i <= fSplineNumber; i++)
315  {
316  fPAItable[i][j] = fIntegralPAIySection[i];
317  }
318  }
319 }
G4DataVector fDifPAIySection
void NormShift(G4double betaGammaSq)
static const G4double fLorentzFactor[112]
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
void IntegralCerenkov()
int G4int
Definition: G4Types.hh:78
void IntegralPlasmon()
G4double fPAItable[500][112]
G4DataVector fdNdxPlasmon
static const G4int fRefGammaNumber
void SplainPAI(G4double betaGammaSq)
G4DataVector fIntegralPAIySection
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76
G4DataVector fdNdxCerenkov
G4double DifPAIySection(G4int intervalNumber, G4double betaGammaSq)
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)
void IntegralPAIySection()

◆ IntegralCerenkov()

void G4PAIySection::IntegralCerenkov ( )

Definition at line 778 of file G4PAIySection.cc.

779 {
780  G4int i, k;
782  fIntegralCerenkov[0] = 0;
783  k = fIntervalNumber -1;
784 
785  for( i = fSplineNumber-1; i >= 1; i-- )
786  {
787  if(fSplineEnergy[i] >= fEnergyInterval[k])
788  {
790  // G4cout<<"int: i = "<<i<<"; sumC = "<<fIntegralCerenkov[i]<<G4endl;
791  }
792  else
793  {
796  k--;
797  // G4cout<<"bord: i = "<<i<<"; sumC = "<<fIntegralCerenkov[i]<<G4endl;
798  }
799  }
800 
801 } // end of IntegralCerenkov
G4double SumOverInterCerenkov(G4int intervalNumber)
int G4int
Definition: G4Types.hh:78
G4DataVector fSplineEnergy
G4DataVector fEnergyInterval
G4double SumOverBordCerenkov(G4int intervalNumber, G4double energy)
G4DataVector fIntegralCerenkov

◆ IntegralPAIySection()

void G4PAIySection::IntegralPAIySection ( )

Definition at line 747 of file G4PAIySection.cc.

748 {
751  fIntegralPAIySection[0] = 0;
752  G4int k = fIntervalNumber -1;
753 
754  for(G4int i = fSplineNumber-1; i >= 1; i--)
755  {
756  if(fSplineEnergy[i] >= fEnergyInterval[k])
757  {
760  }
761  else
762  {
767  k--;
768  }
769  }
770 } // end of IntegralPAIySection
G4double SumOverIntervaldEdx(G4int intervalNumber)
G4double SumOverBorderdEdx(G4int intervalNumber, G4double energy)
int G4int
Definition: G4Types.hh:78
G4double SumOverBorder(G4int intervalNumber, G4double energy)
G4DataVector fIntegralPAIySection
G4DataVector fIntegralPAIdEdx
G4DataVector fSplineEnergy
G4DataVector fEnergyInterval
G4double SumOverInterval(G4int intervalNumber)

◆ IntegralPlasmon()

void G4PAIySection::IntegralPlasmon ( )

Definition at line 809 of file G4PAIySection.cc.

810 {
812  fIntegralPlasmon[0] = 0;
813  G4int k = fIntervalNumber -1;
814  for(G4int i=fSplineNumber-1;i>=1;i--)
815  {
816  if(fSplineEnergy[i] >= fEnergyInterval[k])
817  {
819  }
820  else
821  {
824  k--;
825  }
826  }
827 
828 } // end of IntegralPlasmon
G4DataVector fIntegralPlasmon
int G4int
Definition: G4Types.hh:78
G4double SumOverBordPlasmon(G4int intervalNumber, G4double energy)
G4DataVector fSplineEnergy
G4DataVector fEnergyInterval
G4double SumOverInterPlasmon(G4int intervalNumber)

◆ NormShift()

void G4PAIySection::NormShift ( G4double  betaGammaSq)

Definition at line 326 of file G4PAIySection.cc.

327 {
328  G4int i, j;
329 
330  for( i = 1; i <= fIntervalNumber-1; i++ )
331  {
332  for( j = 1; j <= 2; j++ )
333  {
334  fSplineNumber = (i-1)*2 + j;
335 
336  if( j == 1 ) fSplineEnergy[fSplineNumber] = fEnergyInterval[i ]*(1+fDelta);
338  // G4cout<<"cn = "<<fSplineNumber<<"; "<<"energy = "
339  // <<fSplineEnergy[fSplineNumber]<<G4endl;
340  }
341  }
343 
344  j = 1;
345 
346  for(i=2;i<=fSplineNumber;i++)
347  {
348  if(fSplineEnergy[i]<fEnergyInterval[j+1])
349  {
350  fIntegralTerm[i] = fIntegralTerm[i-1] +
352  fSplineEnergy[i] );
353  }
354  else
355  {
357  fEnergyInterval[j+1] );
358  j++;
359  fIntegralTerm[i] = fIntegralTerm[i-1] + x +
361  fSplineEnergy[i] );
362  }
363  // G4cout<<i<<"\t"<<fSplineEnergy[i]<<"\t"<<fIntegralTerm[i]<<"\n"<<G4endl;
364  }
367 
368  // G4cout<<"fNormalizationCof = "<<fNormalizationCof<<G4endl;
369 
370  // Calculation of PAI differrential cross-section (1/(keV*cm))
371  // in the energy points near borders of energy intervals
372 
373  for(G4int k=1;k<=fIntervalNumber-1;k++)
374  {
375  for(j=1;j<=2;j++)
376  {
377  i = (k-1)*2 + j;
382  fIntegralTerm[i] *= fNormalizationCof;
383 
384  fDifPAIySection[i] = DifPAIySection(i,betaGammaSq);
385  fdNdxCerenkov[i] = PAIdNdxCerenkov(i,betaGammaSq);
386  fdNdxPlasmon[i] = PAIdNdxPlasmon(i,betaGammaSq);
387  }
388  }
389 
390 } // end of NormShift
G4DataVector fDifPAIySection
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
static const G4double fDelta
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4DataVector fImPartDielectricConst
G4DataVector fRePartDielectricConst
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double fNormalizationCof
int G4int
Definition: G4Types.hh:78
G4DataVector fIntegralTerm
int fine_structure_const
Definition: hepunit.py:287
float hbarc
Definition: hepunit.py:265
G4DataVector fdNdxPlasmon
float electron_mass_c2
Definition: hepunit.py:274
static const double pi
Definition: G4SIunits.hh:74
G4DataVector fSplineEnergy
G4DataVector fEnergyInterval
G4double fElectronDensity
double G4double
Definition: G4Types.hh:76
G4double RePartDielectricConst(G4double energy)
G4DataVector fdNdxCerenkov
G4double DifPAIySection(G4int intervalNumber, G4double betaGammaSq)
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)

◆ PAIdNdxCerenkov()

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

Definition at line 649 of file G4PAIySection.cc.

651 {
652  G4double logarithm, x3, x5, argument, modul2, dNdxC;
653  G4double be2, be4;
654 
655  //G4double cof = 1.0;
656 
657  be2 = betaGammaSq/(1 + betaGammaSq);
658  be4 = be2*be2;
659 
660  if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq); // 0.0;
661  else
662  {
663  logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])*
664  (1/betaGammaSq - fRePartDielectricConst[i]) +
666  logarithm += log(1+1.0/betaGammaSq);
667  }
668 
669  if( fImPartDielectricConst[i] == 0.0 || betaGammaSq < 0.01 )
670  {
671  argument = 0.0;
672  }
673  else
674  {
675  x3 = -fRePartDielectricConst[i] + 1.0/betaGammaSq;
676  x5 = -1.0 - fRePartDielectricConst[i] +
677  be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
679  if( x3 == 0.0 ) argument = 0.5*pi;
680  else argument = atan2(fImPartDielectricConst[i],x3);
681  argument *= x5 ;
682  }
683  dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc;
684 
685  if(dNdxC < 1.0e-8) dNdxC = 1.0e-8;
686 
687  dNdxC *= fine_structure_const/be2/pi;
688 
689  dNdxC *= (1-exp(-be4/betaBohr4));
690 
691  // if(fDensity >= 0.1)
692  // {
693  modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) +
695  if(modul2 > 0.)
696  {
697  dNdxC /= modul2;
698  }
699  return dNdxC;
700 
701 } // end of PAIdNdxCerenkov
G4DataVector fImPartDielectricConst
G4DataVector fRePartDielectricConst
static const G4double betaBohr4
int fine_structure_const
Definition: hepunit.py:287
float hbarc
Definition: hepunit.py:265
static const double pi
Definition: G4SIunits.hh:74
double G4double
Definition: G4Types.hh:76

◆ PAIdNdxPlasmon()

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

Definition at line 708 of file G4PAIySection.cc.

710 {
711  G4double cof, resonance, modul2, dNdxP;
712  G4double be2, be4;
713 
714  cof = 1;
715 
716  be2 = betaGammaSq/(1 + betaGammaSq);
717  be4 = be2*be2;
718 
719  resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]);
720  resonance *= fImPartDielectricConst[i]/hbarc;
721 
722  dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] );
723 
724  if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8;
725 
726  dNdxP *= fine_structure_const/be2/pi;
727  dNdxP *= (1-exp(-be4/betaBohr4));
728 
729 // if( fDensity >= 0.1 )
730 // {
731  modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) +
733  if(modul2 > 0.)
734  {
735  dNdxP /= modul2;
736  }
737  return dNdxP;
738 
739 } // end of PAIdNdxPlasmon
G4DataVector fImPartDielectricConst
G4DataVector fRePartDielectricConst
G4DataVector fIntegralTerm
static const G4double betaBohr4
int fine_structure_const
Definition: hepunit.py:287
float hbarc
Definition: hepunit.py:265
float electron_mass_c2
Definition: hepunit.py:274
static const double pi
Definition: G4SIunits.hh:74
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76

◆ RePartDielectricConst()

G4double G4PAIySection::RePartDielectricConst ( G4double  energy)

Definition at line 528 of file G4PAIySection.cc.

529 {
530  G4double x0, x02, x03, x04, x05, x1, x2, xx1 ,xx2 , xx12,
531  c1, c2, c3, cof1, cof2, xln1, xln2, xln3, result;
532 
533  x0 = enb;
534  result = 0;
535 
536  for(G4int i=1;i<=fIntervalNumber-1;i++)
537  {
538  x1 = fEnergyInterval[i];
539  x2 = fEnergyInterval[i+1];
540  xx1 = x1 - x0;
541  xx2 = x2 - x0;
542  xx12 = xx2/xx1;
543 
544  if(xx12<0)
545  {
546  xx12 = -xx12;
547  }
548  xln1 = log(x2/x1);
549  xln2 = log(xx12);
550  xln3 = log((x2 + x0)/(x1 + x0));
551  x02 = x0*x0;
552  x03 = x02*x0;
553  x04 = x03*x0;
554  x05 = x04*x0;
555  c1 = (x2 - x1)/x1/x2;
556  c2 = (x2 - x1)*(x2 +x1)/x1/x1/x2/x2;
557  c3 = (x2 -x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
558 
559  result -= (fA1[i]/x02 + fA3[i]/x04)*xln1;
560  result -= (fA2[i]/x02 + fA4[i]/x04)*c1;
561  result -= fA3[i]*c2/2/x02;
562  result -= fA4[i]*c3/3/x02;
563 
564  cof1 = fA1[i]/x02 + fA3[i]/x04;
565  cof2 = fA2[i]/x03 + fA4[i]/x05;
566 
567  result += 0.5*(cof1 +cof2)*xln2;
568  result += 0.5*(cof1 - cof2)*xln3;
569  }
570  result *= 2*hbarc/pi;
571 
572  return result;
573 
574 } // end of RePartDielectricConst
Double_t x2[nxs]
G4DataVector fA3
int G4int
Definition: G4Types.hh:78
G4DataVector fA2
G4DataVector fA1
float hbarc
Definition: hepunit.py:265
static const G4double c3
Double_t x1[nxs]
TCanvas * c2
Definition: plot_hist.C:75
static const double pi
Definition: G4SIunits.hh:74
G4DataVector fEnergyInterval
double G4double
Definition: G4Types.hh:76
G4DataVector fA4

◆ RutherfordIntegral()

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

Definition at line 484 of file G4PAIySection.cc.

487 {
488  G4double c1, c2, c3;
489  // G4cout<<"RI: x1 = "<<x1<<"; "<<"x2 = "<<x2<<G4endl;
490  c1 = (x2 - x1)/x1/x2;
491  c2 = (x2 - x1)*(x2 + x1)/x1/x1/x2/x2;
492  c3 = (x2 - x1)*(x1*x1 + x1*x2 + x2*x2)/x1/x1/x1/x2/x2/x2;
493  // G4cout<<" RI: c1 = "<<c1<<"; "<<"c2 = "<<c2<<"; "<<"c3 = "<<c3<<G4endl;
494 
495  return fA1[k]*log(x2/x1) + fA2[k]*c1 + fA3[k]*c2/2 + fA4[k]*c3/3;
496 
497 } // end of RutherfordIntegral
Double_t x2[nxs]
G4DataVector fA3
G4DataVector fA2
G4DataVector fA1
static const G4double c3
Double_t x1[nxs]
TCanvas * c2
Definition: plot_hist.C:75
double G4double
Definition: G4Types.hh:76
G4DataVector fA4

◆ SetVerbose()

void G4PAIySection::SetVerbose ( G4int  v)
inline

Definition at line 143 of file G4PAIySection.hh.

143 { fVerbose = v; };
Here is the call graph for this function:

◆ SplainPAI()

void G4PAIySection::SplainPAI ( G4double  betaGammaSq)

Definition at line 398 of file G4PAIySection.cc.

399 {
400  G4int k = 1;
401  G4int i = 1;
402 
403  while ( (i < fSplineNumber) && (fSplineNumber < fMaxSplineSize-1) )
404  {
405  if(fSplineEnergy[i+1] > fEnergyInterval[k+1])
406  {
407  k++; // Here next energy point is in next energy interval
408  i++;
409  continue;
410  }
411  // Shifting of arrayes for inserting the geometrical
412  // average of 'i' and 'i+1' energy points to 'i+1' place
413  fSplineNumber++;
414 
415  for(G4int j = fSplineNumber; j >= i+2; j-- )
416  {
417  fSplineEnergy[j] = fSplineEnergy[j-1];
420  fIntegralTerm[j] = fIntegralTerm[j-1];
421 
423  fdNdxCerenkov[j] = fdNdxCerenkov[j-1];
424  fdNdxPlasmon[j] = fdNdxPlasmon[j-1];
425  }
427  G4double x2 = fSplineEnergy[i+1];
428  G4double yy1 = fDifPAIySection[i];
429  G4double y2 = fDifPAIySection[i+1];
430 
431  G4double en1 = sqrt(x1*x2);
432  fSplineEnergy[i+1] = en1;
433 
434  // Calculation of logarithmic linear approximation
435  // in this (enr) energy point, which number is 'i+1' now
436 
437  G4double a = log10(y2/yy1)/log10(x2/x1);
438  G4double b = log10(yy1) - a*log10(x1);
439  G4double y = a*log10(en1) + b;
440  y = pow(10.,y);
441 
442  // Calculation of the PAI dif. cross-section at this point
443 
450  fSplineEnergy[i+1]);
451 
452  fDifPAIySection[i+1] = DifPAIySection(i+1,betaGammaSq);
453  fdNdxCerenkov[i+1] = PAIdNdxCerenkov(i+1,betaGammaSq);
454  fdNdxPlasmon[i+1] = PAIdNdxPlasmon(i+1,betaGammaSq);
455 
456  // Condition for next division of this segment or to pass
457  // to higher energies
458 
459  G4double x = 2*(fDifPAIySection[i+1] - y)/(fDifPAIySection[i+1] + y);
460 
461  G4double delta = 2.*(fSplineEnergy[i+1]-fSplineEnergy[i])/(fSplineEnergy[i+1]+fSplineEnergy[i]);
462 
463  if( x < 0 )
464  {
465  x = -x;
466  }
467  if( x > fError && fSplineNumber < fMaxSplineSize-1 && delta > 2.*fDelta )
468  {
469  continue; // next division
470  }
471  i += 2; // pass to next segment
472 
473  // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
474  } // close 'while'
475 
476 } // end of SplainPAI
Double_t y2[nxs]
G4DataVector fDifPAIySection
Double_t x2[nxs]
G4double RutherfordIntegral(G4int intervalNumber, G4double limitLow, G4double limitHigh)
static const G4double fDelta
static const G4int fMaxSplineSize
G4double ImPartDielectricConst(G4int intervalNumber, G4double energy)
G4DataVector fImPartDielectricConst
G4DataVector fRePartDielectricConst
G4double PAIdNdxCerenkov(G4int intervalNumber, G4double betaGammaSq)
G4double fNormalizationCof
int G4int
Definition: G4Types.hh:78
G4DataVector fIntegralTerm
Double_t y
Double_t x1[nxs]
G4DataVector fdNdxPlasmon
static const G4double fError
G4DataVector fSplineEnergy
G4DataVector fEnergyInterval
double G4double
Definition: G4Types.hh:76
G4double RePartDielectricConst(G4double energy)
G4DataVector fdNdxCerenkov
G4double DifPAIySection(G4int intervalNumber, G4double betaGammaSq)
G4double PAIdNdxPlasmon(G4int intervalNumber, G4double betaGammaSq)

◆ SumOverBordCerenkov()

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

Definition at line 1109 of file G4PAIySection.cc.

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

◆ SumOverBorder()

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

Definition at line 983 of file G4PAIySection.cc.

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

◆ SumOverBorderdEdx()

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

Definition at line 1053 of file G4PAIySection.cc.

1055 {
1056  G4double x0,x1,y0,yy1,a,/*c,*/d,e0,result;
1057 
1058  e0 = en0;
1059  x0 = fSplineEnergy[i];
1060  x1 = fSplineEnergy[i+1];
1061  y0 = fDifPAIySection[i];
1062  yy1 = fDifPAIySection[i+1];
1063 
1064  //c = x1/x0;
1065  d = e0/x0;
1066  a = log10(yy1/y0)/log10(x1/x0);
1067 
1068  G4double b = 0.0;
1069  if(a < 20.) b = y0/pow(x0,a);
1070 
1071  a += 2;
1072  if(a == 0)
1073  {
1074  result = b*log(x0/e0);
1075  }
1076  else
1077  {
1078  result = y0*(x0*x0 - e0*e0*pow(d,a-2))/a;
1079  }
1080  x0 = fSplineEnergy[i - 1];
1081  x1 = fSplineEnergy[i - 2];
1082  y0 = fDifPAIySection[i - 1];
1083  yy1 = fDifPAIySection[i - 2];
1084 
1085  //c = x1/x0;
1086  d = e0/x0;
1087  a = log10(yy1/y0)/log10(x1/x0);
1088 
1089  if(a < 20.) b = y0/pow(x0,a);
1090 
1091  a += 2;
1092  if(a == 0)
1093  {
1094  result += b*log(e0/x0);
1095  }
1096  else
1097  {
1098  result += y0*(e0*e0*pow(d,a-2) - x0*x0)/a;
1099  }
1100  return result;
1101 
1102 }
G4DataVector fDifPAIySection
Float_t d
Double_t x1[nxs]
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76

◆ SumOverBordPlasmon()

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

Definition at line 1180 of file G4PAIySection.cc.

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

◆ SumOverInterCerenkov()

G4double G4PAIySection::SumOverInterCerenkov ( G4int  intervalNumber)

Definition at line 912 of file G4PAIySection.cc.

913 {
914  G4double x0,x1,y0,yy1,a,c,result;
915 
916  x0 = fSplineEnergy[i];
917  x1 = fSplineEnergy[i+1];
918 
919  if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
920 
921  y0 = fdNdxCerenkov[i];
922  yy1 = fdNdxCerenkov[i+1];
923  // G4cout<<"SumC, i = "<<i<<"; x0 ="<<x0<<"; x1 = "<<x1
924  // <<"; y0 = "<<y0<<"; yy1 = "<<yy1<<G4endl;
925 
926  c = x1/x0;
927  a = log10(yy1/y0)/log10(c);
928  G4double b = 0.0;
929  if(a < 20.) b = y0/pow(x0,a);
930 
931  a += 1.0;
932  if(a == 0) result = b*log(c);
933  else result = y0*(x1*pow(c,a-1) - x0)/a;
934  a += 1.0;
935 
936  if( a == 0 ) fIntegralCerenkov[0] += b*log(x1/x0);
937  else fIntegralCerenkov[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
938  // G4cout<<"a = "<<a<<"; b = "<<b<<"; result = "<<result<<G4endl;
939  return result;
940 
941 } // end of SumOverInterCerenkov
Double_t x1[nxs]
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76
G4DataVector fdNdxCerenkov
G4DataVector fIntegralCerenkov

◆ SumOverInterPlasmon()

G4double G4PAIySection::SumOverInterPlasmon ( G4int  intervalNumber)

Definition at line 949 of file G4PAIySection.cc.

950 {
951  G4double x0,x1,y0,yy1,a,c,result;
952 
953  x0 = fSplineEnergy[i];
954  x1 = fSplineEnergy[i+1];
955 
956  if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
957 
958  y0 = fdNdxPlasmon[i];
959  yy1 = fdNdxPlasmon[i+1];
960  c = x1/x0;
961  a = log10(yy1/y0)/log10(c);
962 
963  G4double b = 0.0;
964  if(a < 20.) b = y0/pow(x0,a);
965 
966  a += 1.0;
967  if(a == 0) result = b*log(x1/x0);
968  else result = y0*(x1*pow(c,a-1) - x0)/a;
969  a += 1.0;
970 
971  if( a == 0 ) fIntegralPlasmon[0] += b*log(x1/x0);
972  else fIntegralPlasmon[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
973 
974  return result;
975 
976 } // end of SumOverInterPlasmon
G4DataVector fIntegralPlasmon
Double_t x1[nxs]
G4DataVector fdNdxPlasmon
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76

◆ SumOverInterval()

G4double G4PAIySection::SumOverInterval ( G4int  intervalNumber)

Definition at line 836 of file G4PAIySection.cc.

837 {
838  G4double x0,x1,y0,yy1,a,b,c,result;
839 
840  x0 = fSplineEnergy[i];
841  x1 = fSplineEnergy[i+1];
842 
843  if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
844 
845  y0 = fDifPAIySection[i];
846  yy1 = fDifPAIySection[i+1];
847  //G4cout << "## x0= " << x0 << " x1= " << x1 << G4endl;
848  c = x1/x0;
849  //G4cout << "c= " << c << " y0= " << y0 << " yy1= " << yy1 << G4endl;
850  a = log10(yy1/y0)/log10(c);
851  //G4cout << "a= " << a << G4endl;
852  // b = log10(y0) - a*log10(x0);
853  b = y0/pow(x0,a);
854  a += 1;
855  if(a == 0)
856  {
857  result = b*log(x1/x0);
858  }
859  else
860  {
861  result = y0*(x1*pow(c,a-1) - x0)/a;
862  }
863  a++;
864  if(a == 0)
865  {
866  fIntegralPAIySection[0] += b*log(x1/x0);
867  }
868  else
869  {
870  fIntegralPAIySection[0] += y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
871  }
872  return result;
873 
874 } // end of SumOverInterval
G4DataVector fDifPAIySection
Double_t x1[nxs]
G4DataVector fIntegralPAIySection
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76

◆ SumOverIntervaldEdx()

G4double G4PAIySection::SumOverIntervaldEdx ( G4int  intervalNumber)

Definition at line 878 of file G4PAIySection.cc.

879 {
880  G4double x0,x1,y0,yy1,a,b,c,result;
881 
882  x0 = fSplineEnergy[i];
883  x1 = fSplineEnergy[i+1];
884 
885  if( std::abs( 2.*(x1-x0)/(x1+x0) ) < 1.e-6) return 0.;
886 
887  y0 = fDifPAIySection[i];
888  yy1 = fDifPAIySection[i+1];
889  c = x1/x0;
890  a = log10(yy1/y0)/log10(c);
891  // b = log10(y0) - a*log10(x0);
892  b = y0/pow(x0,a);
893  a += 2;
894  if(a == 0)
895  {
896  result = b*log(x1/x0);
897  }
898  else
899  {
900  result = y0*(x1*x1*pow(c,a-2) - x0*x0)/a;
901  }
902  return result;
903 
904 } // end of SumOverInterval
G4DataVector fDifPAIySection
Double_t x1[nxs]
G4DataVector fSplineEnergy
double G4double
Definition: G4Types.hh:76

Member Data Documentation

◆ fA1

G4DataVector G4PAIySection::fA1
private

Definition at line 172 of file G4PAIySection.hh.

◆ fA2

G4DataVector G4PAIySection::fA2
private

Definition at line 173 of file G4PAIySection.hh.

◆ fA3

G4DataVector G4PAIySection::fA3
private

Definition at line 174 of file G4PAIySection.hh.

◆ fA4

G4DataVector G4PAIySection::fA4
private

Definition at line 175 of file G4PAIySection.hh.

◆ fDelta

const G4double G4PAIySection::fDelta = 0.005
staticprivate

Definition at line 151 of file G4PAIySection.hh.

◆ fDensity

G4double G4PAIySection::fDensity
private

Definition at line 163 of file G4PAIySection.hh.

◆ fDifPAIySection

G4DataVector G4PAIySection::fDifPAIySection
private

Definition at line 184 of file G4PAIySection.hh.

◆ fdNdxCerenkov

G4DataVector G4PAIySection::fdNdxCerenkov
private

Definition at line 185 of file G4PAIySection.hh.

◆ fdNdxPlasmon

G4DataVector G4PAIySection::fdNdxPlasmon
private

Definition at line 186 of file G4PAIySection.hh.

◆ fElectronDensity

G4double G4PAIySection::fElectronDensity
private

Definition at line 164 of file G4PAIySection.hh.

◆ fEnergyInterval

G4DataVector G4PAIySection::fEnergyInterval
private

Definition at line 171 of file G4PAIySection.hh.

◆ fError

const G4double G4PAIySection::fError = 0.005
staticprivate

Definition at line 152 of file G4PAIySection.hh.

◆ fImPartDielectricConst

G4DataVector G4PAIySection::fImPartDielectricConst
private

Definition at line 182 of file G4PAIySection.hh.

◆ fIntegralCerenkov

G4DataVector G4PAIySection::fIntegralCerenkov
private

Definition at line 190 of file G4PAIySection.hh.

◆ fIntegralPAIdEdx

G4DataVector G4PAIySection::fIntegralPAIdEdx
private

Definition at line 189 of file G4PAIySection.hh.

◆ fIntegralPAIySection

G4DataVector G4PAIySection::fIntegralPAIySection
private

Definition at line 188 of file G4PAIySection.hh.

◆ fIntegralPlasmon

G4DataVector G4PAIySection::fIntegralPlasmon
private

Definition at line 191 of file G4PAIySection.hh.

◆ fIntegralTerm

G4DataVector G4PAIySection::fIntegralTerm
private

Definition at line 183 of file G4PAIySection.hh.

◆ fIntervalNumber

G4int G4PAIySection::fIntervalNumber
private

Definition at line 160 of file G4PAIySection.hh.

◆ 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 155 of file G4PAIySection.hh.

◆ fLowEnergyCof

G4double G4PAIySection::fLowEnergyCof
private

Definition at line 165 of file G4PAIySection.hh.

◆ fMaxSplineSize

const G4int G4PAIySection::fMaxSplineSize = 500
staticprivate

Definition at line 178 of file G4PAIySection.hh.

◆ fNormalizationCof

G4double G4PAIySection::fNormalizationCof
private

Definition at line 161 of file G4PAIySection.hh.

◆ fNumberOfGammas

G4int G4PAIySection::fNumberOfGammas = 111
staticprivate

Definition at line 154 of file G4PAIySection.hh.

◆ fPAItable

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

Definition at line 193 of file G4PAIySection.hh.

◆ fRefGammaNumber

const G4int G4PAIySection::fRefGammaNumber = 29
staticprivate

Definition at line 158 of file G4PAIySection.hh.

◆ fRePartDielectricConst

G4DataVector G4PAIySection::fRePartDielectricConst
private

Definition at line 181 of file G4PAIySection.hh.

◆ fSandia

G4SandiaTable* G4PAIySection::fSandia
private

Definition at line 169 of file G4PAIySection.hh.

◆ fSplineEnergy

G4DataVector G4PAIySection::fSplineEnergy
private

Definition at line 180 of file G4PAIySection.hh.

◆ fSplineNumber

G4int G4PAIySection::fSplineNumber
private

Definition at line 166 of file G4PAIySection.hh.

◆ fVerbose

G4int G4PAIySection::fVerbose
private

Definition at line 167 of file G4PAIySection.hh.


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