Neutron activation¶
periodictable.activation¶
Calculate expected neutron activation from time spent in beam line.
Accounts for burnup and 2n, g production.
This is only a gross estimate. Many effects are not taken into account, such as self-shielding in the sample and secondary activation from the decay products.
Introduction to neutron activation terminology
See a text!! These are just a few notes to refresh the memory of those who already know the topic.
Reactions: The most common reaction is the simple addition of a neutron, thereby increasing its atomic number by one but leaving it as the same element. Not all activation products are radioactive. Those that are not are not included in this database. Beware that there are production chains that depend upon these intermediate products. This database does not address those more complicated processes.
There are exceptions to the simple addition process such as the n,alpha reaction of Li-6. These then result in a different element as the activation product. These are identified in the reaction column. Radioactive products also have the potential of undergoing a neutron reaction. This is accounted for in this database for selected products (generally those that result in significant half-life products). These reactions and products should only be important at very high fluences, i.e., >1E16 n/cm2.
Neutron energy: The majority of the reactions are initiated by thermal neutrons. As a practical matter the number of thermal neutrons is usually measured with a cadmium filter. This excludes the neutrons above the cadmium absorption threshold, called the cadmium cutoff. For most materials the resulting measured ‘thermal’ neutron fluence is adequate to determine the thermal neutron activation. A few materials have large cross-sections for the neutrons above the cadmium cutoff. Hence a ‘cadmium ratio’ is needed to predict the number of neutrons present above this cutoff, as seen by the specific reaction of interest.
For the same neutron spectrum two different elements will have different cadmium ratios. Similarly, for the same reaction but different neutron environments the ratio will also vary. Copper is a good material on which to predict the thermal-to-epithermal fluence ratio since its two cross-sections are about equal. If you use the ratio of another reaction, correct the activity ratio of the nuclide by the cross-section ratio in order to derive the extimated fluence ratio. Take care. By definition, the cadmium ratio is an activity ratio, not a fluence ratio. [Note: This ratio is divided into the specfied thermal neutron fluence rate to get the epithermal rate.]
Fast neutron reactions: There are also those reactions that depend on higher energy neutrons. These can be of a great variety: n,gamma; n,p; n,d; n,alpha; n,triton; etc. Any they are highly variable in how high the neutron energy must be to initiate the reaction. In general the cross- sections are relatively small, e.g., 10’s of millibarns and less as compared to 1000’s of barns in some cases for thermal reactions. Plus the fast neutron fluences are much smaller so that in general the amount of the activation product is much less than for thermal production processes.
Barn: As they say- just how big is the broad side of that barn? For neutrons it is 1 E-24 cm2, e.g. 0.000000000000000000000001 square cm. Millibarns are of course for the _______ (leprechauns?).
Calulation: (number of atoms)*(cross-section)*(no. of neutrons)*(decay correction)*C.F.
- Number of atoms: mass*avagadro’s number*isotopic abundance/mole.weight
where the mass is that of the target element, not the whole sample.
- Decay correction: Since the radioactive product decays while it is being
made one must correct for this using (1-exp(-0.693*t/hlflf)) where t is the exposure time and hlflf is the product halflife
C.F: includes unit conversion factors, e.g., convert to microcuries
Example:
>>> from periodictable import activation
>>> env = activation.ActivationEnvironment(fluence=1e5, Cd_ratio=70, fast_ratio=50, location="BT-2")
>>> sample = activation.Sample("Co30Fe70", 10)
>>> sample.calculate_activation(env, exposure=10, rest_times=[0, 1, 24, 360])
>>> sample.show_table()
----------------- activity (uCi) ------------------
isotope product reaction half-life 0 hrs 1 hrs 24 hrs 360 hrs
-------- --------- -------- ---------- ------------ ------------ ------------ ------------
Co-59 Co-60 act 5.272 y 0.0004959 0.0004959 0.0004958 0.0004933
Co-59 Co-60m+ act 10.5 m 1.664 0.03169 --- ---
-------- --------- -------- ---------- ------------ ------------ ------------ ------------
total 1.664 0.0322 0.0005084 0.0005049
-------- --------- -------- ---------- ------------ ------------ ------------ ------------
>>> print("%.3f"%sample.decay_time(0.001)) # number of hours to reach 1 nCi
2.053
The default rest times used above show the sample activity at the end of neutron activation and after 1 hour, 1 day, and 15 days.
The neutron activation table, activation.dat,[1] contains details about the individual isotopes, with interaction cross sections taken from from IAEA-273[2].
Activation can be run from the command line using:
$ python -m periodictable.activation FORMULA
where FORMULA is the chemical formula for the material.
Code original developed for spreadsheet by Les Slaback of NIST.
- class periodictable.activation.ActivationEnvironment(fluence=100000.0, Cd_ratio=0.0, fast_ratio=0.0, location='')¶
Bases:
objectNeutron activation environment.
The activation environment provides details of the neutron flux at the sample position.
fluence : float | n/cm^2/s
Thermal neutron fluence on sample. For COLD neutrons enter equivalent thermal neutron fluence.
Warning: For very high fluences, e.g., >E16 to E17 n/cm2, the equations give erroneous results because of the precision limitations. If there is doubt simply do the calculation at a lower flux and proportion the result. This will not work for the cascade reactions, i.e., two neutron additions.
Cd_ratio : float
Neutron cadmium ratio. Use 0 to suppress epithermal contribution.
This is to account for those nuclides that have a significant contribution to the activation due to epithermal neutrons. This is tabulated in the cross-section database as the ‘resonance cross- section’. Values can range from 4 to more than 100.
……. Use 0 for your initial calculation ……….
If you do a specific measurement for the nuclide and spectrum of interest you simply apply a correction to the thermal based calculation, i.e., reduce the fluence by the appropriate factor.
This computation can be based on a Cd ratio of a material that has no significant resonance cross-section, or that has been corrected so that it reflects just the thermal to epithermal fluence ratio. The computation simply adds a portion of this resonance cross-section to the thermal cross-section based on the presumption that the Cd ratio reflects the fluence ratio. Copper is a good material on which to equate the Cd ratio to the thermal-epithermal fluence ratio.
For other materials, correct for the thermal:epithermal cross-section ratio.
At the NBSR this ranges from 12 in mid-core, to 200 at RT-4, to >2000 at a filtered cold neutron guide position.
fast_ratio : float
Thermal/fast ratio needed for fast reactions. Use 0 to suppress fast contribution.
This is very reaction dependent. You in essence need to know the answer before you do the calculation! That is, this ratio depends upon the shape of the cross-section curve as well as the spectrum shape above the energy threshold of the reaction. But at least you can do ‘what-if’ calculations with worse case assumptions (in the absence of specific ratios).
The fast cross-sections in this database are weighted for a fast maxwellian spectrum so the fast/thermal ratio should be just a fluence correction (i.e., a fluence ratio), not an energy correction.
Fast neutron cross-sections from IAEA273 are manually spectrum weighted. Those from IAEA156 are fission spectrum averaged as tabulated.
Use 50 (for NBSR calculations) as a starting point if you simply exploring for possible products.
- property epithermal_reduction_factor¶
Used as a multiplier times the resonance cross section to add to the thermal cross section for all thermal induced reactions.
- class periodictable.activation.ActivationResult(**kw)¶
Bases:
objectisotope :
Activation target for this result ({symbol}-{A})
abundance : float | %
IAEA 1987 isotopic abundance of activation target
symbol :
Element symbol for isotope
A : int
Number of protons plus neutrons in isotope
Z : int
Number of protons in isotope
reaction :
Activation type
“act” for (n,gamma)
“n,p” for (n,proton)
“n,a” for (n,alpha)
“2n” for activation of a daughter (e.g., 95Mo + n => 95Nb + n => 96Nb)
“n,2n” for neutron catalyzed release of a neutron
“b” for beta decay of a daughter (e.g., 98Mo + n => 99Mo => Tc-99)
comments :
Notes relating to simplifications or assumptions in the database. For most situations these do not affect your results.
daughter :
Daughter product from activation ({symbol}-{A}{isomer})
isomer :
Daughter product isotope annotation
m, m1, m2: indicate metastable states. Decay may be to the ground state or to another nuclide.
+: indicates radioactive daughter production already included in daughter listing several parent t1/2’s required to acheive calculated daughter activity. All activity assigned at end of irradiation. In most cases the added activity to the daughter is small.
*: indicates radioactive daughter production NOT calculated, approximately secular equilibrium
s: indicates radioactive daughter of this nuclide in secular equilibrium after several daughter t1/2’s
t: indicates transient equilibrium via beta decay. Accumulation of that nuclide during irradiation is separately calculated.
Thalf_hrs : float | hours
Half-life of daughter in hours
Thalf_str :
Half-life of daughter as string, such as “29.0 y”
Thalf_parent : float | hours
Half-life of parent in chained “2n” or “b” reaction
fast : bool
Indicates whether the reaction is fast or thermal. If fast then the fluence is reduced by the specified fast/thermal ratio. When fast_ratio is zero in the environment this activation will not appear.
thermalXS, resonance, thermalXS_parent, resonance_parent : float | barns
Activation database values for computing the reaction cross section.
gT, percentIT :
Unused.
Database notes:
Most of the cross-section data is from IAEA 273. This is an excellent compilation. I highly recommend its purchase. The fast neutron cross-section data entered in the spreadsheet is weighted by an U-235 maxwellian distributed fission spectrum. Allthermal reactions producing nuclides with a half-life in excess of 1 second, and some less than 1 second, are included. Also included are radioactive daughters with halflives substantially longer than the parent produced by the neutron induced reaction, i.e., those daughters not in secular equilibrium. See the database in for more detailed notes relating to the database entries.
[Note: 150 fission spectrum averaged fast neutron reactions added from IAEA156 on 2/1/94. All those that are tabulated as measured have been entered. Those estimated by calculation have not been entered. In practice this means that the convenient, observable products are in this database. Fast reactions included are n,p; n,alpha; n,2n; and n,n’.
Reaction = b : This is the beta produced daughter of an activated parent. This is calculated only for the cases where the daughter is long lived relative to the parent. In the reverse case the daughter activity is reasonably self evident and the parent nuclide is tagged to indicate a radioactive daughter. The calculated activity of the beta produced daughter is through the end of irradiation. Contributions from the added decay of the parent after the end of irradiation are left for the user to determine, but are usually negligible for irradiations that are long relative to the parent halflife.
During irradiation parent activity (A1) is:
A1 = K [1 - exp(-L1*t)]
where K is the parent saturation activity and L1 is the decay constant.
For the beta produced daughter the activity (A2) is:
A2 = K [1 - exp(-L1*t) * L2/(L2-L1) + exp(-L2*t) * L1/(L2-L1)]
- class periodictable.activation.Sample(formula, mass, name=None)¶
Bases:
objectSample properties.
formula : chemical formula
Chemical formula. Any format accepted by
formulas.formula()can be used, including formula string.mass : float | g
Sample mass.
name : string
Name of the sample (defaults to formula).
- calculate_activation(environment, exposure=1, rest_times=(0, 1, 24, 360), abundance=<function table_abundance>)¶
Calculate sample activation (uCi) after exposure to a neutron flux.
environment is the exposure environment.
exposure is the exposure time in hours (default is 1 h).
rest_times are deactivation times in hours (default [0, 1, 24, 360]).
abundance is a function that returns the relative abundance of an isotope. By default it uses
table_abundance()with natural abundance defined inperiodictable.mass, but there is the alternativeIAEA1987_isotopic_abundance()in the activation data table.
- decay_time(target, tol=1e-10)¶
After determining the activation, compute the number of hours required to achieve a total activation level after decay.
- show_table(cutoff=0.0001, format='%.4g')¶
Tabulate the daughter products.
cutoff=1 : float | uCi
The minimum activation value to show.
format=”%.1f” : string
The number format to use for the activation.
- periodictable.activation.IAEA1987_isotopic_abundance(iso)¶
Isotopic abundance in % from the IAEA, as provided in the activation.dat table.
Note: this will return an abundance of 0 if there is no neutron activation for the isotope even though for isotopes such as H[1], the natural abundance may in fact be rather large.
IAEA 273: Handbook on Nuclear Activation Data, 1987.
- periodictable.activation.activity(isotope, mass, env, exposure, rest_times)¶
Compute isotope specific daughter products after the given exposure time and rest period.
Activations are listed in isotope.neutron_activation. Most of the activations (n,g n,p n,a n,2n) define a single step process, where a neutron is absorbed yielding the daughter and some prompt radiation. The daughter itself will decay during exposure, yielding a balance between production and emission. Any exposure beyound about eight halflives will not increase activity for that product.
Activity for daughter products may undergo further neutron capture, reducing the activity of the daughter product but introducing a grand daughter with its own activity.
The data tables for activation are only precise to about three significant figures. Any changes to the calculations below this threshold, e.g., due to slightly different mass or abundance, are therefore of little concern.
Differences in formulas compare to the NCNR activation spreadsheet:
Column M: Use ln(2) rather than 0.693
Column N: Use ln(2) rather than 0.693
- Column O: Rewrite to use expm1(x) = exp(x) - 1::
= L (1 - exp(-M Y43)/(1-(M/N) ) + exp(-N Y43)/((N/M)-1) ) = L (1 - N exp(-M Y43)/(N-M) + M exp(-N Y43)/(N-M) ) = L/(N-M) ( (N-M) - N exp(-M Y43) + M exp(-N Y43) ) = L/(N-M) ( N(1 - exp(-M Y43)) + M (exp(-N Y43) - 1) ) = L/(N-M) ( -N expm1(-M Y43) + M expm1(-N) ) = L/(N-M) (M expm1(-N Y43) - N expm1(-M Y43))
- Column X: Rewrite to use expm1(x) = exp(x) - 1::
= W ((abs(U)<1e-10 and abs(V)<1e-10) ? (V-U + (V-U)(V+U)/2) : (exp(-U)-exp(-V))) = W (exp(-U) - exp(-V)) = W exp(-V) (exp(V-U) - 1) = W exp(-U) (1 - exp(U-V)) = W exp(-V) expm1(V-U) = -W exp(-U) expm1(U-V) = (U > V) ? (W exp(-V) expm1(V-U)) : (-W exp(-U) expm1(U-V))
Differences in the data tables:
AW1462 (W-186 => W-188 2n) t1/2 in hrs is not converting days to hours
AK1495 (Au-198 => Au-199 2n) target should be Au-197
AN1428 (Tm-169 => Tm-171 2n) t1/2 updated to Tm-171 rather than Tm-172
AN1420 (Er-162 => Ho-163 b) t1/2 updated to 4570 y from 10 y
AT1508 (Pb-208 => Pb-209 act) Thermal (b) x 1000 to convert from mbarns to barns
- periodictable.activation.demo()¶
- periodictable.activation.find_root(x, f, df, max=20, tol=1e-10)¶
Find zero of a function.
Returns when \(|f(x)| < tol\) or when max iterations have been reached, so check that \(|f(x)|\) is small enough for your purposes.
Returns x, f(x).
- periodictable.activation.init(table, reload=False)¶
Add neutron activation levels to each isotope.
- periodictable.activation.sorted_activity(activity_pair)¶
Interator over activity pairs sorted by isotope then daughter product.
- periodictable.activation.table_abundance(iso)¶
Isotopic abundance in % from the periodic table package.
