Activation foil analysis#

[1]:
from libra_toolbox.neutron_detection.activation_foils import *
from data import foil_data
import pandas as pd
import pint_pandas
[2]:
# make a pandas dataframe based on the foil data with columns for run, generator, flux and error

irradiations = [
    {"t_on": 0, "t_off": 12 * settings.ureg.h},
    {"t_on": 24 * settings.ureg.h, "t_off": 36 * settings.ureg.h},
]

data = {
    "run": [],
    "generator": [],
    "flux": [],
    "error": [],
}

for name, foil in foil_data.items():
    flux = explicit.get_neutron_flux(foil, irradiations)
    error = explicit.get_neutron_flux_error(foil)
    data["run"].append(foil["run"])
    data["generator"].append(foil["generator"])
    data["flux"].append(flux.to(settings.ureg.s**-1))
    data["error"].append(error)
data["flux"] = pd.Series(data["flux"], dtype="pint[s**-1]")
pd.options.display.float_format = '{:,.2e}'.format
df = pd.DataFrame(data)
df.pint.dequantify()
[2]:
run generator flux error
unit No Unit No Unit 1 / second No Unit
0 4 P383 2.61e+08 8.81e-02
1 4 P383 2.67e+08 8.81e-02
2 4 A325 9.84e+07 8.82e-02
3 4 A325 1.06e+08 8.82e-02
4 5 A325 1.15e+08 8.82e-02
5 5 A325 1.17e+08 8.82e-02
6 5 P383 2.68e+08 8.81e-02
7 5 P383 2.74e+08 8.81e-02
8 6 A325 1.06e+08 8.82e-02
9 6 A325 1.07e+08 8.82e-02
10 6 P383 2.49e+08 8.81e-02
11 6 P383 2.46e+08 8.81e-02
[3]:
#for each run number compute the average per generator
grouped_multiple = df.groupby(['run', 'generator']).agg({'flux': ['mean', 'min', 'max']})
grouped_multiple.columns = ['flux_mean', 'flux_min', 'flux_max']
grouped_multiple = grouped_multiple.reset_index()
grouped_multiple.pint.dequantify()

[3]:
run generator flux_mean flux_min flux_max
unit No Unit No Unit 1 / second 1 / second 1 / second
0 4 A325 1.02e+08 9.84e+07 1.06e+08
1 4 P383 2.64e+08 2.61e+08 2.67e+08
2 5 A325 1.16e+08 1.15e+08 1.17e+08
3 5 P383 2.71e+08 2.68e+08 2.74e+08
4 6 A325 1.06e+08 1.06e+08 1.07e+08
5 6 P383 2.48e+08 2.46e+08 2.49e+08