Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
4097515
Merge branch 'master' into develop
andped10 Nov 28, 2024
17d04e6
Merge branch 'master' into develop
andped10 Nov 28, 2024
609454f
Created folderstructure for tutorials
Feb 18, 2025
9256aa6
Redefined structure and created index file
Feb 18, 2025
4bd8664
image test upload for getting-started
Feb 18, 2025
1fcab5e
initial starting page test
Feb 18, 2025
679ce12
Finished getting-started (initial page for tutorial) and changed from…
Feb 18, 2025
cf76373
Changed file structure, and polished of getting-started
Feb 18, 2025
ab5630e
Started on material and model setup
Feb 18, 2025
0cee0a6
First draft of "Material and model setup" complete
Feb 19, 2025
78168c3
first draft of 'experimental' page done and changed sample to model t…
Feb 20, 2025
9fff8cd
Added version no. to start of the tutorial
Feb 20, 2025
5eb2d5d
1. draft of data loading done
Feb 20, 2025
275d07a
1.draft of a simple fitting complete
Feb 25, 2025
5a29ac4
1.draft of settings made
Feb 25, 2025
875309a
Grammar check getting-started.md
mEngstroem Feb 25, 2025
40e6395
Grammar check model-def.md
mEngstroem Feb 25, 2025
aae04cf
Grammar check load_data.md
mEngstroem Feb 25, 2025
1b5415e
Grammar check simple_fitting.md
mEngstroem Feb 25, 2025
f7f1756
Grammar check settings.md
mEngstroem Feb 25, 2025
a768308
Merge pull request #232 from mEngstroem/app_tutorials
henrikjacobsenfys Mar 7, 2025
4ed243b
Documentation fixes (Staging and removing old stuff) (#236)
mEngstroem Apr 15, 2025
741c757
Updated easylib (#238)
rozyczko May 1, 2025
b947d4f
version # update (#239)
rozyczko May 1, 2025
522138a
Fixes for crashes in the app (#243)
rozyczko May 27, 2025
c45d9a0
Merge branch 'master' into develop
rozyczko May 27, 2025
6a40932
updated version number
rozyczko May 27, 2025
a98780f
Version number update (#246)
rozyczko May 27, 2025
f8fa594
Merge branch 'develop' of https://github.com/EasyScience/EasyReflecto…
rozyczko May 28, 2025
b84b3c6
Merge branch 'master' into develop
rozyczko May 28, 2025
a31c1ed
v1.1.1 release (#245) (#251)
rozyczko Jun 26, 2025
05a1919
Windows signing fixed (#252)
rozyczko Jun 26, 2025
a5941d4
250 app crashes (#254)
rozyczko Jun 27, 2025
1b8842c
247 lmfit differential evolution fails (#253)
rozyczko Jul 1, 2025
650e4f9
Merge branch 'develop' of https://github.com/EasyScience/EasyReflecto…
rozyczko Jul 1, 2025
09cae23
limit binary signing to master branch (#257)
rozyczko Jul 28, 2025
9b54752
fix the duplicate model button enablement (#256)
rozyczko Jul 28, 2025
4ad65ce
Bump tj-actions/branch-names from 6 to 8 in /.github/workflows (#228)
dependabot[bot] Jul 28, 2025
96a96e2
typo fixed (#258)
rozyczko Jul 29, 2025
654240e
New easycore (#259)
rozyczko Oct 13, 2025
0b0d31c
Renaming a model (#260)
rozyczko Oct 13, 2025
696ac21
Changing layers bug (#261)
rozyczko Oct 14, 2025
44bf9ec
Multiple plots (#262)
rozyczko Jan 22, 2026
f09e21a
Multifit functionality (#263)
rozyczko Jan 26, 2026
2e1cf54
Improved plots (#264)
rozyczko Feb 28, 2026
16179cb
Allow multiple experiments in a single file. (#269)
rozyczko Mar 2, 2026
1aa1024
Version update in preparation for release (#268)
rozyczko Mar 2, 2026
62f7734
fixed cases for easyapp modules (#270)
rozyczko Mar 3, 2026
6fc3141
change max iter for minimizers to a more reasonable value (#271)
rozyczko Mar 3, 2026
584865e
Reporting (#278)
rozyczko Mar 9, 2026
2478b13
Filtering (#279)
rozyczko Mar 9, 2026
380f433
Merge branch 'master' into develop
rozyczko Mar 9, 2026
692bf6a
added missing dialog (#281)
rozyczko Mar 9, 2026
c23874f
Unit tests (#297)
rozyczko Mar 24, 2026
a40477f
removed Certificates, libs and resources/posters (#298)
rozyczko Mar 25, 2026
90945ca
Residuals (#300)
rozyczko Mar 26, 2026
103283a
1.2.0 fixes (#299)
rozyczko Mar 26, 2026
f0d16c8
1.2.0 fixes2 (#304)
rozyczko Apr 30, 2026
11de503
updated release date and changelog
rozyczko May 1, 2026
73a655b
Merge branch 'master' into develop
rozyczko May 1, 2026
9f5e088
Merge branch 'master' into develop
rozyczko May 1, 2026
81e11ce
summary prettified (#308)
rozyczko May 22, 2026
a314377
make links clickable (#310)
rozyczko May 22, 2026
1418142
Bayesian analysis (#309)
rozyczko Aug 3, 2026
c1e1bc7
fixes from code review (#334)
rozyczko Aug 3, 2026
2e532b1
updated versioning (#335)
rozyczko Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions .github/workflows/installer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,26 +111,26 @@ jobs:
# ${{ secrets.APPLE_CERT_DATA }} ${{ secrets.APPLE_CERT_PASSWORD }}
# ${{ secrets.APPLE_NOTARY_USER }} ${{ secrets.APPLE_NOTARY_PASSWORD }}

- name: Setup SM_CLIENT_CERT_FILE from base64 secret data
if: runner.os == 'Windows'
run: |
echo "${{ secrets.KEYLOCKER_CERT_DATA }}" | base64 --decode > /d/Certificate_pkcs12.p12
shell: bash
# - name: Setup SM_CLIENT_CERT_FILE from base64 secret data
# if: runner.os == 'Windows'
# run: |
# echo "${{ secrets.KEYLOCKER_CERT_DATA }}" | base64 --decode > /d/Certificate_pkcs12.p12
# shell: bash


- name: Setup Software Trust Manager
if: runner.os == 'Windows'
uses: digicert/code-signing-software-trust-action@v1
with:
simple-signing-mode: true
# If the below 2 parameters are supplied, then smctl executable is invoked to attempt the signing.
input: ${{ env.SETUP_EXE_PATH }}
keypair-alias: ${{ secrets.KEYLOCKER_KEYPAIR_ALIAS }}
env:
SM_HOST: ${{ secrets.KEYLOCKER_HOST }}
SM_API_KEY: ${{ secrets.KEYLOCKER_API_KEY }}
SM_CLIENT_CERT_FILE: D:\\Certificate_pkcs12.p12
SM_CLIENT_CERT_PASSWORD: ${{ secrets.WINDOWS_CERT_PASSWORD }}
# - name: Setup Software Trust Manager
# if: runner.os == 'Windows'
# uses: digicert/code-signing-software-trust-action@v1
# with:
# simple-signing-mode: true
# # If the below 2 parameters are supplied, then smctl executable is invoked to attempt the signing.
# input: ${{ env.SETUP_EXE_PATH }}
# keypair-alias: ${{ secrets.KEYLOCKER_KEYPAIR_ALIAS }}
# env:
# SM_HOST: ${{ secrets.KEYLOCKER_HOST }}
# SM_API_KEY: ${{ secrets.KEYLOCKER_API_KEY }}
# SM_CLIENT_CERT_FILE: D:\\Certificate_pkcs12.p12
# SM_CLIENT_CERT_PASSWORD: ${{ secrets.WINDOWS_CERT_PASSWORD }}

- name: Create zip archive of offline app installer for distribution
run: >
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,6 @@ settings.ini*

#Snap
*.snap

# Claude Code personal settings
.claude/settings.local.json
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
# Version 1.4.0 (3 Aug 2026)

- Added Bayesian analysis: run MCMC sampling alongside classical fitting, with posterior median and credibility intervals on the main chart, trace/corner-style plots per parameter, a dedicated status display with cancellation support, and plot export.
- Bayesian results are now cleared whenever they become stale: on project create/load/reset, when a classical fit starts, and when a new sampling run starts. Previously the posterior overlays, plots and the "Bayesian Sampling Results" dialog could show results from a superseded run or a different project.
- Cancelling a fit now keeps the UI locked until the worker thread actually exits, and late signals from a superseded worker are ignored. This prevents two fits from mutating the shared parameters concurrently when the minimizer cannot abort mid-run (lmfit, DFO).
- Bayesian sampling no longer fails for data files without uncertainty/resolution columns: missing `ye` falls back to zero variances (reported by the sampler with a clear message) and the unused `xe` is no longer attached to the Q coordinate.
- Fixed wrong parameter group/display names for the first and last layers of each assembly: the parameter-tree walker now prefers the canonical `layers` container over the `front_layer`/`back_layer` alias properties.
- Removed the unused `corner` dependency.
- Migrated to the new `easyscience` core API surface exposed by `reflectometry-lib`:
- Layer removal now calls `remove_at(index)`; the lib's index-based `remove` was replaced by standard `MutableSequence.remove(value)` semantics.
- Parameter discovery uses `get_all_parameters()`.
- **Breaking:** project files saved by earlier versions (predating `file_format=2`) can no longer be opened. Opening one now shows a clear error dialog instead of failing uncaught; affected projects must be recreated.

# Version 1.3.0 (1 May 2026)

- Migrated the application to the new `EasyApplication` module and removed the old `EasyApp` footer dependency.
Expand Down
34 changes: 34 additions & 0 deletions EasyReflectometryApp/Backends/Mock/Analysis.qml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,28 @@ QtObject {
readonly property var fitPreviewParameterValues: ({})
readonly property var fitResults: ({ success: true, nvarys: 3, chi2: 1.2345 })

// Bayesian sampling
readonly property bool isBayesianSelected: false
readonly property int bayesianSamples: 10000
readonly property int bayesianBurnIn: 2000
readonly property int bayesianPopulation: 10
readonly property int bayesianThinning: 1
readonly property var bayesianPosterior: null
readonly property bool bayesianResultAvailable: false
readonly property var bayesianMarginals: []

// Phase 2: corner/trace/distribution plots (HTML), diagnostics, heatmap
readonly property string bayesianCornerPlotUrl: ''
readonly property string bayesianTracePlotUrl: ''
readonly property string bayesianDistributionPlotUrl: ''
readonly property var bayesianDiagnostics: ({})
readonly property var bayesianParamNames: []
readonly property var bayesianHeatmapData: null
readonly property string bayesianHeatmapPlotUrl: ''
function bayesianComputeHeatmap(x, y) {
console.debug(`bayesianComputeHeatmap ${x}, ${y}`)
}

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

Expand Down Expand Up @@ -123,4 +145,16 @@ QtObject {
showFitResultsDialog = value
console.debug(`setShowFitResultsDialog ${value}`)
}
function setBayesianSamples(value) {
console.debug(`setBayesianSamples ${value}`)
}
function setBayesianBurnIn(value) {
console.debug(`setBayesianBurnIn ${value}`)
}
function setBayesianPopulation(value) {
console.debug(`setBayesianPopulation ${value}`)
}
function setBayesianThinning(value) {
console.debug(`setBayesianThinning ${value}`)
}
}
4 changes: 2 additions & 2 deletions EasyReflectometryApp/Backends/Mock/Home.qml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ QtObject {
property bool created: false

readonly property var version: {
'number': '1.3.1',
'date': '1 May 2026',
'number': '1.4.0',
'date': '3 Aug 2026',
}

readonly property var urls: {
Expand Down
14 changes: 14 additions & 0 deletions EasyReflectometryApp/Backends/Mock/Plotting.qml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@ QtObject {
property bool scaleShown: false
property bool bkgShown: false

// Posterior predictive (Bayesian) overlay data
readonly property var posteriorPredictiveQ: []
readonly property var posteriorPredictiveMedian: []
readonly property var posteriorPredictiveLower: []
readonly property var posteriorPredictiveUpper: []
signal posteriorPredictiveDataChanged()

// Phase 2: SLD posterior predictive (Bayesian) overlay
readonly property var posteriorPredictiveSldZ: []
readonly property var posteriorPredictiveSldMedian: []
readonly property var posteriorPredictiveSldLower: []
readonly property var posteriorPredictiveSldUpper: []
signal posteriorPredictiveSldDataChanged()

// Signals for plot mode changes
signal plotModeChanged()
signal axisTypeChanged()
Expand Down
2 changes: 1 addition & 1 deletion EasyReflectometryApp/Backends/Mock/Status.qml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import QtQuick
QtObject {

readonly property string project: 'Undefined'
readonly property string phaseCount: '1'
readonly property string modelsCount: '1'
readonly property string experimentsCount: '1'
readonly property string calculator: 'CrysPy'
readonly property string minimizer: 'Lmfit (leastsq)'
Expand Down
Loading
Loading