Cleanup, import sort, formatting
This commit is contained in:
parent
6886279884
commit
0777d73566
@ -1,8 +1,8 @@
|
|||||||
from pyzebra.anatric import *
|
|
||||||
from pyzebra.h5 import *
|
|
||||||
from pyzebra.xtal import *
|
|
||||||
from pyzebra.load_1D import load_1D, parse_1D
|
|
||||||
from pyzebra.ccl_findpeaks import ccl_findpeaks
|
|
||||||
from pyzebra.fit2 import fitccl
|
|
||||||
from pyzebra.comm_export import export_comm
|
|
||||||
import pyzebra.ccl_dict_operation
|
import pyzebra.ccl_dict_operation
|
||||||
|
from pyzebra.anatric import *
|
||||||
|
from pyzebra.ccl_findpeaks import ccl_findpeaks
|
||||||
|
from pyzebra.comm_export import export_comm
|
||||||
|
from pyzebra.fit2 import fitccl
|
||||||
|
from pyzebra.h5 import *
|
||||||
|
from pyzebra.load_1D import load_1D, parse_1D
|
||||||
|
from pyzebra.xtal import *
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
import pickle
|
|
||||||
|
|
||||||
|
|
||||||
def save_dict(obj, name):
|
|
||||||
""" saves dictionary as pickle file in binary format
|
|
||||||
:arg obj - object to save
|
|
||||||
:arg name - name of the file
|
|
||||||
NOTE: path should be added later"""
|
|
||||||
with open(name + '.pkl', 'wb') as f:
|
|
||||||
pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)
|
|
||||||
|
|
||||||
|
|
||||||
def load_dict(name):
|
|
||||||
"""load dictionary from picle file
|
|
||||||
:arg name - name of the file to load
|
|
||||||
NOTE: expect the file in the same folder, path should be added later
|
|
||||||
:return dictionary"""
|
|
||||||
with open(name + '.pkl', 'rb') as f:
|
|
||||||
return pickle.load(f)
|
|
@ -1,5 +1,6 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import uncertainties as u
|
import uncertainties as u
|
||||||
|
|
||||||
from .fit2 import create_uncertanities
|
from .fit2 import create_uncertanities
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
import uncertainties as u
|
||||||
from lmfit import Model, Parameters
|
from lmfit import Model, Parameters
|
||||||
from scipy.integrate import simps
|
from scipy.integrate import simps
|
||||||
import uncertainties as u
|
|
||||||
|
|
||||||
def bin_data(array, binsize):
|
def bin_data(array, binsize):
|
||||||
if isinstance(binsize, int) and 0 < binsize < len(array):
|
if isinstance(binsize, int) and 0 < binsize < len(array):
|
||||||
return [np.mean(array[binsize * i:binsize * i + binsize]) for i in range(int(
|
return [
|
||||||
np.ceil(len(array) / binsize)))]
|
np.mean(array[binsize * i : binsize * i + binsize])
|
||||||
|
for i in range(int(np.ceil(len(array) / binsize)))
|
||||||
|
]
|
||||||
else:
|
else:
|
||||||
print("Binsize need to be positive integer smaller than lenght of array")
|
print("Binsize need to be positive integer smaller than lenght of array")
|
||||||
return array
|
return array
|
||||||
|
|
||||||
|
|
||||||
def find_nearest(array, value):
|
def find_nearest(array, value):
|
||||||
# find nearest value and return index
|
# find nearest value and return index
|
||||||
array = np.asarray(array)
|
array = np.asarray(array)
|
||||||
@ -36,7 +40,7 @@ def fitccl(
|
|||||||
constraints_max,
|
constraints_max,
|
||||||
numfit_min=None,
|
numfit_min=None,
|
||||||
numfit_max=None,
|
numfit_max=None,
|
||||||
binning=None
|
binning=None,
|
||||||
):
|
):
|
||||||
"""Made for fitting of ccl date where 1 peak is expected. Allows for combination of gaussian and linear model combination
|
"""Made for fitting of ccl date where 1 peak is expected. Allows for combination of gaussian and linear model combination
|
||||||
:param data: dictionary after peak fining
|
:param data: dictionary after peak fining
|
||||||
@ -75,17 +79,16 @@ def fitccl(
|
|||||||
x = bin_data(x, binning)
|
x = bin_data(x, binning)
|
||||||
y = list(meas["Counts"])
|
y = list(meas["Counts"])
|
||||||
y_err = list(np.sqrt(y)) if meas.get("sigma", None) is None else list(meas["sigma"])
|
y_err = list(np.sqrt(y)) if meas.get("sigma", None) is None else list(meas["sigma"])
|
||||||
combined = bin_data(create_uncertanities(y,y_err), binning)
|
combined = bin_data(create_uncertanities(y, y_err), binning)
|
||||||
y = [combined[i].n for i in range(len(combined))]
|
y = [combined[i].n for i in range(len(combined))]
|
||||||
y_err = [combined[i].s for i in range(len(combined))]
|
y_err = [combined[i].s for i in range(len(combined))]
|
||||||
|
|
||||||
|
|
||||||
if len(meas["peak_indexes"]) == 0:
|
if len(meas["peak_indexes"]) == 0:
|
||||||
# Case for no peak, gaussian in centre, sigma as 20% of range
|
# Case for no peak, gaussian in centre, sigma as 20% of range
|
||||||
print("No peak")
|
print("No peak")
|
||||||
peak_index = find_nearest(x, np.mean(x))
|
peak_index = find_nearest(x, np.mean(x))
|
||||||
guess[0] = x[int(peak_index)] if guess[0] is None else guess[0]
|
guess[0] = x[int(peak_index)] if guess[0] is None else guess[0]
|
||||||
guess[1] = (x[-1] - x[0])/5 if guess[1] is None else guess[1]
|
guess[1] = (x[-1] - x[0]) / 5 if guess[1] is None else guess[1]
|
||||||
guess[2] = 50 if guess[2] is None else guess[2]
|
guess[2] = 50 if guess[2] is None else guess[2]
|
||||||
guess[3] = 0 if guess[3] is None else guess[3]
|
guess[3] = 0 if guess[3] is None else guess[3]
|
||||||
guess[4] = np.mean(y) if guess[4] is None else guess[4]
|
guess[4] = np.mean(y) if guess[4] is None else guess[4]
|
||||||
@ -103,8 +106,6 @@ def fitccl(
|
|||||||
constraints_min[0] = np.min(x) if constraints_min[0] is None else constraints_min[0]
|
constraints_min[0] = np.min(x) if constraints_min[0] is None else constraints_min[0]
|
||||||
constraints_max[0] = np.max(x) if constraints_max[0] is None else constraints_max[0]
|
constraints_max[0] = np.max(x) if constraints_max[0] is None else constraints_max[0]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def gaussian(x, g_cen, g_width, g_amp):
|
def gaussian(x, g_cen, g_width, g_amp):
|
||||||
"""1-d gaussian: gaussian(x, amp, cen, wid)"""
|
"""1-d gaussian: gaussian(x, amp, cen, wid)"""
|
||||||
return (g_amp / (np.sqrt(2 * np.pi) * g_width)) * np.exp(
|
return (g_amp / (np.sqrt(2 * np.pi) * g_width)) * np.exp(
|
||||||
@ -119,45 +120,15 @@ def fitccl(
|
|||||||
params = Parameters()
|
params = Parameters()
|
||||||
params.add_many(
|
params.add_many(
|
||||||
("g_cen", x[int(peak_index)], bool(vary[0]), np.min(x), np.max(x), None, None),
|
("g_cen", x[int(peak_index)], bool(vary[0]), np.min(x), np.max(x), None, None),
|
||||||
(
|
("g_width", guess[1], bool(vary[1]), constraints_min[1], constraints_max[1], None, None,),
|
||||||
"g_width",
|
("g_amp", guess[2], bool(vary[2]), constraints_min[2], constraints_max[2], None, None,),
|
||||||
guess[1],
|
("slope", guess[3], bool(vary[3]), constraints_min[3], constraints_max[3], None, None,),
|
||||||
bool(vary[1]),
|
("intercept", guess[4], bool(vary[4]), constraints_min[4], constraints_max[4], None, None,),
|
||||||
constraints_min[1],
|
|
||||||
constraints_max[1],
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"g_amp",
|
|
||||||
guess[2],
|
|
||||||
bool(vary[2]),
|
|
||||||
constraints_min[2],
|
|
||||||
constraints_max[2],
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"slope",
|
|
||||||
guess[3],
|
|
||||||
bool(vary[3]),
|
|
||||||
constraints_min[3],
|
|
||||||
constraints_max[3],
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"intercept",
|
|
||||||
guess[4],
|
|
||||||
bool(vary[4]),
|
|
||||||
constraints_min[4],
|
|
||||||
constraints_max[4],
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
# the weighted fit
|
# the weighted fit
|
||||||
result = mod.fit(y, params, weights=[np.abs(1/y_err[i]) for i in range(len(y_err))], x=x, calc_covar=True)
|
result = mod.fit(
|
||||||
|
y, params, weights=[np.abs(1 / y_err[i]) for i in range(len(y_err))], x=x, calc_covar=True
|
||||||
|
)
|
||||||
# u.ufloat to work with uncertanities
|
# u.ufloat to work with uncertanities
|
||||||
fit_area = u.ufloat(result.params["g_amp"].value, result.params["g_amp"].stderr)
|
fit_area = u.ufloat(result.params["g_amp"].value, result.params["g_amp"].stderr)
|
||||||
comps = result.eval_components()
|
comps = result.eval_components()
|
||||||
@ -183,7 +154,8 @@ def fitccl(
|
|||||||
|
|
||||||
it = -1
|
it = -1
|
||||||
while abs(numfit_max - numfit_min) < 3:
|
while abs(numfit_max - numfit_min) < 3:
|
||||||
# in the case the peak is very thin and numerical integration would be on zero omega difference, finds closes values
|
# in the case the peak is very thin and numerical integration would be on zero omega
|
||||||
|
# difference, finds closes values
|
||||||
it = it + 1
|
it = it + 1
|
||||||
numfit_min = find_nearest(
|
numfit_min = find_nearest(
|
||||||
x,
|
x,
|
||||||
|
@ -22,7 +22,7 @@ def parse_h5meta(file):
|
|||||||
for line in file:
|
for line in file:
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if line.startswith("#begin "):
|
if line.startswith("#begin "):
|
||||||
section = line[len("#begin "):]
|
section = line[len("#begin ") :]
|
||||||
content[section] = []
|
content[section] = []
|
||||||
|
|
||||||
elif line.startswith("#end"):
|
elif line.startswith("#end"):
|
||||||
@ -64,20 +64,3 @@ def read_detector_data(filepath):
|
|||||||
det_data["temperature"] = h5f["/entry1/sample/temperature"][:]
|
det_data["temperature"] = h5f["/entry1/sample/temperature"][:]
|
||||||
|
|
||||||
return det_data
|
return det_data
|
||||||
|
|
||||||
|
|
||||||
def open_h5meta(filepath):
|
|
||||||
"""Open h5meta file like *.cami
|
|
||||||
|
|
||||||
Args:
|
|
||||||
filepath (str): File path of a h5meta file.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
dict: A dictionary with h5 names and their detector data and angles.
|
|
||||||
"""
|
|
||||||
data = dict()
|
|
||||||
h5meta_content = read_h5meta(filepath)
|
|
||||||
for file in h5meta_content["filelist"]:
|
|
||||||
data[file] = read_detector_data(file)
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
@ -97,7 +97,7 @@ def parse_1D(fileobj, data_type):
|
|||||||
|
|
||||||
# read data
|
# read data
|
||||||
if data_type == ".ccl":
|
if data_type == ".ccl":
|
||||||
metadata['data_type'] = data_type
|
metadata["data_type"] = data_type
|
||||||
measurements = {}
|
measurements = {}
|
||||||
decimal = list()
|
decimal = list()
|
||||||
data = fileobj.readlines()
|
data = fileobj.readlines()
|
||||||
@ -162,7 +162,7 @@ def parse_1D(fileobj, data_type):
|
|||||||
|
|
||||||
elif data_type == ".dat":
|
elif data_type == ".dat":
|
||||||
# skip the first 2 rows, the third row contans the column names
|
# skip the first 2 rows, the third row contans the column names
|
||||||
metadata['data_type'] = data_type
|
metadata["data_type"] = data_type
|
||||||
next(fileobj)
|
next(fileobj)
|
||||||
next(fileobj)
|
next(fileobj)
|
||||||
col_names = next(fileobj).split()
|
col_names = next(fileobj).split()
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
from load_1Dnn import load_1D
|
|
||||||
from ccl_dict_operation import add_dict
|
|
||||||
import pandas as pd
|
|
||||||
from mpl_toolkits.mplot3d import Axes3D # dont delete, otherwise waterfall wont work
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
import matplotlib as mpl
|
import matplotlib as mpl
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
from load_1Dnn import load_1D
|
||||||
|
from mpl_toolkits.mplot3d import Axes3D # dont delete, otherwise waterfall wont work
|
||||||
|
|
||||||
|
from ccl_dict_operation import add_dict
|
||||||
|
|
||||||
|
|
||||||
def load_dats(filepath):
|
def load_dats(filepath):
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
plt.figure(figsize=(20, 10))
|
|
||||||
plt.plot(x, y, "b-", label="Original data")
|
|
||||||
plt.plot(x, comps["gaussian"], "r--", label="Gaussian component")
|
|
||||||
plt.fill_between(x, comps["gaussian"], facecolor="red", alpha=0.4)
|
|
||||||
plt.plot(x, comps["background"], "g--", label="Line component")
|
|
||||||
plt.fill_between(x, comps["background"], facecolor="green", alpha=0.4)
|
|
||||||
|
|
||||||
plt.fill_between(
|
|
||||||
x[numfit_min:numfit_max],
|
|
||||||
y[numfit_min:numfit_max],
|
|
||||||
facecolor="yellow",
|
|
||||||
alpha=0.4,
|
|
||||||
label="Integrated area", )
|
|
||||||
|
|
||||||
plt.plot(x, result.best_fit, "k-", label="Best fit")
|
|
||||||
plt.title(
|
|
||||||
"%s \n Gaussian: centre = %9.4f, sigma = %9.4f, area = %9.4f \n"
|
|
||||||
"background: slope = %9.4f, intercept = %9.4f \n"
|
|
||||||
"Int. area = %9.4f +/- %9.4f \n"
|
|
||||||
"fit area = %9.4f +/- %9.4f \n"
|
|
||||||
"ratio((fit-int)/fit) = %9.4f"
|
|
||||||
% (
|
|
||||||
keys,
|
|
||||||
result.params["g_cen"].value,
|
|
||||||
result.params["g_width"].value,
|
|
||||||
result.params["g_amp"].value,
|
|
||||||
result.params["slope"].value,
|
|
||||||
result.params["intercept"].value,
|
|
||||||
int_area.n,
|
|
||||||
int_area.s,
|
|
||||||
result.params["g_amp"].value,
|
|
||||||
result.params["g_amp"].stderr,
|
|
||||||
(result.params["g_amp"].value - int_area.n) / result.params["g_amp"].value
|
|
||||||
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
plt.legend(loc="best")
|
|
||||||
plt.show()
|
|
Loading…
x
Reference in New Issue
Block a user