121     G4cout << 
"### G4GoudsmitSaundersonMscModel loading ELSEPA data" << 
G4endl;
 
  169     eloss = kineticEnergy - 
 
  181   kineticEnergy -= 0.5*eloss;
 
  191   for(
G4int i=0;i<nelm;i++)
 
  194       lambda0 += (theAtomNumDensityVector[i]*
s0);
 
  206   for(
G4int i=0;i<1000;++i)
 
  208       logx0 = 
G4Log(1.+1./x0);
 
  209       x1 = x0-(x0*((1.+x0)*logx0-1.0)-g1*0.5)/( (1.+2.*x0)*logx0-2.0);
 
  212       if(x1 < 0.0)         { x1 = 0.5*x0; }
 
  213       else if(x1 > 2*x0)   { x1 = 2*x0; }
 
  214       else if(x1 < 0.5*x0) { x1 = 0.5*x0; }
 
  215       delta = std::fabs( x1 - x0 );    
 
  217       if(delta < 1.0e-3*x1) { 
break;}
 
  232   G4double cosTheta1,sinTheta1,cosTheta2,sinTheta2;
 
  233   G4double cosPhi1=1.0,sinPhi1=0.0,cosPhi2=1.0,sinPhi2=0.0;
 
  234   G4double us=0.0,vs=0.0,ws=1.0,wss=0.,x_coord=0.0,y_coord=0.0,z_coord=1.0;
 
  241   else if((epsilon1<((1.+lambdan)*expn))||(lambdan<1.))
 
  244       xi= 2.*scrA*xi/(1.-xi + 
scrA);
 
  248       wss=std::sqrt(xi*(2.-xi));      
 
  269       us = sinTheta2*(cosTheta1*cosPhi1*cosPhi2 - sinPhi1*sinPhi2) + cosTheta2*sinTheta1*cosPhi1;
 
  270       vs = sinTheta2*(cosTheta1*sinPhi1*cosPhi2 + cosPhi1*sinPhi2) + cosTheta2*sinTheta1*sinPhi1;
 
  271       ws = cosTheta1*cosTheta2 - sinTheta1*sinTheta2*cosPhi2; 
 
  278         }
while((fabs(ws)>1.)&&(i<20));
 
  279         if(i>=19)ws=cos(sqrtA);
 
  280         wss=std::sqrt((1.-ws*ws));      
 
  281         us=wss*std::cos(phi1);
 
  282         vs=wss*std::sin(phi1);
 
  288   newDirection.rotateUz(oldDirection);
 
  292   if(Qn1<0.02) { z_coord = 1.0 - Qn1*(0.5 - Qn1/6.); }
 
  293   else         { z_coord = (1.-
G4Exp(-Qn1))/Qn1; }
 
  323   if(scrA < 10.) { Qn1 *= scrA*((1.+
scrA)*
G4Log(1.+1./scrA)-1.); }
 
  324   else { Qn1*= (1.0 - 0.5/scrA - 0.5/(scrA*
scrA)) ; }
 
  331       }
while(tet*r1*r1>sin(tet));
 
  341   sint=sqrt(xi*(2.-xi));
 
  362   if(iZ > 103) iZ = 103;
 
  365   for(
G4int i=0;i<105;i++)
 
  367   if((logE>=
ener[i])&&(logE<
ener[i+1])){enerInd=i;
break;}
 
  376         y1=
TCSE[iZ-1][enerInd];
 
  377         y2=
TCSE[iZ-1][enerInd+1];
 
  378         acoeff=(y2-y1)/(x2*x2-x1*x1);
 
  379         bcoeff=y2-acoeff*x2*x2;
 
  380         Sig0=acoeff*logE*logE+bcoeff;
 
  382         y1=
FTCSE[iZ-1][enerInd];
 
  383         y2=
