Closed whokion closed 10 months ago
For G4NucleiProperties I think we should extend the MaterialParams
to have nuclides as well as elements; the nuclide data would include binding energies imported from Geant4 via GeantImporter
and associated classes.
That would be great as G4NucleiProperties will be used in many other places (in hadronic physics models including photo- and eletro-nuclear interactions). So, should we open another issue for extending MaterialParams to cover G4NucleiProperties and related classes?
I think that the Nuclide upgrade would make a good first pull request: it's small enough and self contained. Then after that, based on a quick review of the Geant4 classes, I'd refactor the G4WentzelOKandVIxSection
, G4eCoulombScatteringModel
, and G4CoulombScattering
into several classes:
Model
class to manage the datacalc_nuclear_xs
, calc_electron_xs
G4eCoulombScatteringModel::ComputeCrossSectionPerAtom
G4WentzelOKandVIxSection::SampleSingleScattering
becomes a Distribution
that samples polar angleG4eCoulombScatteringModel::SampleSecondaries
becomes an Interactor
Process
and add the interfaces to move the data from GeantImporter
And since a lot of these are tied to the WentzelOKandVI
model which is abbreviated wokvi
maybe some of these classes should have a Wokvi
or WOI
prefix instead of CoulombScattering
?
Yes, we do not need to implement G4eCoulombScatteringModel::ComputeCrossSectionPerAtom as the lambda table for the CoulombScattering process will be imported from Geant4 (and do not need G4WentzelOKandVIxSection::ComputeTransportCrossSectionPerAtom either), but excerpt only relevant parts of G4WentzelOKandVIxSection that need for an Interactor associated with the model. So, can @stognini help for extending MaterialParams
while Hayden reviews other relevant classes and start to implement them as parallel?
Add G4ScreeningMottCrossSections
Starting point for material data:
//---------------------------------------------------------------------------//
/*!
* Fundamental, invariant properties of a nuclide.
*/
struct NuclideRecord
{
AtomicNumber atomic_number; //!< Z number
AtomicNumber atomic_mass; //!< A number (TODO: fix type?)
units::AmuMass atomic_mass; //!< Isotope-weighted average atomic mass
};
//---------------------------------------------------------------------------//
/*!
* Fractional element component of a material.
*
* This represents, e.g., the fraction of hydrogen in water.
*/
struct ElNuclideComponent
{
NuclideId nuclide; //!< Index in MaterialParams elements
real_type fraction; //!< Fraction of number density
};
//---------------------------------------------------------------------------//
/*!
* Fundamental, invariant properties of an element.
*
* Add elemental properties as needed if they apply to more than one physics
* model. (When nuclear physics is implemented, add isotopes.)
*
* Note that more than one "element def" can exist for a single atomic number:
* there might be different enrichments of an element in the problem.
*/
struct ElementRecord
{
AtomicNumber atomic_number; //!< Z number
units::AmuMass atomic_mass; //!< Isotope-weighted average atomic mass
ItemRange<ElNuclideComponent> nuclides; //!< Nuclide components
Completed by #861 and #899
The single elastic scattering is an alternative to the multiple scattering process when the average number of collisions per charged track is relatively small or in low-density gaseous media. It can be also used in mixed simulation algorithms to describe charged particle transport more accurately in physical content, but still in a computationally efficient way. We implement an electron/positron Coulomb Scattering model of Wenzel [ref: G. Wentzel, Z. Phys. 40 (1927) 590] based on G4CoulombScattering process and G4eCoulombScatteringModel. For details, refer to the section, 8.2 of the Geant4 physics manual, Release 10.7 or
the paper by J.M. Fernández-Varea, R. Mayol, J. Baró and F. Salvat, On the theory and simulation of multiple elastic scattering of electrons. Nucl. Instrum. and Meth. in Phys. Research B, 73 (1993) 447–473, doi:10.1016/0168-583X(93)95827-R. The following is a list of related sub-tasks:
nuclear_mass
inElementRecord
equivalent to G4NucleiProperties::GetNuclearMass and an associated accessor inMaterialParams
, and a unit test