G4Exception : had001 issued by : G4CrossSectionDataStore::GetIsoCrossSection

Hello, I hope you are well! I’m fairly new to Geant4, so I hope my question isn’t too basic or confusing.

I’m using geant4.10.06.p01 to try and simulate neutrons using the GeneralParticleSource, but I have continuously ran into the following exception (currently using G4NDL4.6):

-------- EEEE ------- G4Exception-START -------- EEEE -------
*** G4Exception : had001
      issued by : G4CrossSectionDataStore::GetIsoCrossSection
No isotope cross section found for neutron off Element C  in G4_AIR Z= 6 A= 12 E(MeV)= 21.256

*** Fatal Exception *** core dump ***
G4Track (0x7f8432c30580) - track ID = 1, parent ID = 0
 Particle type : neutron - creator process : not available
 Kinetic energy : 21.256 MeV - Momentum direction : (-0.994596,0.0521508,0.0897778)
 Step length : 0 fm  - total energy deposit : 0 eV
 Pre-step point : (700,29.0184,-276.148) - Physical volume : WorldVol (G4_AIR)
 - defined by : not available
 Post-step point : (700,29.0184,-276.148) - Physical volume : WorldVol (G4_AIR)
 - defined by : not available
 *** Note: Step information might not be properly updated.

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

The element is not unique (I’ve also experienced this with, e.g., hydrogen, argon, copper, etc.). I noticed that this only occurs for kinetic energies above 20 MeV, so I assume that the cross section files don’t contain information above that energy (per a maximum kinetic energy check).

I have tried alternate neutron cross section libraries JEFF-3.3 and ENDF/B-VIII.0 (via https://www-nds.iaea.org/geant4/), but this hasn’t helped. Is there any way to work around this exception?

Thanks in advance!

What physics list are you using? Are you running an example, or your own user application?

In your startup, you should get a printout of all of the registered hadronic processes and cross-sections in your application. If you look there in the neutron section, do you see any cross-sections registered for energies above 20 MeV?

Hello, thanks so much for responding! I’m running my own user application.

Here are the physics lists I’m using (according to the terminal output; hopefully I didn’t miss anything):

<<< Geant4 Physics List simulation engine: G4GenericPhysicsList
Physics Added: G4EmLivermore
Physics Added: G4GammaLeptoNuclearPhys
Physics Added: Decay
Physics Added: hElasticWEL_CHIPS_HP
Physics Added: hInelastic QGSP_BIC_HP
Physics Added: stopping
Physics Added: ionInelasticFTFP_BI

When I looked at the terminal output for the registered processes for neutrons,
all of the cross sections go up to 20 MeV and not above. EDIT: on second look, this isn’t correct. I’ll just paste the output here:

---------------------------------------------------
                           Hadronic Processes for neutron

  Process: hadElastic
        Model:             hElasticCHIPS: 19.5 MeV ---> 100 TeV
        Model:          NeutronHPElastic: 0 eV  ---> 20 MeV
     Cr_sctns:        NeutronHPElasticXS: 0 eV  ---> 20 MeV
     Cr_sctns:        G4NeutronElasticXS: 0 eV  ---> 100 TeV

  Process: neutronInelastic
        Model:                      QGSP: 12 GeV ---> 100 TeV
        Model:                      FTFP: 3 GeV ---> 25 GeV
        Model:            Binary Cascade: 19.9 MeV ---> 6 GeV
        Model:        NeutronHPInelastic: 0 eV  ---> 20 MeV
     Cr_sctns:      NeutronHPInelasticXS: 0 eV  ---> 20 MeV
     Cr_sctns:  BarashenkovGlauberGribov: 0 eV  ---> 100 TeV

  Process: nCapture
        Model:          NeutronHPCapture: 0 eV  ---> 20 MeV
        Model:               nRadCapture: 19.9 MeV ---> 100 TeV
     Cr_sctns:        NeutronHPCaptureXS: 0 eV  ---> 20 MeV
     Cr_sctns:        G4NeutronCaptureXS: 0 eV  ---> 100 TeV

  Process: nFission
        Model:          NeutronHPFission: 0 eV  ---> 20 MeV
        Model:                G4LFission: 19.9 MeV ---> 100 TeV
     Cr_sctns:        NeutronHPFissionXS: 0 eV  ---> 20 MeV
     Cr_sctns:          GheishaFissionXS: 0 eV  ---> 100 TeV

  Process: hadElastic
        Model:              hElasticLHEP: 19 MeV ---> 100 TeV
        Model:          NeutronHPElastic: 0 eV  ---> 19 MeV
     Cr_sctns:        NeutronHPElasticXS: 0 eV  ---> 20 MeV

---------------------------------------------------

So I suspect I need to register an additional physics list to fix this?

Thanks again for responding! I really appreciate it!

One thing you may consider would be using a predefined “Reference” physics list, such as Shielding (which includes NeutronHP, if you need it). Unless you have special, non-standard physics needs, that’s much simpler than trying to put together your own physics list and get all the pieces right.

One thing which can cause problems with NeutronHP is that it needs to have all of the materials in your job defined in advance, at the time you create the physics list object in your main (i.e., not at /run/initialize). In our application, I had to create a singleton with a constructor that created all of our materials (elements, compounds, everything), including calls to the G4NISTManager for predefined materials.

Thanks so much for the information! I will consider this for the future. It’s completely possible that the experiment I work on has non-standard physics needs that require us to define our own physics list. I will ask my collaborators about it.

What ended up fixing my issue was adding an additional dataset to the hadElastic process:

theNeutronElasticProcess->AddDataSet(new G4HadronElasticDataSet());

This added another cross section model under hadElastic that covers the high-energy regime. It would have taken me a long time to look at the physics lists/hadronic processes on my own, so I really appreciate your guidance! Thanks again!

Hello,

 Process: hadElastic
        Model:             hElasticCHIPS: 19.5 MeV ---> 100 TeV
        Model:          NeutronHPElastic: 0 eV  ---> 20 MeV
     Cr_sctns:        NeutronHPElasticXS: 0 eV  ---> 20 MeV
     Cr_sctns:        G4NeutronElasticXS: 0 eV  ---> 100 TeV

seems to be correct. If you add a line which you add, you overwrite cross section with obsolete GHEISHA elastic cross section. Likely it is not what you need in the experiment. I would suggest you to try reproducing the problem in

$G4INSTALL/example/extended/hadronic/Hadr00

where you can define media and target via UI commands and use various predefined Physics Lists.

Note, that G4_AIR is used in many tests and examples of Geant4, so validated daily.

VI