I wish to implement my own nuclear reaction model - what would be the preferred implementation approach?

I am interested in implemeting my own (low-energy) nuclear reaction model for a specific projectile-target combination. Let’s say 3He+7Li. This reaction has several open channels. Let’s pretend that I’m only interested in modelling two of these, say, (1) p+9Be and (2) 4He+6Li. Finally, let’s assume that I know the cross sections of these two channels, cs1 and cs2, and their angular distributions.

Based on my (somewhat limited) understanding of GEANT4, I believe this could be implemented as follows,

i) Create a new physical process, e.g. called G4He3Li7NuclearReaction, which inherits from G4HadronicProcess

ii) Create a new cross section dataset with the total (cs1+cs2) cross section. This class should inherit from G4VCrossSectionDataSet.

iii) Add the dataset from ii) to the physics process from i)

iv) Create a new interaction model that inherits from G4HadronicInteraction. This interaction model should model both channels. In particular, the interaction model would use the cross section ratio cs1/cs2 to determine on an event-by-event basis through monte-carlo samping if the reaction proceeds via channel (1) or (2).

Does this seem like a sensible approach to achieving the desired goal?


I would opt for G4ParticleHP. You do not have to write a single line of C++ code. Just create a new cross section database with only these channels and fill it with your values.

Thanks for pointing me to the G4ParticleHP module, Pedro.

I came across this recent paper which also mentions G4ParticleHP: Phan Viet et al. 2019

While G4ParticleHP sounds like a useful module, for my application it does not seem to provide the flexibility I need. In particular, it does not allow me to fully specify the final-state kinematics. So, instead of using G4ParticleHP, I plan on following the approach of Phan Viet et al. which consists in implemeting my own physics model that derives from G4HadronicInteraction.

This will require some C++ coding, but on the plus side I don’t think I need to implement my own physics process. The existing G4HadronicProcess should work just fine. This approach also appears to be the ‘recommended approach’. Quoting from the toolkit developer docs:

“Whenever possible, it is preferable to add any new hadronic physics to Geant4 in terms of a model, and assign the model to an existing process, rather than develop a new, specific process.”