Geant4-DNA IRT chemistry crash with H2O2 injection at higher event counts

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:
Operating System:
Compiler/Version:
CMake Version:


We are simulating Bi@Cu core-shell nanoparticle radiosensitization using Geant4-DNA chemistry (option3, IRT model) with a single NP geometry.

Current status after debugging:

  • Changing World from G4_WATER to G4_Galactic + nested water mother volume resolved the initial crash.
  • Chemistry now works at low statistics (history=1000).
  • Crash persists at history=2000+ when H2O2 molecules are injected via G4MoleculeGun in StackingAction.

Geometry:

  • World: G4_Galactic
  • WaterMother: large G4_WATER sphere containing everything
  • NP: Bi core + Cu shell (nested inside WaterMother)
  • Water shells: hollow G4Sphere volumes, nested inside WaterMother
  • DNA region: single “WaterShells” region assigned to shell logical volumes

H2O2 injection:

  • Done in StackingAction::NewStage() via G4MoleculeGun + DefineTracks()
  • 20 molecules per event, injected into spherical shell around NP

What we tried:

  • G4MoleculeCounter::ResetCounter() at BeginOfEventAction → no effect
  • G4Scheduler::Instance()->Reset() at BeginOfEventAction → no effect
  • Reducing endTimePs → no effect
  • NTotalTrack = 0 at each event start (confirmed via debug log)

Crash location:

Run 0 starts.

DNAMolecularIRTModel will be used
[exit code -1073740940]

Question:
Is there a known issue with G4MoleculeGun injection combined with IRT model at higher event counts? Is there a correct way to reset IRT internal state between events?

Geant4 version: 11.1.3 | OS: Windows | Build: Release, MSVC

Dear,

G4MoleculeGun has never been used in this way! I don’t understand the second question, between events (beamOn), the chemistry is reset to count the new reaction list.

if you try to do chem6 example and add some H2O2 somewhere, the crash persists?

By the way, why do you need to inject H2O2 ? at a low H2O2 concentration, this species is not involved much up to us.

Thank you for the quick response.

We inject H2O2 to model the initial copper redox environment
around the nanoparticle surface, where Cu+ reacts with H2O2
via Fenton-like reaction: Cu+ + H2O2 → Cu2+ + OH•

The idea was to pre-load H2O2 as the substrate for Cu catalysis,
since Cu sites are also injected as chemical species.

Question: What is the correct way to introduce initial chemical
species (H2O2, Cu+) into the simulation volume using Geant4-DNA?
Is there an alternative to G4MoleculeGun for this purpose?

Also: if we remove H2O2 injection entirely and only inject Cu+
sites, would the naturally produced H2O2 from water radiolysis
be sufficient to drive the Cu Fenton cycle? thanak you

Geant4 Version: 11.1.3
Operating System: Windows 10 Home x64 (10.0.19045, build 19045)
Compiler/Version: Microsoft Visual Studio 2022 / MSVC 19.43.34810
CMake Version: 3.30.5-msvc23


Hello,

I am using Geant4 to calculate microdosimetric dose enhancement around a single nanoparticle, and I am facing a general problem especially at 6 MV. My goal is to evaluate the local dose enhancement in water shells surrounding the nanoparticle.

I tested both a simpler 2-shell geometry and a more detailed 6-shell geometry around a single nanoparticle. In the 6-shell case, the shell boundaries were:

  • 50–90 nm

  • 90–130 nm

  • 130–170 nm

  • 170–210 nm

  • 210–250 nm

  • 250–290 nm

I also tested thicker grouping / reduced-shell interpretations to see whether the instability becomes smaller when the scored shell volumes are larger.

However, under 6 MV, in both the simpler and more detailed cases, I could not obtain a clean monotonic decrease from the inner shell to the outer shells. In some cases, an outer shell gives a higher DEF than an inner shell.

So far, I tried the following:

  • I increased the number of histories significantly.

  • I compared thinner and thicker shell definitions.

  • When I used fewer and thicker shells, the trend became somewhat more regular.

  • However, with fine nanometric shells, the results still remained unstable.

  • In some simpler TOPAS-like tests, I also observed that the reference water dose could become extremely small or close to zero.

For this reason, my question is not about a single specific bug, but rather about the general behavior of this problem at 6 MV.

In particular, I would like to ask:

  1. Is this kind of non-monotonic shell-by-shell DEF behavior expected at MV energies for nanometric shell scoring around a single nanoparticle?

  2. Is the main reason likely that the reference water dose becomes extremely small in these tiny shell volumes?

  3. In this situation, what would be the more appropriate approach:

    • using fewer and thicker shells,

    • reporting case and reference doses separately together with DEF,

    • or avoiding the interpretation of very fine shell-based DEF at 6 MV?

  4. Is there any recommended best practice in Geant4 for single nanoparticle microdosimetry at MV energies?

In my current workflow, I also tested a two-stage / phase-space based approach. My aim was both to transport the 6 MV field in a more realistic way and to reduce statistical instability in very small volumes. This helped in some cases, but the shell-wise results are still sensitive.

If useful, I can also share the geometry code, shell construction, and representative case / water / def output files.

Thank you very much.

You need to define Cu+ as a chemical molecule (diffusion coefficient, radius,…), including its reaction with H2O2. An example of G4MoleculeGun can be found in damage1 or damage2 examples. In these examples, G4MoleculeGun was used to introduce DNA. I would try without the geometry first for each species.