McSAS3GUI (v0.2.1)
A graphical user interface for the canonical McSAS3 workflow.
McSAS3GUI is a thin desktop client over the maintained McSAS3 public API. It loads data through
the canonical ProcessingData workflow, previews fits, runs optimizations, and launches
histogramming without depending on removed legacy McSAS3 internals.
Installation
McSAS3GUI requires Python 3.12 or newer.
Install the released GUI package with pip:
pip install mcsas3gui
If you use uv, create and activate a Python 3.12+ environment, then install the same package with:
uv venv --python 3.12
source .venv/bin/activate
uv pip install mcsas3gui
On Windows, activate the environment with .venv\Scripts\activate instead of source.
You can also install the in-development version with pip:
pip install git+https://github.com/BAMresearch/mcsas3gui.git@main
or, from a local source checkout with uv:
uv venv --python 3.12
source .venv/bin/activate
uv pip install ../McSAS3 .
mcsas3gui --version
Run the local source command from the McSAS3GUI repository with the McSAS3 repository checked
out next to it.
For prebuilt standalone binaries (Linux, macOS, Windows), see the latest GitHub release:
Release assets are built for tagged releases. The macOS release asset is code-signed.
Running the Application
After activating the environment, the preferred launch commands are:
mcsas3gui
or the short alias:
m3gui
The module form also works:
python -m mcsas3gui
Standalone GUI bundles
A standalone build path is available for local packaging and CI:
tox -e standalone
This produces a platform-specific standalone bundle under dist/standalone/, including the
windowed McSAS3GUI app and the bundled mcsas3-histogrammer helper used by the histogramming
tabs.
Linux standalone release artifacts are built in a manylinux_2_34 container so the produced
bundle stays compatible with systems that provide GLIBC 2.34 or newer. Local Linux builds need the
Qt xcb runtime packages listed in ci/requirements_linux.txt.
Standalone release process
Standalone release assets are produced by the GitHub Actions workflow in
.github/workflows/standalone-release.yml.
The release workflow:
- checks out both
McSAS3GUIandMcSAS3 - runs
tox -e standaloneon Linux, macOS, and Windows, with Linux built from a GLIBC 2.34 baseline - signs the macOS
.appbundle with a Developer ID certificate - notarizes and staples the macOS bundle with
notarytoolandstapler - uploads the platform zip archives to the GitHub release
For local development builds, tox -e standalone produces the same bundle layout, but notarization
only happens in the release workflow because it requires GitHub secrets and Apple credentials.
GitHub secrets for macOS standalone releases
The macOS release build requires these GitHub Actions secrets:
MACOS_CERT_P12_BASE64MACOS_CERT_P12_PASSWORDMACOS_CODESIGN_IDENTITYMACOS_KEYCHAIN_PASSWORDMACOS_NOTARY_KEY_IDMACOS_NOTARY_ISSUER_IDMACOS_NOTARY_API_KEY
You can prepare all of them in one step with:
tools/prepare_github_secrets.sh \
--p12-path ~/Downloads/mcsas3gui-signing-cert.p12 \
--p12-password '<p12-password>' \
--p8-path ~/Downloads/AuthKey_ABC123XYZ.p8 \
--issuer-id 12345678-1234-1234-1234-123456789abc
The helper script:
- base64-encodes the
.p12signing certificate asMACOS_CERT_P12_BASE64 - reuses the supplied
.p12password asMACOS_CERT_P12_PASSWORD - imports the
.p12into a temporary macOS keychain to discoverMACOS_CODESIGN_IDENTITY - emits
MACOS_KEYCHAIN_PASSWORDfor the temporary runner keychain used in CI - reads the raw
.p8contents intoMACOS_NOTARY_API_KEY - infers
MACOS_NOTARY_KEY_IDfromAuthKey_<KEYID>.p8when possible - requires
MACOS_NOTARY_ISSUER_IDexplicitly because Apple does not store it in the.p8file
Store the emitted values in GitHub under Settings, Secrets and variables, Actions.
Quick Start
- Open the Getting Started tab and choose one of the shipped prefab workflows, or configure the tabs manually.
- In Data Loading, choose a read-configuration YAML and a test dataset.
- In Run Settings, choose a run configuration and preview a single repetition.
- In McSAS3 Optimization, launch the full optimization for one or more files.
- In Histogram Settings and Run Histogramming, configure and run histogram generation on the result files.
The shipped example configurations live under:
src/mcsas3gui/configurations/readdatasrc/mcsas3gui/configurations/runsrc/mcsas3gui/configurations/histogramsrc/mcsas3gui/configurations/prefab
The shipped example datasets live under:
src/mcsas3gui/testdata
Read configurations declare source data units with QUnits: "1/nm" and IUnits: "1/(m sr)".
Run configurations keep logRandom: true enabled, which is the recommended standard mode for
log-uniform parameter sampling.
Both optimization buttons are abortable. While running, they change to
Running... Click to abort. and forward a stop request to the core McSAS3 runner.
Structure
The GUI is organized into:
gui/main_window.pyfor tab assemblygui/*_tab.pymodules for tab-specific UI behaviorgui/mcsas3_bridge.pyfor canonical McSAS3 integrationgui/optimization_worker.pyandutils/base_worker.pyfor background execution- shared GUI helpers in
gui/*_helpers.pyandutils/task_runner_mixin.py
The generated dependency overview is documented in the GUI structure page.
Documentation
https://BAMresearch.github.io/mcsas3gui
Development
Contributing
We welcome contributions! Please ensure your code follows the project's coding style and includes relevant tests and documentation.
License
This project is licensed under the MIT license
Testing
See which tests are available (arguments after -- get passed to pytest which runs the tests):
tox -e py -- --co
Run a specific test only:
tox -e py -- -k <test_name from listing before>
Run all tests with:
tox -e py
Package Version
Get the next version number and how the GIT history would be interpreted for that:
pip install python-semantic-release
semantic-release -v version --print
This prints its interpretation of the commits in detail. Make sure to supply the --print
argument to not raise the version number which is done automatically by the release job
of the GitHub Action Workflows.
Project template
Update the project configuration from the copier template and make sure the required packages are installed:
pip install copier jinja2-time
copier update --trust --skip-answered
CHANGELOG
v0.2.1 (2026-08-26)
Bug fixes
-
fix: fix for CI/CD issue (
b835e64) -
fix: clear stale prefab file selections when switching examples (
c8e2529)
Unknown Scope
-
Same behaviour implemented for the histogramming tab. (
f244087) -
ensuring previous examples are removed from the optimization tab when another example is chosen (
eda6924) -
doc: mentioning the structure factor applied to the form factor in the Round Robin dataset 3 example (
1d70ff1)
v0.2.0 (2026-08-25)
Bug fixes
-
fix: ruff (
9eb7bd1) -
fix: do not restrict the PyQT version (was only necessary for old linux) (
771be52) -
fix: ruff fix (
04b2ec3) -
fix: improved dependencies for the current RHEL-based linuxes. May need to be revisited later. (
045e9ad) -
fix: updates for notarization (
4005ccd) -
fix: adjusting CI so we can run with the in_depth_upgrades branch of McSAS3 (
0ec6b15)
Continuous integration
-
ci: de-duplicate macOS codesign by realpath and reduce log noise (
9adc2fe) -
ci: de-duplicate macOS codesign by realpath and reduce log noise (
f9e0193) -
ci: de-duplicate macOS codesign by realpath and reduce log noise (
29d6955) -
ci: de-duplicate macOS codesign by realpath and reduce log noise (
5c219d2) -
ci: de-duplicate macOS codesign by realpath and reduce log noise (
b144e01) -
ci: handle non-canonical macOS framework signing in release workflow (
63a0cf9) -
ci: skip direct file signing inside macOS bundles (
3819d88) -
ci: fix macOS codesign ordering in standalone release workflow (
b9b9942) -
ci: add standalone release workflow (
efdfc21) -
PyPI: fix pypi url, switch to actions/checkout@v5 (
ea8998e) -
PyPI: copier template update other places to pypi.org as well (
5b00873) -
PyPI: move from test.pypi.org to pypi.org (
97d72f2)
Enh
-
enh: added python3.14 to tox tests (
71f9689) -
enh: build standalone versions for three plarforms (
7fb84b8)
Testing
- Style: checks moved to early tests stage (
9f722d5)
Unknown Scope
-
Fix for Linux build (
08b72ec) -
track main branch of McSAS, no longer in_depth_upgrades (
ffaccef) -
Bump the GLIBC version requirement of Linux to a more modern version to avoid limiting ourselves to old PyQT versions (
e6f812d) -
simulated data now will use automatic porod slope determination for extrapolation (
bad6e19) -
simulated data now will use automatic porod slope determination for extrapolation (
0956ead) -
modified README to add a uv installation path (
28b839f) -
documentation and default configuration updates (
edd3c7f) -
doc: Updated build release documentation (
9685a5d) -
Fixes to binary build scripts (
f623285) -
added notarization (
fbc0ba6) -
trying a different approach (
62c34e8) -
patching workflows (
88d28cb) -
fix for seed issue (
d31867a) -
setting up for code signing for mac os x in CI (
c7a4043) -
fix build paths (
c14d483) -
yet another test fix. (
e50848b) -
fix to imports, shifting python to match modacor reqs. (
9baed9c) -
addressing small usability issues. (
9fad697) -
fixing small documentation issue (
25065ea) -
bugfixes in compiled build (
5d52e4b) -
bugfix (
f3c1729) -
compiled McSAS3GUI (
2a3b138) -
aux windows close when main closes (
6bf68db) -
bugfix (
524db9f) -
documentation generation (
fc0d7d0) -
typing/docstrings added (
26c1d4e) -
more cleanip, moving on to docs next (
7058012) -
more cleanup (
3f48b72) -
next cleanup step (
b36da89) -
more cleanup (
f63560e) -
another cleanup sweep (
2051dfb) -
continuing cleanup (
a7ff42f) -
cleanup pass and tests (
de4dda8) -
initial cleanup pass on McSAS3GUI (
95dd184) -
adjusting the test configuration (
82c2c20) -
stop button on test run too. (
cdd39cf) -
implement stop functionality (
1fc1bba) -
adjusted ignores and added missing info (
f6f954b) -
adjust gitignore (
f598571) -
adapting to the new API of McSAS3 with ProcessingData (
d3243ac) -
basic formatting and project git hooks, we'll pick this up after we're done with McSAS3 upgrades. (
192e829)
v0.1.6 (2025-09-05)
Bug fixes
- RunSettingsTab: show helpful info for simulation model (
2b72793)
Unknown Scope
- enhancement(PreFab): Added an example using simulated base model data. (
1948f8d)
v0.1.5 (2025-09-05)
Bug fixes
- Histogramming: actually use new input/ouput paths given to hist_run_tab (
51398b2)
Unknown Scope
- Update on logo (
c82daec)
v0.1.4 (2025-08-15)
Bug fixes
-
HistogramSettingsTab: set expected output file, do not use (not working) paths from prefab (
a0c59ab) -
GettingStartedTab: test aginst the tab which is to be modified (
0c35ce0)
Code style
- General: formatting (
2d97002)
v0.1.3 (2025-08-14)
Bug fixes
-
PreFab: output files from testdata written to temp directory as well (
0fd0442) -
RunSettingsTab: use the same temp dir in run_test_optimization() (
7ac2399) -
GettingStartedTab & Logging: create a proper temp dir out-of-source for log files and intermediate configs (
a4b5bdf) -
DataLoadingTab: csvargs is expected as dict in McSAS (
209dc62) -
Configurations Examples: moved to src dir since they need to be installed along (
e75c5a6) -
Project: remove redundant dependencies implied by mcsas3 (
2e550ef)
Continuous integration
-
Publish: show verbose messages in case of error (
35c0bed) -
Tests: testing Windows (
5ff1ebc) -
Publish: pypi url needs /legacy/ suffix (
15121e8) -
Publish: use test.pypi.org (
505c64a)
v0.1.2 (2025-08-13)
Bug fixes
- Project: McSAS3 dependency available on PyPI now (
cf280f8)
Code style
- General: formatting improved (
9159f96)
Continuous integration
-
Release: debug job (
82c1952) -
Docs: update package DB here as well (
0496071) -
Tests: before installing sys packages, update package DB, to avoid outdated lists (
e00a085) -
Tests: try installing PyQt6 system-wide to get all required binary dependencies (
be3e5f5) -
Tests: typo installing additional system packages required by PyQt6 (
909c208) -
Tests: additional system packages required by PyQt6 (
9584c29)
Unknown Scope
-
Revert "ci(Release): debug job" (
e3fd4ed) -
tests(Utils): remove unused code which causes import errors (
c407196)
v0.1.1 (2025-08-12)
Unknown Scope
-
0.1.1 (
29a34cc) -
Last example: RR dataset 3 (
210889e) -
will work on 3.10 as well. (
4ed299e) -
modern numpy now works as well, removing restriction on python 3.13 (
86cf44b) -
Extra explanation (
400c602) -
Updates to the examples (
bb33ec8) -
Adjustment to the advanced nexus demo (highlighting logRandom), and addition of the round robin 1 demo (
6fa5d84) -
adding logo (
49e14da) -
improved structure of eventFilter. Still allows internal drag and drops though. (
d9e0025) -
Fixing table highlight color (
02a7232) -
Drag and drop fix for the file table widgets. This was hard. (
28036da) -
Add drag-and-drop support for files into the tables. (
02b8009) -
last one (
3014af0) -
Ok, windows is a pain in the butt. (
800965f) -
Applying some style to override Window's dark defaults. (
20572e9) -
Stopped messing around with fonts as they're not consistent cross-platform. (
0ba0b09) -
minifix. (
3281589) -
Changing debug levels (
0f2cd55) -
Improving the text on the three examples. (
166ee4f) -
New nexus example, and an update to the configuration files (
9d67def) -
Update order and text. (
d049a36) -
showing the test histogram PDF, even on Windows (
2b7119f) -
Trying to get the PDF to show on Windows. (
0cd3889) -
Bug fixes for windows (
1d21d51) -
making sure we can plot the test histogram also in windows (
4fa9b37) -
minifix (
519335e) -
Can load prefabricated examples from a single yaml (
6dcdc12) -
Removing too challenging nexus data from the test data. (
6e6a379) -
updating getting started. (
e0a138e) -
correcting file extension of processed files to .hdf5 (
606d5d1) -
fixing a path issue on windows (
d6c6783) -
prevent breaking on windows with empty model name (
75c0cb3) -
Ensure that the default configurations are loaded from the correct path (
b87a922) -
fixed annoying window repositioning issue (
5446eaf) -
Fixing small usability issue - launch with python -m mcsas3gui (
7b56ae6) -
Change the way mcsas3 is launched to avoid command-line scripts. (
008f094) -
enforcing posix paths on CLI (
2f3c3ee) -
Updated pyproject fixing bug (
a44d922) -
small update (
02b6018) -
pyinstaller --name McSAS3GUI --windowed src/mcsas3gui/main.py # not yet fully functional executable (
7986876) -
updated pyproject towards build (
34128cd) -
reorganisation to enable pip installability, resulting in command-line m3gui (
63a0795) -
connecting signals to set saved config files in the optimization and histogramming tabs (
411d120) -
Updating pulldown menus on save (
ab2a492) -
A readme and a license (
477e819) -
updated requirements to remove particular mcsas3 commit (
3654674) -
handling of IEmin in data settings tab (
16a2b55) -
Minor edits for readability (
5aa460b) -
Adjusting the yaml display and saving with a custom dumper (
967be91) -
Fleshing out the "Getting Started" helpful bits. (
e109fd6) -
Clearer plotting when using omit (
2d5639e) -
Test histogram now opens PDF automatically. (
c815eeb) -
Histogramming works and editor works.. (
1f9afb0) -
fix file extensions (
48cdc8f) -
Drag and drop file line entry widgets now all working. (
7fe3e2d) -
Abstracted the file line selection widget (
1364400) -
Adding a reusable file-line selection widget with drag and drop (
9ef410a) -
bug resolved with spaces in filenames. (
e36b7ee) -
Trying to get drag and drop working in the file tabulation widget (
5dc689c) -
Updates... (
dd65ab4) -
separated the file selection table for optimization and histogramming (
90da9e6) -
setting previously used directories for user convenience (
0731646) -
cleanup (
dfbfe61) -
editor now functional for multipart yamls (needed for histogramming) (
1e7f061) -
Getting there.. (
e9224e1) -
updates. (
2948074) -
Somewhat functional, processes cannot be killed yet, however. (
8e2a449) -
Now can run and show a test optimization (
983f12c) -
Setting up test runs in run_settings tab. (
30f5033) -
updating run settings (
73b8279) -
Updates to data loading, I think it works for now. (
be9fd17) -
upgrades (
24cae6d) -
working ok now. (
3b43344) -
data loading tab starting to look like something useful now. (
8a4e925) -
Now loads and plots (
0d7dc3c) -
minimal change in naming. (
3859dcd) -
Updated main window naming (
20b0063) -
Drafted the optimization tab contents (
d3b1e89) -
some additions, but nothing working yet (
41acbd8) -
sasmodels automatically interpreted (
b11ae97) -
run config now working with central yaml editor. editor has syntax highlighting and syntax error tooltips. (
1d02a85) -
Centralizing the yaml editor widget (
8cc2761) -
sort of working (
0bfbf07) -
first commit (
5fcbc09)
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcsas3gui-0.2.1.tar.gz.
File metadata
- Download URL: mcsas3gui-0.2.1.tar.gz
- Upload date:
- Size: 929.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dceaf71bce5b043661613e69f0ca4d32fb2be00622f5f8c11b68e319d113ca39
|
|
| MD5 |
20a09f40bae6e0cf1dadd2f137106a4e
|
|
| BLAKE2b-256 |
7caf23c8e67a70631555d733a871e035d4ff59ec231f8d4471900fa89b730a6c
|
Provenance
The following attestation bundles were made for mcsas3gui-0.2.1.tar.gz:
Publisher:
ci-cd.yml on BAMresearch/McSAS3GUI
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcsas3gui-0.2.1.tar.gz -
Subject digest:
dceaf71bce5b043661613e69f0ca4d32fb2be00622f5f8c11b68e319d113ca39 - Sigstore transparency entry: 2604064055
- Sigstore integration time:
-
Permalink:
BAMresearch/McSAS3GUI@b835e647c868a89761ac6576f3d77576a3473715 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BAMresearch
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@b835e647c868a89761ac6576f3d77576a3473715 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcsas3gui-0.2.1-py3-none-any.whl.
File metadata
- Download URL: mcsas3gui-0.2.1-py3-none-any.whl
- Upload date:
- Size: 880.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12da2f1a716e4d04595b91c67d5103adbb34d5e87474910d5b376353073d7c2a
|
|
| MD5 |
a3336739fb63c44cca9e404f973e7405
|
|
| BLAKE2b-256 |
5290617ce5a57059cd537197572356ee0092c39c2ba2942d7fcd92ceacce3916
|
Provenance
The following attestation bundles were made for mcsas3gui-0.2.1-py3-none-any.whl:
Publisher:
ci-cd.yml on BAMresearch/McSAS3GUI
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcsas3gui-0.2.1-py3-none-any.whl -
Subject digest:
12da2f1a716e4d04595b91c67d5103adbb34d5e87474910d5b376353073d7c2a - Sigstore transparency entry: 2604064255
- Sigstore integration time:
-
Permalink:
BAMresearch/McSAS3GUI@b835e647c868a89761ac6576f3d77576a3473715 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/BAMresearch
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@b835e647c868a89761ac6576f3d77576a3473715 -
Trigger Event:
push
-
Statement type: