def get_ddd_grid(self, energy_list, n):
""" TODO: documentation
"""
energy = []
dist = []
data = []
ddd_e = self.ddd.keys()
ddd_e = sorted(ddd_e)
for e in energy_list:
idx = np.where((np.array(ddd_e) >= e))[0][0] - 1
d_lower = self.ddd[ddd_e[idx]]
d_upper = self.ddd[ddd_e[idx + 1]]
lower_idx = np.where(max(d_lower[1, :]) == d_lower[1, :])[0][0]
upper_idx = np.where(max(d_upper[1, :]) == d_upper[1, :])[0][0]
offset = 1 / (ddd_e[idx + 1] - ddd_e[idx]) * (e - ddd_e[idx + 1])
x_offset = (d_upper[0, upper_idx] - d_lower[0, lower_idx]) * offset
y_offset = 1 + (1 - d_upper[1, upper_idx] / d_lower[1, lower_idx]) * offset
depth = d_upper[0, :] + x_offset
ddd = d_upper[1, :] * y_offset
xi = np.linspace(0, depth[-1], n)
spl = RegularInterpolator(x=depth, y=ddd)
data.extend(spl(xi))
dist.extend(xi)
energy.extend([e] * n)
out = [dist, energy, data]
return np.reshape(np.transpose(out), (len(energy_list), n, 3))
# TODO why it is not used ?
# ddd_list = []
# energy = []
# dist = []
# point = []
# for e in energy_list:
# dist.extend(np.linspace(0, self.get_dist(e), n))
# energy.extend([e] * n)
# point.append(dist)
# point.append(energy)
# data = interpolate.griddata(self.points,
# self.ddd_list,
# np.transpose(point),
# method='linear')
# out = [dist, energy, data]
# return np.reshape(np.transpose(out), (len(energy_list), n, 3))
评论列表
文章目录