112 G4cout <<
"MicroElec inelastic model is constructed " <<
G4endl;
134 TCSMap::iterator pos2;
136 MapData* tableData = pos2->second;
137 for (
auto pos = tableData->begin();
pos != tableData->end(); ++
pos)
146 dataDiffCSMap::iterator iterator_proba;
149 vector<TriDimensionMap>* eNrjTransfData = iterator_proba->second;
150 eNrjTransfData->clear();
151 delete eNrjTransfData;
156 vector<TriDimensionMap>* pNrjTransfData = iterator_proba->second;
157 pNrjTransfData->clear();
158 delete pNrjTransfData;
164 vector<TriDimensionMap>* eDiffCrossSectionData = iterator_proba->second;
165 eDiffCrossSectionData->clear();
166 delete eDiffCrossSectionData;
171 vector<TriDimensionMap>* pDiffCrossSectionData = iterator_proba->second;
172 pDiffCrossSectionData->clear();
173 delete pDiffCrossSectionData;
178 dataProbaShellMap::iterator iterator_probaShell;
181 vector<VecMap>* eProbaShellMap = iterator_probaShell->second;
182 eProbaShellMap->clear();
183 delete eProbaShellMap;
188 vector<VecMap>* pProbaShellMap = iterator_probaShell->second;
189 pProbaShellMap->clear();
190 delete pProbaShellMap;
195 TranfEnergyMap::iterator iterator_nrjtransf;
197 VecMap* eVecm = iterator_nrjtransf->second;
203 VecMap* pVecm = iterator_nrjtransf->second;
210 incidentEnergyMap::iterator iterator_energy;
212 std::vector<G4double>* eTdummyVec = iterator_energy->second;
219 std::vector<G4double>* pTdummyVec = iterator_energy->second;
226 MapStructure::iterator iterator_matStructure;
244 G4cout <<
"Calling G4MicroElecInelasticModel_new::Initialise()" <<
G4endl;
246 char* path = std::getenv(
"G4LEDATA");
273 for (
G4int i = 0; i < numOfCouples; ++i) {
275 G4cout <<
"Material " << i + 1 <<
" / " << numOfCouples <<
" : " <<
material->GetName() <<
G4endl;
276 if (
material->GetName() ==
"Vacuum")
continue;
282 if (particle == electronDef) {
284 G4String fileElectron(
"Inelastic/" + modelName +
"_sigma_inelastic_e-_" + mat);
288 tableData->insert(make_pair(
electron, tableE));
291 std::ostringstream eFullFileName;
293 eFullFileName << path <<
"/microelec/Inelastic/cumulated_" + modelName +
"_sigmadiff_inelastic_e-_" + mat +
".dat";
295 G4cout <<
"Inelastic/cumulated_" + modelName +
"_sigmadiff_inelastic_e-_" + mat +
".dat" <<
G4endl;
298 eFullFileName << path <<
"/microelec/Inelastic/" + modelName +
"_sigmadiff_inelastic_e-_" + mat +
".dat";
300 G4cout <<
"Inelastic/" + modelName +
"_sigmadiff_inelastic_e-_" + mat +
".dat" <<
G4endl;
303 std::ifstream eDiffCrossSection(eFullFileName.str().c_str());
304 if (!eDiffCrossSection)
306 std::stringstream ss;
307 ss <<
"Missing data " << eFullFileName.str().c_str();
308 std::string sortieString = ss.str();
314 G4Exception(
"G4MicroElecInelasticModel_new::Initialise",
"em0003",
315 FatalException,
"Missing data file:/microelec/sigmadiff_inelastic_e_Si.dat");
323 vector<TriDimensionMap>* eDiffCrossSectionData =
324 new vector<TriDimensionMap>;
325 vector<TriDimensionMap>* eNrjTransfData =
326 new vector<TriDimensionMap>;
327 vector<VecMap>* eProbaShellMap =
new vector<VecMap>;
328 vector<G4double>* eTdummyVec =
new vector<G4double>;
335 eProbaShellMap->push_back(
VecMap());
338 eTdummyVec->push_back(0.);
339 while (!eDiffCrossSection.eof())
343 eDiffCrossSection >> tDummy >> eDummy;
344 if (tDummy != eTdummyVec->back()) eTdummyVec->push_back(tDummy);
349 eDiffCrossSection >> tmp;
350 (*eDiffCrossSectionData)[j][tDummy][eDummy] = tmp;
354 (*eNrjTransfData)[j][tDummy][(*eDiffCrossSectionData)[j][tDummy][eDummy]] = eDummy;
355 (*eProbaShellMap)[j][tDummy].push_back((*eDiffCrossSectionData)[j][tDummy][eDummy]);
358 if (!eDiffCrossSection.eof()) (*eDiffCrossSectionData)[j][tDummy][eDummy] *= scaleFactor;
359 (*eVecm)[tDummy].push_back(eDummy);
384 if (particle == protonDef)
387 G4String fileProton(
"Inelastic/" + modelName +
"_sigma_inelastic_p_" + mat);
G4cout << fileProton <<
G4endl;
390 tableData->insert(make_pair(
proton, tableP));
393 std::ostringstream pFullFileName;
395 pFullFileName << path <<
"/microelec/Inelastic/cumulated_" + modelName +
"_sigmadiff_inelastic_p_" + mat +
".dat";
397 G4cout <<
"Inelastic/cumulated_" + modelName +
"_sigmadiff_inelastic_p_" + mat +
".dat" <<
G4endl;
400 pFullFileName << path <<
"/microelec/Inelastic/" + modelName +
"_sigmadiff_inelastic_p_" + mat +
".dat";
402 G4cout <<
"Inelastic/" + modelName +
"_sigmadiff_inelastic_e-_" + mat +
".dat" <<
G4endl;
405 std::ifstream pDiffCrossSection(pFullFileName.str().c_str());
406 if (!pDiffCrossSection)
409 FatalException,
"Missing data file:/microelec/sigmadiff_cumulated_inelastic_p_Si.dat");
411 G4Exception(
"G4MicroElecInelasticModel_new::Initialise",
"em0003",
412 FatalException,
"Missing data file:/microelec/sigmadiff_inelastic_p_Si.dat");
422 vector<TriDimensionMap>* pDiffCrossSectionData =
423 new vector<TriDimensionMap>;
424 vector<TriDimensionMap>* pNrjTransfData =
425 new vector<TriDimensionMap>;
426 vector<VecMap>* pProbaShellMap =
428 vector<G4double>* pTdummyVec =
429 new vector<G4double>;
437 pProbaShellMap->push_back(
VecMap());
440 pTdummyVec->push_back(0.);
441 while (!pDiffCrossSection.eof())
445 pDiffCrossSection >> tDummy >> eDummy;
446 if (tDummy != pTdummyVec->back()) pTdummyVec->push_back(tDummy);
451 pDiffCrossSection >> tmp;
452 (*pDiffCrossSectionData)[j][tDummy][eDummy] = tmp;
459 (*pNrjTransfData)[j][tDummy][(*pDiffCrossSectionData)[j][tDummy][eDummy]] = eDummy;
460 (*pProbaShellMap)[j][tDummy].push_back((*pDiffCrossSectionData)[j][tDummy][eDummy]);
463 if (!pDiffCrossSection.eof()) (*pDiffCrossSectionData)[j][tDummy][eDummy] *= scaleFactor;
464 (*eVecm)[tDummy].push_back(eDummy);
488 if (particle==electronDef)
494 if (particle==protonDef)
502 G4cout <<
"MicroElec Inelastic model is initialized " <<
G4endl
531 MapStructure::iterator structPos;
535 TCSMap::iterator tablepos;
553 MapData* tableData = tablepos->second;
563 G4double Zeff = 1.0, Zeff2 = Zeff*Zeff;
569 nameLocal =
"proton";
575 if (ekin >= lowLim && ekin < highLim)
577 std::map< G4String, G4MicroElecCrossSectionDataSet_new*, std::less<G4String> >::iterator
pos;
578 pos = tableData->find(nameLocal);
580 if (
pos != tableData->end())
605 G4Exception(
"G4MicroElecInelasticModel_new::CrossSectionPerVolume",
607 "Model not applicable to particle type.");
618 G4cout <<
" - Cross section per Si atom (cm^2)=" << sigma /
cm2 <<
G4endl;
619 G4cout <<
" - Cross section per Si atom (cm^-1)=" << sigma*density / (1. /
cm) <<
G4endl;
622 return (sigma)*density;}
636 G4cout <<
"Calling SampleSecondaries() of G4MicroElecInelasticModel" <<
G4endl;
647 G4String nameLocal2 = particleName ;
649 G4double originalMass = particleMass;
656 nameLocal2 =
"proton" ;
659 if (k >= lowLim && k < highLim)
662 G4double totalEnergy = ekin + particleMass;
663 G4double pSquare = ekin * (totalEnergy + particleMass);
664 G4double totalMomentum = std::sqrt(pSquare);
668 Shell =
RandomSelect(k,nameLocal2,originalMass, originalZ);
681 G4int secNumberInit = 0;
682 G4int secNumberFinal = 0;
686 if (k<limitEnergy)
return;
697 secNumberInit = fvect->size();
699 secNumberFinal = fvect->size();
716 G4cout <<
"Shell: " << Shell <<
" Kin. energy (eV)=" << k/
eV
717 <<
" Sec. energy (eV)=" << secondaryKinetic/
eV <<
G4endl;
728 G4double finalPx = totalMomentum*primaryDirection.
x() - deltaTotalMomentum*deltaDirection.
x();
729 G4double finalPy = totalMomentum*primaryDirection.
y() - deltaTotalMomentum*deltaDirection.
y();
730 G4double finalPz = totalMomentum*primaryDirection.
z() - deltaTotalMomentum*deltaDirection.
z();
731 G4double finalMomentum = std::sqrt(finalPx*finalPx + finalPy*finalPy + finalPz*finalPz);
732 finalPx /= finalMomentum;
733 finalPy /= finalMomentum;
734 finalPz /= finalMomentum;
737 direction.
set(finalPx,finalPy,finalPz);
745 for (
G4int j=secNumberInit; j < secNumberFinal; ++j) {
746 deexSecEnergy = deexSecEnergy + (*fvect)[j]->GetKineticEnergy();
752 if (secondaryKinetic>0)
755 fvect->push_back(dp);
766 G4double secondaryElectronKineticEnergy=0.;
772 G4double maxEnergy = maximumEnergyTransfer;
773 G4int nEnergySteps = 100;
776 G4double stpEnergy(std::pow(maxEnergy/value, 1./
static_cast<G4double>(nEnergySteps-1)));
777 G4int step(nEnergySteps);
783 crossSectionMaximum =
std::max(crossSectionMaximum, differentialCrossSection);
805 G4double maxEnergy = maximumEnergyTransfer;
806 G4int nEnergySteps = 100;
809 G4double stpEnergy(std::pow(maxEnergy/value, 1./
static_cast<G4double>(nEnergySteps-1)));
810 G4int step(nEnergySteps);
817 crossSectionMaximum =
std::max(crossSectionMaximum, differentialCrossSection);
828 secondaryElectronKineticEnergy =
832 return std::max(secondaryElectronKineticEnergy, 0.0);
840 G4double secondaryElectronKineticEnergy = 0.;
843 secondaryElectronKineticEnergy =
TransferedEnergy(particleDefinition, k, shell, random)
848 if (secondaryElectronKineticEnergy < 0.) {
852 return secondaryElectronKineticEnergy;
860 G4int ionizationLevelIndex,
875 G4double maximumEnergyTransfer1 = 0;
876 G4double maximumEnergyTransfer2 = 0;
882 dataDiffCSMap::iterator iterator_Nrj;
885 dataProbaShellMap::iterator iterator_Proba;
888 incidentEnergyMap::iterator iterator_Tdummy;
896 G4Exception(
"G4MicroElecInelasticModel_new::TransferedEnergy",
"em0002",
900 vector<TriDimensionMap>* eNrjTransfData = iterator_Nrj->second;
901 vector<VecMap>* eProbaShellMap = iterator_Proba->second;
902 vector<G4double>* eTdummyVec = iterator_Tdummy->second;
905 auto k2 = std::upper_bound(eTdummyVec->begin(),
911 if (random <= (*eProbaShellMap)[ionizationLevelIndex][(*k1)].back()
912 && random <= (*eProbaShellMap)[ionizationLevelIndex][(*k2)].back())
915 std::upper_bound((*eProbaShellMap)[ionizationLevelIndex][(*k1)].begin(),
916 (*eProbaShellMap)[ionizationLevelIndex][(*k1)].end(),
919 auto prob11 = prob12 - 1;
922 std::upper_bound((*eProbaShellMap)[ionizationLevelIndex][(*k2)].begin(),
923 (*eProbaShellMap)[ionizationLevelIndex][(*k2)].end(),
926 auto prob21 = prob22 - 1;
930 valuePROB21 = *prob21;
931 valuePROB22 = *prob22;
932 valuePROB12 = *prob12;
933 valuePROB11 = *prob11;
937 else nrjTransf11 = (*eNrjTransfData)[ionizationLevelIndex][valueK1][valuePROB11];
938 if (valuePROB12 == 1)
941 maximumEnergyTransfer1 = valueK1;
945 nrjTransf12 = maximumEnergyTransfer1;
948 nrjTransf12 = (*eNrjTransfData)[ionizationLevelIndex][valueK1][valuePROB12];
951 else nrjTransf21 = (*eNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB21];
952 if (valuePROB22 == 1)
954 if ((valueK2 +
bindingEnergy) / 2. > valueK2) maximumEnergyTransfer2 = valueK2;
955 else maximumEnergyTransfer2 = (valueK2 +
bindingEnergy) / 2.;
957 nrjTransf22 = maximumEnergyTransfer2;
959 else nrjTransf22 = (*eNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB22];
963 if (random > (*eProbaShellMap)[ionizationLevelIndex][(*k1)].back())
966 std::upper_bound((*eProbaShellMap)[ionizationLevelIndex][(*k2)].begin(),
967 (*eProbaShellMap)[ionizationLevelIndex][(*k2)].end(),
969 auto prob21 = prob22 - 1;
973 valuePROB21 = *prob21;
974 valuePROB22 = *prob22;
976 nrjTransf21 = (*eNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB21];
977 nrjTransf22 = (*eNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB22];
995 dataDiffCSMap::iterator iterator_Nrj;
998 dataProbaShellMap::iterator iterator_Proba;
1001 incidentEnergyMap::iterator iterator_Tdummy;
1009 G4Exception(
"G4MicroElecInelasticModel_new::TransferedEnergy",
"em0002",
1014 vector<TriDimensionMap>* pNrjTransfData = iterator_Nrj->second;
1015 vector<VecMap>* pProbaShellMap = iterator_Proba->second;
1016 vector<G4double>* pTdummyVec = iterator_Tdummy->second;
1018 auto k2 = std::upper_bound(pTdummyVec->begin(),
1026 if (random <= (*pProbaShellMap)[ionizationLevelIndex][(*k1)].back()
1027 && random <= (*pProbaShellMap)[ionizationLevelIndex][(*k2)].back())
1030 std::upper_bound((*pProbaShellMap)[ionizationLevelIndex][(*k1)].begin(),
1031 (*pProbaShellMap)[ionizationLevelIndex][(*k1)].end(),
1033 auto prob11 = prob12 - 1;
1035 std::upper_bound((*pProbaShellMap)[ionizationLevelIndex][(*k2)].begin(),
1036 (*pProbaShellMap)[ionizationLevelIndex][(*k2)].end(),
1038 auto prob21 = prob22 - 1;
1042 valuePROB21 = *prob21;
1043 valuePROB22 = *prob22;
1044 valuePROB12 = *prob12;
1045 valuePROB11 = *prob11;
1050 else nrjTransf11 = (*pNrjTransfData)[ionizationLevelIndex][valueK1][valuePROB11];
1052 if (valuePROB12 == 1) nrjTransf12 = maximumEnergyTransferP;
1053 else nrjTransf12 = (*pNrjTransfData)[ionizationLevelIndex][valueK1][valuePROB12];
1056 else nrjTransf21 = (*pNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB21];
1058 if (valuePROB22 == 1) nrjTransf22 = maximumEnergyTransferP;
1059 else nrjTransf22 = (*pNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB22];
1064 if (random > (*pProbaShellMap)[ionizationLevelIndex][(*k1)].back())
1067 std::upper_bound((*pProbaShellMap)[ionizationLevelIndex][(*k2)].begin(),
1068 (*pProbaShellMap)[ionizationLevelIndex][(*k2)].end(),
1071 auto prob21 = prob22 - 1;
1075 valuePROB21 = *prob21;
1076 valuePROB22 = *prob22;
1078 nrjTransf21 = (*pNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB21];
1079 nrjTransf22 = (*pNrjTransfData)[ionizationLevelIndex][valueK2][valuePROB22];
1095 G4double nrjTransfProduct = nrjTransf11 * nrjTransf12 * nrjTransf21 * nrjTransf22;
1097 if (nrjTransfProduct != 0.)
1143 dataDiffCSMap::iterator iterator_Proba;
1146 incidentEnergyMap::iterator iterator_Nrj;
1149 TranfEnergyMap::iterator iterator_TransfNrj;
1155 vector<TriDimensionMap>* eDiffCrossSectionData = (iterator_Proba->second);
1156 vector<G4double>* eTdummyVec = iterator_Nrj->second;
1157 VecMap* eVecm = iterator_TransfNrj->second;
1160 auto t2 = std::upper_bound(eTdummyVec->begin(), eTdummyVec->end(), k);
1163 if (energyTransfer <= (*eVecm)[(*t1)].back() && energyTransfer <= (*eVecm)[(*t2)].back())
1165 auto e12 = std::upper_bound((*eVecm)[(*t1)].begin(), (*eVecm)[(*t1)].end(), energyTransfer);
1167 auto e22 = std::upper_bound((*eVecm)[(*t2)].begin(), (*eVecm)[(*t2)].end(), energyTransfer);
1177 xs11 = (*eDiffCrossSectionData)[LevelIndex][valueT1][valueE11];
1178 xs12 = (*eDiffCrossSectionData)[LevelIndex][valueT1][valueE12];
1179 xs21 = (*eDiffCrossSectionData)[LevelIndex][valueT2][valueE21];
1180 xs22 = (*eDiffCrossSectionData)[LevelIndex][valueT2][valueE22];
1192 dataDiffCSMap::iterator iterator_Proba;
1195 incidentEnergyMap::iterator iterator_Nrj;
1198 TranfEnergyMap::iterator iterator_TransfNrj;
1204 vector<TriDimensionMap>* pDiffCrossSectionData = (iterator_Proba->second);
1205 vector<G4double>* pTdummyVec = iterator_Nrj->second;
1206 VecMap* pVecm = iterator_TransfNrj->second;
1210 std::upper_bound(pTdummyVec->begin(), pTdummyVec->end(), k);
1212 if (energyTransfer <= (*pVecm)[(*t1)].back() && energyTransfer <= (*pVecm)[(*t2)].back())
1214 auto e12 = std::upper_bound((*pVecm)[(*t1)].begin(), (*pVecm)[(*t1)].end(), energyTransfer);
1216 auto e22 = std::upper_bound((*pVecm)[(*t2)].begin(), (*pVecm)[(*t2)].end(), energyTransfer);
1226 xs11 = (*pDiffCrossSectionData)[LevelIndex][valueT1][valueE11];
1227 xs12 = (*pDiffCrossSectionData)[LevelIndex][valueT1][valueE12];
1228 xs21 = (*pDiffCrossSectionData)[LevelIndex][valueT2][valueE21];
1229 xs22 = (*pDiffCrossSectionData)[LevelIndex][valueT2][valueE22];
1239 G4double xsProduct = xs11 * xs12 * xs21 * xs22;
1240 if (xsProduct != 0.)
1270 G4double b = std::log(xs2) - a * std::log(
e2);
1271 G4double sigma = a * std::log(e) + b;
1272 value = (std::exp(sigma));
1280 value = std::exp((
d1 + (
d2 -
d1) * (e -
e1) / (
e2 -
e1)));
1316 TCSMap::iterator tablepos;
1318 MapData* tableData = tablepos->second;
1320 std::map< G4String,G4MicroElecCrossSectionDataSet_new*,std::less<G4String> >::iterator
pos;
1321 pos = tableData->find(particle);
1330 if (
pos != tableData->end())
1345 value += valuesBuffer[i];
1355 if (valuesBuffer[i] > value)
1357 delete[] valuesBuffer;
1360 value -= valuesBuffer[i];
1363 if (valuesBuffer)
delete[] valuesBuffer;
1369 G4Exception(
"G4MicroElecInelasticModel_new::RandomSelect",
"em0002",
FatalException,
"Model not applicable to particle type.");
1379 return c_light*std::sqrt(x*(x + 2.0))/(x + 1.0);
1388 G4double v2f = 2*M1/(M1+M2)*v1i + (M2-M1)/(M1+M2)*-1*v2i;
1389 G4double vtransfer2a = v2f*v2f-v2i*v2i;
1391 v2f = 2*M1/(M1+M2)*v1i + (M2-M1)/(M1+M2)*v2i;
1392 G4double vtransfer2b = v2f*v2f-v2i*v2i;
1395 return 0.5*M2*vtransfer2;
1401 return (x < 0.) ? 1.0 : 0.0;
1408 G4double r = vF*( std::pow(v/vF+1., 3.) - fabs(std::pow(v/vF-1., 3.))
1409 + 4.*(v/vF)*(v/vF) ) +
stepFunc(v/vF-1.) * (3./2.*v/vF -
1410 4.*(v/vF)*(v/vF) + 3.*std::pow(v/vF, 3.)
1411 - 0.5*std::pow(v/vF, 5.));
1412 return r/(10.*v/vF);
1431 G4double yr = vr/std::pow(Zp, 2./3.);
1433 if(Zp==2) q = 1-exp(-c*vr/(Zp-5./16.));
1434 else q = 1.-exp(-c*(yr-0.07));
1437 if(Neq<=2) l0 = 3./(Zp-0.3*(Neq-1))/2.;
1438 else l0 = 0.48*std::pow(Neq, 2./3.)/(Zp-Neq/7.);
1441 return Zp*(q + c*(1.-q)/vF/vF/2.0 * log(1.+std::pow(2.*l0*vF,2.)));
static const G4double e1[44]
static const G4double e2[44]
static const G4double pos
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
static constexpr double cm2
static constexpr double keV
static constexpr double eV
static constexpr double MeV
static constexpr double cm
G4GLOB_DLL std::ostream G4cout
void set(double x, double y, double z)
const G4ThreeVector & GetMomentumDirection() const
const G4ParticleDefinition * GetParticleDefinition() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4Electron * ElectronDefinition()
static G4Electron * Electron()
static G4LossTableManager * Instance()
G4VAtomDeexcitation * AtomDeexcitation()
const G4Material * GetMaterial() const
G4double FindShellValue(G4double argEnergy, G4int shell) const
const G4VEMDataSet * GetComponent(G4int componentId) const override
size_t NumberOfComponents(void) const override
G4bool LoadData(const G4String &argFileName) override
G4double FindValue(G4double e, G4int componentId=0) const override
G4double DifferentialCrossSection(const G4ParticleDefinition *aParticleDefinition, G4double k, G4double energyTransfer, G4int shell)
G4double stepFunc(G4double x)
G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax) override
incidentEnergyMap eIncidentEnergyStorage
dataDiffCSMap eDiffDatatable
std::map< G4String, G4double, std::less< G4String > > highEnergyLimit
TranfEnergyMap eVecmStorage
std::map< G4String, G4MicroElecCrossSectionDataSet_new *, std::less< G4String > > MapData
dataDiffCSMap pNrjTransStorage
G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double x11, G4double x12, G4double x21, G4double x22, G4double t1, G4double t2, G4double t, G4double e)
G4VAtomDeexcitation * fAtomDeexcitation
G4MicroElecInelasticModel_new(const G4ParticleDefinition *p=nullptr, const G4String &nam="MicroElecInelasticModel")
~G4MicroElecInelasticModel_new() override
incidentEnergyMap pIncidentEnergyStorage
TranfEnergyMap pVecmStorage
G4int RandomSelect(G4double energy, const G4String &particle, G4double originalMass, G4int originalZ)
G4double RandomizeEjectedElectronEnergy(const G4ParticleDefinition *aParticleDefinition, G4double incomingParticleEnergy, G4int shell, G4double originalMass, G4int originalZ)
G4double ComputeElasticQmax(G4double T1i, G4double T2i, G4double m1, G4double m2)
G4ParticleChangeForGamma * fParticleChangeForGamma
dataDiffCSMap eNrjTransStorage
G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(const G4ParticleDefinition *, G4double k, G4int shell)
G4double TransferedEnergy(const G4ParticleDefinition *, G4double k, G4int ionizationLevelIndex, G4double random)
std::map< G4double, std::map< G4double, G4double > > TriDimensionMap
G4double BKZ(G4double Ep, G4double mp, G4int Zp, G4double EF)
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)
dataProbaShellMap pProbaShellStorage
G4double ComputeRelativistVelocity(G4double E, G4double mass)
dataDiffCSMap pDiffDatatable
dataProbaShellMap eProbaShellStorage
std::map< G4String, G4double, std::less< G4String > > lowEnergyLimit
MapStructure tableMaterialsStructures
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4MicroElecMaterialStructure * currentMaterialStructure
std::map< G4double, std::vector< G4double > > VecMap
G4double vrkreussler(G4double v, G4double vF)
G4double GetInelasticModelHighLimit(G4int pdg)
G4bool IsShellWeaklyBound(G4int level)
G4double GetLimitEnergy(G4int level)
G4int GetEADL_Enumerator(G4int shell)
G4double GetZ(G4int Shell)
G4double Energy(G4int level)
G4double GetInelasticModelLowLimit(G4int pdg)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4int GetAtomicNumber() const
G4double GetPDGMass() const
G4int GetPDGEncoding() const
G4double GetPDGCharge() const
const G4String & GetParticleName() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
static G4Proton * ProtonDefinition()
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
virtual G4double FindValue(G4double x, G4int componentId=0) const =0
virtual G4ThreeVector & SampleDirectionForShell(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, G4int shellID, const G4Material *)
void SetHighEnergyLimit(G4double)
G4VEmAngularDistribution * GetAngularDistribution()
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
G4double HighEnergyLimit() const
void SetLowEnergyLimit(G4double)
void SetDeexcitationFlag(G4bool val)
void SetAngularDistribution(G4VEmAngularDistribution *)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
static constexpr double pi
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double bindingEnergy(G4int A, G4int Z)