Respected experts,
I am working on calculating reaction cross sections using the RESNUCLEi card, but I am confused about how to correctly obtain the microscopic cross section (in mb) from the macroscopic values. I have read several posts on the forum, but some points remain unclear to me.
In particular:
In the .out file, the inelastic scattering length is reported as 0.1134E+09 cm. Which exact value should I divide this by in order to extract the microscopic cross section?
From the tab.lis file, the “primary beam interactions” are reported as 5.2140E+06 (99.00%). Should this number be multiplied or divided by any factor when converting to cross sections, or is it only used for normalization?
what is the purpose of tab.lis file? Does the primary beam interaction that is in my case from tab.lis file is 5.2140E+06 99.00 will be divided or multiplied with some factor or not?
I will be very thankful if experts can give an example to calculate the xs using my provided data.
Additionally, my reaction of interest is ¹¹⁰Cd(d,2n)¹¹⁰ᵐIn. Could you please advise on how the production cross section for the metastable state (¹¹⁰ᵐIn) can be calculated from the FLUKA outputs?
I am attaching my .out, tab.lis, and sum.lis files for reference, and would very much appreciate clear guidance from experts on how to proceed.
As a general note, FLUKA was not conceived as a tool to extract partial cross sections, rather for the calculation of macroscopic yields. That being said, one can still estimate microscopic cross sections in particular simulation geometries which minimize the effect of transport, like the one you are presumably adopting.
Having said that, from a brief look at the output file it looks to me like you’re defining a 0.02 GeV/c i.e. a 20 MeV/c (momentum!) beam. This corresponds to deuterons of about 100 keV kinetic energy, somewhat below the Coulomb barrier. This substantially prevents the deuterons from penetrating the nucleus, which in turn leads to a very small reaction cross section, hence the very large mean free path you witness in the output file for nuclear reactions.
Could you please also send your input file so that I’m sure to run exactly what you are running? Otherwise I have to do the diagnosis forensically in the output file, making it more tedious than it need be.
Thank you for your reply. I am currently running FLUKA through a Python script. The reason for doing so is that I want to calculate cross sections at multiple energies, and later process the output files with Python to extract the cross sections. For this purpose, I first define the energy as a variable. However, when I introduce it in the BEAM card as $energy, it automatically changes to momentum. I assumed this behavior was acceptable, but I am not entirely sure.
I am attaching my input file here for your reference.
bashE.txt (844 Bytes)
it was a bash script I was not able to upload it with .sh extension so I changed it to .txt
Thanks for the correspondence and the attached materials.
Here are some hints to help you estimate partial cross sections.
Assuming that you have a sufficiently thin target such that the deuteron energy is not appreciably degraded, and that the produced 110In has a low enough kinetic energy that it falls below transport threshold (such that no 110In can escape the layer), which are fair assumptions for the moderate primary energies you’re considering, you’ll need:
A RESNUCLEi scoring a la
Run and process files.
The number N_110 of produced 110In per primary deuteron, which you fish out from the corresponding _tab.lis file from the line a la " 110 49 2.4230E-05 2.230"
This is assuming you pass a blank “Vol:” field in the RESNUCLEi card, as opposed to your input file (!).
The number N_R of nuclear reactions undergone per primary deuteron which you’d need to fish out from the output files (from the table with the header “Number of stars generated per beam particle:”). BTW looking at this output-file table is a good occasion to triple check and make sure no other particle is undergoing nuclear reactions (such as to exclude inadvertent contributions to 100In production).
The mean free path lambda_R for nuclear reactions, which you extract from the “Inelastic scattering length” column in the output file, knowing that
The number of Cd nuclei per unit volume:
N = N_A * rho / A_w
where N_A is the Avogadro number, rho is the density, and A_w is the atomic weight. The latter two are also in the aforementioned table in the output file.
You then have the reaction cross section:
sigma_R = 1 / (lambda_R * N)
Finally, the partial cross section for the production of 110In would be
sigma_110 = sigma_R * N_110 / N_R
Concerning metastable vs ground state, FLUKA thus far does not distinguish among the two during the nuclear reaction: it’s only at scoring time (in a decay run) that ground state or isomers are chosen with a crude recipe assigning equal likelihood to ground state and to isomeric levels. This is an active topic of improvement. To get the production of 110mIn rather than 110In_gs (ground state) you’ll need external information to extract a fraction of the partial cross section estimated with the procedure above.
A few comments concerning your input file:
Your LAM-BIAS card settings are somewhat redundant: you have INEPRI (biasing only primary particles) but request 4-HELIUM through @LASTPAR. Toggle it just for DEUTERON.
For this problem, delta ray production/transport is irrelevant. I’d scratch most of the related cards and just pass a DELTARAY card with a high threshold a la 1 GeV.
Unless you have very good reason for FLUKAFIX,MULSOPT,IONFLUCT in this particular scenario (where all that matters is bringing the deuteron to do a nuclear reaction with essentially the primary energy) you may drop them.
A positive WHAT(1) in the BEAM card is interpreted as a momentum in GeV/c as per 7.22.4. BEAM — FLUKA Manual
A negative value in WHAT(1) is what you want.
I’d try something along the lines of replacing
sed -e "s|#define ENERGY .*|#define ENERGY $e_fmt|" \
"../../$TEMPLATE" > "$inp_file"
by
sed -e "s|#define ENERGY .*|#define ENERGY -$e_fmt|" \
"../../$TEMPLATE" > "$inp_file"
in your bash script. I.e. adding a minus in front of $e_fmt.
You’re sweeping energies from 6 to 30 MeV in your script. Yet you pass a PART-THR card cutting 4-HELIUM through DEUTERON below 12 MeV. Which means that from 6 to 12 MeV you would not get any deuteron transported in your attempt! Remove this card. Or, even better, use your bash machinery to set it to the primary energy times 0.95 or so (then you’re sure you’re accumulating cross section information at pretty much the primary energy).
Point-wise neutron transport is on by default for the most used DEFAULTs since a few versions already. You do not need the LOW-PWXS card. Plus you discard neutrons anyway.
The threshold card you pass with “1000.0” for the nuclear elastic processes is not needed at all: deuterons do not do nuclear elastic scattering in FLUKA. At the energies you’re working, it would only affect protons.
I’d tend to drop the RADDECAY card (you’re anyway not associating any detector with DCYSCORE) and score the raw production of 110In. NB: anyway FLUKA at most provides a crude recipe (50% ground state and 50% isomer) at scoring level, which you can apply a posteriori on the scored cross section above.
RESNUCLEi scoring is fine, yet it should be clear that you’d be intercepting only 110In produced and stopping (or falling below transport threshold) in the layer. If you ramp up the deuteron energy and some 110In manages to escape the thin layer, you’ll lose them.
Your RESNUCLEi card contains the volume of the region, which is unnecessary in the procedure outlined above.
Respected Cesc,
Thanks for your detailed reply; I really appreciate it as it will be very helpful for our community. I followed your instructions, but the resulting outputs were not as expected. I am attaching the graph I obtained for your reference. Moreover, the values are much smaller than anticipated. I tried to obtain appropriate results on my own without posting on the forum again, but I was unsuccessful. I apologize, but I need your guidance. Here are the values from each energy irradiation from the .out and tab.lis files.
I also attempted one adjustment experimentally. In your last reply, you suggested that positive energy values correspond to momentum in GeV/c, while negative values correspond to kinetic energy in GeV, and recommended modifying the script by adding a minus sign. However, with this change, FLUKA generated empty tab.lis and sum.lis results.
What I did instead was first calculate the momentum values that would produce the desired energy range in MeV. For example, with momentum ranging from 0.14–0.32 GeV/c, the energy in MeV varies from 5.2 to 27.1 MeV. This seemed logically correct to me, but I would greatly appreciate your suggestion on this approach.
Pay attention to the units of the quantities you manipulate/calculate/plot. If the resulting cross section is in cm^2 (as obviously it is with rho in g/cm^3 and lambda_R in cm), your values are too big, not small. And that’s because your N_110 values patently make no sense. Apparently, instead of the 110In yield per deuteron, you took from the .lis file the associated percentage error (which by the way should become much smaller than 99%, as a result of multiple cycles).