fix fitting
factor in peak index + shift while graphing, only fit relevant data (peak & afterward), fix default A and Tau values to use tick scale, NOT timemaster
parent
d8b0b6d0fd
commit
04b549d106
2
app.py
2
app.py
|
@ -94,6 +94,7 @@ class AppWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
|||
self.spin_end_time.setDisabled(True)
|
||||
self.check_custom_end.stateChanged.connect(set_end_time)
|
||||
|
||||
|
||||
# Sync up peak detection settings between input locations
|
||||
self.spin_min_peakheight.valueChanged.connect(lambda x: self.spin_min_peakheight_2.setValue(x))
|
||||
self.spin_min_peakheight_2.valueChanged.connect(lambda x: self.spin_min_peakheight.setValue(x))
|
||||
|
@ -202,6 +203,7 @@ class AppWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
|||
self.spin_shift_over_fit.value(),
|
||||
self.check_advanced_peak_detection.isChecked()
|
||||
)
|
||||
mem['shift_over_fit'] = self.spin_shift_over_fit.value()
|
||||
# print(mem['fit_equations'])
|
||||
self.peak_fit_viewer.plot()
|
||||
self.graph_tabs.setCurrentIndex(4)
|
||||
|
|
36
crds_calc.py
36
crds_calc.py
|
@ -267,8 +267,6 @@ def fit_peaks(
|
|||
use_advanced: bool
|
||||
):
|
||||
|
||||
print(f'{use_advanced=}')
|
||||
|
||||
"""
|
||||
Returns
|
||||
-------
|
||||
|
@ -277,8 +275,10 @@ def fit_peaks(
|
|||
|
||||
params_guess = (0.0000, a, y0, tau)
|
||||
equations = []
|
||||
overlayed_peak_indices = []
|
||||
for peaks_cut in isolated_peaks:
|
||||
row = []
|
||||
equation_row = []
|
||||
overlayed_peak_row = []
|
||||
for peak_data in peaks_cut:
|
||||
x_data = np.arange(len(peak_data)) # just placeholder indices
|
||||
if not use_advanced:
|
||||
|
@ -291,7 +291,31 @@ def fit_peaks(
|
|||
peak_data_target = peak_data[peak_index+shift_over:]
|
||||
# popt, pcov = curve_fit(exp_func, x_data_target, peak_data_target, bounds=([-np.inf, 0.0, -np.inf, 0.0], np.inf))
|
||||
popt, pcov = curve_fit(exp_func, x_data_target, peak_data_target, bounds=([-np.inf, 0.0, -np.inf, 0.0], np.inf), p0=params_guess, maxfev=10000000)
|
||||
row.append({'popt': popt, 'pcov': pcov})
|
||||
equations.append(row)
|
||||
equation_row.append({'popt': popt, 'pcov': pcov})
|
||||
overlayed_peak_row.append(peak_index)
|
||||
equations.append(equation_row)
|
||||
overlayed_peak_indices.append(overlayed_peak_row)
|
||||
mem['overlayed_peak_indices'] = overlayed_peak_indices
|
||||
|
||||
return equations # list linked with isolated_peaks
|
||||
return equations # list linked with isolated_peaks
|
||||
|
||||
|
||||
def get_tau_data(equation_data):
|
||||
"""
|
||||
Extracts time constant from all equations (2d array)
|
||||
|
||||
Returns
|
||||
-------
|
||||
|
||||
Tau data in same dimensions as `equation_data`
|
||||
"""
|
||||
|
||||
tau_data = []
|
||||
for r in equation_data:
|
||||
row = []
|
||||
for e in r:
|
||||
tau = e['popt'][3]
|
||||
row.append(tau)
|
||||
equation_data.append(row)
|
||||
|
||||
return tau_data
|
||||
|
|
|
@ -39,9 +39,9 @@
|
|||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<y>-158</y>
|
||||
<width>261</width>
|
||||
<height>812</height>
|
||||
<height>818</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
|
@ -141,8 +141,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>221</width>
|
||||
<height>108</height>
|
||||
<width>222</width>
|
||||
<height>101</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
|
@ -268,8 +268,8 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>160</y>
|
||||
<width>230</width>
|
||||
<height>52</height>
|
||||
<width>235</width>
|
||||
<height>53</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_5">
|
||||
|
@ -371,7 +371,7 @@
|
|||
<x>9</x>
|
||||
<y>20</y>
|
||||
<width>221</width>
|
||||
<height>108</height>
|
||||
<height>111</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
|
@ -531,7 +531,7 @@
|
|||
<x>10</x>
|
||||
<y>90</y>
|
||||
<width>221</width>
|
||||
<height>106</height>
|
||||
<height>111</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
|
@ -542,19 +542,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QDoubleSpinBox" name="spin_var_tau">
|
||||
<property name="suffix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.000002000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_13">
|
||||
<property name="text">
|
||||
|
@ -582,7 +569,7 @@
|
|||
<number>6</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000500000000000</double>
|
||||
<double>0.000500000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -603,6 +590,16 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QSpinBox" name="spin_var_tau">
|
||||
<property name="maximum">
|
||||
<number>10000</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>150</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGraphicsView" name="equation_view">
|
||||
|
@ -641,8 +638,8 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>260</y>
|
||||
<width>221</width>
|
||||
<height>81</height>
|
||||
<width>222</width>
|
||||
<height>82</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_6">
|
||||
|
@ -833,7 +830,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>279</width>
|
||||
<height>641</height>
|
||||
<height>633</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
|
|
|
@ -103,9 +103,10 @@ class FitGraph(BaseGraph):
|
|||
for g_i in range(len(mem['isolated_peaks'])):
|
||||
peak = mem['isolated_peaks'][g_i][self.peak_index]
|
||||
x_data = np.arange(len(peak))
|
||||
x_data_target = x_data[mem['overlayed_peak_indices'][g_i][self.peak_index]+mem['shift_over_fit']:]
|
||||
popt = mem['fit_equations'][g_i][self.peak_index]['popt']
|
||||
self.canv.axes.plot(peak)
|
||||
self.canv.axes.plot(x_data, exp_func(x_data, *popt), color='red')
|
||||
self.canv.axes.plot(x_data_target, exp_func(x_data_target, *popt), color='red')
|
||||
|
||||
class FitsGraphViewer(QtWidgets.QTabWidget):
|
||||
def __init__(self, x):
|
||||
|
|
Loading…
Reference in New Issue