Skip to content

Commit 2765531

Browse files
committed
added multi-result aggregation
1 parent 868d921 commit 2765531

4 files changed

Lines changed: 23 additions & 0 deletions

File tree

EasyReflectometryApp/Backends/Mock/Analysis.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ QtObject {
2525
readonly property string fitErrorMessage: ''
2626
readonly property int fitNumRefinedParams: 3
2727
readonly property real fitChi2: 1.2345
28+
readonly property var fitResults: ({ success: true, nvarys: 3, chi2: 1.2345 })
2829

2930
// Fit failure signal (mirrors Python backend)
3031
signal fitFailed(string message)

EasyReflectometryApp/Backends/Py/analysis.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,15 @@ def fitNumRefinedParams(self) -> int:
9898
def fitChi2(self) -> float:
9999
return self._fitting_logic.fit_chi2
100100

101+
@Property('QVariant', notify=fittingChanged)
102+
def fitResults(self) -> dict:
103+
"""Return fit results as a dict for QML consumption."""
104+
return {
105+
'success': self._fitting_logic.fit_success,
106+
'nvarys': self._fitting_logic.fit_n_pars,
107+
'chi2': self._fitting_logic.fit_chi2,
108+
}
109+
101110
@Slot(None)
102111
def fittingStartStop(self) -> None:
103112
# If already running, stop the fit

EasyReflectometryApp/Backends/Py/logic/fitting.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ def show_results_dialog(self, value: bool) -> None:
4747

4848
@property
4949
def fit_success(self) -> bool:
50+
"""Return True if all fits succeeded."""
51+
if self._results:
52+
return all(r.success for r in self._results)
5053
if self._result is None:
5154
return False
5255
return self._result.success
@@ -145,12 +148,21 @@ def on_fit_finished(self, results: List[FitResults]) -> None:
145148

146149
@property
147150
def fit_n_pars(self) -> int:
151+
"""Return total number of refined parameters across all fits."""
152+
if self._results:
153+
return sum(r.n_pars for r in self._results)
148154
if self._result is None:
149155
return 0
150156
return self._result.n_pars
151157

152158
@property
153159
def fit_chi2(self) -> float:
160+
"""Return total chi-squared across all fits."""
161+
if self._results:
162+
try:
163+
return float(sum(r.chi2 for r in self._results))
164+
except (ValueError, TypeError):
165+
return 0.0
154166
if self._result is None:
155167
return 0.0
156168
try:

EasyReflectometryApp/Gui/Globals/BackendWrapper.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ QtObject {
262262
readonly property string analysisFitErrorMessage: activeBackend.analysis.fitErrorMessage
263263
readonly property int analysisFitNumRefinedParams: activeBackend.analysis.fitNumRefinedParams
264264
readonly property real analysisFitChi2: activeBackend.analysis.fitChi2
265+
readonly property var analysisFitResults: activeBackend.analysis.fitResults
265266
function analysisFittingStartStop() { activeBackend.analysis.fittingStartStop() }
266267
function analysisSetShowFitResultsDialog(value) { activeBackend.analysis.setShowFitResultsDialog(value) }
267268
function analysisStopFit() { activeBackend.analysis.stopFit() }

0 commit comments

Comments
 (0)