Possible issue with K+ Glauber-Gribov cross section above 100 TeV (had001)

Please fill out the following information to help in answering your question, and also see tips for posting code snippets. If you don’t provide this information it will take more time to help with your problem!

Geant4 Version:11.03/11.04

Operating System:AlmaLinux 9.4 (Seafoam Ocelot)
Compiler/Version:11.2.0
CMake Version:3.26.5

  • Summary

I encountered a reproducible issue with high-energy kaon+ hadronic interactions.The problem appears exactly when the kinetic energy exceeds 100 TeV.For K+ <= 100 TeV, the simulation runs normally.For K+ > 100 TeV, Geant4 aborts with:

*** G4Exception : had001
issued by : G4CrossSectionDataStore::GetIsoCrossSection

No isotope cross section found for kaon+
off target Element O Z=8 A=16

or

*** G4Exception : had001
issued by : G4CrossSectionDataStore::GetIsoCrossSection

No isotope cross section found for kaon+
off target Element C Z=6 A=12

depending on the target material.

  • Physics List

I am using the standard Geant4 physics list:

FTFP_BERT_HP

No modifications have been made to Geant4 source code.

  • Reproducibility

The behavior is fully reproducible:

Particle Energy Result
K+ 100 TeV OK
K+ 101 TeV had001
K+ 150 TeV had001

The transition occurs exactly above 100 TeV.

  • Process Information

DumpInfo() for K+ gives:


                     Hadronic Processes for kaon+
Process: hadElastic
Model:              hElasticLHEP: 0 eV  —> 100 TeV
Cr_sctns:            Glauber-Gribov: 0 eV  —> 100 TeV

Process: kaon+Inelastic
Model:                      FTFP: 3 GeV —> 100 TeV
Model:            BertiniCascade: 0 eV  —> 6 GeV
Cr_sctns:            Glauber-Gribov: 0 eV  —> 100 TeV

For comparison, pi+ uses:


                        Hadronic Processes for pi+
Process: hadElastic
Model:           hElasticGlauber: 0 eV  —> 100 TeV
Cr_sctns:  BarashenkovGlauberGribov: 0 eV  —> 100 TeV

Process: pi+Inelastic
Model:                      FTFP: 3 GeV —> 100 TeV
Model:            BertiniCascade: 0 eV  —> 6 GeV
Cr_sctns:  BarashenkovGlauberGribov: 0 eV  —> 100 TeV
  • Additional Observation

I manually queried the inelastic cross section for:

K+ + Carbon
E = 146 TeV

and obtained:

K+ 146 TeV on Carbon XS = 270.465 mb

Therefore an element-level cross section appears to exist.

  • Question

Is this a known limitation or bug of the K+ Glauber-Gribov cross section implementation?
I can provide a minimal reproducible example if needed.

The issue can be reproduced with a very small Geant4 application consisting of:

  • FTFP_BERT_HP
  • a pure carbon target
  • a single 101 TeV kaon+
  • one event only

and reproduces consistently on both Geant4 11.0.3 and 11.0.4.

By default, Geant4 works up to 100 TeV.

The main limitation comes from hadronic physics models, not cross sections.

For instance, current Geant4 hadronic string models (FTF and QGS) don’t have gluon jet production.

However, if you really want to use Geant4 above 100 TeV - knowing its limitations - you can do this via UI command, e.g.

/process/had/maxEnergy 1000.0 TeV

Thank you for the reply.

However, I believe the issue is not related to extending the validity range of FTF/QGS models above 100 TeV.

The exception occurs before any hadronic interaction model is invoked.

The simulation aborts inside:

G4CrossSectionDataStore::GetIsoCrossSection()

with

No isotope cross section found for kaon+

I verified that:

  • the same exception occurs with a clean FTFP_BERT_HP setup,
  • CRMC-QGSJETIII is completely removed,
  • a K+ inelastic cross section can still be obtained manually (about 270 mb on Carbon at 146 TeV).

Therefore it seems that an element cross section exists, but GetIsoCrossSection() fails and aborts before Geant4 can proceed to model selection (FTF, EPOS, QGSJETIII, etc.).

Could this be related to the isotope-level cross section handling for K+ above 100 TeV?

@Dayu_Peng , could you please try adding the command suggested by Alberto just before /run/initialize or runManager->Initialize()?

Thank you very much for the suggestion.

I tested by adding

/process/had/maxEnergy 1000 TeV

before initialization, and the problem disappeared completely.

Thank you again for your help.:grinning_face_with_smiling_eyes: