Summing energy deposition from secondaries created in geometrical importance sampling

I am simulating a primary neutron beam transported through a moderator assembly, with some fraction of neutrons incident on a sensitive detector positioned at an axial distance of several meters. My goal is to output deposited energy from a neutron or gamma hit on the detector. Previously, for a given event, I would sum the energy deposited in my detector from all tracks (the moderated primary neutron as well as all secondaries), store in a hit, and then write to file upon completion of an event.

I have recently implemented geometric importance sampling which splits my primary neutron into several neutron tracks each with a weight below 1. I would like to treat each “split” neutron track independently and for each, to sum over all energy deposited in the detector due to the “split” neutron as well as any secondaries it produces. If multiple split neutrons are incident upon the detector, I would expect to have several hits (each consisting of an incident neutron and any secondaries) per event.

For each hit, I currently record event ID, track ID, parent ID, weight, and energy deposited in the detector. However, I do not know the best way to associate secondaries with the neutrons created through the “ImportanceProcess” splitting.

The different categories of neutron hits I have identified are:

  1. primary neutrons produced by the Event generator
  2. secondary neutrons produced through primary neutron reactions (e.g. neutronInelastic)
  3. secondary neutrons produced through reactions with split primary neutrons (technically secondary)
  4. “tertiary” neutrons produced through secondary neutron reactions

I can identify type 1 by looking at parentID/creatorProcess, but I do not know how to identify the other three types. Associating parent IDs of one neutron with the track IDs of another allow me to recreate the chain of secondary creation, but it is not clear at what stages the importance splitting was applied. In addition, some of the weighting sums to greater than 1 for a given event, even when looking only at particles created by ImportanceProcess.

Any help would be greatly appreciated!!!

Thank you,
E.A.

data.txt (1.5 KB)

You could use a UserTrackInformation associated with each track. Every step, get the process, and add the process to a data structure in the UserTrackInformation. Pass this information to secondaries. Read the processes in the sensitive detector.

There are examples that use this, for example:

https://geant4.kek.jp/lxr/source/examples/extended/optical/LXe/src/LXeSteppingAction.cc#L148