Consolidate angle names between data formats
This commit is contained in:
parent
7e6df95c49
commit
239949b7c0
@ -110,7 +110,7 @@ def create():
|
|||||||
temperature_spinner.value = None
|
temperature_spinner.value = None
|
||||||
|
|
||||||
gamma, nu = calculate_pol(det_data, index)
|
gamma, nu = calculate_pol(det_data, index)
|
||||||
omega = np.ones((IMAGE_H, IMAGE_W)) * det_data["rot_angle"][index]
|
omega = np.ones((IMAGE_H, IMAGE_W)) * det_data["omega"][index]
|
||||||
image_source.data.update(gamma=[gamma], nu=[nu], omega=[omega])
|
image_source.data.update(gamma=[gamma], nu=[nu], omega=[omega])
|
||||||
|
|
||||||
def update_overview_plot():
|
def update_overview_plot():
|
||||||
@ -611,25 +611,25 @@ def calculate_hkl(det_data, index):
|
|||||||
|
|
||||||
wave = det_data["wave"]
|
wave = det_data["wave"]
|
||||||
ddist = det_data["ddist"]
|
ddist = det_data["ddist"]
|
||||||
gammad = det_data["pol_angle"][index]
|
gammad = det_data["gamma"][index]
|
||||||
om = det_data["rot_angle"][index]
|
om = det_data["omega"][index]
|
||||||
nud = det_data["tlt_angle"]
|
nud = det_data["nu"]
|
||||||
ub = det_data["UB"]
|
ub = det_data["UB"]
|
||||||
geometry = det_data["zebra_mode"]
|
geometry = det_data["zebra_mode"]
|
||||||
|
|
||||||
if geometry == "bisecting":
|
if geometry == "bisecting":
|
||||||
ch = det_data["chi_angle"][index]
|
chi = det_data["chi"][index]
|
||||||
ph = det_data["phi_angle"][index]
|
phi = det_data["phi"][index]
|
||||||
elif geometry == "normal beam":
|
elif geometry == "normal beam":
|
||||||
ch = 0
|
chi = 0
|
||||||
ph = 0
|
phi = 0
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown geometry type '{geometry}'")
|
raise ValueError(f"Unknown geometry type '{geometry}'")
|
||||||
|
|
||||||
for xi in np.arange(IMAGE_W):
|
for xi in np.arange(IMAGE_W):
|
||||||
for yi in np.arange(IMAGE_H):
|
for yi in np.arange(IMAGE_H):
|
||||||
h[yi, xi], k[yi, xi], l[yi, xi] = pyzebra.ang2hkl(
|
h[yi, xi], k[yi, xi], l[yi, xi] = pyzebra.ang2hkl(
|
||||||
wave, ddist, gammad, om, ch, ph, nud, ub, xi, yi
|
wave, ddist, gammad, om, chi, phi, nud, ub, xi, yi
|
||||||
)
|
)
|
||||||
|
|
||||||
return h, k, l
|
return h, k, l
|
||||||
@ -640,8 +640,8 @@ def calculate_pol(det_data, index):
|
|||||||
nu = np.empty(shape=(IMAGE_H, IMAGE_W))
|
nu = np.empty(shape=(IMAGE_H, IMAGE_W))
|
||||||
|
|
||||||
ddist = det_data["ddist"]
|
ddist = det_data["ddist"]
|
||||||
gammad = det_data["pol_angle"][index]
|
gammad = det_data["gamma"][index]
|
||||||
nud = det_data["tlt_angle"]
|
nud = det_data["nu"]
|
||||||
|
|
||||||
for xi in np.arange(IMAGE_W):
|
for xi in np.arange(IMAGE_W):
|
||||||
for yi in np.arange(IMAGE_H):
|
for yi in np.arange(IMAGE_H):
|
||||||
|
@ -183,11 +183,11 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
|
|||||||
wave = dat["wave"]
|
wave = dat["wave"]
|
||||||
ddist = dat["ddist"]
|
ddist = dat["ddist"]
|
||||||
|
|
||||||
pol_angle = dat["pol_angle"][0]
|
gamma = dat["gamma"][0]
|
||||||
rot_angle = dat["rot_angle"][0]
|
omega = dat["omega"][0]
|
||||||
tlt_angle = dat["tlt_angle"][0]
|
nu = dat["nu"][0]
|
||||||
chi_angle = dat["chi_angle"][0]
|
chi = dat["chi"][0]
|
||||||
phi_angle = dat["phi_angle"][0]
|
phi = dat["phi"][0]
|
||||||
|
|
||||||
var_angle = dat["variable"]
|
var_angle = dat["variable"]
|
||||||
var_angle_name = dat["variable_name"]
|
var_angle_name = dat["variable_name"]
|
||||||
@ -210,16 +210,16 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
|
|||||||
var_step = var_C - var_F
|
var_step = var_C - var_F
|
||||||
var_p = var_F + var_step * frStep
|
var_p = var_F + var_step * frStep
|
||||||
|
|
||||||
if var_angle_name == "pol_angle":
|
if var_angle_name == "gamma":
|
||||||
pol_angle = var_p
|
gamma = var_p
|
||||||
elif var_angle_name == "rot_angle":
|
elif var_angle_name == "omega":
|
||||||
rot_angle = var_p
|
omega = var_p
|
||||||
elif var_angle_name == "tlt_angle":
|
elif var_angle_name == "nu":
|
||||||
tlt_angle = var_p
|
nu = var_p
|
||||||
elif var_angle_name == "chi_angle":
|
elif var_angle_name == "chi":
|
||||||
chi_angle = var_p
|
chi = var_p
|
||||||
elif var_angle_name == "phi_angle":
|
elif var_angle_name == "phi":
|
||||||
phi_angle = var_p
|
phi = var_p
|
||||||
|
|
||||||
intensity = coeff[1] * abs(coeff[2] * var_step) * math.sqrt(2) * math.sqrt(np.pi)
|
intensity = coeff[1] * abs(coeff[2] * var_step) * math.sqrt(2) * math.sqrt(np.pi)
|
||||||
|
|
||||||
@ -231,8 +231,8 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
|
|||||||
coeff, _ = curve_fit(gauss, range(len(projY)), projY, p0=p0, maxfev=maxfev)
|
coeff, _ = curve_fit(gauss, range(len(projY)), projY, p0=p0, maxfev=maxfev)
|
||||||
y_pos = y0 + coeff[1]
|
y_pos = y0 + coeff[1]
|
||||||
|
|
||||||
ga, nu = pyzebra.det2pol(ddist, pol_angle, tlt_angle, x_pos, y_pos)
|
ga, nu = pyzebra.det2pol(ddist, gamma, nu, x_pos, y_pos)
|
||||||
diff_vector = pyzebra.z1frmd(wave, ga, rot_angle, chi_angle, phi_angle, nu)
|
diff_vector = pyzebra.z1frmd(wave, ga, omega, chi, phi, nu)
|
||||||
d_spacing = float(pyzebra.dandth(wave, diff_vector)[0])
|
d_spacing = float(pyzebra.dandth(wave, diff_vector)[0])
|
||||||
dv1, dv2, dv3 = diff_vector.flatten() * 1e10
|
dv1, dv2, dv3 = diff_vector.flatten() * 1e10
|
||||||
|
|
||||||
|
@ -66,18 +66,8 @@ CCL_FIRST_LINE = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
CCL_ANGLES = {
|
CCL_ANGLES = {
|
||||||
"bi": (
|
"bi": (("twotheta", float), ("omega", float), ("chi", float), ("phi", float)),
|
||||||
("twotheta_angle", float),
|
"nb": (("gamma", float), ("omega", float), ("nu", float), ("unkwn_angle", float)),
|
||||||
("omega_angle", float),
|
|
||||||
("chi_angle", float),
|
|
||||||
("phi_angle", float),
|
|
||||||
),
|
|
||||||
"nb": (
|
|
||||||
("gamma_angle", float),
|
|
||||||
("omega_angle", float),
|
|
||||||
("nu_angle", float),
|
|
||||||
("unkwn_angle", float),
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CCL_SECOND_LINE = (
|
CCL_SECOND_LINE = (
|
||||||
@ -122,6 +112,8 @@ def parse_1D(fileobj, data_type):
|
|||||||
variable = variable.strip()
|
variable = variable.strip()
|
||||||
value = value.strip()
|
value = value.strip()
|
||||||
if variable in META_VARS_FLOAT:
|
if variable in META_VARS_FLOAT:
|
||||||
|
if variable == "2-theta": # fix that angle name not to be an expression
|
||||||
|
variable = "twotheta"
|
||||||
metadata[variable] = float(value)
|
metadata[variable] = float(value)
|
||||||
elif variable in META_VARS_STR:
|
elif variable in META_VARS_STR:
|
||||||
metadata[variable] = value
|
metadata[variable] = value
|
||||||
@ -151,8 +143,8 @@ def parse_1D(fileobj, data_type):
|
|||||||
s[param_name] = param_type(param)
|
s[param_name] = param_type(param)
|
||||||
|
|
||||||
s["om"] = np.linspace(
|
s["om"] = np.linspace(
|
||||||
s["omega_angle"] - (s["n_points"] / 2) * s["angle_step"],
|
s["omega"] - (s["n_points"] / 2) * s["angle_step"],
|
||||||
s["omega_angle"] + (s["n_points"] / 2) * s["angle_step"],
|
s["omega"] + (s["n_points"] / 2) * s["angle_step"],
|
||||||
s["n_points"],
|
s["n_points"],
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -194,13 +186,13 @@ def parse_1D(fileobj, data_type):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
print("Mag_field not present in dat file")
|
print("Mag_field not present in dat file")
|
||||||
|
|
||||||
s["omega_angle"] = metadata["omega"]
|
s["omega"] = metadata["omega"]
|
||||||
s["n_points"] = len(s["om"])
|
s["n_points"] = len(s["om"])
|
||||||
s["monitor"] = s["Monitor1"][0]
|
s["monitor"] = s["Monitor1"][0]
|
||||||
s["twotheta_angle"] = metadata["2-theta"]
|
s["twotheta"] = metadata["twotheta"]
|
||||||
s["chi_angle"] = metadata["chi"]
|
s["chi"] = metadata["chi"]
|
||||||
s["phi_angle"] = metadata["phi"]
|
s["phi"] = metadata["phi"]
|
||||||
s["nu_angle"] = metadata["nu"]
|
s["nu"] = metadata["nu"]
|
||||||
|
|
||||||
s["idx"] = 1
|
s["idx"] = 1
|
||||||
scan.append(dict(s))
|
scan.append(dict(s))
|
||||||
@ -249,12 +241,12 @@ def export_1D(data, path, area_method=AREA_METHODS[0], lorentz=False, hkl_precis
|
|||||||
# apply lorentz correction to area
|
# apply lorentz correction to area
|
||||||
if lorentz:
|
if lorentz:
|
||||||
if zebra_mode == "bi":
|
if zebra_mode == "bi":
|
||||||
twotheta_angle = np.deg2rad(scan["twotheta_angle"])
|
twotheta = np.deg2rad(scan["twotheta"])
|
||||||
corr_factor = np.sin(twotheta_angle)
|
corr_factor = np.sin(twotheta)
|
||||||
else: # zebra_mode == "nb":
|
else: # zebra_mode == "nb":
|
||||||
gamma_angle = np.deg2rad(scan["gamma_angle"])
|
gamma = np.deg2rad(scan["gamma"])
|
||||||
nu_angle = np.deg2rad(scan["nu_angle"])
|
nu = np.deg2rad(scan["nu"])
|
||||||
corr_factor = np.sin(gamma_angle) * np.cos(nu_angle)
|
corr_factor = np.sin(gamma) * np.cos(nu)
|
||||||
|
|
||||||
area_n = np.abs(area_n * corr_factor)
|
area_n = np.abs(area_n * corr_factor)
|
||||||
area_s = np.abs(area_s * corr_factor)
|
area_s = np.abs(area_s * corr_factor)
|
||||||
|
@ -41,7 +41,7 @@ def read_detector_data(filepath):
|
|||||||
filepath (str): File path of an h5 file.
|
filepath (str): File path of an h5 file.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
ndarray: A 3D array of data, rot_angle, pol_angle, tilt_angle.
|
ndarray: A 3D array of data, omega, gamma, nu.
|
||||||
"""
|
"""
|
||||||
with h5py.File(filepath, "r") as h5f:
|
with h5py.File(filepath, "r") as h5f:
|
||||||
data = h5f["/entry1/area_detector2/data"][:]
|
data = h5f["/entry1/area_detector2/data"][:]
|
||||||
@ -63,19 +63,19 @@ def read_detector_data(filepath):
|
|||||||
|
|
||||||
# om, sometimes ph
|
# om, sometimes ph
|
||||||
if det_data["zebra_mode"] == "nb":
|
if det_data["zebra_mode"] == "nb":
|
||||||
det_data["rot_angle"] = h5f["/entry1/area_detector2/rotation_angle"][:]
|
det_data["omega"] = h5f["/entry1/area_detector2/rotation_angle"][:]
|
||||||
else: # bi
|
else: # bi
|
||||||
det_data["rot_angle"] = h5f["/entry1/sample/rotation_angle"][:]
|
det_data["omega"] = h5f["/entry1/sample/rotation_angle"][:]
|
||||||
|
|
||||||
det_data["pol_angle"] = h5f["/entry1/ZEBRA/area_detector2/polar_angle"][:] # gammad
|
det_data["gamma"] = h5f["/entry1/ZEBRA/area_detector2/polar_angle"][:] # gammad
|
||||||
det_data["tlt_angle"] = h5f["/entry1/ZEBRA/area_detector2/tilt_angle"][:] # nud
|
det_data["nu"] = h5f["/entry1/ZEBRA/area_detector2/tilt_angle"][:] # nud
|
||||||
det_data["ddist"] = h5f["/entry1/ZEBRA/area_detector2/distance"][:]
|
det_data["ddist"] = h5f["/entry1/ZEBRA/area_detector2/distance"][:]
|
||||||
det_data["wave"] = h5f["/entry1/ZEBRA/monochromator/wavelength"][:]
|
det_data["wave"] = h5f["/entry1/ZEBRA/monochromator/wavelength"][:]
|
||||||
det_data["chi_angle"] = h5f["/entry1/sample/chi"][:] # ch
|
det_data["chi"] = h5f["/entry1/sample/chi"][:] # ch
|
||||||
det_data["phi_angle"] = h5f["/entry1/sample/phi"][:] # ph
|
det_data["phi"] = h5f["/entry1/sample/phi"][:] # ph
|
||||||
det_data["UB"] = h5f["/entry1/sample/UB"][:].reshape(3, 3)
|
det_data["UB"] = h5f["/entry1/sample/UB"][:].reshape(3, 3)
|
||||||
|
|
||||||
for var in ("rot_angle", "pol_angle", "tlt_angle", "chi_angle", "phi_angle"):
|
for var in ("omega", "gamma", "nu", "chi", "phi"):
|
||||||
if abs(det_data[var][0] - det_data[var][-1]) > 0.1:
|
if abs(det_data[var][0] - det_data[var][-1]) > 0.1:
|
||||||
det_data["variable"] = det_data[var]
|
det_data["variable"] = det_data[var]
|
||||||
det_data["variable_name"] = var
|
det_data["variable_name"] = var
|
||||||
|
@ -35,7 +35,6 @@ def merge(scan1, scan2):
|
|||||||
note: dict1 and dict2 can be same dict
|
note: dict1 and dict2 can be same dict
|
||||||
:return dict1 with merged scan"""
|
:return dict1 with merged scan"""
|
||||||
|
|
||||||
|
|
||||||
# load om and Counts
|
# load om and Counts
|
||||||
x1, x2 = scan1["om"], scan2["om"]
|
x1, x2 = scan1["om"], scan2["om"]
|
||||||
# print(scan1["om"])
|
# print(scan1["om"])
|
||||||
@ -134,7 +133,6 @@ def check_temp_mag(scan1, scan2):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
print("temperature missing")
|
print("temperature missing")
|
||||||
|
|
||||||
|
|
||||||
if all(truth_list):
|
if all(truth_list):
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
@ -147,17 +145,17 @@ def merge_dups(dictionary):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if dictionary["meta"]["zebra_mode"] == "bi":
|
if dictionary["meta"]["zebra_mode"] == "bi":
|
||||||
angles = ["twotheta_angle", "omega_angle", "chi_angle", "phi_angle"]
|
angles = ["twotheta", "omega", "chi", "phi"]
|
||||||
elif dictionary["meta"]["zebra_mode"] == "nb":
|
elif dictionary["meta"]["zebra_mode"] == "nb":
|
||||||
angles = ["gamma_angle", "omega_angle", "nu_angle"]
|
angles = ["gamma", "omega", "nu"]
|
||||||
|
|
||||||
precision = {
|
precision = {
|
||||||
"twotheta_angle": 0.1,
|
"twotheta": 0.1,
|
||||||
"chi_angle": 0.1,
|
"chi": 0.1,
|
||||||
"nu_angle": 0.1,
|
"nu": 0.1,
|
||||||
"phi_angle": 0.05,
|
"phi": 0.05,
|
||||||
"omega_angle": 5,
|
"omega": 5,
|
||||||
"gamma_angle": 0.05,
|
"gamma": 0.05,
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in range(len(dictionary["scan"])):
|
for i in range(len(dictionary["scan"])):
|
||||||
@ -166,8 +164,9 @@ def merge_dups(dictionary):
|
|||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
# print(i, j)
|
# print(i, j)
|
||||||
if check_angles(dictionary["scan"][i], dictionary["scan"][j], angles, precision) \
|
if check_angles(
|
||||||
and check_temp_mag(dictionary["scan"][i], dictionary["scan"][j]):
|
dictionary["scan"][i], dictionary["scan"][j], angles, precision
|
||||||
|
) and check_temp_mag(dictionary["scan"][i], dictionary["scan"][j]):
|
||||||
merge(dictionary["scan"][i], dictionary["scan"][j])
|
merge(dictionary["scan"][i], dictionary["scan"][j])
|
||||||
print("merged %d with %d within the dictionary" % (i, j))
|
print("merged %d with %d within the dictionary" % (i, j))
|
||||||
|
|
||||||
@ -240,22 +239,21 @@ def unified_merge(dict1, dict2):
|
|||||||
|
|
||||||
# decide angles
|
# decide angles
|
||||||
if dict1["meta"]["zebra_mode"] == "bi":
|
if dict1["meta"]["zebra_mode"] == "bi":
|
||||||
angles = ["twotheta_angle", "omega_angle", "chi_angle", "phi_angle"]
|
angles = ["twotheta", "omega", "chi", "phi"]
|
||||||
elif dict1["meta"]["zebra_mode"] == "nb":
|
elif dict1["meta"]["zebra_mode"] == "nb":
|
||||||
angles = ["gamma_angle", "omega_angle", "nu_angle"]
|
angles = ["gamma", "omega", "nu"]
|
||||||
|
|
||||||
# precision of angles to check
|
# precision of angles to check
|
||||||
precision = {
|
precision = {
|
||||||
"twotheta_angle": 0.1,
|
"twotheta": 0.1,
|
||||||
"chi_angle": 0.1,
|
"chi": 0.1,
|
||||||
"nu_angle": 0.1,
|
"nu": 0.1,
|
||||||
"phi_angle": 0.05,
|
"phi": 0.05,
|
||||||
"omega_angle": 5,
|
"omega": 5,
|
||||||
"gamma_angle": 0.1,
|
"gamma": 0.1,
|
||||||
}
|
}
|
||||||
if (dict1["meta"]["data_type"] == "ccl") and (dict2["meta"]["data_type"] == "ccl"):
|
if (dict1["meta"]["data_type"] == "ccl") and (dict2["meta"]["data_type"] == "ccl"):
|
||||||
precision["omega_angle"] = 0.05
|
precision["omega"] = 0.05
|
||||||
|
|
||||||
|
|
||||||
process(dict1, dict2, angles, precision)
|
process(dict1, dict2, angles, precision)
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import collections
|
|||||||
|
|
||||||
from .ccl_io import load_1D
|
from .ccl_io import load_1D
|
||||||
|
|
||||||
|
|
||||||
def create_tuples(x, y, y_err):
|
def create_tuples(x, y, y_err):
|
||||||
"""creates tuples for sorting and merginng of the data
|
"""creates tuples for sorting and merginng of the data
|
||||||
Counts need to be normalized to monitor before"""
|
Counts need to be normalized to monitor before"""
|
||||||
@ -344,9 +345,9 @@ def scan_dict(dict, precision=0.5):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if dict["meta"]["zebra_mode"] == "bi":
|
if dict["meta"]["zebra_mode"] == "bi":
|
||||||
angles = ["twotheta_angle", "omega_angle", "chi_angle", "phi_angle"]
|
angles = ["twotheta", "omega", "chi", "phi"]
|
||||||
elif dict["meta"]["zebra_mode"] == "nb":
|
elif dict["meta"]["zebra_mode"] == "nb":
|
||||||
angles = ["gamma_angle", "omega_angle", "nu_angle"]
|
angles = ["gamma", "omega", "nu"]
|
||||||
else:
|
else:
|
||||||
print("Unknown zebra mode")
|
print("Unknown zebra mode")
|
||||||
return
|
return
|
||||||
@ -421,11 +422,11 @@ def variables(dictionary):
|
|||||||
"n_points",
|
"n_points",
|
||||||
"monitor",
|
"monitor",
|
||||||
"Time",
|
"Time",
|
||||||
"omega_angle",
|
"omega",
|
||||||
"twotheta_angle",
|
"twotheta",
|
||||||
"chi_angle",
|
"chi",
|
||||||
"phi_angle",
|
"phi",
|
||||||
"nu_angle",
|
"nu",
|
||||||
]
|
]
|
||||||
inall_red = [i for i in inall if i not in wrong]
|
inall_red = [i for i in inall if i not in wrong]
|
||||||
|
|
||||||
|
@ -407,24 +407,24 @@ def box_int(file, box):
|
|||||||
|
|
||||||
dat = pyzebra.read_detector_data(file)
|
dat = pyzebra.read_detector_data(file)
|
||||||
|
|
||||||
sttC = dat["pol_angle"][0]
|
sttC = dat["gamma"][0]
|
||||||
om = dat["rot_angle"]
|
om = dat["omega"]
|
||||||
nuC = dat["tlt_angle"][0]
|
nuC = dat["nu"][0]
|
||||||
ddist = dat["ddist"]
|
ddist = dat["ddist"]
|
||||||
|
|
||||||
# defining indices
|
# defining indices
|
||||||
x0, xN, y0, yN, fr0, frN = box
|
x0, xN, y0, yN, fr0, frN = box
|
||||||
|
|
||||||
# omega fit
|
# omega fit
|
||||||
om = dat["rot_angle"][fr0:frN]
|
om = dat["omega"][fr0:frN]
|
||||||
cnts = np.sum(dat["data"][fr0:frN, y0:yN, x0:xN], axis=(1, 2))
|
cnts = np.sum(dat["data"][fr0:frN, y0:yN, x0:xN], axis=(1, 2))
|
||||||
|
|
||||||
p0 = [1.0, 0.0, 1.0]
|
p0 = [1.0, 0.0, 1.0]
|
||||||
coeff, var_matrix = curve_fit(gauss, range(len(cnts)), cnts, p0=p0)
|
coeff, var_matrix = curve_fit(gauss, range(len(cnts)), cnts, p0=p0)
|
||||||
|
|
||||||
frC = fr0 + coeff[1]
|
frC = fr0 + coeff[1]
|
||||||
omF = dat["rot_angle"][math.floor(frC)]
|
omF = dat["omega"][math.floor(frC)]
|
||||||
omC = dat["rot_angle"][math.ceil(frC)]
|
omC = dat["omega"][math.ceil(frC)]
|
||||||
frStep = frC - math.floor(frC)
|
frStep = frC - math.floor(frC)
|
||||||
omStep = omC - omF
|
omStep = omC - omF
|
||||||
omP = omF + omStep * frStep
|
omP = omF + omStep * frStep
|
||||||
|
Loading…
x
Reference in New Issue
Block a user