Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4FermiSplitter Class Reference

#include <G4FermiSplitter.hh>

Static Public Member Functions

static G4double DecayWeight (const G4FermiFragmentVector &split, G4FermiAtomicMass atomicMass, G4double totalEnergy)
static G4double SplitFactor (const G4FermiFragmentVector &split, G4FermiAtomicMass atomicMass)
static G4double KineticFactor (const G4FermiFragmentVector &split, G4double totalEnergy)
static void GenerateSplits (G4FermiNucleiData nucleiData, std::vector< G4FermiFragmentVector > &splits)
static std::vector< G4FermiFragmentVectorGenerateSplits (G4FermiNucleiData nucleiData)

Detailed Description

Definition at line 38 of file G4FermiSplitter.hh.

Member Function Documentation

◆ DecayWeight()

G4double G4FermiSplitter::DecayWeight ( const G4FermiFragmentVector & split,
G4FermiAtomicMass atomicMass,
G4double totalEnergy )
static

Definition at line 175 of file G4FermiSplitter.cc.

177{
178 const auto kineticEnergy = KineticEnergy(split, totalEnergy); // in MeV
179
180 // Check that there is enough energy to produce K fragments
181 if (kineticEnergy <= 0.) {
182 return 0.;
183 }
184
185 const auto power = 3.0 * static_cast<G4double>(split.size() - 1) / 2.0 - 1.;
186 const auto kineticFactor = std::pow(kineticEnergy, power);
187
188 // Spin factor S_n
189 const auto spinFactor = SpinFactor(split);
190
191 // Calculate MassFactor
192 const auto massFactor = MassFactor(split);
193
194 // This is the constant (doesn't depend on energy) part
195 const auto coef = ConstFactor(atomicMass, split.size());
196
197 // Calculation of 1/gamma(3(k-1)/2)
198 const auto gamma = GammaFactor(split.size());
199
200 // Permutation Factor G_n
201 const auto permutationFactor = ConfigurationFactor(split);
202
203 return coef * kineticFactor * massFactor * spinFactor / (permutationFactor * gamma);
204}
double G4double
Definition G4Types.hh:83

◆ GenerateSplits() [1/2]

std::vector< G4FermiFragmentVector > G4FermiSplitter::GenerateSplits ( G4FermiNucleiData nucleiData)
static

Definition at line 274 of file G4FermiSplitter.cc.

275{
276 std::vector<G4FermiFragmentVector> splits;
277 GenerateSplits(nucleiData, splits);
278 return splits;
279}
static void GenerateSplits(G4FermiNucleiData nucleiData, std::vector< G4FermiFragmentVector > &splits)

◆ GenerateSplits() [2/2]

void G4FermiSplitter::GenerateSplits ( G4FermiNucleiData nucleiData,
std::vector< G4FermiFragmentVector > & splits )
static

Definition at line 281 of file G4FermiSplitter.cc.

283{
284 ThrowOnInvalidInputs(nucleiData);
285
286 splits.reserve(ExpectedSplitSize);
287
288 // let's split nucleus into 2, ..., A fragments
289 const auto maxFragmentsCount = static_cast<std::uint32_t>(nucleiData.atomicMass);
290
291 for (std::uint32_t fragmentCount = 2; fragmentCount <= maxFragmentsCount; ++fragmentCount) {
292 // Form all possible partition by combination of A partitions and Z partitions (Z partitions
293 // include null parts)
294 for (auto& massPartition : G4integerPartition(nucleiData.atomicMass, fragmentCount, 1)) {
295 for (auto& chargePartition : G4integerPartition(nucleiData.chargeNumber, fragmentCount, 0)) {
296 // Some splits are invalid, some nuclei doesn't exist
297 if (auto partitionSplits = PossibleSplits(massPartition, chargePartition);
298 !partitionSplits.empty()) {
299 splits.insert(splits.end(), std::make_move_iterator(partitionSplits.begin()),
300 std::make_move_iterator(partitionSplits.end()));
301 }
302 }
303 }
304 }
305}
G4FermiChargeNumber chargeNumber
G4FermiAtomicMass atomicMass

Referenced by GenerateSplits(), and G4FermiBreakUpAN::Initialise().

◆ KineticFactor()

G4double G4FermiSplitter::KineticFactor ( const G4FermiFragmentVector & split,
G4double totalEnergy )
static

◆ SplitFactor()

G4double G4FermiSplitter::SplitFactor ( const G4FermiFragmentVector & split,
G4FermiAtomicMass atomicMass )
static

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