In [1]:
import os
import sys
root_folder = os.path.dirname(os.getcwd())
sys.path.append(root_folder)
from ResoFit._pulse_shape import NeutronPulse
from ResoFit._pulse_shape import ProtonPulse
from ResoFit.experiment import Experiment
import numpy as np
from ResoFit.simulation import Simulation
import scipy.signal as ss
import matplotlib.pyplot as plt
import scipy
In [2]:
%matplotlib notebook
In [3]:
overwrite_csv = False
folder = 'data/IPTS_20440'
spectra_file = 'spectra.txt'
data_file1 = 'Ta_80C_12pC.csv'
norm_to_file = 'OB_80C_12pC.csv'
baseline = False
baseline_deg = 3
norm_factor = 1
image_start = None # Can be omitted or =None
image_end = None # Can be omitted or =None
source_to_detector_m = 16.46
offset_us = 0
In [4]:
experiment1 = Experiment(data_file=data_file1,
spectra_file=spectra_file,
folder=folder,
baseline=baseline,
baseline_deg=baseline_deg,
source_to_detector_m=source_to_detector_m,
offset_us=offset_us
)
experiment1.norm_to(file=norm_to_file, norm_factor=norm_factor)
experiment1.slice(start=image_start, end=image_end)
simulation = Simulation(energy_min=7.5, energy_max=15, energy_step=0.01, database='ENDF_VIII')
simulation.add_layer(layer='Ta', thickness_mm=0.127)
In [5]:
simulation._convolve_beam_shapes(source_to_detector_m=source_to_detector_m, conv_proton=False,
# proton_params={'sigma':500},
)
x_n = simulation.x_tof_us
y_n = simulation.y_att
In [6]:
simulation._convolve_beam_shapes(source_to_detector_m=source_to_detector_m, conv_proton=True)
x_np = simulation.x_tof_us
y_np = simulation.y_att
In [7]:
simulation._convolve_beam_shapes(source_to_detector_m=source_to_detector_m, conv_proton=True,
proton_params={'sigma':300},
)
x_np300 = simulation.x_tof_us
y_np300 = simulation.y_att
In [8]:
simulation._convolve_beam_shapes(source_to_detector_m=source_to_detector_m, conv_proton=True,
proton_params={'sigma':500},
)
x_np500 = simulation.x_tof_us
y_np500 = simulation.y_att
In [15]:
import pandas as pd
from scipy.interpolate import interp1d
In [31]:
d = 5.2
In [14]:
df1 = pd.DataFrame()
# df1['x_n'] = x_n+1.95-d
df1['x_n'] = x_n
df1['y_n'] = y_n
df1.dropna(inplace=True)
df1.reset_index(inplace=True, drop=True)
df1
Out[14]:
In [15]:
df2 = pd.DataFrame()
df2['x_np'] = x_np+0.03-d
df2['y_np'] = y_np
df2.dropna(inplace=True)
df2.reset_index(inplace=True, drop=True)
df2
Out[15]:
In [16]:
df3 = pd.DataFrame()
df3['x_np300'] = x_np300-d
df3['y_np300'] = y_np300
df3.dropna(inplace=True)
df3.reset_index(inplace=True, drop=True)
df3
Out[16]:
In [17]:
df4 = pd.DataFrame()
df4['x_np500'] = x_np500-d
df4['y_np500'] = y_np500
df4.dropna(inplace=True)
df4.reset_index(inplace=True, drop=True)
df4
Out[17]:
In [18]:
df = pd.DataFrame()
df['x_n'] = df1['x_n']
df['y_n'] = df1['y_n']
df['x_np'] = df2['x_np']
df['y_np'] = df2['y_np']
df['x_np300'] = df3['x_np300']
df['y_np300'] = df3['y_np300']
df['x_np500'] = df4['x_np500']
df['y_np500'] = df4['y_np500']
df.dropna(inplace=True)
df
Out[18]:
In [19]:
t_max = 131.87
t_min = 128.54
t_step = 0.01
nbr_point = int((t_max - t_min) / t_step + 1)
ls_x = ['x_n', 'x_np', 'x_np300', 'x_np500']
ls_y = ['y_n', 'y_np', 'y_np300', 'y_np500']
df_out = pd.DataFrame()
x_axis = np.linspace(t_min, t_max, nbr_point).round(5)
df_out['x_interp'] = x_axis
for i, each in enumerate(ls_y):
y_axis_function = interp1d(x=list(df[ls_x[i]]), y=list(df[each]), kind='cubic')
df_out[each] = y_axis_function(x_axis)
In [20]:
df_out
Out[20]:
In [55]:
df_out.to_clipboard()
In [18]:
In [16]:
simulation.export(x_axis='time', y_axis='attenuation', source_to_detector_m=source_to_detector_m, offset_us=2.78)
In [18]:
experiment1.export(x_type='time', y_type='attenuation', t_unit='us')
Out[18]:
In [9]:
ax = simulation.plot(x_type='time', y_type='attenuation', source_to_detector_m=source_to_detector_m, offset_us=offset_us,
mixed=False, all_layers=True)
ax = experiment1.plot(x_type='time', y_type='attenuation', t_unit='us', ax_mpl=ax)
ax.plot(x_n, y_n, label='Conv. Neutron')
ax.plot(x_np, y_np, label='Conv. Neutron*Proton(\u03C3=146.8)')
ax.plot(x_np300, y_np300, label='Conv. Neutron*Proton(\u03C3=300)')
ax.plot(x_np500, y_np500, label='Conv. Neutron*Proton(\u03C3=500)')
# experiment1.plot_raw(x_type='time', y_type='transmission', time_unit='us', ax_mpl=fig.axes[0])
# plt.plot(simulation.x_tof_us-5.2, 1-simulation.y_att, label='Conv. N*P(\u03C3=146.8)')
# ax.set_xlim(left=1, right=6)
ax.legend()
ax.set_title('Gd resonance dip at ~4eV')
ax.grid()
In [11]:
ax = simulation.plot(x_type='time', y_type='attenuation', source_to_detector_m=source_to_detector_m, offset_us=offset_us,
mixed=False, all_layers=True)
ax = experiment1.plot(x_type='time', y_type='attenuation', t_unit='us', ax_mpl=ax)
ax.plot(x_n, y_n, label='Conv. Neutron')
ax.plot(x_np, y_np/2, label='Conv. Neutron*Proton(\u03C3=146.8)')
ax.plot(x_np300, y_np300, label='Conv. Neutron*Proton(\u03C3=300)')
ax.plot(x_np500, y_np500, label='Conv. Neutron*Proton(\u03C3=500)')
# experiment1.plot_raw(x_type='time', y_type='transmission', time_unit='us', ax_mpl=fig.axes[0])
# plt.plot(simulation.x_tof_us-5.2, 1-simulation.y_att, label='Conv. N*P(\u03C3=146.8)')
# ax.set_xlim(left=1, right=6)
ax.legend()
ax.set_title('Ta resonance dip from 7-15eV')
ax.grid()
In [10]:
simulation.neutron_pulse.proton_pulse.plot()
Out[10]:
In [9]:
total_fig = simulation.neutron_pulse.plot_shape_total()
In [ ]: