Geant4 Version: 11.3.0
Operating System: OS
Compiler/Version: Vs studio 2022
CMake Version: 3.31.3
Hello fellow GEANT4 enjoyers, I’m currently working with rdecay02 and had04 examples to simulate the capture of radioactively decayed neutron through helium 3 gas. The ultimate goal here is to produce an energy Pulse Height Tally spectrum of Helium 3, or the energy deposited in the said material.
The way I approached the project is to basically use rdecay02 as a template and implement my geometry into it. So I only modified snippets of codes and tried to keep everything else untouched. For instance, I set the Target in rdk02 as helium-3 gas.
Little bit more on the geometry: the source, encapsulated, resides in a plastic bottle, californium-252 are generated as a particle with 0 momentum and 0 energy so that it will spontaneously undergoes fission. The neutron is expected to travel about 1 meter either through air or attenuators made out of polyethylene and interact with the detector shielding, then the actual helium-3 gas.
The issue is, I’m not seeing nearly enough activity in the gas target. The average energy deposited in always meVs or eVs. So far there is a few point of interest I’d like to further investigate and need your opinion on it.
- The NeutronHP physics list from Had04 caught my attention since I understand it as a good list to include to simulate low energy neutron physics.
PhysicsList::PhysicsList()
{
G4int verb = 1;
SetVerboseLevel(verb);
// Mandatory for G4NuclideTable
// Half-life threshold must be set small or many short-lived isomers
// will not be assigned life times (default to 0)
// any particle with half live shorter than 0.1 picosec will not be recorded
G4NuclideTable::GetInstance()->SetThresholdOfHalfLife(0.1 * picosecond);
G4NuclideTable::GetInstance()->SetLevelTolerance(1.0 * eV);
// EM physics
RegisterPhysics(new G4EmStandardPhysics());
G4EmParameters* param = G4EmParameters::Instance();
param->SetAugerCascade(true);
// This method control the step size in the simulation when a charged particle moves through the material
// (maximum allowed step length in terms of mean free path, minimum step size)
// Original code
//param->SetStepFunction(1., 1 * CLHEP::mm);
//param->SetStepFunctionMuHad(1., 1 * CLHEP::mm);
param->SetStepFunctionMuHad(1., 0.1 * mm); // Fine step size for muons and hadrons
param->SetStepFunction(1., 0.01 * mm); // actually make it smnaller change made 2/2/2025
// Decay
RegisterPhysics(new G4DecayPhysics());
// Radioactive decay
RegisterPhysics(new BiasedRDPhysics());
// Neutron
// add new units
//
new G4UnitDefinition("mm2/g", "mm2/g", "Surface/Mass", mm2 / g);
new G4UnitDefinition("um2/mg", "um2/mg", "Surface/Mass", um * um / mg);
RegisterPhysics(new NeutronHPphysics("neutronHP"));
// Hadron Elastic scattering
RegisterPhysics(new G4HadronElasticPhysics(verb));
// Hadron Inelastic physics
RegisterPhysics(new G4HadronPhysicsFTFP_BERT(verb));
////RegisterPhysics( new G4HadronInelasticQBBC(verb));
////RegisterPhysics( new G4HadronPhysicsINCLXX(verb));
// Ion Elastic scattering
RegisterPhysics(new G4IonElasticPhysics(verb));
// Ion Inelastic physics
RegisterPhysics(new G4IonPhysics(verb));
////RegisterPhysics( new G4IonINCLXXPhysics(verb));
// Gamma-Nuclear Physics
// disable electron nucearl reaction, disable muon nuclear reaction
G4EmExtraPhysics* gnuc = new G4EmExtraPhysics(verb);
gnuc->ElectroNuclear(false);
gnuc->MuonNuclear(false);
RegisterPhysics(gnuc);
}
However, I ran into the same issue as the gentleman in this forum Physics List(s) for high AND low energy neutrons. Though I might be content with having 20 MeV as a limit as long as the code doesn’t crash EVERYTIME I run it.
- the set cut value I have for the particles is the following:
void PhysicsList::SetCuts()
{
SetCutValue(0.1 * mm, "proton");
SetCutValue(0.1 * mm, "e-");
SetCutValue(0.1 * mm, "e+");
SetCutValue(0.1 * mm, "gamma");
}
which I believe may go ever lower. At the meantime, I’ve been producing histogram using the one with id 0
//0
G4int id = analysis->CreateH1("H10", "Energy deposit (MeV) in the target", nbins, vmin, vmax);
analysis->SetH1Activation(id, false);
and have been consistently getting only 1 or 2 entries. I’ve not made any modification to how the energy deposition is tracked so you may look at rdecay02 and it will be virtually the same as my code. Please tell me which direction I should go investigate, what reference to go to to make the physics list not crash my program, and if I might be missing something, thank you!