82 fLowestKineticEnergy(10.0*
keV),
83 fHighestKineticEnergy(100.*
TeV),
87 fHighKinEnergy(100.*
TeV),
88 fLowKinEnergy(2.0*
MeV),
89 fTwoln10(2.0*log(10.0)),
186 for(
size_t iReg = 0; iReg < numRegions; ++iReg)
191 for(
size_t jMat = 0; jMat < numOfMat; ++jMat)
193 G4Material* material = (*theMaterialTable)[jMat];
266 for( jMat = 0; jMat < numOfMat; ++jMat )
268 if( material->
GetName() == (*theMaterialTable)[jMat]->GetName() )
break;
308 G4int i, j, numberOfElements;
312 numberOfElements = (*theMaterialTable)[
fMatIndex]->
313 GetNumberOfElements();
314 G4int* thisMaterialZ =
new G4int[numberOfElements];
316 for(i=0;i<numberOfElements;i++)
322 (thisMaterialZ,numberOfElements);
326 (*theMaterialTable)[
fMatIndex]->GetFractionVector() ,
337 for( j = 1; j < 5; j++ )
340 GetPhotoAbsorpCof(i+1,j)*
341 (*theMaterialTable)[
fMatIndex]->GetDensity();
344 delete[] thisMaterialZ;
357 G4double tau, Tmax, Tmin, Tkin, deltaLow, bg2;
395 tau = LowEdgeEnergy/proton_mass_c2;
399 bg2 = tau*(tau + 2. );
408 if ( Tkin < Tmin + deltaLow )
410 Tkin = Tmin + deltaLow;
441 photonVector->PutValue( k ,
444 plasmonVector->PutValue( k ,
447 dEdxVector->PutValue( k ,
452 if ( ionloss <= 0.) ionloss =
DBL_MIN;
477 G4double dNdxCut,dNdxPhotonCut,dNdxPlasmonCut,
lambda, deltaCutInKineticEnergyNow, photonCutInKineticEnergyNow;
494 for (jMatCC = 0; jMatCC < numOfCouples; jMatCC++ )
498 if( jMatCC == numOfCouples && jMatCC > 0 ) jMatCC--;
521 deltaCutInKineticEnergyNow = (*deltaCutInKineticEnergy)[jMatCC];
522 photonCutInKineticEnergyNow = (*photonCutInKineticEnergy)[jMatCC];
532 G4cout<<
"PAIPhotonModel deltaCutInKineticEnergyNow = "
533 <<deltaCutInKineticEnergyNow/
keV<<
" keV"<<
G4endl;
534 G4cout<<
"PAIPhotonModel photonCutInKineticEnergyNow = "
535 <<photonCutInKineticEnergyNow/
keV<<
" keV"<<
G4endl;
537 for ( i = 0; i <=
fTotBin; i++ )
542 dNdxCut = dNdxPhotonCut + dNdxPlasmonCut;
545 if (lambda <= 1000*kCarTolerance) lambda = 1000*kCarTolerance;
565 G4double dNdxCut,dNdxPhotonCut,dNdxPlasmonCut,
lambda, deltaCutInKineticEnergyNow, photonCutInKineticEnergyNow;
579 for (jMatCC = 0; jMatCC < numOfCouples; jMatCC++ )
583 if( jMatCC == numOfCouples && jMatCC > 0 ) jMatCC--;
604 photonCutInKineticEnergyNow = photEnergy;
605 deltaCutInKineticEnergyNow = eTkin;
609 G4cout<<
"PAIPhotonModel deltaCutInKineticEnergyNow = "
610 <<deltaCutInKineticEnergyNow/
keV<<
" keV"<<
G4endl;
611 G4cout<<
"PAIPhotonModel photonCutInKineticEnergyNow = "
612 <<photonCutInKineticEnergyNow/
keV<<
" keV"<<
G4endl;
614 for ( i = 0; i <=
fTotBin; i++ )
619 dNdxCut = dNdxPhotonCut + dNdxPlasmonCut;
622 if (lambda <= 1000*kCarTolerance) lambda = 1000*kCarTolerance;
655 iTransfer = (*fPAItransferTable)(iPlace)->GetVectorLength() - 1;
658 y1 = (*(*fPAItransferTable)(iPlace))(iTransfer-1);
659 y2 = (*(*fPAItransferTable)(iPlace))(iTransfer);
661 x1 = (*fPAItransferTable)(iPlace)->GetLowEdgeEnergy(iTransfer-1);
662 x2 = (*fPAItransferTable)(iPlace)->GetLowEdgeEnergy(iTransfer);
665 if ( y1 == y2 ) dNdxCut = y2;
670 if ( std::abs(x1-x2) <=
eV ) dNdxCut = y1 + (y2 - y1)*0.5;
671 else dNdxCut = y1 + (transferCut - x1)*(y2 - y1)/(x2 - x1);
693 if(transferCut <= (*
fPAIphotonTable)(iPlace)->GetLowEdgeEnergy(iTransfer))
700 iTransfer = (*fPAIphotonTable)(iPlace)->GetVectorLength() - 1;
703 y1 = (*(*fPAIphotonTable)(iPlace))(iTransfer-1);
704 y2 = (*(*fPAIphotonTable)(iPlace))(iTransfer);
706 x1 = (*fPAIphotonTable)(iPlace)->GetLowEdgeEnergy(iTransfer-1);
707 x2 = (*fPAIphotonTable)(iPlace)->GetLowEdgeEnergy(iTransfer);
710 if ( y1 == y2 ) dNdxCut = y2;
715 if ( std::abs(x1-x2) <=
eV ) dNdxCut = y1 + (y2 - y1)*0.5;
716 else dNdxCut = y1 + (transferCut - x1)*(y2 - y1)/(x2 - x1);
746 iTransfer = (*fPAIplasmonTable)(iPlace)->GetVectorLength() - 1;
749 y1 = (*(*fPAIplasmonTable)(iPlace))(iTransfer-1);
750 y2 = (*(*fPAIplasmonTable)(iPlace))(iTransfer);
752 x1 = (*fPAIplasmonTable)(iPlace)->GetLowEdgeEnergy(iTransfer-1);
753 x2 = (*fPAIplasmonTable)(iPlace)->GetLowEdgeEnergy(iTransfer);
756 if ( y1 == y2 ) dNdxCut = y2;
761 if ( std::abs(x1-x2) <=
eV ) dNdxCut = y1 + (y2 - y1)*0.5;
762 else dNdxCut = y1 + (transferCut - x1)*(y2 - y1)/(x2 - x1);
784 if(transferCut <= (*
fPAIdEdxTable)(iPlace)->GetLowEdgeEnergy(iTransfer))
791 iTransfer = (*fPAIdEdxTable)(iPlace)->GetVectorLength() - 1;
793 if (iTransfer == 0)
return (*(*
fPAIdEdxTable)(iPlace))(iTransfer);
794 y1 = (*(*fPAIdEdxTable)(iPlace))(iTransfer-1);
795 y2 = (*(*fPAIdEdxTable)(iPlace))(iTransfer);
797 x1 = (*fPAIdEdxTable)(iPlace)->GetLowEdgeEnergy(iTransfer-1);
798 x2 = (*fPAIdEdxTable)(iPlace)->GetLowEdgeEnergy(iTransfer);
801 if ( y1 == y2 ) dEdxCut = y2;
806 if ( std::abs(x1-x2) <=
eV ) dEdxCut = y1 + (y2 - y1)*0.5;
807 else dEdxCut = y1 + (transferCut - x1)*(y2 - y1)/(x2 - x1);
827 G4double scaledTkin = kineticEnergy*proton_mass_c2/particleMass;
849 for(iTkin = 0; iTkin <=
fTotBin; iTkin++)
851 if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin))
break;
854 if(iPlace < 0) iPlace = 0;
856 dEdx = charge2*( (*fdEdxVector)(iPlace) -
GetdEdxCut(iPlace,cut) );
858 if( dEdx < 0.) dEdx = 0.;
875 if(cutEnergy >= tmax)
return 0.0;
877 G4double scaledTkin = kineticEnergy*proton_mass_c2/particleMass;
879 G4double charge2 = charge*charge, cross, cross1, cross2;
880 G4double photon1, photon2, plasmon1, plasmon2;
889 for (jMatCC = 0; jMatCC < numOfCouples; jMatCC++ )
893 if( jMatCC == numOfCouples && jMatCC > 0 ) jMatCC--;
895 const vector<G4double>* photonCutInKineticEnergy = theCoupleTable->
898 G4double photonCut = (*photonCutInKineticEnergy)[jMatCC];
910 for(iTkin = 0; iTkin <=
fTotBin; iTkin++)
912 if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin))
break;
915 if(iPlace < 0) iPlace = 0;
925 cross1 = photon1 + plasmon1;
927 cross2 = photon2 + plasmon2;
929 cross = (cross2 - cross1)*charge2;
932 if( cross < 0. ) cross = 0.;
949 if(cutEnergy >= tmax)
return 0.0;
951 G4double scaledTkin = kineticEnergy*proton_mass_c2/particleMass;
953 G4double charge2 = charge*charge, cross, cross1, cross2;
954 G4double photon1, photon2, plasmon1, plasmon2;
963 for (jMatCC = 0; jMatCC < numOfCouples; jMatCC++ )
967 if( jMatCC == numOfCouples && jMatCC > 0 ) jMatCC--;
983 for(iTkin = 0; iTkin <=
fTotBin; iTkin++)
985 if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin))
break;
988 if(iPlace < 0) iPlace = 0;
998 cross1 = photon1 + plasmon1;
1000 cross2 = photon2 + plasmon2;
1002 cross = (cross2 - cross1)*charge2;
1005 if( cross < 0. ) cross = 0.;
1039 G4cout<<
"G4PAIPhotonModel::SampleSecondary: tmin >= tmax "<<
G4endl;
1045 G4double scaledTkin = kineticEnergy*proton_mass_c2/particleMass;
1046 G4double totalEnergy = kineticEnergy + particleMass;
1047 G4double pSquare = kineticEnergy*(totalEnergy+particleMass);
1050 for(iTkin=0;iTkin<=
fTotBin;iTkin++)
1052 if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin))
break;
1054 G4int iPlace = iTkin - 1;
1055 if(iPlace < 0) iPlace = 0;
1057 G4double dNdxPhotonCut = (*fdNdxCutPhotonVector)(iPlace);
1058 G4double dNdxPlasmonCut = (*fdNdxCutPlasmonVector)(iPlace);
1059 G4double dNdxCut = dNdxPhotonCut + dNdxPlasmonCut;
1062 if (dNdxCut > 0.) ratio = dNdxPhotonCut/dNdxCut;
1068 iPlace, scaledTkin);
1072 if( deltaTkin <= 0. )
1074 G4cout<<
"G4PAIPhotonModel::SampleSecondary e- deltaTkin = "<<deltaTkin<<
G4endl;
1076 if( deltaTkin <= 0.)
return;
1078 if( deltaTkin >= kineticEnergy )
1080 deltaTkin = kineticEnergy;
1081 kineticEnergy = 0.0;
1083 G4double deltaTotalMomentum = sqrt(deltaTkin*(deltaTkin + 2. * electron_mass_c2 ));
1084 G4double totalMomentum = sqrt(pSquare);
1085 G4double costheta = deltaTkin*(totalEnergy + electron_mass_c2)
1086 /(deltaTotalMomentum * totalMomentum);
1088 if( costheta > 0.99999 ) costheta = 0.99999;
1090 G4double sin2 = 1. - costheta*costheta;
1091 if( sin2 > 0.) sintheta = sqrt(sin2);
1096 G4double dirx = sintheta*cos(phi), diry = sintheta*sin(phi), dirz = costheta;
1099 deltaDirection.rotateUz(direction);
1101 if( kineticEnergy > 0.)
1103 kineticEnergy -= deltaTkin;
1104 G4ThreeVector dir = totalMomentum*direction - deltaTotalMomentum*deltaDirection;
1105 direction = dir.unit();
1121 vdp->push_back(deltaRay);
1131 if( deltaTkin <= 0. )
1133 G4cout<<
"G4PAIPhotonModel::SampleSecondary gamma deltaTkin = "<<deltaTkin<<
G4endl;
1135 if( deltaTkin <= 0.)
return;
1137 if( deltaTkin >= kineticEnergy )
1139 deltaTkin = kineticEnergy;
1140 kineticEnergy = 0.0;
1143 G4double sintheta = sqrt((1.+costheta)*(1.-costheta));
1147 G4double dirx = sintheta*cos(phi), diry = sintheta*sin(phi), dirz = costheta;
1150 deltaDirection.rotateUz(direction);
1152 if( kineticEnergy > 0.)
1154 kineticEnergy -= deltaTkin;
1169 vdp->push_back(photonRay);
1199 G4cout<<
"G4PAIPhotonModel::TestSecondaries: tmin >= tmax "<<
G4endl;
1205 G4double scaledTkin = kineticEnergy*proton_mass_c2/particleMass;
1206 G4double totalEnergy = kineticEnergy + particleMass;
1207 G4double pSquare = kineticEnergy*(totalEnergy+particleMass);
1210 for(iTkin=0;iTkin<=
fTotBin;iTkin++)
1212 if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin))
break;
1214 G4int iPlace = iTkin - 1;
1215 if(iPlace < 0) iPlace = 0;
1217 G4double dNdxPhotonCut = (*fdNdxCutPhotonVector)(iPlace);
1218 G4double dNdxPlasmonCut = (*fdNdxCutPlasmonVector)(iPlace);
1219 G4double dNdxCut = dNdxPhotonCut + dNdxPlasmonCut;
1222 if (dNdxCut > 0.) ratio = dNdxPhotonCut/dNdxCut;
1228 iPlace, scaledTkin);
1232 if( deltaTkin <= 0. )
1234 G4cout<<
"G4PAIPhotonModel::SampleSecondary e- deltaTkin = "<<deltaTkin<<
G4endl;
1236 if( deltaTkin <= 0.)
return 0.;
1238 G4double deltaTotalMomentum = sqrt(deltaTkin*(deltaTkin + 2. * electron_mass_c2 ));
1239 G4double totalMomentum = sqrt(pSquare);
1240 G4double costheta = deltaTkin*(totalEnergy + electron_mass_c2)
1241 /(deltaTotalMomentum * totalMomentum);
1243 if( costheta > 0.99999 ) costheta = 0.99999;
1245 G4double sin2 = 1. - costheta*costheta;
1246 if( sin2 > 0.) sintheta = sqrt(sin2);
1251 G4double dirx = sintheta*cos(phi), diry = sintheta*sin(phi), dirz = costheta;
1254 deltaDirection.rotateUz(direction);
1258 kineticEnergy -= deltaTkin;
1259 G4ThreeVector dir = totalMomentum*direction - deltaTotalMomentum*deltaDirection;
1260 direction = dir.unit();
1278 if( deltaTkin <= 0. )
1280 G4cout<<
"G4PAIPhotonModel::SampleSecondary gamma deltaTkin = "<<deltaTkin<<
G4endl;
1282 if( deltaTkin <= 0.)
return 0.;
1285 G4double sintheta = sqrt((1.+costheta)*(1.-costheta));
1289 G4double dirx = sintheta*cos(phi), diry = sintheta*sin(phi), dirz = costheta;
1292 deltaDirection.rotateUz(direction);
1295 kineticEnergy -= deltaTkin;
1323 G4int iTkin = iPlace+1, iTransfer;
1326 dNdxCut1 = (*pVector)(iPlace);
1335 iTransfer <
G4int((*pTable)(iPlace)->GetVectorLength()); iTransfer++ )
1337 if(
position >= (*(*pTable)(iPlace))(iTransfer))
break;
1343 dNdxCut2 = (*pVector)(iPlace+1);
1349 iTransfer <
G4int((*pTable)(iPlace+1)->GetVectorLength()); iTransfer++ )
1351 if(
position >= (*(*pTable)(iPlace+1))(iTransfer))
break;
1360 W1 = (E2 - scaledTkin)*W;
1361 W2 = (scaledTkin - E1)*W;
1367 G4int iTrMax1, iTrMax2, iTrMax;
1369 iTrMax1 =
G4int((*pTable)(iPlace)->GetVectorLength());
1370 iTrMax2 =
G4int((*pTable)(iPlace+1)->GetVectorLength());
1372 if (iTrMax1 >= iTrMax2) iTrMax = iTrMax2;
1373 else iTrMax = iTrMax1;
1375 for( iTransfer = 0; iTransfer < iTrMax; iTransfer++ )
1378 ( (*(*pTable)(iPlace))(iTransfer)*W1 +
1379 (*(*pTable)(iPlace+1))(iTransfer)*W2) )
break;
1385 if( transfer < 0.0 ) transfer = 0.0;
1399 G4double x1, x2, y1, y2, energyTransfer;
1403 energyTransfer = (*pTable)(iPlace)->GetLowEdgeEnergy(iTransfer);
1407 iTransferMax =
G4int((*pTable)(iPlace)->GetVectorLength());
1409 if ( iTransfer >= iTransferMax) iTransfer = iTransferMax - 1;
1411 y1 = (*(*pTable)(iPlace))(iTransfer-1);
1412 y2 = (*(*pTable)(iPlace))(iTransfer);
1414 x1 = (*pTable)(iPlace)->GetLowEdgeEnergy(iTransfer-1);
1415 x2 = (*pTable)(iPlace)->GetLowEdgeEnergy(iTransfer);
1417 if ( x1 == x2 ) energyTransfer = x2;
1420 if ( y1 == y2 ) energyTransfer = x1 + (x2 - x1)*
G4UniformRand();
1423 energyTransfer = x1 + (position - y1)*(x2 - x1)/(y2 - y1);
1427 return energyTransfer;
1456 G4int iTkin, iPlace ;
1460 G4double loss, photonLoss, plasmonLoss, charge2;
1466 charge2 = charge*charge;
1467 G4double scaledTkin = Tkin*MassRatio;
1470 for( iTkin = 0; iTkin <=
fTotBin; iTkin++)
1472 if(scaledTkin < fProtonEnergyVector->GetLowEdgeEnergy(iTkin))
break;
1475 if( iPlace < 0 ) iPlace = 0;
1478 iPlace,scaledTkin,step,cof);
1483 iPlace,scaledTkin,step,cof);
1487 loss = photonLoss + plasmonLoss;
1505 G4int iTkin = iPlace + 1, iTransfer;
1506 G4double loss = 0.,
position, E1, E2, W1, W2, W, dNdxCut1, dNdxCut2, meanNumber;
1508 G4long numOfCollisions=0;
1511 dNdxCut1 = (*pVector)(iPlace);
1517 meanNumber = ((*(*pTable)(iPlace))(0) - dNdxCut1)*cof;
1518 if(meanNumber < 0.) meanNumber = 0.;
1520 if( meanNumber > 0.) lambda = step/meanNumber;
1525 stepSum += stepDelta;
1526 if(stepSum >= step)
break;
1532 while(numOfCollisions)
1538 iTransfer <
G4int((*pTable)(iPlace)->GetVectorLength()); iTransfer++ )
1540 if(
position >= (*(*pTable)(iPlace))(iTransfer))
break;
1548 dNdxCut2 = (*pVector)(iPlace+1);
1552 meanNumber = ((*(*pTable)(iPlace+1))(0) - dNdxCut2)*cof;
1553 if( meanNumber < 0. ) meanNumber = 0.;
1555 if( meanNumber > 0.) lambda = step/meanNumber;
1560 stepSum += stepDelta;
1561 if(stepSum >= step)
break;
1567 while(numOfCollisions)
1573 iTransfer <
G4int((*pTable)(iPlace+1)->GetVectorLength()); iTransfer++ )
1575 if(
position >= (*(*pTable)(iPlace+1))(iTransfer))
break;
1586 W1 = (E2 - scaledTkin)*W;
1587 W2 = (scaledTkin - E1)*W;
1594 meanNumber=( ((*(*pTable)(iPlace))(0)-dNdxCut1)*W1 +
1595 ((*(*pTable)(iPlace+1))(0)-dNdxCut2)*W2 )*cof;
1596 if(meanNumber<0.0) meanNumber = 0.0;
1598 if( meanNumber > 0.) lambda = step/meanNumber;
1603 stepSum += stepDelta;
1604 if(stepSum >= step)
break;
1610 while(numOfCollisions)
1612 position = dNdxCut1*W1 + dNdxCut2*W2 +
1613 ( ( (*(*pTable)(iPlace ))(0) - dNdxCut1)*W1 +
1615 ( (*(*pTable)(iPlace+1))(0) - dNdxCut2)*W2 )*
G4UniformRand();
1620 iTransfer <
G4int((*pTable)(iPlace)->GetVectorLength()); iTransfer++ )
1623 ( (*(*pTable)(iPlace))(iTransfer)*W1 +
1624 (*(*pTable)(iPlace+1))(iTransfer)*W2) )
1655 G4double etot = kineticEnergy + particleMass;
1656 G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*particleMass)/(etot*etot);
1657 G4double siga = (1.0/beta2 - 0.5) * twopi_mc2_rcl2 * tmax * step
1658 * electronDensity * q * q;
1686 G4double ratio= electron_mass_c2/mass;
1687 G4double gamma= kinEnergy/mass + 1.0;
1688 tmax = 2.0*electron_mass_c2*(gamma*gamma - 1.) /
1689 (1. + 2.0*gamma*ratio + ratio*ratio);
G4int fSandiaIntervalNumber
G4double TestSecondaries(G4MaterialCutsCouple *, G4DynamicParticle *, G4double tmin, G4double maxEnergy)
G4double GetdEdxCut(G4int iPlace, G4double transferCut)
ThreeVector shoot(const G4int Ap, const G4int Af)
G4double ** fSandiaPhotoAbsCof
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const
std::vector< G4PhysicsTable * > fPAIdEdxBank
G4ParticleChangeForLoss * GetParticleChangeForLoss()
std::vector< G4PhysicsTable * > fPAIplasmonBank
const G4ParticleDefinition * fPositron
void PutValue(size_t binNumber, G4double binValue, G4double dataValue)
G4PhysicsLogVector * fdNdxCutVector
G4double GetKineticEnergy() const
CLHEP::Hep3Vector G4ThreeVector
void ComputeSandiaPhotoAbsCof()
G4PhysicsLogVector * fLambdaVector
G4double GetXscPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double photonCut, G4double cutEnergy, G4double maxEnergy)
void DefineForRegion(const G4Region *r)
const G4Material * fMaterial
std::vector< G4PhysicsTable * > fPAIxscBank
const G4String & GetName() const
G4double GetEnergyTransfer(G4PhysicsTable *, G4int iPlace, G4double position, G4int iTransfer)
G4double GetIntegralPlasmon(G4int i) const
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
G4double GetSurfaceTolerance() const
static G4MaterialTable * GetMaterialTable()
G4PhysicsTable * fPAIphotonTable
std::vector< G4Material * > G4MaterialTable
std::vector< G4PhysicsTable * > fPAIphotonBank
G4double GetIntegralPAIxSection(G4int i) const
G4double GetdNdxPlasmonCut(G4int iPlace, G4double transferCut)
G4double GetSandiaMatTablePAI(G4int, G4int) const
void SetMomentumDirection(const G4ThreeVector &aDirection)
std::vector< G4PhysicsLogVector * > fdNdxCutPlasmonTable
G4ParticleDefinition * GetDefinition() const
G4double GetIntegralPAIdEdx(G4int i) const
G4double GetLowEdgeEnergy(size_t binNumber) const
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
std::vector< G4PhysicsLogVector * > fLambdaTable
static const G4double reg
G4int SandiaMixing(G4int Z[], const G4double *fractionW, G4int el, G4int mi)
std::vector< G4PhysicsLogVector * > fdNdxCutTable
void BuildLambdaVector(const G4MaterialCutsCouple *matCutsCouple)
G4PhysicsTable * fPAIplasmonTable
const G4MaterialCutsCouple * CurrentCouple() const
G4GLOB_DLL std::ostream G4cout
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
void BuildPAIonisationTable()
size_t GetTableSize() const
void SetParticle(const G4ParticleDefinition *p)
G4double GetElectronDensity() const
virtual void InitTest(const G4ParticleDefinition *, G4MaterialCutsCouple *, G4double, G4double)
G4PhysicsTable * fPAIdEdxTable
G4int GetSplineSize() const
G4double GetdNdxPhotonCut(G4int iPlace, G4double transferCut)
const G4ThreeVector & GetMomentumDirection() const
G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kinEnergy)
G4double GetCharge() const
G4double GetIntegralCerenkov(G4int i) const
void PutValue(size_t index, G4double theValue)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4PhysicsLogVector * fProtonEnergyVector
G4MaterialCutsCouple * FindCouple(G4Material *mat)
virtual G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double, G4double, G4double)
static size_t GetNumberOfMaterials()
void SetProposedMomentumDirection(const G4ThreeVector &dir)
G4double GetAlongStepTransfer(G4PhysicsTable *, G4PhysicsLogVector *, G4int iPlace, G4double scaledTkin, G4double step, G4double cof)
void SetKineticEnergy(G4double aEnergy)
const G4ParticleDefinition * fElectron
G4int SandiaIntervals(G4int Z[], G4int el)
std::vector< G4PhysicsLogVector * > fdEdxTable
std::vector< const G4MaterialCutsCouple * > fMaterialCutsCoupleVector
virtual G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double, G4double)
const G4ParticleDefinition * fParticle
static G4ProductionCutsTable * GetProductionCutsTable()
G4PhysicsLogVector * fdNdxCutPhotonVector
static G4Positron * Positron()
G4double GetPDGMass() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
virtual ~G4PAIPhotonModel()
std::vector< G4PhysicsLogVector * > fdNdxCutPhotonTable
const G4MaterialCutsCouple * fCutCouple
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
void Initialize(const G4Material *material, G4double maxEnergyTransfer, G4double betaGammaSq, G4SandiaTable *)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4double GetPhotoAbsorpCof(G4int i, G4int j) const
G4PAIxSection fPAIxSection
G4double GetdNdxCut(G4int iPlace, G4double transferCut)
G4double fLowestKineticEnergy
void insertAt(size_t, G4PhysicsVector *)
G4double GetPDGSpin() const
static G4Electron * Electron()
const G4ParticleDefinition * fGamma
G4PhysicsLogVector * fdEdxVector
G4PhysicsTable * fPAItransferTable
G4PAIPhotonModel(const G4ParticleDefinition *p=0, const G4String &nam="PAIPhoton")
void ProposeTrackStatus(G4TrackStatus status)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
static const double eplus
G4double GetPDGCharge() const
std::vector< const G4Region * > fPAIRegionVector
G4PhysicsLogVector * fdNdxCutPlasmonVector
G4double GetPostStepTransfer(G4PhysicsTable *, G4PhysicsLogVector *, G4int iPlace, G4double scaledTkin)
static G4GeometryTolerance * GetInstance()
G4ParticleChangeForLoss * fParticleChange
G4double GetMeanEnergyLoss() const
void Initialize(G4Material *)
G4double GetSplineEnergy(G4int i) const
const G4Material * GetMaterial() const
G4double fHighestKineticEnergy