60 lines
1.3 KiB
Python
60 lines
1.3 KiB
Python
import sys
|
|
import os.path as path
|
|
|
|
build_dir = path.join(path.dirname(__file__), '..', 'build')
|
|
print('Adding build directory to sys.path:', build_dir)
|
|
sys.path.append(build_dir)
|
|
|
|
import slopefit as sf
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
fl = 1200.0 # mm
|
|
theta_mrad = 3.0 # mrad
|
|
theta_rad = theta_mrad * 1e-3
|
|
theta = theta_rad / np.pi * 180.0 # deg
|
|
|
|
parab = sf.ParabolaParams(fl, theta)
|
|
|
|
filename = 'microMAX_vsru_mispu_absum.dat'
|
|
dirname = path.dirname(__file__)
|
|
|
|
data = sf.import_dat_file(path.join(dirname, filename))
|
|
|
|
# flip both x and y
|
|
data[:, 0] = -data[:, 0]
|
|
data[:, 1] = -data[:, 1]
|
|
|
|
n_skip = 20
|
|
data = data[n_skip:-n_skip, :]
|
|
|
|
ref = parab(data[:, 0])
|
|
|
|
# convert ref from slope to rad
|
|
# ref = np.arctan(ref)
|
|
# convert to arcsec
|
|
# ref = ref / np.pi * 180.0 * 3600.0
|
|
|
|
|
|
plt.plot(data[:, 0], data[:, 1], 'x')
|
|
plt.plot(data[:, 0], ref, '-')
|
|
plt.xlabel('x (mm)')
|
|
plt.ylabel('slope (arcsec)')
|
|
plt.show()
|
|
|
|
d_parab = sf.ParabolaParams(100.0, 0.00001)
|
|
|
|
fitted = sf.fit_parabola(data, parab, d_parab)
|
|
|
|
print('Fitted parameters:')
|
|
print('fl =', fitted.focal_length)
|
|
print('theta =', fitted.theta * np.pi * 1e3 / 180.0, 'mrad')
|
|
|
|
fitted_ref = fitted(data[:, 0])
|
|
|
|
plt.plot(data[:, 0], data[:, 1], 'x')
|
|
plt.plot(data[:, 0], fitted_ref, '-')
|
|
plt.xlabel('x (mm)')
|
|
plt.ylabel('slope (arcsec)')
|
|
plt.show() |