Physics List(s) for high AND low energy neutrons


I am studying the background due to neutron activation. I used the Physics List NeutronHP from the hadr04 example, however it arrives only up to 20 MeV; my problem is that the neutron spectrum in my site arrives up to 100 MeV, and those high energy neutrons could be relevant, since they are the ones most likely to pass through the shielding.
How can I tell G4 to use NeutronHP only up to a certain energy?

1 Like

NeutronHP is based on evaluated neutron databases, and these only have experimental data up to 20 MeV. You have to use other physics for higher energies. If you artificially tell NeutronHP to be valid up to a higher energy, it will simply take the cross sections at 20 MeV for all energies above.


thanks for the reply, but this is definitely not what it’s happening, if I run the code it crashes, I get the error

-------- EEEE ------- G4Exception-START -------- EEEE -------
*** G4Exception : had001
issued by : G4CrossSectionDataStore::GetIsoCrossSection
No isotope cross section found for neutron off Element H in Galactic Z= 1 A= 1 E(MeV)= 23.5092

*** Fatal Exception *** core dump ***
G4Track (0x56457068b560) - track ID = 1, parent ID = 0
Particle type : neutron - creator process : not available
Kinetic energy : 23.5092 MeV - Momentum direction : (0.0953953,-0.781244,-0.616893)
Step length : 0 fm - total energy deposit : 0 meV
Pre-step point : (290.399,2148.63,1047.22) - Physical volume : Walls (Galactic)

    defined by : not available
    Post-step point : (290.399,2148.63,1047.22) - Physical volume : Walls (Galactic)
    defined by : Decay - step status : 7
    *** Note: Step information might not be properly updated.

-------- EEEE -------- G4Exception-END --------- EEEE -------

*** G4Exception: Aborting execution ***
Aborted (core dumped)

If I artificially limit the energy below 20 MeV, the code runs without problems.

you will need to provide more detail on how your physics list is defined. Your best bet is to use one of the predefined physics lists, which will use NeutronHP for neutrons < 20 MeV and a different process for higher energies. The “Shielding” list is probably the one you want.


I used the Physics List from Hadr04, using NeutronHP, and adding some other lists I thought could be useful.

If a bit more information could be useful, here the relevant parts (if think it could be useful, I can copy-and-paste all the class, I did not think the other part of the Physics List would be useful):

:G4VModularPhysicsList(), aIonEner(0.), aIonStep(0.)

//add new units for radioActive decays
new G4UnitDefinition( “millielectronVolt”, “meV”, “Energy”, 1.e-3*eV);

// Neutron Physics (from Hard04)

RegisterPhysics( new NeutronHPphysics(“neutronHP”));

// EM physics
RegisterPhysics(new G4EmLivermorePhysics(aIonEner,aIonStep));

G4EmParameters* param = G4EmParameters::Instance();
param->SetStepFunction(1., 1CLHEP::mm);
param->SetStepFunctionMuHad(1., 1

// Decay
RegisterPhysics(new G4DecayPhysics());

// Radioactive decay
RegisterPhysics(new G4RadioactiveDecayPhysics());

// Hadron Elastic scattering
RegisterPhysics( new G4HadronElasticPhysics(verb) );

// Hadron Inelastic physics
RegisterPhysics( new G4HadronPhysicsQGSP_BERT_HP(“std-hadron”));

// Ion Elastic scattering
RegisterPhysics( new G4IonElasticPhysics(verb));

// Ion Inelastic physics
RegisterPhysics( new G4IonPhysics(verb));

In any case, just to be sure, I compiled directly the example Hadr04, and try to use there different neutron energies: as long as it’s below 20 MeV, everything works fine, when it’s higher, the code crash giving me exactly the same error.

I took a look at the Shielding Physics List you suggested, but it does not seem to me it’s using the low-energy cross section data for neutrons, like in NeutronHP, which is the thing I need…

It does, see Shielding — PhysicsListGuide 11.0 documentation

In general, unless you are doing something very specialized, you should work with a reference physics list rather than try to build a self-consistent one on your own: Guide for Physics Lists — PhysicsListGuide 11.0 documentation . As you can see there, there are also ShieldingLEND and ShieldingM variants