I am running a FLUKA simulation, and in the input file I have a PHOTONUC card with SDUM=MUMUPAIR to activate muon production by photons through the process gamma N → mu mu N, where “N” is a nuclei.
WHAT(2) controls the biasing of this process, in terms of the interaction length biasing factor. If
WHAT(2)=1, no biasing is present, and the process is handled in an analogue way - in particular, the initial state photons is no longer present in the final state. However, if I have
|WHAT(2)|<1, and thus I increase the probability for this process to happen, either in case of
WHAT(2)<0 the initial state photon can be present in the final state: for
WHAT(2)>0 the photon is always present, while for
WHAT(2)<0 Russian Roulette is played to decide this.
Is there a way to bias the cross section for this process while, simultaneously, ensuring that the initial state photon is not present in the final state (either through a card or via a user routine)?
Dear @acelenta ,
Thank you for your question. If I understand it correctly, it is not possible to activate the bias in the PHOTONUC card (SDUM=MUMUPAIR) without activating at least the Russian Roulette to create a photon replica.
Nevertheless, you can achieve that feature by means of user routines which prevent the replica from being transported. This would be performed in two steps:
First, the photon replica should be identified, for which the following points are important:
- The photon is created during the bias stage, after the interaction, so it can not be accessed by mdstck.f. Hence, it must be flagged later, when it is loaded in the stack, by means of stupre.f and the variable LOUEMF.
- In order to identify the pair production, the event flag LPAIRP from evtflg.inc can be used. However, in order to differentiate it from the electron-positron pair production, one can use the fact that the muon pair production implies no variation in the EMF stack (no electrons, positrons or photons involved) and then NPEMF=NPSTRT.
Hence, I suggest you insert the following IF condition in stupre.f:
LOUEMF(NPNW) = LLOUSE
IF ( LPAIRP .AND. (NPEMF .EQ. NPSTRT) ) THEN
LOUEMF(NPNW) = 1
- Once properly identified, the photon replica can be discarded while being transported by means of usrmed.f (activated with the MAT-PROP card). The variable LOUEMF becomes LLOUSE in trackr.inc (to be added explicitly) so that you can include in usrmed.f these lines:
IF ( LLOUSE .EQ. 1 ) THEN
WEE = ZERZER
Please let me know if this helps.
thanks for your clear and detailed answer. I implemented this solution and it seems to work as I wanted. I’ll eventually update you in case I’ll have further concerns about this.