FTCSE[iZ-1][enerInd+1];
 
  384         acoeff=(y2-y1)/(x2*x2-x1*x1);
 
  385         bcoeff=y2-acoeff*x2*x2;
 
  386         Sig1=acoeff*logE*logE+bcoeff;
 
  395         Sig0=(y2-y1)*(logE-x1)/(x2-x1)+y1;
 
  399         Sig1=(y2-y1)*(logE-x1)/(x2-x1)+y1;
 
  405     if(kinEnergy<=1.0e+9)
 
  409         y1=
TCSP[iZ-1][enerInd];
 
  410         y2=
TCSP[iZ-1][enerInd+1];
 
  411         acoeff=(y2-y1)/(x2*x2-x1*x1);
 
  412         bcoeff=y2-acoeff*x2*x2;
 
  413         Sig0=acoeff*logE*logE+bcoeff;
 
  415         y1=
FTCSP[iZ-1][enerInd];
 
  416         y2=
FTCSP[iZ-1][enerInd+1];
 
  417         acoeff=(y2-y1)/(x2*x2-x1*x1);
 
  418         bcoeff=y2-acoeff*x2*x2;
 
  419         Sig1=acoeff*logE*logE+bcoeff;
 
  428         Sig0=(y2-y1)*(logE-x1)/(x2-x1)+y1;
 
  432         Sig1=(y2-y1)*(logE-x1)/(x2-x1)+y1;
 
  518           rat = 1.e-3/(rat*(10.+rat)) ;
 
  615           rat = 1.e-3/(rat*(10.+rat)) ;
 
  708       if(zt >= 0.333333333) {
 
  710         G4double cz = 0.5*(3.*zt-1.)/(1.-zt) ;
 
  716           grej = exp(cz*
G4Log(u/u0))*(1.-u)/(1.-u0) ;
 
  770   G4String filename = 
"XSECTIONS.dat";
 
  772   char* path = getenv(
"G4LEDATA");
 
  775       G4Exception(
"G4GoudsmitSaundersonMscModel::LoadELSEPAXSections()",
"em0006",
 
  777                   "Environment variable G4LEDATA not defined");
 
  782   G4String dirFile = pathString + 
"/msc_GS/" + filename;
 
  783   std::ifstream infile(dirFile, std::ios::in);
 
  784   if( !infile.is_open()) {
 
  786     ed << 
"Data file <" + dirFile + 
"> is not opened!";
 
  787     G4Exception(
"G4GoudsmitSaundersonMscModel::LoadELSEPAXSections()",
 
  794   for(
G4int i=0 ; i<106 ;i++){
 
  798       ed << 
"Error reading <" + dirFile + 
"> loop #1 i= " << i;
 
  799       G4Exception(
"G4GoudsmitSaundersonMscModel::LoadELSEPAXSections()",
 
  803       if(aRead > 0.0) { aRead = 
G4Log(aRead); }
 
  804       else            { aRead = 0.0; }
 
  808   for(
G4int j=0;j<103;j++){
 
  809     for(
G4int i=0;i<106;i++){
 
  813         ed << 
"Error reading <" + dirFile + 
"> loop #2 j= " << j 
 
  815         G4Exception(
"G4GoudsmitSaundersonMscModel::LoadELSEPAXSections()",
 
  819         if(aRead > 0.0) { aRead = 
G4Log(aRead); }
 
  820         else            { aRead = 0.0; }
 
  825   for(
G4int j=0;j<103;j++){
 
  826     for(
G4int i=0;i<106;i++){
 
  830         ed << 
"Error reading <" + dirFile + 
"> loop #3 j= " << j 
 
  832         G4Exception(
"G4GoudsmitSaundersonMscModel::LoadELSEPAXSections()",
 
  836         if(aRead > 0.0) { aRead = 
G4Log(aRead); }
 
  837         else            { aRead = 0.0; }
 
  842   for(
G4int j=0;j<103;j++){
 
  843     for(
G4int i=0;i<106;i++){
 
  847         ed << 
"Error reading <" + dirFile + 
"> loop #4 j= " << j 
 
  849         G4Exception(
"G4GoudsmitSaundersonMscModel::LoadELSEPAXSections()",
 
  853         if(aRead > 0.0) { aRead = 
G4Log(aRead); }
 
  854         else            { aRead = 0.0; }
 
  859   for(
G4int j=0;j<103;j++){
 
  860     for(
G4int i=0;i<106;i++){
 
  864         ed << 
"Error reading <" + dirFile + 
"> loop #5 j= " << j 
 
  866         G4Exception(
"G4GoudsmitSaundersonMscModel::LoadELSEPAXSections()",
 
  870         if(aRead > 0.0) { aRead = 
G4Log(aRead); }
 
  871         else            { aRead = 0.0; }
 
G4GoudsmitSaundersonMscModel(const G4String &nam="GoudsmitSaunderson")
 
void CalculateIntegrals(const G4ParticleDefinition *, G4double, G4double, G4double &, G4double &)
 
virtual G4double ComputeTrueStepLength(G4double geomStepLength)
 
G4GoudsmitSaundersonTable * GSTable
 
static G4double TCSP[103][106]
 
static G4LossTableManager * Instance()
 
std::vector< G4Element * > G4ElementVector
 
std::ostringstream G4ExceptionDescription
 
G4double GetKineticEnergy() const 
 
CLHEP::Hep3Vector G4ThreeVector
 
const G4DynamicParticle * GetDynamicParticle() const 
 
G4int currentMaterialIndex
 
G4StepStatus GetStepStatus() const 
 
G4double ConvertTrueToGeom(G4double &tLength, G4double &gLength)
 
const G4MaterialCutsCouple * GetMaterialCutsCouple() const 
 
const G4ParticleDefinition * particle
 
G4double SampleTheta(G4double, G4double, G4double)
 
G4ParticleDefinition * GetDefinition() const 
 
G4LossTableManager * theManager
 
const G4Step * GetStep() const 
 
const G4ElementVector * GetElementVector() const 
 
G4double currentKinEnergy
 
G4StepPoint * GetPreStepPoint() const 
 
G4double GetEnergy(const G4ParticleDefinition *part, G4double range, const G4MaterialCutsCouple *couple)
 
void StartTracking(G4Track *)
 
static G4double FTCSE[103][106]
 
static const G4double scrA[76 *11]
 
virtual G4double ComputeTruePathLengthLimit(const G4Track &track, G4double ¤tMinimalStep)
 
const G4double * GetVecNbOfAtomsPerVolume() const 
 
G4GLOB_DLL std::ostream G4cout
 
G4ParticleChangeForMSC * fParticleChange
 
static G4double TCSE[103][106]
 
const G4ThreeVector & GetPosition() const 
 
G4double GetRange(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
G4ParticleChangeForMSC * GetParticleChangeForMSC(const G4ParticleDefinition *p=0)
 
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
 
G4double ComputeGeomLimit(const G4Track &, G4double &presafety, G4double limit)
 
G4ThreeVector fDisplacement
 
G4double GetTransportMeanFreePath(const G4ParticleDefinition *part, G4double kinEnergy)
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
G4double ComputeSafety(const G4ThreeVector &position, G4double limit)
 
G4double G4Log(G4double x)
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
 
static G4double FTCSP[103][106]
 
static G4Positron * Positron()
 
void SetParticle(const G4ParticleDefinition *p)
 
G4double GetDEDX(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
void SetCurrentCouple(const G4MaterialCutsCouple *)
 
virtual ~G4GoudsmitSaundersonMscModel()
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *particle, G4double KineticEnergy, G4double AtomicNumber, G4double, G4double, G4double)
 
G4double GetSafety() const 
 
G4MscStepLimitType steppingAlgorithm
 
static G4Electron * Electron()
 
void SampleCosineTheta(G4double, G4double, G4double &, G4double &)
 
size_t GetNumberOfElements() const 
 
virtual G4ThreeVector & SampleScattering(const G4ThreeVector &, G4double safety)
 
const G4MaterialCutsCouple * currentCouple
 
const G4Material * GetMaterial() const 
 
static G4double ener[106]
 
virtual G4double ComputeGeomPathLength(G4double truePathLength)
 
void LoadELSEPAXSections()