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.3.2 Operating System: Alma Linux 9.7 Compiler/Version: GCC 11.5 CMake Version: 3.26.5
Hello everybody,
I am currently working on a neutron multiplicity counting simulation of plutonium. To adjust the timescale, I am saving the decay time of each generated primary particle and the time at which the neutron interacts with the detector. During data evaluation, I subtract the decay time from the arrival time and then add new decay times using Poisson statistics.
Is this the correct approach? Is there a more elegant way of determining the time between the primary decay and the interaction with the detector? At the moment, I am losing significant digits because the absolute decay times are very large, and subtracting them to obtain small time differences leads to a loss of precision.
Another issue is the computational load. Initially, I suppressed alpha decay to obtain sufficient spontaneous fission statistics. However, this turned out to be ineffective, since (α,n)(\alpha,n)(α,n) reactions contribute significantly to the background of the distributions. Given that Pu-240 has a spontaneous fission rate of about 5.8×10−6%5.8 \times 10^{-6}\%5.8×10−6%, and that (α,n)(\alpha,n)(α,n) reactions are also relatively rare, this results in a large amount of wasted computational effort.
What would be the best way to reduce the computational load in this type of simulation?
If you are only interested in the time between the produced secondary and its detection then @maire1 ‘s solution is easiest. This will still give an “offset” if the seconday is from a daughter, granddaughter, etc. You could write or modify RE01’s UserTrackingAction example to grab all secondaries after checking the particle ID. That would allow you to kill all neutrons based on the parent or reset the global timer of the particle when Pu240 (and only Pu240) decays/fissions/etc.
What specifically are you interested in with Pu240? Is the Pu240 fission interesting because it can seed neutrons for Pu239 induced fission (ala LANL’s BeRP ball) or just in the spontaneous fission of Pu240 itself? If it is the latter then you can modify what I suggest in this thread to “force” spontaneous fission for every single event (Cf252 has a SF BR of 3%). That will increase your statistics for S.F events by 1E4%
First of all, thanks for the quick answer. I am trying to simulate the neutron spectrum and the neutron multiplicity distribution of different probes. At the moment, I am using the method you suggested, where I force fission. However, by doing so I lose the alpha decays, which leads to (alpha,n) reactions being completely neglected. Since my probe contains traces of oxygen, these (alpha,n) reactions contribute significantly to the neutron spectrum.
My current idea is to run two separate simulations: one in which I force fission, and another in which I leave the branching ratios unchanged but instead increase the bias for the (alpha,n) reaction. I would then try to rescale the timescales for both simulations before combining the results.
That all seems quite reasonable. As a last tool you could use if there is some other issue with biasing the (alpha, n) reaction is to just have a simulation wherein you simulate only alphas inside your source volume where you feed in the alpha particle spectrum.