From noreply at github.com Mon Aug 3 06:20:09 2026 From: noreply at github.com (Lukas Dobler) Date: Mon, 03 Aug 2026 05:20:09 -0700 Subject: [us-commits] [ehb54/ultrascan3] Message-ID: Branch: refs/heads/lukas/signal-slot Home: https://github.com/ehb54/ultrascan3 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Mon Aug 3 20:08:14 2026 From: noreply at github.com (alexsav815) Date: Mon, 03 Aug 2026 19:08:14 -0700 Subject: [us-commits] [ehb54/ultrascan3] Message-ID: Branch: refs/heads/alexey-dev-issue983 Home: https://github.com/ehb54/ultrascan3 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Tue Aug 4 01:54:56 2026 From: noreply at github.com (Lukas Dobler) Date: Tue, 04 Aug 2026 00:54:56 -0700 Subject: [us-commits] [ehb54/ultrascan3] bc7756: Convert connects Message-ID: Branch: refs/heads/lukas/signal-slot Home: https://github.com/ehb54/ultrascan3 Commit: bc7756c51525d616376c530fd343d0d858d3b8dc https://github.com/ehb54/ultrascan3/commit/bc7756c51525d616376c530fd343d0d858d3b8dc Author: Doluk <69309597+doluk at users.noreply.github.com> Date: 2026-08-04 (Tue, 04 Aug 2026) Changed paths: M gui/us_abstractrotor_gui.cpp M gui/us_associations_gui.cpp M gui/us_choice.cpp M gui/us_combined_plots_parms_gui.cpp M gui/us_edit_spectrum.cpp M gui/us_investigator.cpp M gui/us_license.cpp M gui/us_minimize.cpp M gui/us_new_spectrum.cpp M gui/us_noise_loader.cpp M gui/us_passwd.cpp M gui/us_plot3d.cpp M gui/us_predict1.cpp M gui/us_properties.cpp M gui/us_report_general_gui.cpp M gui/us_report_gui.cpp M gui/us_run_details2.cpp M gui/us_scan_excl_gui.cpp M gui/us_select_edits.cpp M gui/us_select_item.cpp M gui/us_select_runs.cpp M gui/us_select_triples.cpp M gui/us_sim_params_gui.cpp M gui/us_table.cpp M gui/us_tmst_plot.cpp M programs/us/us.cpp M programs/us_2dplot/us_2dplot.cpp Log Message: ----------- Convert connects To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Tue Aug 4 11:20:46 2026 From: noreply at github.com (alexsav815) Date: Tue, 04 Aug 2026 10:20:46 -0700 Subject: [us-commits] [ehb54/ultrascan3] 30af25: GMP-VELOCITY-MWL: work towards this: enable daatDi... Message-ID: Branch: refs/heads/alexey-dev-issue983 Home: https://github.com/ehb54/ultrascan3 Commit: 30af255b5754387e307f2453e853cf0928d6a468 https://github.com/ehb54/ultrascan3/commit/30af255b5754387e307f2453e853cf0928d6a468 Author: alexsav815 Date: 2026-08-04 (Tue, 04 Aug 2026) Changed paths: M programs/us_experiment/us_exp_utils.cpp M programs/us_experiment/us_experiment_gui_optima.cpp M programs/us_experiment/us_experiment_gui_optima.h M utils/us_run_protocol.h Log Message: ----------- GMP-VELOCITY-MWL: work towards this: enable daatDisk tests using MWL data with arbitrary channles... To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Wed Aug 5 01:19:22 2026 From: noreply at github.com (Lukas Dobler) Date: Wed, 05 Aug 2026 00:19:22 -0700 Subject: [us-commits] [ehb54/us3lims_dbinst] Message-ID: Branch: refs/heads/lukas/jquery-bump Home: https://github.com/ehb54/us3lims_dbinst To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_dbinst/settings/notifications From noreply at github.com Wed Aug 5 01:22:41 2026 From: noreply at github.com (Lukas Dobler) Date: Wed, 05 Aug 2026 00:22:41 -0700 Subject: [us-commits] [ehb54/us3lims_dbinst] e062be: Make jquery code compatible with jquery 3.7.1 Message-ID: Branch: refs/heads/lukas/jquery-bump Home: https://github.com/ehb54/us3lims_dbinst Commit: e062be632f47f1a742cd0c5f42a28b8807119cc5 https://github.com/ehb54/us3lims_dbinst/commit/e062be632f47f1a742cd0c5f42a28b8807119cc5 Author: Lukas Dobler <69309597+doluk at users.noreply.github.com> Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M js/2DSA.js M js/DMGA.js M js/GA.js M js/PCSA.js M js/reports.js M lib/reports.php M view_reports.php Log Message: ----------- Make jquery code compatible with jquery 3.7.1 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_dbinst/settings/notifications From noreply at github.com Wed Aug 5 11:19:32 2026 From: noreply at github.com (alexsav815) Date: Wed, 05 Aug 2026 10:19:32 -0700 Subject: [us-commits] [ehb54/ultrascan3] 154ed9: [1]GMP-VELOCITY-MWL: work towards this: enable daa... Message-ID: Branch: refs/heads/alexey-dev-issue983 Home: https://github.com/ehb54/ultrascan3 Commit: 154ed90cc1a2e2c1aaa85172dca418c93114fe50 https://github.com/ehb54/ultrascan3/commit/154ed90cc1a2e2c1aaa85172dca418c93114fe50 Author: alexsav815 Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M programs/us_analysis_profile/us_analysis_profile.cpp M programs/us_analysis_profile/us_analysis_profile.h M programs/us_analysis_profile/us_anapro_utils.cpp M programs/us_experiment/us_experiment_gui_optima.cpp M programs/us_experiment/us_experiment_gui_optima.h Log Message: ----------- [1]GMP-VELOCITY-MWL: work towards this: enable daatDisk tests using MWL data with arbitrary channles... To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Wed Aug 5 11:24:10 2026 From: noreply at github.com (alexsav815) Date: Wed, 05 Aug 2026 10:24:10 -0700 Subject: [us-commits] [ehb54/ultrascan3] 21894f: [1a]GMP-VELOCITY-MWL: work towards this: enable da... Message-ID: Branch: refs/heads/alexey-dev-issue983 Home: https://github.com/ehb54/ultrascan3 Commit: 21894ff5e972dcfad977039683aee3b71e8a2405 https://github.com/ehb54/ultrascan3/commit/21894ff5e972dcfad977039683aee3b71e8a2405 Author: alexsav815 Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M programs/us_analysis_profile/us_anapro_utils.cpp Log Message: ----------- [1a]GMP-VELOCITY-MWL: work towards this: enable daatDisk tests using MWL data with arbitrary channles... To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Wed Aug 5 14:42:09 2026 From: noreply at github.com (aaron-auc) Date: Wed, 05 Aug 2026 13:42:09 -0700 Subject: [us-commits] [ehb54/us3lims_common] 485092: Split the overloaded per-cluster localhost flag in... Message-ID: Branch: refs/heads/780-request-pbs-gfac-cleanup Home: https://github.com/ehb54/us3lims_common Commit: 48509285fc7acb7cfe90abf1ee02b815189c74a9 https://github.com/ehb54/us3lims_common/commit/48509285fc7acb7cfe90abf1ee02b815189c74a9 Author: aaron-auc Date: 2026-07-26 (Sun, 26 Jul 2026) Changed paths: M .gitignore M class/jobsubmit.php M global_config.php.template Log Message: ----------- Split the overloaded per-cluster localhost flag into independent topology, capacity, and performance sizing keys Commit: ed0263b431b360c4e9e5701b45ad9c48665b3aec https://github.com/ehb54/us3lims_common/commit/ed0263b431b360c4e9e5701b45ad9c48665b3aec Author: aaron-auc Date: 2026-07-26 (Sun, 26 Jul 2026) Changed paths: M class/submit_slurm.php Log Message: ----------- Fix sbatch rank count read before nodes() resizes the cluster grid, and a jobmonitor launch that sudo'd to a user with no sudoers entry in production Commit: c6624ce8071709ce4f7c2e97941d159077db1909 https://github.com/ehb54/us3lims_common/commit/c6624ce8071709ce4f7c2e97941d159077db1909 Author: aaron-auc Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M class/jobsubmit.php M class/submit_slurm.php M global_config.php.template Log Message: ----------- Clamp the computed walltime and wall_override to the cluster's configured maxtime Compare: https://github.com/ehb54/us3lims_common/compare/7129012efd04...c6624ce80717 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_common/settings/notifications From noreply at github.com Wed Aug 5 15:18:55 2026 From: noreply at github.com (alexsav815) Date: Wed, 05 Aug 2026 14:18:55 -0700 Subject: [us-commits] [ehb54/ultrascan3] 24118c: [2]GMP-VELOCITY-MWL: work towards this: enable daa... Message-ID: Branch: refs/heads/alexey-dev-issue983 Home: https://github.com/ehb54/ultrascan3 Commit: 24118c828f449045bb5e3b80e293e5fa0671be29 https://github.com/ehb54/ultrascan3/commit/24118c828f449045bb5e3b80e293e5fa0671be29 Author: alexsav815 Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M programs/us_experiment/us_experiment_gui_optima.cpp Log Message: ----------- [2]GMP-VELOCITY-MWL: work towards this: enable daatDisk tests using MWL data with arbitrary channles... To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 13:46:52 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 12:46:52 -0700 Subject: [us-commits] [ehb54/ultrascan3] e0d57b: somo/grpy: add self-contained in-process GRPY modu... Message-ID: Branch: refs/heads/somo-dev Home: https://github.com/ehb54/ultrascan3 Commit: e0d57bc99cd1ff7d35f3b5a0a03c310b4fd4745d https://github.com/ehb54/ultrascan3/commit/e0d57bc99cd1ff7d35f3b5a0a03c310b4fd4745d Author: ehb54 Date: 2026-07-18 (Sat, 18 Jul 2026) Changed paths: A us_somo/develop/grpy/INTEGRATION.md A us_somo/develop/grpy/README.md A us_somo/develop/grpy/grpy_api.hpp A us_somo/develop/grpy/grpy_core.hpp A us_somo/develop/grpy/grpy_report.hpp A us_somo/develop/grpy/linalg.hpp A us_somo/develop/grpy/parallel_qt.hpp A us_somo/develop/grpy/parallel_std.hpp A us_somo/develop/grpy/tests/data/1znf.bead_model A us_somo/develop/grpy/tests/data/1znf_golden.txt A us_somo/develop/grpy/tests/data/dumbbell_golden.txt A us_somo/develop/grpy/tests/qt_proof.cpp A us_somo/develop/grpy/tests/run.sh A us_somo/develop/grpy/tests/test_api.cpp A us_somo/develop/grpy/tests/test_assemble.cpp A us_somo/develop/grpy/tests/test_linalg.cpp A us_somo/develop/grpy/tests/test_ooc.cpp A us_somo/develop/grpy/tests/test_threaded.cpp M us_somo/develop/libus_somo.pro Log Message: ----------- somo/grpy: add self-contained in-process GRPY module (Eigen) Adds us_somo/develop/grpy/: a C++ port of GRPY (generalized Rotne-Prager-Yamakawa hydrodynamics) callable in-process, to replace the external Fortran binary run via QProcess with stdout scraping. The module is self-contained and isolated from the SOMO god classes: - header-only, own namespace (grpy), dependency-injected threading (la::Parallel; QtParallel over QThreadPool for SOMO, std::thread for the CLI/tests); - memory-lean tiled Cholesky (solve M X = T instead of forming the full inverse; upper-triangle, factored in place) with single-precision and out-of-core (mmap) options for large systems, and fine-grained in-inversion progress via callback; - grpy::Solver::run(beads, params, progressCb) returns structured scalars AND the full report text, so the on-disk results file is preserved as before. - tests/ validate against the captured GRPY golden (report + scalars) and prove the Qt in-process path; run standalone via tests/run.sh. Wires the qmake build (QT += concurrent, INCLUDEPATH += include grpy, HEADERS). No US_Hydrodyn changes yet; the QProcess call-site swap is a follow-up commit. Refs ehb54/ultrascan-tickets#972 Co-Authored-By: Claude Opus 4.8 Commit: d3e4bc90e410221103f9e57d5f1aa0c0f5a0d8d7 https://github.com/ehb54/ultrascan3/commit/d3e4bc90e410221103f9e57d5f1aa0c0f5a0d8d7 Author: ehb54 Date: 2026-07-18 (Sat, 18 Jul 2026) Changed paths: M us_somo/develop/grpy/grpy_api.hpp A us_somo/develop/grpy/tests/data/dumbbell.grpy M us_somo/develop/grpy/tests/test_api.cpp M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: run GRPY in-process, drop external binary + Docker path Wire the self-contained grpy module into US_Hydrodyn::calc_grpy_hydro / grpy_process_next: read the .grpy file SOMO already writes via grpy::read_native_file(), run grpy::Solver over a QtParallel backend on SOMO's thread pool, and fill grpy_stdout from Results::report so the existing grpy_finished() parsing and .grpy_res preservation are unchanged. Removes the QProcess launch, the US_Container_Grpy selection, and the Docker/parallel-image plumbing -- in-process is now the sole path. Progress is driven by the Solver callback (processEvents keeps the GUI painting). Adds grpy::read_native_file() + a native-reader test case (dumbbell.grpy) that reproduces the dumbbell golden. Refs ehb54/ultrascan-tickets#972 Co-Authored-By: Claude Fable 5 Commit: 3647e4575c4e7785585ed676e543c891f0d3c98d https://github.com/ehb54/ultrascan3/commit/3647e4575c4e7785585ed676e543c891f0d3c98d Author: ehb54 Date: 2026-07-18 (Sat, 18 Jul 2026) Changed paths: R us_somo/develop/include/us_container_grpy.h M us_somo/develop/include/us_hydrodyn.h M us_somo/develop/include/us_hydrodyn_misc.h M us_somo/develop/libus_somo.pro R us_somo/develop/src/us_container_grpy.cpp M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/develop/src/us_hydrodyn_misc.cpp M us_somo/develop/src/us_hydrodyn_settings.cpp Log Message: ----------- somo/grpy: remove dead external/Docker GRPY plumbing Now that GRPY runs in-process (the external binary + Docker path is gone), delete the symbols that only served the old QProcess path: - US_Container_Grpy class (src/us_container_grpy.cpp, include/us_container_grpy.h) and its libus_somo.pro SOURCES/HEADERS entries; the us_container_grpy member, its includes/init, and grpy_parallel_pulled. - cb_parallel_grpy checkbox + set_parallel_grpy() slot and the misc.parallel_grpy field, incl. its settings save/load/default (old saved values are simply ignored). - the grpy QProcess* member, grpy_prog, and the grpy_readFromStdout/Stderr/started slots. stop_calc()'s process-terminate block is replaced by a note: cancellation now flows through stopFlag, honored by the Solver progress callback and grpy_finished(). Objects rebuild cleanly (us_hydrodyn, us_hydrodyn_grpy, us_hydrodyn_misc, us_hydrodyn_settings). Refs ehb54/ultrascan-tickets#972 Co-Authored-By: Claude Fable 5 Commit: 7a83b64352e047e10fe6bc46d68e4e6a05bd9aee https://github.com/ehb54/ultrascan3/commit/7a83b64352e047e10fe6bc46d68e4e6a05bd9aee Author: ehb54 Date: 2026-07-19 (Sun, 19 Jul 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: fix in-process finish hand-off + resolve input path Two fixes found while validating the in-process path end-to-end via the batch gui_script on a real bead model: 1. grpy_finished() was never invoked. It was posted with QMetaObject::invokeMethod(..., Qt::QueuedConnection, Q_ARG(QProcess:: ExitStatus, ...)), but QProcess::ExitStatus is not a registered queued-connection metatype, so the invoke silently failed ("Unable to handle unregistered datatype 'QProcess::ExitStatus'"). grpy_running then never cleared and the batch's while(grpy_running) processEvents() loop hung forever. Replaced both call sites with QTimer::singleShot(0, this, lambda) which defers to the event loop (still no deep recursion through the model batch) but calls grpy_finished() directly, needing no metatype registration. 2. read_native_file() read grpy_last_processed (a bare filename) relative to the process CWD. The old QProcess set its working directory to get_somo_dir(); resolve the path against get_somo_dir() to match, and guard a missing file with a clear error instead of a silent empty solve. Validated: gui_script batch run on a 165-bead model produces a .grpy_res whose every physical observable (rotational diffusion, sedimentation, intrinsic viscosities, all 8 relaxation times, diagonal diffusion tensor) matches the Fortran GRPY_osx10.11 binary on the same .grpy input exactly; only the documented eigenvector sign-gauge and ~1e-9 coupling noise differ. Refs ehb54/ultrascan-tickets#972 Co-Authored-By: Claude Fable 5 Commit: 89f4a3ddd7aa11db5166a243e2d5260aa746ccb4 https://github.com/ehb54/ultrascan3/commit/89f4a3ddd7aa11db5166a243e2d5260aa746ccb4 Author: ehb54 Date: 2026-07-19 (Sun, 19 Jul 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: expose single-precision + out-of-core options Wire grpy::Options.single and .ooc_dir at the in-process call site. These matter only for very large bead models (memory-bound; run via batch/cluster), so they are surfaced through the lightweight, no-UI mechanisms rather than new god-class dialog controls: - gui_script `global grpy_single 1` / `global grpy_ooc_dir ` - GRPY_SINGLE / GRPY_OOC_DIR environment-variable fallback (matches the standalone CLI's env knobs) Default off = in-core double precision, byte-identical to prior behavior. A "GRPY options: ..." editor message is emitted when either is active. Validated: gui_script run with `global grpy_single 1` on the 165-bead model completes and reproduces every labeled observable of the double-precision / Fortran-golden result (single matches to 4 sig figs by design). The module's single-precision and out-of-core paths themselves are covered by the grpy unit tests (test_linalg float, test_ooc). Refs ehb54/ultrascan-tickets#972 Co-Authored-By: Claude Fable 5 Commit: f17026f45075de36cb25ba4601f2fa662255683c https://github.com/ehb54/ultrascan3/commit/f17026f45075de36cb25ba4601f2fa662255683c Author: ehb54 Date: 2026-07-19 (Sun, 19 Jul 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_hydro.h M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/develop/src/us_hydrodyn_hydro.cpp M us_somo/develop/src/us_hydrodyn_settings.cpp Log Message: ----------- somo/grpy: add GRPY precision (double/float) control to Hydro Options Per review, surface the single-precision option as a proper control in the SOMO Hydrodynamic Calculation Options window rather than script/env only. Adds a "GRPY Numerical Precision:" group with "Double (default)" / "Float (for large systems)" radios to US_Hydrodyn_Hydro, right below the existing "Inclusion of Buried Beads (for GRPY)" group and mirroring its idiom. Backed by hydro.grpy_single (default false = double), persisted in the SOMO settings (save/load/default) and reported in display_default_differences() like the sibling GRPY setting. The in-process call site now reads hydro.grpy_single as the primary source; the gui_script `global grpy_single` param and GRPY_SINGLE env var still override for headless/batch automation. Out-of-core stays script/env only (a cluster-scale knob, no GUI control). Validated: full libus_somo rebuild clean (0 errors); default-double gui_script run reproduces the Fortran-golden scalars (no regression). Refs ehb54/ultrascan-tickets#972 Co-Authored-By: Claude Fable 5 Commit: 2144ac85955171f354fcd3edd5402d67e4e4f4f5 https://github.com/ehb54/ultrascan3/commit/2144ac85955171f354fcd3edd5402d67e4e4f4f5 Author: emre brookes Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: A us_somo/develop/grpy/INTEGRATION.md A us_somo/develop/grpy/README.md A us_somo/develop/grpy/grpy_api.hpp A us_somo/develop/grpy/grpy_core.hpp A us_somo/develop/grpy/grpy_report.hpp A us_somo/develop/grpy/linalg.hpp A us_somo/develop/grpy/parallel_qt.hpp A us_somo/develop/grpy/parallel_std.hpp A us_somo/develop/grpy/tests/data/1znf.bead_model A us_somo/develop/grpy/tests/data/1znf_golden.txt A us_somo/develop/grpy/tests/data/dumbbell.grpy A us_somo/develop/grpy/tests/data/dumbbell_golden.txt A us_somo/develop/grpy/tests/qt_proof.cpp A us_somo/develop/grpy/tests/run.sh A us_somo/develop/grpy/tests/test_api.cpp A us_somo/develop/grpy/tests/test_assemble.cpp A us_somo/develop/grpy/tests/test_linalg.cpp A us_somo/develop/grpy/tests/test_ooc.cpp A us_somo/develop/grpy/tests/test_threaded.cpp R us_somo/develop/include/us_container_grpy.h M us_somo/develop/include/us_hydrodyn.h M us_somo/develop/include/us_hydrodyn_hydro.h M us_somo/develop/include/us_hydrodyn_misc.h M us_somo/develop/libus_somo.pro R us_somo/develop/src/us_container_grpy.cpp M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/develop/src/us_hydrodyn_hydro.cpp M us_somo/develop/src/us_hydrodyn_misc.cpp M us_somo/develop/src/us_hydrodyn_settings.cpp Log Message: ----------- Merge pull request #487 from ehb54/ehb54-issue-972 somo: in-process GRPY (C++/Eigen), replacing the external binary Compare: https://github.com/ehb54/ultrascan3/compare/bf1c7305fc74...2144ac859551 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 13:46:58 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 12:46:58 -0700 Subject: [us-commits] [ehb54/ultrascan3] Message-ID: Branch: refs/heads/ehb54-issue-972 Home: https://github.com/ehb54/ultrascan3 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 14:34:53 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 13:34:53 -0700 Subject: [us-commits] [ehb54/ultrascan3] 12fa3e: somo/grpy: self-validating shell reduction with re... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 12fa3ee4567ed094364a5348644cc3fc2fb58b44 https://github.com/ehb54/ultrascan3/commit/12fa3ee4567ed094364a5348644cc3fc2fb58b44 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/grpy/README.md A us_somo/develop/grpy/grpy_exposure.hpp A us_somo/develop/grpy/grpy_shell.hpp M us_somo/develop/grpy/tests/run.sh A us_somo/develop/grpy/tests/test_shell.cpp M us_somo/develop/libus_somo.pro Log Message: ----------- somo/grpy: self-validating shell reduction with reported error bars GRPY costs O((11N)^3), so the bead count dominates. A dense bead packing is hydrodynamically screened -- interior beads sit in near-stagnant fluid and carry almost no force -- so the exact calculation can run on a surface-enriched subset. This generalizes the existing binary ASA buried-bead exclusion into a convergence test that reports the error it introduced. Method: Shrake-Rupley exposure per bead (1.4 A probe), keep the most-exposed ceil(f*N), solve on a doubling ladder of bead fractions, stop when the reported bar drops below tolerance. Three rungs give the convergence order from the ratio of successive gaps, so the remaining error is Richardson-extrapolated per observable. The ladder is geometric against O(N^3) and costs ~1.14x its final rung, so the check is nearly free; its final rung is the unreduced model, so an unreducible structure degrades to exactly today's behaviour. The bar bounds the true error: verified 92/92 (translational, 23 models, N=204-4068) and 252/252 (7 observables x 12 models x 3 tolerances) against unreduced exact GRPY. The observed convergence order (median 1.83) matches a value predicted independently by a raw reduction sweep, so the error model is derived rather than fitted. Selection is by target bead FRACTION, not a fixed exposure threshold: the buried fraction ranges ~1%-50% across model types, so one threshold gives wildly different cost per model while a fraction controls O(N^3) directly. Observables do not share a reduction frontier. Median error relative to D_t at equal reduction is 1.77x for D_r but 3.34x for intrinsic viscosity, which drove the stopping decision in 36/36 test cases. ShellOptions::require therefore lets the caller choose what must converge, and ShellReport::viscosity_unreliable tells the caller to withhold viscosity and the viscosity-derived Einstein radius when it was not converged; the values stay in the report for the record, with a warning appended. Known failure mode, guarded: on a degenerate exposure distribution (a perfect cubic lattice realizes ~9 distinct values over 216 beads) rungs swallow whole symmetry shells instead of refining, the estimated order comes out spuriously high, and the bar understated by ~1.4x. A floor caps extrapolation tightening at 2x the raw gap. That restores honesty on the lattice and is slack on every real model tested -- identical honesty, no speedup cost. The lattice is kept as a regression in tests/test_shell.cpp. MW and Rg are pinned to full-model values. Re-derived from a reduced bead list, MW would fall with the dropped beads (corrupting sedimentation and both viscosities, which are mass-normalized) and Rg would rise (a hollow shell has a larger radius of gyration than the solid body). Both are regression-tested. Disabled by default: with enabled=false the result is byte-identical to Solver::run, so results never move silently. On speed, honestly: against an unreduced model the gain reaches ~120x, but SOMO defaults to ASA buried-bead exclusion, which already removes most dead beads. Measured on that production baseline the incremental gain is ~2-3x, rising with model size. The durable contribution is the error bar -- the existing exclusion reports no uncertainty at all. Module only; the SOMO call site and GUI control follow separately. Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 15:12:38 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 14:12:38 -0700 Subject: [us-commits] [ehb54/ultrascan3] 68384f: somo/grpy: wire shell reduction into SOMO with a H... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 68384f0bed49388d107ce8e4ae046097a44a8fba https://github.com/ehb54/ultrascan3/commit/68384f0bed49388d107ce8e4ae046097a44a8fba Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/grpy/grpy_shell.hpp M us_somo/develop/grpy/tests/test_shell.cpp M us_somo/develop/include/us_hydrodyn.h M us_somo/develop/include/us_hydrodyn_hydro.h M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/develop/src/us_hydrodyn_hydro.cpp M us_somo/develop/src/us_hydrodyn_settings.cpp Log Message: ----------- somo/grpy: wire shell reduction into SOMO with a Hydrodynamics Options control Adds the GUI control, settings persistence, and the call-site integration for the shell-reduction layer, plus two fixes that only an end-to-end run exposed. GUI: a "GRPY Shell Reduction" groupbox in the SOMO Hydrodynamic Calculation Options window, below GRPY Numerical Precision and alongside the buried-bead exclusion it generalizes. Off / On, a target-accuracy field, and a "require intrinsic viscosity" checkbox. Backed by hydro.grpy_shell{,_tol,_require_eta}, persisted in settings save/load/default and display_default_differences, mirroring grpy_single. gui_script `global grpy_shell` / `grpy_shell_tol` / `grpy_shell_require_eta` and GRPY_SHELL still override, for headless work. Intrinsic viscosity: when it was not required to converge (or was and did not), it is WITHHELD from the reported results rather than propagated with a caveat -- a value carrying a warning is still a value that gets used downstream. Withheld together with it is the GRPY Einstein radius: both are parsed from the same report line ("Zero frequency intrinsic viscosity eta 0", fields 1 and 2) and the radius is viscosity-derived, so it inherits the identical unreliability. Guarded at all three sites -- the per-model assignments and the cross-model accumulator. The values remain in the results file, annotated, for the record. Note the cross-model mean divides by the TOTAL model count, not a per-observable count, so a run mixing contributing and non-contributing models would silently corrupt it. That is safe only because this is a run-level setting: every model in a run either requires viscosity convergence or none does. Commented at the site. Two fixes found by running it, not by the unit tests: 1. When the ladder cannot meet the tolerance it runs out onto its final rung, which is the unreduced model -- so the result is exact. It was still reporting the last inter-rung gap as the error bar (1.68% on a 246-bead test), which describes the coarser rung just discarded, not the answer returned. Honest, since it bounds a true error of zero, but plainly misleading. A ShellReport ::unreduced flag now zeroes the bars and the annotation states that the result is exact. 2. The same path wrongly marked viscosity unreliable. An unreduced solve has nothing to converge, so viscosity is exact regardless of what was requested; withholding it would have discarded a perfectly good value. viscosity_ok() now short-circuits on unreduced. Six assertions cover both in tests/test_shell.cpp. Verified end to end on a bead model via gui_script: the annotation reports "98 of 98" beads (SOMO's ASA buried-bead exclusion having already reduced 246 -> 98, which is exactly why a model this size has nothing left to give), zero estimated error, no viscosity warning, and every observable bit-identical to the unreduced baseline. Clean libus_somo + app builds, no new warnings. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 15:31:17 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 14:31:17 -0700 Subject: [us-commits] [ehb54/ultrascan3] 95fec1: somo/doc: document GRPY shell reduction in the Hyd... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 95fec1cc63cc817cc419d9e1eeb4027a9793e0ad https://github.com/ehb54/ultrascan3/commit/95fec1cc63cc817cc419d9e1eeb4027a9793e0ad Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/doc: document GRPY shell reduction in the Hydrodynamics Options manual Adds a section to somo_hydro.html covering the new "GRPY Shell Reduction" box, placed after the GRPY buried-bead exclusion it generalizes, and bumps the page's Last updated stamp. Covers what the procedure does (repeated exact GRPY on progressively larger subsets of the most solvent-exposed beads, stopping when successive results agree, with the remaining error estimated by Richardson extrapolation), the three controls and their defaults, and why the check is nearly free. Gives particular attention to the "Require intrinsic viscosity" checkbox, since the hydrodynamic quantities do not tolerate reduction equally: at equal reduction the rotational diffusion error is ~1.8x the translational, and the intrinsic viscosity ~3.3x and systematically one-sided. It is the viscosity that determines when the procedure can stop, so requiring it costs much of the speed gain; when not required, the viscosity and the Einstein radius derived from it are withheld from the results rather than reported with a caveat, while being retained and annotated in the results file. Also answers, quantitatively, the question the preceding buried-bead paragraph explicitly left open ("would need an in depth investigation", supported only by preliminary 2021 tests on lysozyme): retaining >50% of beads changes the translational diffusion coefficient by ~0.02%, 30-50% by ~0.12%, 20-30% by ~0.5%, degrading rapidly below ~10%. Buried-bead exclusion typically retains ~40%, so that paragraph's regime is now measured. Notes the reported error bounded the true deviation in all 344 validation tests. Ends with the honest practical caveat: the gain grows with model size, is negligible for small models, and on top of the default buried-bead exclusion is typically 2-3x rather than the larger factors available from a completely unreduced model -- the lasting benefit being the error estimate, not the speed. All markup uses named entities, so the page remains pure ASCII under its declared ISO-8859-1 charset. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 15:34:07 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 14:34:07 -0700 Subject: [us-commits] [ehb54/ultrascan3] c9ac11: somo/doc: document the GRPY Numerical Precision co... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: c9ac1177ffb801eaf2ec54bf734b72f5329a554c https://github.com/ehb54/ultrascan3/commit/c9ac1177ffb801eaf2ec54bf734b72f5329a554c Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/doc: document the GRPY Numerical Precision control The Double/Float control shipped with the in-process GRPY work but was never documented -- a grep across the whole manual returned nothing for it, despite the box sitting directly above the shell-reduction one just added. Same file, same window, so it is described here in window order: buried-bead exclusion, precision, shell reduction. Explains what the setting actually governs (the precision in which the large internal matrix is stored and factored), why it matters (that matrix holds eleven quantities per bead and grows as the square of the bead count, so it is what limits the treatable model size), and that the tensor arithmetic and all subsequent processing stay in double precision regardless. States the accuracy cost from validation rather than in the abstract: every labelled observable is identical to the four significant figures displayed, with only the near-zero reoriented coupling terms differing. Recommends Double as the default nonetheless, since the benefit appears only when memory is the binding constraint. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 15:52:56 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 14:52:56 -0700 Subject: [us-commits] [ehb54/ultrascan3] cf4ff5: somo/grpy: pre-flight memory guard for oversized m... Message-ID: Branch: refs/heads/ehb54-issue-987 Home: https://github.com/ehb54/ultrascan3 Commit: cf4ff58c731891c97b578dafc5b53166931a183e https://github.com/ehb54/ultrascan3/commit/cf4ff58c731891c97b578dafc5b53166931a183e Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: pre-flight memory guard for oversized models The in-process GRPY solver holds the tiled upper triangle of the 11N x 11N mobility matrix in RAM (peak ~ (11N)^2/2 * scalar bytes), so a model larger than physical RAM cannot fit in-core -- e.g. 20k beads needs ~180 GB double / ~90 GB single. Because the solve runs synchronously on the GUI thread, such a model previously sent the machine into heavy swapping with a frozen interface. Add a pre-flight guard in calc_grpy_hydro() before the batch starts: estimate peak memory for the largest selected model from its used-bead count and the chosen precision, read physical RAM (macOS hw.memsize / Linux sysconf; unknown -> no guard), and if the estimate exceeds ~70% of RAM: - interactive: a Cancel / Run-anyway dialog naming the estimate, the machine RAM, and the remedies (single precision, or a smaller model); - script mode (gui_script): never block on a dialog -- report the error to the editor and stderr and fail with a non-zero exit. Verified: a headless run of a 20,000-bead model on a 32 GB machine reports "~198.3 GB needed, 32.0 GB available" and exits non-zero pre-flight, instead of thrashing. Fixes ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 21:31:45 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 20:31:45 -0700 Subject: [us-commits] [ehb54/ultrascan3] 9107bb: somo/grpy: memory guard - add Windows physical-RAM... Message-ID: Branch: refs/heads/ehb54-issue-987 Home: https://github.com/ehb54/ultrascan3 Commit: 9107bb46c07f34ea32ea5afe4a775af018020f3d https://github.com/ehb54/ultrascan3/commit/9107bb46c07f34ea32ea5afe4a775af018020f3d Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: memory guard - add Windows physical-RAM detection Windows is a shipped SOMO target (GRPY_win64) but was falling through to the "unknown -> no guard" path. Add GlobalMemoryStatusEx (ullTotalPhys) so the pre-flight memory guard applies there too. Mac/Linux paths unchanged; the Windows branch is #if'd out off-Windows and needs verifying on the win build. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 21:34:38 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 20:34:38 -0700 Subject: [us-commits] [ehb54/ultrascan3] a23a53: somo/grpy: memory guard - point oversized models t... Message-ID: Branch: refs/heads/ehb54-issue-987 Home: https://github.com/ehb54/ultrascan3 Commit: a23a53982b33f7f85c4b33b422037f8355c0656a https://github.com/ehb54/ultrascan3/commit/a23a53982b33f7f85c4b33b422037f8355c0656a Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: memory guard - point oversized models to ZENO Single precision only ~halves the footprint, so a genuinely huge structure (e.g. 20k beads ~90 GB single) still will not fit on a modest machine. Add ZENO to the guard's remedy message as the size-independent alternative, noting its limitation (it does not compute rotational diffusion). Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 21:41:13 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 20:41:13 -0700 Subject: [us-commits] [ehb54/ultrascan3] de70ea: somo/grpy: clear grpy_used_beads at run start (fix... Message-ID: Branch: refs/heads/ehb54-issue-987 Home: https://github.com/ehb54/ultrascan3 Commit: de70ea2fcf18a94984a1f865fb30dee38f26b8db https://github.com/ehb54/ultrascan3/commit/de70ea2fcf18a94984a1f865fb30dee38f26b8db Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: clear grpy_used_beads at run start (fix stale count) grpy_used_beads was populated with push_back each run but, unlike its sibling lists (grpy_to_process, grpy_model_numbers), was never cleared at the top of calc_grpy_hydro -- it only drained via pop_front as models processed. So any run that aborts before processing (now including the pre-flight memory guard, but also the stop-flag and filename-length aborts) left a stale count behind, and the next run's max()/processing saw it. Observed as: a vdW model triggers the memory guard, then a subsequent smaller SoMo model in the same session is wrongly reported with the vdW bead count. Clear grpy_used_beads at run start, consistent with the other lists. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 21:58:00 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 20:58:00 -0700 Subject: [us-commits] [ehb54/ultrascan3] e34ae2: somo/doc: update manual for in-process GRPY, preci... Message-ID: Branch: refs/heads/ehb54-issue-987 Home: https://github.com/ehb54/ultrascan3 Commit: e34ae2102472da996832c77372c968ca5a6d4e72 https://github.com/ehb54/ultrascan3/commit/e34ae2102472da996832c77372c968ca5a6d4e72 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- somo/doc: update manual for in-process GRPY, precision, memory guard The GRPY overhaul (#972) and the memory guard (#987) left the SOMO manual stale/incomplete: - somo_misc.html documented the removed "Enable Parallel GRPY" checkbox and the Docker-based parallel path. Rewritten: GRPY now runs in-process, multi-threaded by default (no checkbox); notes the memory-lean/single-precision solver and the pre-flight memory guard, and points oversized models to single precision, a smaller model, or ZENO (size-independent, no rotational diffusion). Also softened the "GRPY can crash" note to the guarded behavior. - somo_hydro.html: document the new "GRPY Numerical Precision" (Double/Float) control; drop the stale "parallel GRPY ... July 2024 release" clause from the buried-beads paragraph. Release date in somo_misc.html marked with an HTML comment to confirm at release. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 22:11:51 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 21:11:51 -0700 Subject: [us-commits] [ehb54/ultrascan3] a11dc0: somo/doc: bump manual last-updated/last-modified d... Message-ID: Branch: refs/heads/ehb54-issue-987 Home: https://github.com/ehb54/ultrascan3 Commit: a11dc0be21767815c933c548a3f40de397ea5fe4 https://github.com/ehb54/ultrascan3/commit/a11dc0be21767815c933c548a3f40de397ea5fe4 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- somo/doc: bump manual last-updated/last-modified dates Update both date fields (top "Last updated" and bottom "Last modified on") on somo_misc.html and somo_hydro.html to reflect the GRPY doc edits. Refs ehb54/ultrascan-tickets#987 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 22:15:24 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 21:15:24 -0700 Subject: [us-commits] [ehb54/ultrascan3] cf4ff5: somo/grpy: pre-flight memory guard for oversized m... Message-ID: Branch: refs/heads/somo-dev Home: https://github.com/ehb54/ultrascan3 Commit: cf4ff58c731891c97b578dafc5b53166931a183e https://github.com/ehb54/ultrascan3/commit/cf4ff58c731891c97b578dafc5b53166931a183e Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: pre-flight memory guard for oversized models The in-process GRPY solver holds the tiled upper triangle of the 11N x 11N mobility matrix in RAM (peak ~ (11N)^2/2 * scalar bytes), so a model larger than physical RAM cannot fit in-core -- e.g. 20k beads needs ~180 GB double / ~90 GB single. Because the solve runs synchronously on the GUI thread, such a model previously sent the machine into heavy swapping with a frozen interface. Add a pre-flight guard in calc_grpy_hydro() before the batch starts: estimate peak memory for the largest selected model from its used-bead count and the chosen precision, read physical RAM (macOS hw.memsize / Linux sysconf; unknown -> no guard), and if the estimate exceeds ~70% of RAM: - interactive: a Cancel / Run-anyway dialog naming the estimate, the machine RAM, and the remedies (single precision, or a smaller model); - script mode (gui_script): never block on a dialog -- report the error to the editor and stderr and fail with a non-zero exit. Verified: a headless run of a 20,000-bead model on a 32 GB machine reports "~198.3 GB needed, 32.0 GB available" and exits non-zero pre-flight, instead of thrashing. Fixes ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: 9107bb46c07f34ea32ea5afe4a775af018020f3d https://github.com/ehb54/ultrascan3/commit/9107bb46c07f34ea32ea5afe4a775af018020f3d Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: memory guard - add Windows physical-RAM detection Windows is a shipped SOMO target (GRPY_win64) but was falling through to the "unknown -> no guard" path. Add GlobalMemoryStatusEx (ullTotalPhys) so the pre-flight memory guard applies there too. Mac/Linux paths unchanged; the Windows branch is #if'd out off-Windows and needs verifying on the win build. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: a23a53982b33f7f85c4b33b422037f8355c0656a https://github.com/ehb54/ultrascan3/commit/a23a53982b33f7f85c4b33b422037f8355c0656a Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: memory guard - point oversized models to ZENO Single precision only ~halves the footprint, so a genuinely huge structure (e.g. 20k beads ~90 GB single) still will not fit on a modest machine. Add ZENO to the guard's remedy message as the size-independent alternative, noting its limitation (it does not compute rotational diffusion). Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: de70ea2fcf18a94984a1f865fb30dee38f26b8db https://github.com/ehb54/ultrascan3/commit/de70ea2fcf18a94984a1f865fb30dee38f26b8db Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: clear grpy_used_beads at run start (fix stale count) grpy_used_beads was populated with push_back each run but, unlike its sibling lists (grpy_to_process, grpy_model_numbers), was never cleared at the top of calc_grpy_hydro -- it only drained via pop_front as models processed. So any run that aborts before processing (now including the pre-flight memory guard, but also the stop-flag and filename-length aborts) left a stale count behind, and the next run's max()/processing saw it. Observed as: a vdW model triggers the memory guard, then a subsequent smaller SoMo model in the same session is wrongly reported with the vdW bead count. Clear grpy_used_beads at run start, consistent with the other lists. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: e34ae2102472da996832c77372c968ca5a6d4e72 https://github.com/ehb54/ultrascan3/commit/e34ae2102472da996832c77372c968ca5a6d4e72 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- somo/doc: update manual for in-process GRPY, precision, memory guard The GRPY overhaul (#972) and the memory guard (#987) left the SOMO manual stale/incomplete: - somo_misc.html documented the removed "Enable Parallel GRPY" checkbox and the Docker-based parallel path. Rewritten: GRPY now runs in-process, multi-threaded by default (no checkbox); notes the memory-lean/single-precision solver and the pre-flight memory guard, and points oversized models to single precision, a smaller model, or ZENO (size-independent, no rotational diffusion). Also softened the "GRPY can crash" note to the guarded behavior. - somo_hydro.html: document the new "GRPY Numerical Precision" (Double/Float) control; drop the stale "parallel GRPY ... July 2024 release" clause from the buried-beads paragraph. Release date in somo_misc.html marked with an HTML comment to confirm at release. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: a11dc0be21767815c933c548a3f40de397ea5fe4 https://github.com/ehb54/ultrascan3/commit/a11dc0be21767815c933c548a3f40de397ea5fe4 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- somo/doc: bump manual last-updated/last-modified dates Update both date fields (top "Last updated" and bottom "Last modified on") on somo_misc.html and somo_hydro.html to reflect the GRPY doc edits. Refs ehb54/ultrascan-tickets#987 Commit: e4cc0467b55c3728bfcb217aa2623ea2ad65da6e https://github.com/ehb54/ultrascan3/commit/e4cc0467b55c3728bfcb217aa2623ea2ad65da6e Author: emre brookes Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- Merge pull request #497 from ehb54/ehb54-issue-987 somo/grpy: pre-flight memory guard for oversized models Compare: https://github.com/ehb54/ultrascan3/compare/2144ac859551...e4cc0467b55c To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 22:24:17 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 21:24:17 -0700 Subject: [us-commits] [ehb54/ultrascan3] cf4ff5: somo/grpy: pre-flight memory guard for oversized m... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: cf4ff58c731891c97b578dafc5b53166931a183e https://github.com/ehb54/ultrascan3/commit/cf4ff58c731891c97b578dafc5b53166931a183e Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: pre-flight memory guard for oversized models The in-process GRPY solver holds the tiled upper triangle of the 11N x 11N mobility matrix in RAM (peak ~ (11N)^2/2 * scalar bytes), so a model larger than physical RAM cannot fit in-core -- e.g. 20k beads needs ~180 GB double / ~90 GB single. Because the solve runs synchronously on the GUI thread, such a model previously sent the machine into heavy swapping with a frozen interface. Add a pre-flight guard in calc_grpy_hydro() before the batch starts: estimate peak memory for the largest selected model from its used-bead count and the chosen precision, read physical RAM (macOS hw.memsize / Linux sysconf; unknown -> no guard), and if the estimate exceeds ~70% of RAM: - interactive: a Cancel / Run-anyway dialog naming the estimate, the machine RAM, and the remedies (single precision, or a smaller model); - script mode (gui_script): never block on a dialog -- report the error to the editor and stderr and fail with a non-zero exit. Verified: a headless run of a 20,000-bead model on a 32 GB machine reports "~198.3 GB needed, 32.0 GB available" and exits non-zero pre-flight, instead of thrashing. Fixes ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: 9107bb46c07f34ea32ea5afe4a775af018020f3d https://github.com/ehb54/ultrascan3/commit/9107bb46c07f34ea32ea5afe4a775af018020f3d Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: memory guard - add Windows physical-RAM detection Windows is a shipped SOMO target (GRPY_win64) but was falling through to the "unknown -> no guard" path. Add GlobalMemoryStatusEx (ullTotalPhys) so the pre-flight memory guard applies there too. Mac/Linux paths unchanged; the Windows branch is #if'd out off-Windows and needs verifying on the win build. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: a23a53982b33f7f85c4b33b422037f8355c0656a https://github.com/ehb54/ultrascan3/commit/a23a53982b33f7f85c4b33b422037f8355c0656a Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: memory guard - point oversized models to ZENO Single precision only ~halves the footprint, so a genuinely huge structure (e.g. 20k beads ~90 GB single) still will not fit on a modest machine. Add ZENO to the guard's remedy message as the size-independent alternative, noting its limitation (it does not compute rotational diffusion). Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: de70ea2fcf18a94984a1f865fb30dee38f26b8db https://github.com/ehb54/ultrascan3/commit/de70ea2fcf18a94984a1f865fb30dee38f26b8db Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: clear grpy_used_beads at run start (fix stale count) grpy_used_beads was populated with push_back each run but, unlike its sibling lists (grpy_to_process, grpy_model_numbers), was never cleared at the top of calc_grpy_hydro -- it only drained via pop_front as models processed. So any run that aborts before processing (now including the pre-flight memory guard, but also the stop-flag and filename-length aborts) left a stale count behind, and the next run's max()/processing saw it. Observed as: a vdW model triggers the memory guard, then a subsequent smaller SoMo model in the same session is wrongly reported with the vdW bead count. Clear grpy_used_beads at run start, consistent with the other lists. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: e34ae2102472da996832c77372c968ca5a6d4e72 https://github.com/ehb54/ultrascan3/commit/e34ae2102472da996832c77372c968ca5a6d4e72 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- somo/doc: update manual for in-process GRPY, precision, memory guard The GRPY overhaul (#972) and the memory guard (#987) left the SOMO manual stale/incomplete: - somo_misc.html documented the removed "Enable Parallel GRPY" checkbox and the Docker-based parallel path. Rewritten: GRPY now runs in-process, multi-threaded by default (no checkbox); notes the memory-lean/single-precision solver and the pre-flight memory guard, and points oversized models to single precision, a smaller model, or ZENO (size-independent, no rotational diffusion). Also softened the "GRPY can crash" note to the guarded behavior. - somo_hydro.html: document the new "GRPY Numerical Precision" (Double/Float) control; drop the stale "parallel GRPY ... July 2024 release" clause from the buried-beads paragraph. Release date in somo_misc.html marked with an HTML comment to confirm at release. Refs ehb54/ultrascan-tickets#987 Co-Authored-By: Claude Opus 4.8 Commit: a11dc0be21767815c933c548a3f40de397ea5fe4 https://github.com/ehb54/ultrascan3/commit/a11dc0be21767815c933c548a3f40de397ea5fe4 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- somo/doc: bump manual last-updated/last-modified dates Update both date fields (top "Last updated" and bottom "Last modified on") on somo_misc.html and somo_hydro.html to reflect the GRPY doc edits. Refs ehb54/ultrascan-tickets#987 Commit: e4cc0467b55c3728bfcb217aa2623ea2ad65da6e https://github.com/ehb54/ultrascan3/commit/e4cc0467b55c3728bfcb217aa2623ea2ad65da6e Author: emre brookes Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- Merge pull request #497 from ehb54/ehb54-issue-987 somo/grpy: pre-flight memory guard for oversized models Commit: 35066a6c487776dbf7c210256ac1985ed5403000 https://github.com/ehb54/ultrascan3/commit/35066a6c487776dbf7c210256ac1985ed5403000 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_misc.html Log Message: ----------- Merge remote-tracking branch 'origin/somo-dev' into ehb54-issue-984 Commit: a782414c59388273e6decf00fb44cc9acfc3ee88 https://github.com/ehb54/ultrascan3/commit/a782414c59388273e6decf00fb44cc9acfc3ee88 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/doc: drop duplicate precision paragraph, fix shell-reduction cross-ref Merging somo-dev brought in its own "GRPY Numerical Precision" paragraph (e34ae210, PR #497), written independently of the one added on this branch. Git merged both cleanly since they landed in adjacent places, leaving the box documented twice. Upstream's is the project's own wording and landed first, so this drops ours and keeps it. Also fixes a cross-reference this exposed. The shell-reduction paragraph was written directly after the GRPY buried-bead paragraph and referred to "the question raised in the paragraph above". Our precision paragraph was later inserted between the two, silently breaking that reference; upstream's now sits in the same position. Rather than depend on ordering again, the reference now names the buried-bead option explicitly. Box order in the page matches the window: buried beads, precision, shell reduction. Page remains pure ASCII under its declared ISO-8859-1 charset. Compare: https://github.com/ehb54/ultrascan3/compare/c9ac1177ffb8...a782414c5938 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 22:37:13 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 21:37:13 -0700 Subject: [us-commits] [ehb54/ultrascan3] Message-ID: Branch: refs/heads/ehb54-issue-987 Home: https://github.com/ehb54/ultrascan3 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 22:44:29 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 21:44:29 -0700 Subject: [us-commits] [ehb54/ultrascan3] 308203: somo/grpy: cap the shell-reduction ladder by avail... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 3082031334ff5eac0bcbb03be8bac89be4457614 https://github.com/ehb54/ultrascan3/commit/3082031334ff5eac0bcbb03be8bac89be4457614 Author: ehb54 Date: 2026-08-06 (Thu, 06 Aug 2026) Changed paths: M us_somo/develop/grpy/grpy_shell.hpp M us_somo/develop/grpy/tests/test_shell.cpp M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/grpy: cap the shell-reduction ladder by available memory Merging somo-dev brought in the issue-987 pre-flight memory guard, which refuses a GRPY run whose mobility matrix would exceed RAM. It sizes that matrix from the FULL bead count, in calc_grpy_hydro(), before shell reduction is applied in grpy_process_next() -- so it would turn away precisely the large models shell reduction exists to make feasible. The ladder normally stops well short of the full model, and memory goes as the square of the bead count, so a run that stops at ~25% of the beads needs ~6% of the refused matrix. Rather than weaken the guard, the budget is now passed into the ladder: - ShellOptions::max_beads caps the largest rung. Checked after building the subset (cheap) but before the solve (expensive), so a rejected rung costs nothing; the ladder ascends, so the first rung over budget ends it. - A capped ladder reports mem_capped and does NOT claim convergence. The result stands on its error bar, which is stated as usual and will generally exceed the requested target. It is never passed off as converged. - The guard defers to shell reduction only when the budget admits at least the smallest rung; below that there is nothing to compute and it still refuses. When shell reduction is off, its message now offers the option, noting that unlike ZENO it still yields rotational diffusion. So an oversized model now gives the best result that fits, with a quantified error, instead of nothing. Two supporting cleanups, both forced by the above: truthy() is promoted from a lambda local to grpy_process_next() to a file-static, so the guard and the solver setup resolve the same scripting overrides (the guard previously read hydro.grpy_single directly and would have ignored a grpy_single override); and the matrix-size estimate is factored into grpy_matrix_bytes() with grpy_max_beads_for_ram() as its inverse, so the guard and the cap cannot drift apart about what fits. Tests cover a slack cap (must not perturb the unreduced, exact path), a binding cap (capped, non-converged, bar finite, budget respected, explained in the report), and a cap below the smallest rung. The last of these found a latent crash: with no rung run, err_est was empty while require was not, and the report loop indexed past the end. Guarded, and that case now states plainly that nothing was computed. Manual documents the lifted refusal in the shell-reduction section. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 23:13:18 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 22:13:18 -0700 Subject: [us-commits] [ehb54/ultrascan3] 137e3a: somo/grpy: report ladder progress, and fix stray d... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 137e3a50fa1da2dc17cd94386b3636fa5f130b7c https://github.com/ehb54/ultrascan3/commit/137e3a50fa1da2dc17cd94386b3636fa5f130b7c Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/grpy/grpy_shell.hpp M us_somo/develop/grpy/tests/test_shell.cpp M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: report ladder progress, and fix stray double percent in messages Two reported problems with what the shell-reduction ladder shows while running. PROGRESS. Every rung is a separate solve sweeping 0..100%, and each was forwarded to the caller raw, so the bar restarted once per rung and the stage text was only ever "Model 1 : inverting matrices" -- several solves looked like one stalled repeating one. The ladder now maps each rung onto its share of the whole run, weighted by predicted cost (~N^3), and prefixes the stage with "rung i/n, N beads". The bar advances monotonically instead of restarting. The denominator assumes the ladder runs to its last planned rung, so converging early makes the bar jump to done, which is correct. This is done by wrapping the callback inside the module, so the SOMO callback signature is untouched and the non-shell path still passes progress through verbatim (asserted by a test). Also added ShellOptions::on_rung, called as each rung lands, wired to log the bead count and the error estimate against the target. The ladder was otherwise silent for its whole duration; now its convergence is visible as it happens. PERCENT. Reported from a real run: "estimated error 0.489%%". QString::arg(), unlike printf, has no "%%" escape -- it substitutes %1..%99 and passes every other "%" through untouched -- so the literal "%%" written in five messages reached the user verbatim. The tolerance line had it too ("tolerance 0.5%%"). Rather than rely on "%1%%2" parsing correctly (it does, but it is ambiguous to read), the percent sign is now attached by grpy_pct(), which formats the whole token. Verified against real Qt: the old form reproduces the reported string exactly, the new one renders "0.489%". The module's own report text was checked and is unaffected -- it formats via snprintf, where "%%" is the correct escape. Tests assert progress never goes backwards across a multi-rung ladder, stays in 0..100, names its rung and bead count, and is left unmodified when shell reduction is off. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 23:21:11 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 22:21:11 -0700 Subject: [us-commits] [ehb54/ultrascan3] 33a5e7: somo/grpy: document the memory cap and progress re... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 33a5e7950ed7181651b20283cf7affb0e0133b8c https://github.com/ehb54/ultrascan3/commit/33a5e7950ed7181651b20283cf7affb0e0133b8c Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/grpy/README.md M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/grpy: document the memory cap and progress reporting Docs lagged the last two commits. Module README gains two sections. The memory cap covers why a caller's pre-flight refusal has to size the matrix from the full bead count and so turns away the very models the ladder can handle, what max_beads does about it, and the two contract points a caller must honour: a capped run reports mem_capped and is never marked converged, and levels == 0 means there is no result and the default-constructed Results must not be read. The progress section records that ShellSolver wraps the ProgressFn it is given rather than forwarding it per rung -- the reason the caller's bar no longer restarts several times per model -- that the callback signature is unchanged and passes through verbatim when disabled, and what on_rung reports. The manual gains one sentence in the shell-reduction description: each calculation in the series is reported as it completes with its bead count and error estimate, and the progress bar refers to the series as a whole. That is what a user actually sees, and previously the page implied a single opaque calculation. INTEGRATION.md was checked and needs nothing -- it covers the drop-in core solver and does not mention shell reduction at all. Page remains pure ASCII under its declared ISO-8859-1 charset. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Thu Aug 6 23:35:33 2026 From: noreply at github.com (emre brookes) Date: Thu, 06 Aug 2026 22:35:33 -0700 Subject: [us-commits] [ehb54/ultrascan3] 501aba: somo/grpy: document how to read ShellReport Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 501abad6b701746a02242da35fe66035d8ab2097 https://github.com/ehb54/ultrascan3/commit/501abad6b701746a02242da35fe66035d8ab2097 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/grpy/README.md Log Message: ----------- somo/grpy: document how to read ShellReport The README covered the fields that decide what happened (converged, unreduced, mem_capped, viscosity_unreliable) but not the ones a caller actually reads out. Adds a field table. The points that are not guessable from the names: err_est, extrapolated and k_obs are parallel to require, not to anything else; k_obs == 0 means extrapolation was declined, so err_est is the raw inter-rung gap and extrapolated holds the final rung's value rather than an extrapolated one; and run() returns the final rung's Results verbatim, so the extrapolated values live only in the report -- deliberately, since overwriting the scalars would contradict the report text embedded in them. Also states that only `unreduced` licenses treating a result as exact. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 06:25:30 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 05:25:30 -0700 Subject: [us-commits] [ehb54/ultrascan3] 4e14d5: somo/grpy: keep the UI alive during assembly, fact... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 4e14d5f3e42909cec2118c512c263d4f04f916ec https://github.com/ehb54/ultrascan3/commit/4e14d5f3e42909cec2118c512c263d4f04f916ec Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/grpy/grpy_core.hpp M us_somo/develop/grpy/linalg.hpp M us_somo/develop/grpy/tests/test_shell.cpp Log Message: ----------- somo/grpy: keep the UI alive during assembly, factor and solve The GUI froze for seconds at a time during "INVERTING MATRICES", and was dead outright either side of it. Two causes. The calling thread is a compute worker: QtConcurrent::blockingMap both blocks the caller and uses it to run tasks, so the event loop cannot turn for the whole duration of any for_range. Progress -- and therefore the processEvents() that keeps the GUI breathing -- only ran between for_range calls. And progress was emitted from exactly one place in the numeric core: once per tile column of the Cholesky. Assembly (one for_range over ~4M pair blocks on a 2832-bead model) and solve reported nothing whatsoever. Within the factor, the trailing update costs O((nt-k)^2), so the earliest columns are by far the longest -- measured ~5 s each at dim 31152, decaying to milliseconds. Assembly and the factor's trailing update are now chunked, with the chunk self-tuning toward ~80 ms per slice (double under 40 ms, halve over 160 ms) so the granularity holds across machines and model sizes rather than being a constant tuned here. The factor retunes within a column, not just between columns, because the first columns are exactly where the freeze was worst. Solve reports per tile. The bar now spans 0-30 assemble, 30-90 factor, 90-100 solve. The factor bar is also cost-weighted by trailing-update work completed instead of being linear in the column index; since cost per column is quadratic, the old bar crawled at the start and raced at the end. With no callback -- the CLI and every test -- the work runs as a single chunk, exactly as before. Tests assert the chunked path is numerically INERT: same Dt, same eta, and a byte-identical report versus the unchunked path. That check is the real guard, since the goldens only ever exercise the no-callback path. It earned its place immediately: the first version advanced the loop by `chunk`, which is retuned inside the loop, so a doubling silently skipped beads and corrupted the matrix. Both loops now advance by what was actually processed. Also asserts progress is monotone, stays in 0..100, and that no phase is silent. Tick count is deliberately not asserted tightly -- the chunker targets a wall time, so a small model that finishes fast correctly uses few large chunks. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 06:39:34 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 05:39:34 -0700 Subject: [us-commits] [ehb54/ultrascan3] 7578f3: somo/grpy: GRPY_SHELL_MAX_BEADS override, and repo... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 7578f39c336cf8e683897592b08a4377d280cfed https://github.com/ehb54/ultrascan3/commit/7578f39c336cf8e683897592b08a4377d280cfed Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/grpy: GRPY_SHELL_MAX_BEADS override, and report the cap every run The shell-reduction bead cap was derived solely from physical RAM, with no way to move it. That made the memory-capped path effectively untestable: the ladder can only reach the cap by FAILING on the rung below it, so on a model large enough to have a cap at all, exercising it means paying for that rung first -- 5h44m on a real 11328-bead model, which then converged one rung short of the cap anyway and never exercised it. GRPY_SHELL_MAX_BEADS in the environment, or grpy_shell_max_beads as a script parameter, now overrides it. With a small value the same model reaches the cap in seconds. Env/script only with no GUI control, matching grpy_ooc_dir: a diagnostic and shared-machine knob rather than a user setting. It is also the only way to hold GRPY under a chosen footprint on a machine shared with other work, which the 70%-of-RAM rule cannot express. Honoured in both directions. A value above what memory supports is flagged rather than silently clamped -- overriding is deliberate, and clamping would make the reported cap a lie. Reported every run, which is the point: an override changes which results are obtainable, and a stale environment variable would otherwise silently bound every calculation with nothing on screen to say so. With no override and shell reduction on, the memory-derived cap and the RAM it came from are printed instead, so the limit is never a mystery. Both go to the progress window, once per run. The guard and the ladder resolve the cap through one shared function. If they resolved it separately the guard could admit a run the ladder then refuses to compute, or refuse one it could have done. Manual documents the variable in the shell-reduction section; the parameter is also added to the gui_script reference ticket (ultrascan-tickets#990). Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 06:45:20 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 05:45:20 -0700 Subject: [us-commits] [ehb54/ultrascan3] c4e049: somo/doc: bump somo_hydro last-modified to the act... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: c4e049f8e84edc4de5df9b7af5baf5d6e61338d2 https://github.com/ehb54/ultrascan3/commit/c4e049f8e84edc4de5df9b7af5baf5d6e61338d2 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/doc: bump somo_hydro last-modified to the actual last edit date Content was current; only the stamp lagged. Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 07:10:31 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 06:10:31 -0700 Subject: [us-commits] [ehb54/ultrascan3] f3e555: somo/grpy: name the worst observable, and stop ann... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: f3e555a32854d3ee39df4d5df0901640384580c2 https://github.com/ehb54/ultrascan3/commit/f3e555a32854d3ee39df4d5df0901640384580c2 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: name the worst observable, and stop announcing an inert cap Both found by a real capped run (3GUT vdW, GRPY_SHELL_MAX_BEADS=2000). The result line quoted err_max alone: "estimated error 3.85%". That is the MAX over the requested observables, and intrinsic viscosity runs ~3.3x the error of D_t at equal reduction, so on an unconverged run the single number quoted is essentially always the viscosity's. Reading it as the accuracy of the whole calculation makes D_t look several times worse than it is -- in that run, 1416 of 11328 beads kept implies a D_t bar near 1.15%, not 3.85%. ShellReport::worst was already computed for exactly this and had never been shown; it is now named, with a following line pointing at the per-observable estimates in the results file. Suppressed on an exact (unreduced) result, where every bar is zero and "worst" means nothing. The cap override also announced itself when shell reduction was OFF, where it bounds nothing: the same run printed "bead cap OVERRIDDEN to 2000" and then refused the model on memory, implying the 2000 had caused the refusal when it was irrelevant. It now says so when inert, rather than going silent -- a stale environment variable should still be visible. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 07:21:24 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 06:21:24 -0700 Subject: [us-commits] [ehb54/ultrascan3] faf147: somo: silence the per-atom debug dump at the end o... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: faf147fa301e7485b3f1f68bb4c54fceee7f4c70 https://github.com/ehb54/ultrascan3/commit/faf147fa301e7485b3f1f68bb4c54fceee7f4c70 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_load.cpp Log Message: ----------- somo: silence the per-atom debug dump at the end of calc_mw() It printed "end of calc_mw()" and then one CSV row per atom on every PDB load -- thousands of lines for a large structure -- which slows a debug cycle when stdout is a terminal or an editor shell. Commented rather than deleted: it is diagnostic, not dead, and is the thing to re-enable when ionization or net-charge numbers look wrong. Left with a note of the caveat that made it misleading anyway -- its pH is hardwired to 7 rather than read from the form, so it does not describe the pH actually in use; the already-commented call immediately above is the variant that does. Matches the several other commented-out info_* diagnostics around it. Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 07:46:32 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 06:46:32 -0700 Subject: [us-commits] [ehb54/ultrascan3] 0c57fb: somo/grpy: rate-limit progress calls; they cost mo... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 0c57fbfc96e735c40ff26c82c9a1b31bfeeb0916 https://github.com/ehb54/ultrascan3/commit/0c57fbfc96e735c40ff26c82c9a1b31bfeeb0916 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/grpy/grpy_core.hpp M us_somo/develop/grpy/linalg.hpp Log Message: ----------- somo/grpy: rate-limit progress calls; they cost more than the work they report A run whose ladder stopped at the same rungs as an earlier one took 8m20s against 4m09s. Requiring intrinsic viscosity adds no computation -- it only changes when the ladder stops -- so the doubling was the progress reporting added in 4e14d5f3. Progress has two independent problems and one knob cannot solve both: FREEZE LENGTH -- the calling thread is a compute worker, so the event loop cannot turn until the current slice ends. Fixed by sizing the slice. CALL RATE -- the callback itself costs something, paid per call however short the slices are. In SOMO it is qApp->processEvents() against an editor buffer that grows all session, which is why this hurt a long run and not a short one. Nothing controlled this at all: solve() ticked once per tile, up to 2*nt calls -- hundreds on a large model -- against an operation that is cheap next to the factor. tune_chunk now times only the work, never the callback. Timing them together made an expensive callback SHRINK the chunk, which raises the call rate and makes the overhead worse -- the opposite correction. That defect was real but was not the main cost: fixing it alone moved 80 calls to 73. ProgressGate is the actual fix. It rate-limits emissions against what the callback measurably costs: emit after ~10x the last callback's duration, and never more often than every ~80 ms. A cheap callback is essentially unthrottled; an expensive one throttles itself to ~10% overhead instead of dominating. Applied to assembly, factor and solve. Measured, 512-bead model with a 20 ms callback: 80 calls and 2.79x the whole solve before, 11 calls and 1.03x after. A trivial callback is 0.98x, i.e. the chunking machinery itself costs nothing. The tradeoff is deliberate: frequent repaints and low overhead are not both achievable when a repaint is expensive. This favours throughput, so the bar updates less often exactly where updating is costly. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 07:51:12 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 06:51:12 -0700 Subject: [us-commits] [ehb54/ultrascan3] ede8e9: Report time and wavelength units in UV-Vis file he... Message-ID: Branch: refs/heads/ehb54-issue-991 Home: https://github.com/ehb54/ultrascan3 Commit: ede8e9a28ff5ed7db03f418db4677eef0f860e60 https://github.com/ehb54/ultrascan3/commit/ede8e9a28ff5ed7db03f418db4677eef0f860e60 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_dad.h M us_somo/develop/src/us_hydrodyn_dad.cpp Log Message: ----------- Report time and wavelength units in UV-Vis file headers The UV-Vis module wrote its saved and viewed .dat headers with a hardcoded SAXS abscissa: both save_file() and view() started from a fixed " q units:1/A" and emitted q / I(q) column names for anything with f_is_time false. A(t) curves at a fixed wavelength are in time and A(lambda) curves at a fixed time are in nm, so neither was q, and the headers contradicted the plot axes, which already labelled the same curves Time [s] and lambda [nm]. Factor the duplicated blocks into header_units() and header_column_names(), keyed on the same _UV-Vis_ plus f_is_time pair update_enables() uses for its axis titles. Genuinely q-based curves in this module (_Rt_q, _Ihasht_q, _UV_Vis_Istarq_t) keep the q header. The same conflation of "not time" with "is q" corrupted data on load: use_units carries the 1/nm to 1/Angstrom q conversion from the global SAS option, and was applied to every non-time file, so reloading a saved A(lambda) curve with that option enabled multiplied every wavelength by 0.1. Force use_units to 1.0 for UV-Vis wavelength files, alongside the two existing special cases, testing both the new header token and the file name so files saved by earlier versions are covered. Also omit zero-valued PSV, I0se and I0st on UV-Vis curves; they are set unconditionally when A(lambda) curves are made and carry no meaning on absorbance data. Refs ehb54/ultrascan-tickets#991 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 07:51:21 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 06:51:21 -0700 Subject: [us-commits] [ehb54/ultrascan3] 8599c8: somo/doc: say that the quoted shell-reduction erro... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 8599c88d5ecbfe77c3688ccf953369d0afd7017f https://github.com/ehb54/ultrascan3/commit/8599c88d5ecbfe77c3688ccf953369d0afd7017f Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/doc: say that the quoted shell-reduction error is the largest over quantities The page said the achieved error is written to the results file, but not that the single figure shown in the progress window is the MAXIMUM over the requested quantities. Since intrinsic viscosity converges far more slowly than the rest, that figure is usually its, and reading it as the accuracy of the translational diffusion coefficient understates the latter severalfold -- a misreading a real run produced. Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 08:21:14 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 07:21:14 -0700 Subject: [us-commits] [ehb54/ultrascan3] 8dcc49: somo/grpy: exclude the overwrite prompt from the G... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 8dcc49382cade039accd9f266f8b37ac37448176 https://github.com/ehb54/ultrascan3/commit/8dcc49382cade039accd9f266f8b37ac37448176 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: exclude the overwrite prompt from the GRPY timer "Time to process" spans the whole run, and the results-writing path prompts for a filename whenever an output file exists and overwrite_hydro is false. That prompt is modal, so the operator's response time was counted as compute. Measured directly: the same binary, model and settings gave 5m 00s answering slowly and 3m 49s answering quickly -- 71 s of pure click latency, varying per run, which makes interactive GRPY timings incomparable with each other. It also cost real analysis time here: a 21% gap between two runs was attributed to machine contention on the strength of a microbenchmark that bounded the alternative explanation at ~3%. The bound was right; the conclusion was wrong. The missing time was the operator. US_Timer already supports this exactly: stop_timer banks the interval so far WITHOUT counting a completion, and start_timer restarts from zero, so stop/start is pause/resume and the paused span is never accumulated. No change to US_Timer. An RAII guard applies it at the four prompt sites that fall inside the timed region; the fifth call runs before the timer starts and is untouched. The prompt itself is deliberately unchanged -- this only stops it being counted as compute. Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 08:36:49 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 07:36:49 -0700 Subject: [us-commits] [ehb54/ultrascan3] 104ed9: somo/grpy: optionally write and display a bead mod... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 104ed92bc56aef41aaa36f39ccb10212f3422f74 https://github.com/ehb54/ultrascan3/commit/104ed92bc56aef41aaa36f39ccb10212f3422f74 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/grpy/grpy_exposure.hpp M us_somo/develop/grpy/grpy_shell.hpp M us_somo/develop/grpy/tests/test_shell.cpp M us_somo/develop/include/us_hydrodyn.h M us_somo/develop/include/us_hydrodyn_hydro.h A us_somo/develop/revision.sh M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/develop/src/us_hydrodyn_hydro.cpp M us_somo/develop/src/us_hydrodyn_settings.cpp M us_somo/develop/src/us_hydrodyn_write.cpp A us_somo/develop/us_saxs_cmds_t/moc_predefs.h A us_somo/develop/us_saxs_cmds_t/moc_us_cmdline_app.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/grpy: optionally write and display a bead model of each shell rung A "Save shell bead models" checkbox in the GRPY Shell Reduction box. When set, the reduced model used at each ladder rung is written and opened in the viewer, so the shell can be seen thickening as the ladder converges and the retained beads inspected directly. For validating the reduction by eye; off by default. Files go to /tmp as -shell-rung-, overwritten without prompting -- they are regenerated every run, and prompting per rung would add a modal dialog per rung to a diagnostic. The mapping from the shell report back to beads was the part worth care. ShellReport now records the indices its ranking selected (ShellOptions:: record_subsets, off by default, so nothing is paid when unused), and those index the bead list handed to GRPY -- i.e. the .grpy file, which holds the beads that are active and, unless buried beads are included, not buried, in `use_model` order. That order is NOT bead_model order: bead_output.sequence == 1 reorders into exposed-sidechain / exposed-main-chain / buried. Taking bead_model order would therefore have written models of the wrong beads, silently and plausibly. To make that impossible rather than merely correct today, the ordering is extracted from write_bead_model() into US_Hydrodyn::bead_model_output_order() and both callers use it. The writer also refuses and says so if an index falls outside the rebuilt list, rather than emitting a wrong picture. Selection now returns indices (reduce_top_frac_idx), which also removes the old coordinate-matching rebuild -- O(keep*N), some 32M comparisons on an 11328-bead model -- with reduce_top_frac kept as a wrapper so existing callers and tests are unaffected. Tests: recorded subsets are sized to their rung, in range, unique, nested (each rung contains the previous), complete on the full rung, absent unless requested, and identical to the ranking's own selection. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 08:39:25 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 07:39:25 -0700 Subject: [us-commits] [ehb54/ultrascan3] 7d2452: somo: untrack revision.sh and moc artifacts commit... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 7d245291648635d6ac78b2781985c39d165d406a https://github.com/ehb54/ultrascan3/commit/7d245291648635d6ac78b2781985c39d165d406a Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: R us_somo/develop/revision.sh R us_somo/develop/us_saxs_cmds_t/moc_predefs.h R us_somo/develop/us_saxs_cmds_t/moc_us_cmdline_app.cpp Log Message: ----------- somo: untrack revision.sh and moc artifacts committed by mistake The previous commit staged with `git add -A us_somo`, which swept in three files that were untracked for good reason: - us_somo/develop/revision.sh -- somo-dev deliberately removed this from the tree; each clone supplies its own untracked copy, and qmake runs it as a FORCE target on every build. Tracking it both reverses that decision and makes every build dirty the working tree. - us_saxs_cmds_t/moc_predefs.h, moc_us_cmdline_app.cpp -- moc output, i.e. build artifacts. Tracking them also broke `git pull` for anyone holding their own copies: "untracked working tree files would be overwritten by merge". Removed from the index only; the local files are untouched. Anyone whose pull was blocked can now pull cleanly -- the net change across the two commits does not touch these paths, so their local copies are left alone. Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 08:50:22 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 07:50:22 -0700 Subject: [us-commits] [ehb54/ultrascan3] f9bdfd: somo/doc: theory page for GRPY shell reduction, wi... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: f9bdfd141549a30df1cab9c799cc167486a11659 https://github.com/ehb54/ultrascan3/commit/f9bdfd141549a30df1cab9c799cc167486a11659 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html A us_somo/somo/doc/manual/somo/somo_hydro_shell_reduction.html Log Message: ----------- somo/doc: theory page for GRPY shell reduction, with the mathematics and references The user-facing documentation named Richardson extrapolation in a single sentence and stopped there. The mathematics existed only in the module README and the header comments, neither of which a SOMO user reads. New page somo_hydro_shell_reduction.html, following the existing theory-page pattern (cormap.html, IntegralBaselineTheory.html), linked from the sentence that previously stood alone. It covers why bead count dominates the cost, how the subsets are chosen and why by fraction rather than by exposure threshold, the extrapolation itself, the safeguards, per-quantity convergence, the extent of the testing, and what the option is and is not for. Every formula and constant on the page was checked against the implementation rather than written from memory: the order equation, the remaining-error and extrapolated-value expressions, the clamp range, the 1.5 safety factor, the half-the-raw-gap floor, the default ladder, and the 8/7 geometric cost. Two things it makes explicit that the documentation did not say anywhere: - The extrapolation needs THREE subsets. A run that stops after two -- because it converged at once, or because memory allowed no more -- reports the raw inter-rung difference instead. Still conservative, but cruder, and decided by how the ladder happens to stop rather than by anything the user set. - "Shell reduction" is NOT the classical shell model. That method replaces the particle with surface beads and extrapolates to zero bead radius; this one retains existing beads and extrapolates to the complete model. Same physical motivation, both extrapolations to a limit, different procedures -- and an easy confusion for exactly this audience. References: Richardson 1911 and Richardson & Gaunt 1927 for the method; Roache 1994/1998 for the three-level observed-order practice this follows (the Grid Convergence Index, with bead count in place of grid spacing); Shrake & Rupley 1973 for the exposure calculation; Garcia de la Torre & Bloomfield 1981 and Carrasco & Garcia de la Torre 1999 for the shell-model context distinguished above; Zuk et al 2018 and Brookes & Rocco 2018 for GRPY and SOMO. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 08:54:23 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 07:54:23 -0700 Subject: [us-commits] [ehb54/ultrascan3] 908b2f: somo/doc: link the shell-reduction theory page fro... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 908b2ffbbc38781d8e1125ca14ee1184630ed3e2 https://github.com/ehb54/ultrascan3/commit/908b2ffbbc38781d8e1125ca14ee1184630ed3e2 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/doc: link the shell-reduction theory page from the section head and the accuracy text The theory page had a single inbound link, buried in the second of eight paragraphs. A reader arriving at the box heading, or skimming to the accuracy figures, would not have seen it. Now linked from three places, each where a reader would want it: the opening paragraph, which poses the question the page answers; the Richardson sentence, which names the method; and the accuracy paragraph, from which the natural next question is how far the estimate has been tested. Dates: both stamps on both pages already read the current date, so nothing to bump. somo_misc.html carries an earlier date but is upstream's edit, correctly stamped for itself. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 09:10:13 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 08:10:13 -0700 Subject: [us-commits] [ehb54/ultrascan3] 7af0d3: somo/grpy: show each shell model as it is made, an... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 7af0d35d528bfa46d51f00796442cdaf4053e1e1 https://github.com/ehb54/ultrascan3/commit/7af0d35d528bfa46d51f00796442cdaf4053e1e1 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/grpy/grpy_shell.hpp M us_somo/develop/grpy/tests/test_shell.cpp M us_somo/develop/include/us_hydrodyn.h M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/develop/src/us_hydrodyn_hydro.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/grpy: show each shell model as it is made, and let Stop end the ladder Two changes that only make sense together. The shell models were written in a batch after the whole ladder finished, which is the least useful moment: by then there is nothing left to decide. They are now written and displayed as each rung completes, so a shell that is obviously wrong can be seen while the calculation is still running. That is worth nothing unless the run can then be stopped, and it could not. stopFlag was consulted only inside the progress callback, where it skipped a UI update and nothing else -- pressing Stop did not end a running GRPY calculation at all. ShellOptions::should_stop is now checked between rungs and wired to stopFlag, so Stop ends the ladder at the end of the rung in progress. Since each rung costs roughly eight times the one before, stopping before the next begins saves nearly all of what remained. A stopped run keeps what it computed, reports its error bar, and is marked NOT converged -- the same treatment as a memory-capped one, and never passed off as if it had converged. Stopping before any rung ran leaves levels == 0 and no result, which the caller must detect, again as with the memory cap. Between rungs only: a rung already running goes to completion, since the solve has no interior abort. Adding one would mean threading cancellation through the factorization, which is a larger change for much less benefit. The per-rung write reads srep.kept.back() from the live report, which is sound because the module records each rung's selection before calling on_rung. Also widens the options window to 740 and lays the shell-reduction box out in two rows. That box carries six controls, about a hundred characters of label text -- half again the widest of the other boxes -- and was clipped on the right. Two rows drops what it demands to roughly a single row's width, so it survives larger fonts rather than merely clearing today's threshold; the width increase is headroom, not the fix. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 09:23:52 2026 From: noreply at github.com (Lukas Dobler) Date: Fri, 07 Aug 2026 08:23:52 -0700 Subject: [us-commits] [ehb54/ultrascan3] 115987: automatic connect conversion Message-ID: Branch: refs/heads/lukas/signal-slot Home: https://github.com/ehb54/ultrascan3 Commit: 115987347917fca6725b806ac40b419752d704d3 https://github.com/ehb54/ultrascan3/commit/115987347917fca6725b806ac40b419752d704d3 Author: Doluk <69309597+doluk at users.noreply.github.com> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M gui/us_analyte_gui.cpp M gui/us_associations_gui.cpp M gui/us_buffer_gui.cpp M gui/us_convert_gui.cpp M gui/us_data_loader.cpp M gui/us_editor.cpp M gui/us_experiment_gui.cpp M gui/us_extinctfitter_gui.cpp M gui/us_extinction_gui.cpp M gui/us_failed_gmp_run_gui.cpp M gui/us_get_run.cpp M gui/us_intensity.cpp M gui/us_load_auc.cpp M gui/us_model_gui.cpp M gui/us_model_loader.cpp M gui/us_plot.cpp M gui/us_plot.h M gui/us_predict1.cpp M gui/us_predict1.h M gui/us_project_gui.cpp M gui/us_properties.cpp M gui/us_report_general_gui.cpp M gui/us_report_gui.cpp M gui/us_resids_bitmap.cpp M gui/us_resids_bitmap.h M gui/us_rotor_gui.cpp M gui/us_run_details2.cpp M gui/us_sassoc.cpp M gui/us_sassoc.h M gui/us_scan_excl_gui.cpp M gui/us_select_edits.cpp M gui/us_select_triples.cpp M gui/us_sim_params_gui.cpp M gui/us_solution_gui.cpp M gui/us_tmst_plot.cpp M gui/us_widgets.cpp M programs/us_2dplot/us_2dplot.cpp M programs/us_2dsa/us_2dsa.cpp M programs/us_2dsa/us_2dsa_process.cpp M programs/us_2dsa/us_adv_analysis_2d.cpp M programs/us_2dsa/us_analysis_control_2d.cpp M programs/us_2dsa/us_plot_control_2d.cpp M programs/us_2dsa/us_resplot_2d.cpp M programs/us_2dsa/us_show_norm.cpp M programs/us_2dsa/us_show_norm.h M programs/us_2dsa/us_worker_2d.cpp M programs/us_abde/us_abde_main.cpp M programs/us_abde/us_norm_profile.cpp M programs/us_analysis_profile/us_analysis_profile.cpp M programs/us_astfem_sim/us_astfem_sim.cpp M programs/us_astfem_sim/us_clipdata.cpp M programs/us_audit_trail_gmp/us_audit_trail_gmp.cpp M programs/us_autoflow_analysis/us_autoflow_analysis.cpp M programs/us_buoyancy/us_buoyancy.cpp M programs/us_colorgradient/us_colorgradient.cpp M programs/us_com_project/us_com_project_gui.cpp M programs/us_combine_models/us_combine_models.cpp M programs/us_config/us_admin.cpp M programs/us_config/us_advanced.cpp M programs/us_config/us_color.cpp M programs/us_config/us_config.cpp M programs/us_config/us_database.cpp M programs/us_config/us_font.cpp M programs/us_config/us_newxpnhost_db.cpp M programs/us_config/us_xpnhost.cpp M programs/us_config/us_xpnhost_db.cpp M programs/us_ddist_combine/us_ddist_combine.cpp M programs/us_ddist_combine/us_select_rundd.cpp M programs/us_density_match/us_density_match.cpp M programs/us_density_match/us_model_params.cpp M programs/us_density_match/us_remove_models.cpp M programs/us_dmga_init/us_constraints_edit.cpp M programs/us_dmga_init/us_dmga_init.cpp M programs/us_edit/us_edit.cpp M programs/us_edit/us_edit_scan.cpp M programs/us_edit/us_exclude_profile.cpp M programs/us_edit/us_get_edit.cpp M programs/us_edit/us_ri_noise.cpp M programs/us_edit/us_select_lambdas.cpp M programs/us_equiltime/us_equiltime.cpp M programs/us_esigner_gmp/us_esigner_gmp.cpp M programs/us_experiment/us_exp_utils.cpp M programs/us_experiment/us_experiment_gui_optima.cpp M programs/us_experiment/us_proto_ranges.cpp M programs/us_export_legacy/us_export.cpp M programs/us_fds_filemanager/us_fds_filemanager.cpp M programs/us_fematch/us_adv_dmgamc.cpp M programs/us_fematch/us_advanced_fem.cpp M programs/us_fematch/us_fematch.cpp M programs/us_fematch/us_plot_control_fem.cpp M programs/us_fematch/us_resplot_fem.cpp M programs/us_fematch/us_thread_worker.cpp M programs/us_fit_meniscus/us_fit_meniscus.cpp M programs/us_ga_init/us_ga_init.cpp M programs/us_globalequil/us_eqfit_control.cpp M programs/us_globalequil/us_eqmodel_control.cpp M programs/us_globalequil/us_globalequil.cpp M programs/us_globalequil/us_long_messagebox.cpp M programs/us_globalequil/us_model_adpars.cpp M programs/us_globalequil/us_model_select.cpp M programs/us_helpdaemon/us_helpdaemon.cpp M programs/us_integral/us_delete_models.cpp M programs/us_integral/us_integral.cpp M programs/us_manage_data/us_data_tree.cpp M programs/us_manage_data/us_manage_data.cpp M programs/us_modelmetrics/us_modelmetrics.cpp M programs/us_mwl_species_fit/us_mwl_sf_plot3d.cpp M programs/us_mwl_species_fit/us_mwl_species_fit.cpp M programs/us_mwl_species_sim/us_mwl_species_sim.cpp M programs/us_mwl_spectra/us_mwl_spectra.cpp M programs/us_mwl_spectra/us_mwls_pltctl.cpp M programs/us_mwlr_viewer/us_mwl_pltctrl.cpp M programs/us_mwlr_viewer/us_mwl_run.cpp M programs/us_mwlr_viewer/us_mwlr_viewer.cpp M programs/us_pcsa/us_adv_analysis_pc.cpp M programs/us_pcsa/us_analysis_control_pc.cpp M programs/us_pcsa/us_mlplot.cpp M programs/us_pcsa/us_mrecs_loader.cpp M programs/us_pcsa/us_pcsa_process.cpp M programs/us_pcsa/us_plot_control_pc.cpp M programs/us_pcsa/us_resplot_pc.cpp M programs/us_pcsa/us_rpscan.cpp M programs/us_predict2/us_predict2.cpp M programs/us_protocol_dev/us_protocol_dev_gui.cpp M programs/us_pseudo3d_combine/us_remove_distros.cpp M programs/us_pseudo_absorbance/us_add_refScan.cpp M programs/us_pseudo_absorbance/us_convert_scan.cpp M programs/us_pseudo_absorbance/us_pseudo_absorbance.cpp M programs/us_pseudo_absorbance/us_remove_ri.cpp M programs/us_query_rmsd/us_query_rmsd.cpp M programs/us_ramp/us_experiment_gui_ra.cpp M programs/us_ramp/us_get_dbrun_ra.cpp M programs/us_ramp/us_intensity_ra.cpp M programs/us_ramp/us_ramp_gui.cpp M programs/us_ramp/us_select_triples_ra.cpp M programs/us_reporter/us_reporter.cpp M programs/us_reporter/us_sync_db.cpp M programs/us_reporter_gmp/us_reporter_gmp.cpp M programs/us_rotor_calibration/us_get_dbexp.cpp M programs/us_rotor_calibration/us_rotor_calibration.cpp M programs/us_second_moment/us_second_moment.cpp M programs/us_tmst_viewer/us_tmst_viewer.cpp M programs/us_vhw_combine/us_select_runid.cpp M programs/us_vhw_combine/us_vhw_combine.cpp M programs/us_vhw_combine/us_vhwc_pltctl.cpp M programs/us_vhw_enhanced/us_distrib_plot.cpp M programs/us_vhw_enhanced/us_vhw_enhanced.cpp M programs/us_xpn_viewer/us_xpn_run_auc.cpp M programs/us_xpn_viewer/us_xpn_run_raw.cpp M programs/us_xpn_viewer/us_xpn_viewer_gui.cpp Log Message: ----------- automatic connect conversion Commit: 3966b28eae946a448a7a4adefe3fcfd688c5fdf0 https://github.com/ehb54/ultrascan3/commit/3966b28eae946a448a7a4adefe3fcfd688c5fdf0 Author: Doluk <69309597+doluk at users.noreply.github.com> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M programs/us_fematch/us_resplot_fem.cpp M utils/us_http_post.cpp M utils/us_link_ssl.cpp Log Message: ----------- automatic connect conversion Compare: https://github.com/ehb54/ultrascan3/compare/bc7756c51525...3966b28eae94 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 09:28:55 2026 From: noreply at github.com (Lukas Dobler) Date: Fri, 07 Aug 2026 08:28:55 -0700 Subject: [us-commits] [ehb54/us3lims_dbinst] b573bd: jquery symlinks no longer version specific Message-ID: Branch: refs/heads/main Home: https://github.com/ehb54/us3lims_dbinst Commit: b573bd24c903ea99a138d5387a30fa7e257fde2d https://github.com/ehb54/us3lims_dbinst/commit/b573bd24c903ea99a138d5387a30fa7e257fde2d Author: ehb54 Date: 2025-05-05 (Mon, 05 May 2025) Changed paths: M js/jquery-ui.js M js/jquery.js Log Message: ----------- jquery symlinks no longer version specific Commit: 9d3bfb3f8dcb84c0f203b789413c18c734b4d898 https://github.com/ehb54/us3lims_dbinst/commit/9d3bfb3f8dcb84c0f203b789413c18c734b4d898 Author: Lukas Dobler <69309597+doluk at users.noreply.github.com> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M js/jquery-ui.js M js/jquery.js Log Message: ----------- Merge pull request #42 from ehb54/ehb54-issue-479 issue-479 jquery symlinks no longer version specific Compare: https://github.com/ehb54/us3lims_dbinst/compare/d4ddd03e0c92...9d3bfb3f8dcb To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_dbinst/settings/notifications From noreply at github.com Fri Aug 7 09:29:05 2026 From: noreply at github.com (Lukas Dobler) Date: Fri, 07 Aug 2026 08:29:05 -0700 Subject: [us-commits] [ehb54/us3lims_dbinst] Message-ID: Branch: refs/heads/ehb54-issue-479 Home: https://github.com/ehb54/us3lims_dbinst To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_dbinst/settings/notifications From noreply at github.com Fri Aug 7 09:29:25 2026 From: noreply at github.com (Lukas Dobler) Date: Fri, 07 Aug 2026 08:29:25 -0700 Subject: [us-commits] [ehb54/us3lims_dbinst] e062be: Make jquery code compatible with jquery 3.7.1 Message-ID: Branch: refs/heads/main Home: https://github.com/ehb54/us3lims_dbinst Commit: e062be632f47f1a742cd0c5f42a28b8807119cc5 https://github.com/ehb54/us3lims_dbinst/commit/e062be632f47f1a742cd0c5f42a28b8807119cc5 Author: Lukas Dobler <69309597+doluk at users.noreply.github.com> Date: 2026-08-05 (Wed, 05 Aug 2026) Changed paths: M js/2DSA.js M js/DMGA.js M js/GA.js M js/PCSA.js M js/reports.js M lib/reports.php M view_reports.php Log Message: ----------- Make jquery code compatible with jquery 3.7.1 Commit: e415acd078e6ae6043bf2fbadc36ecf1d8b13ec0 https://github.com/ehb54/us3lims_dbinst/commit/e415acd078e6ae6043bf2fbadc36ecf1d8b13ec0 Author: Lukas Dobler <69309597+doluk at users.noreply.github.com> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M js/2DSA.js M js/DMGA.js M js/GA.js M js/PCSA.js M js/reports.js M lib/reports.php M view_reports.php Log Message: ----------- Merge pull request #63 from ehb54/lukas/jquery-bump Make jquery code compatible with jquery 3.7.1 Compare: https://github.com/ehb54/us3lims_dbinst/compare/9d3bfb3f8dcb...e415acd078e6 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_dbinst/settings/notifications From noreply at github.com Fri Aug 7 09:29:29 2026 From: noreply at github.com (Lukas Dobler) Date: Fri, 07 Aug 2026 08:29:29 -0700 Subject: [us-commits] [ehb54/us3lims_dbinst] Message-ID: Branch: refs/heads/lukas/jquery-bump Home: https://github.com/ehb54/us3lims_dbinst To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_dbinst/settings/notifications From noreply at github.com Fri Aug 7 09:29:51 2026 From: noreply at github.com (Lukas Dobler) Date: Fri, 07 Aug 2026 08:29:51 -0700 Subject: [us-commits] [ehb54/us3lims_common] 1e6b98: jquery version update Message-ID: Branch: refs/heads/main Home: https://github.com/ehb54/us3lims_common Commit: 1e6b989b4a653dd1fe2c5d0b6d5a0346f8ed017d https://github.com/ehb54/us3lims_common/commit/1e6b989b4a653dd1fe2c5d0b6d5a0346f8ed017d Author: ehb54 Date: 2025-05-05 (Mon, 05 May 2025) Changed paths: R js/jquery-1.7.2.min.js A js/jquery-3.7.1.min.js A js/jquery-ui-1.14.1.min.js A js/jquery-ui.js A js/jquery.js Log Message: ----------- jquery version update Commit: 00b36f18317f4dee2d4ce77be87cae2ec8657785 https://github.com/ehb54/us3lims_common/commit/00b36f18317f4dee2d4ce77be87cae2ec8657785 Author: Lukas Dobler <69309597+doluk at users.noreply.github.com> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: R js/jquery-1.7.2.min.js A js/jquery-3.7.1.min.js A js/jquery-ui-1.14.1.min.js A js/jquery-ui.js A js/jquery.js Log Message: ----------- Merge pull request #11 from ehb54/ehb54-issue-479 issue-479 jquery version update Compare: https://github.com/ehb54/us3lims_common/compare/fe9a51dc8efd...00b36f18317f To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_common/settings/notifications From noreply at github.com Fri Aug 7 09:29:55 2026 From: noreply at github.com (Lukas Dobler) Date: Fri, 07 Aug 2026 08:29:55 -0700 Subject: [us-commits] [ehb54/us3lims_common] Message-ID: Branch: refs/heads/ehb54-issue-479 Home: https://github.com/ehb54/us3lims_common To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_common/settings/notifications From noreply at github.com Fri Aug 7 09:32:46 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 08:32:46 -0700 Subject: [us-commits] [ehb54/ultrascan3] f6e539: somo/grpy: fix build -- srep was captured by a lam... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: f6e539f5bbfeba71515771ef73c4f709bc08b8ef https://github.com/ehb54/ultrascan3/commit/f6e539f5bbfeba71515771ef73c4f709bc08b8ef Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp Log Message: ----------- somo/grpy: fix build -- srep was captured by a lambda declared before it The on_rung lambda added in the previous commit captures srep by reference to write each rung's shell model as it lands, but srep was declared 26 lines further down. Moved ahead of the lambda. This should not have been pushed. It was not caught because the build that "passed" never compiled this file: both build stages write the same Makefile, so after an earlier `qmake us_somo.pro` every plain `make` rebuilt only the apps and linked them against a stale library. The object file was three hours older than the source. Verified this time by compiling the translation unit directly, and the full two-stage sequence (qmake libus_somo.pro && make && qmake us_somo.pro && make) is what the build notes now require, with an object-newer-than-source check before any claim that a build passed. Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 10:02:49 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 09:02:49 -0700 Subject: [us-commits] [ehb54/ultrascan3] 6c91cf: Add gui_script commands for the UV-Vis module Message-ID: Branch: refs/heads/ehb54-issue-994 Home: https://github.com/ehb54/ultrascan3 Commit: 6c91cf6a276ec740abe198a0a3421a3eddd91daf https://github.com/ehb54/ultrascan3/commit/6c91cf6a276ec740abe198a0a3421a3eddd91daf Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_dad.h M us_somo/develop/libus_somo.pro M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_dad.cpp A us_somo/develop/src/us_hydrodyn_dad_script.cpp M us_somo/develop/src/us_hydrodyn_dad_util.cpp M us_somo/develop/src/us_hydrodyn_script.cpp Log Message: ----------- Add gui_script commands for the UV-Vis module The UV-Vis module had no scripted path: gui_script knew nothing about it and us_saxs_cmds_t does not reach it, so every change to the module could only be exercised by hand in the GUI. Add a "dad" command family to gui_script_run(): open, settimes, lambdarange, lambdas, load, list, select, makealambda and save. Together these load a wavelength list and an absorption matrix, build the A(t) curves, make A(lambda) and write the results, with no interaction. That needs the module to run without dialogs, so US_Hydrodyn_Dad gains a script_mode plus the values dad_load() would otherwise prompt for. With it set, the wavelength confirmation, the wavelength crop and the start time and interval dialogs are all answered from the script. The non-interactive entry points live in a new us_hydrodyn_dad_script.cpp. Also add saxs_options iqscaleangstrom and iqscalenm, since whether q values are converted from 1/nm on load was otherwise unreachable from a script. dad open reaches US_Hydrodyn_Saxs::dad() through the meta-object rather than making the slot public, so no interface widens for scripting alone. Fix an unrelated crash found by the first script run: US_Hydrodyn's constructor initialises around thirty *_widget flags but misses dad_widget, mals_widget and mals_saxs_widget, added later with those windows, and nulls no window pointer. US_Hydrodyn_Saxs::dad(), mals() and mals_saxs() test the flag and then dereference the matching window, so an indeterminate read is a segmentation fault. Interactive runs survive on zeroed heap; the headless run did not. Refs ehb54/ultrascan-tickets#994 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 10:07:50 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 09:07:50 -0700 Subject: [us-commits] [ehb54/ultrascan3] 6c91cf: Add gui_script commands for the UV-Vis module Message-ID: Branch: refs/heads/somo-dev Home: https://github.com/ehb54/ultrascan3 Commit: 6c91cf6a276ec740abe198a0a3421a3eddd91daf https://github.com/ehb54/ultrascan3/commit/6c91cf6a276ec740abe198a0a3421a3eddd91daf Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_dad.h M us_somo/develop/libus_somo.pro M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_dad.cpp A us_somo/develop/src/us_hydrodyn_dad_script.cpp M us_somo/develop/src/us_hydrodyn_dad_util.cpp M us_somo/develop/src/us_hydrodyn_script.cpp Log Message: ----------- Add gui_script commands for the UV-Vis module The UV-Vis module had no scripted path: gui_script knew nothing about it and us_saxs_cmds_t does not reach it, so every change to the module could only be exercised by hand in the GUI. Add a "dad" command family to gui_script_run(): open, settimes, lambdarange, lambdas, load, list, select, makealambda and save. Together these load a wavelength list and an absorption matrix, build the A(t) curves, make A(lambda) and write the results, with no interaction. That needs the module to run without dialogs, so US_Hydrodyn_Dad gains a script_mode plus the values dad_load() would otherwise prompt for. With it set, the wavelength confirmation, the wavelength crop and the start time and interval dialogs are all answered from the script. The non-interactive entry points live in a new us_hydrodyn_dad_script.cpp. Also add saxs_options iqscaleangstrom and iqscalenm, since whether q values are converted from 1/nm on load was otherwise unreachable from a script. dad open reaches US_Hydrodyn_Saxs::dad() through the meta-object rather than making the slot public, so no interface widens for scripting alone. Fix an unrelated crash found by the first script run: US_Hydrodyn's constructor initialises around thirty *_widget flags but misses dad_widget, mals_widget and mals_saxs_widget, added later with those windows, and nulls no window pointer. US_Hydrodyn_Saxs::dad(), mals() and mals_saxs() test the flag and then dereference the matching window, so an indeterminate read is a segmentation fault. Interactive runs survive on zeroed heap; the headless run did not. Refs ehb54/ultrascan-tickets#994 Co-Authored-By: Claude Opus 5 Commit: ddeddebe73c28244bbc21d4f09575edf9e6eeff0 https://github.com/ehb54/ultrascan3/commit/ddeddebe73c28244bbc21d4f09575edf9e6eeff0 Author: emre brookes Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_dad.h M us_somo/develop/libus_somo.pro M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_dad.cpp A us_somo/develop/src/us_hydrodyn_dad_script.cpp M us_somo/develop/src/us_hydrodyn_dad_util.cpp M us_somo/develop/src/us_hydrodyn_script.cpp Log Message: ----------- Merge pull request #500 from ehb54/ehb54-issue-994 Add gui_script commands for the UV-Vis module Compare: https://github.com/ehb54/ultrascan3/compare/e4cc0467b55c...ddeddebe73c2 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 10:09:09 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 09:09:09 -0700 Subject: [us-commits] [ehb54/ultrascan3] Message-ID: Branch: refs/heads/ehb54-issue-994 Home: https://github.com/ehb54/ultrascan3 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 10:09:38 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 09:09:38 -0700 Subject: [us-commits] [ehb54/ultrascan3] 6c91cf: Add gui_script commands for the UV-Vis module Message-ID: Branch: refs/heads/ehb54-issue-991 Home: https://github.com/ehb54/ultrascan3 Commit: 6c91cf6a276ec740abe198a0a3421a3eddd91daf https://github.com/ehb54/ultrascan3/commit/6c91cf6a276ec740abe198a0a3421a3eddd91daf Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_dad.h M us_somo/develop/libus_somo.pro M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_dad.cpp A us_somo/develop/src/us_hydrodyn_dad_script.cpp M us_somo/develop/src/us_hydrodyn_dad_util.cpp M us_somo/develop/src/us_hydrodyn_script.cpp Log Message: ----------- Add gui_script commands for the UV-Vis module The UV-Vis module had no scripted path: gui_script knew nothing about it and us_saxs_cmds_t does not reach it, so every change to the module could only be exercised by hand in the GUI. Add a "dad" command family to gui_script_run(): open, settimes, lambdarange, lambdas, load, list, select, makealambda and save. Together these load a wavelength list and an absorption matrix, build the A(t) curves, make A(lambda) and write the results, with no interaction. That needs the module to run without dialogs, so US_Hydrodyn_Dad gains a script_mode plus the values dad_load() would otherwise prompt for. With it set, the wavelength confirmation, the wavelength crop and the start time and interval dialogs are all answered from the script. The non-interactive entry points live in a new us_hydrodyn_dad_script.cpp. Also add saxs_options iqscaleangstrom and iqscalenm, since whether q values are converted from 1/nm on load was otherwise unreachable from a script. dad open reaches US_Hydrodyn_Saxs::dad() through the meta-object rather than making the slot public, so no interface widens for scripting alone. Fix an unrelated crash found by the first script run: US_Hydrodyn's constructor initialises around thirty *_widget flags but misses dad_widget, mals_widget and mals_saxs_widget, added later with those windows, and nulls no window pointer. US_Hydrodyn_Saxs::dad(), mals() and mals_saxs() test the flag and then dereference the matching window, so an indeterminate read is a segmentation fault. Interactive runs survive on zeroed heap; the headless run did not. Refs ehb54/ultrascan-tickets#994 Co-Authored-By: Claude Opus 5 Commit: ddeddebe73c28244bbc21d4f09575edf9e6eeff0 https://github.com/ehb54/ultrascan3/commit/ddeddebe73c28244bbc21d4f09575edf9e6eeff0 Author: emre brookes Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_dad.h M us_somo/develop/libus_somo.pro M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_dad.cpp A us_somo/develop/src/us_hydrodyn_dad_script.cpp M us_somo/develop/src/us_hydrodyn_dad_util.cpp M us_somo/develop/src/us_hydrodyn_script.cpp Log Message: ----------- Merge pull request #500 from ehb54/ehb54-issue-994 Add gui_script commands for the UV-Vis module Commit: 80d5aea96930353785e4863074a03e48c1aa8c2c https://github.com/ehb54/ultrascan3/commit/80d5aea96930353785e4863074a03e48c1aa8c2c Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn_dad.h M us_somo/develop/libus_somo.pro M us_somo/develop/src/us_hydrodyn.cpp M us_somo/develop/src/us_hydrodyn_dad.cpp A us_somo/develop/src/us_hydrodyn_dad_script.cpp M us_somo/develop/src/us_hydrodyn_dad_util.cpp M us_somo/develop/src/us_hydrodyn_script.cpp Log Message: ----------- Merge remote-tracking branch 'origin/somo-dev' into ehb54-issue-991 Compare: https://github.com/ehb54/ultrascan3/compare/ede8e9a28ff5...80d5aea96930 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 10:59:13 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 09:59:13 -0700 Subject: [us-commits] [ehb54/ultrascan3] cb2e4b: somo/grpy: name shell models for the settings that... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: cb2e4b397ff038bff7ddc99751f1312364cf672d https://github.com/ehb54/ultrascan3/commit/cb2e4b397ff038bff7ddc99751f1312364cf672d Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html Log Message: ----------- somo/grpy: name shell models for the settings that produced them The shell bead models were named only for the model, so runs differing in target accuracy, in whether intrinsic viscosity had to converge, or in precision produced identically-named files that overwrote each other. Each of those settings changes which beads are retained, so those are exactly the files one would want to compare -- and could not. Encoded in SOMO's existing style (short mnemonic + value, '.' -> '_', present only when the option is set, as with PR1_4, TH10, pH7, A20, hy, G4): ..._R1PR1-SR0_5eta-shell-rung-3 0.5% target, viscosity required ..._R1PR1-SR1noeta-shell-rung-3 1% target, viscosity not required ..._R1PR1-sp-SR0_5eta-shell-rung-3 as the first, in single precision Only non-defaults appear, so `sp` is absent from a double-precision run just as `hy` is absent when hydration is off. NOT applied to the .grpy_res or .grpy.csv result files, which have the same collision -- a shell-reduced result and an unreduced one share a name. That is a wider change (four sites in grpy_finished, a member to carry the suffix, and names that batch runs may depend on) and is left as a decision rather than taken unasked. Built with the full two-stage sequence and the object verified newer than the source, per the previous commit. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 11:39:56 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 10:39:56 -0700 Subject: [us-commits] [ehb54/ultrascan3] 21d603: somo/grpy: settings suffix on result files, GRPY o... Message-ID: Branch: refs/heads/ehb54-issue-984 Home: https://github.com/ehb54/ultrascan3 Commit: 21d60309ba107bfc69de60554c60a35ba4734d54 https://github.com/ehb54/ultrascan3/commit/21d60309ba107bfc69de60554c60a35ba4734d54 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M us_somo/develop/include/us_hydrodyn.h M us_somo/develop/include/us_hydrodyn_save.h M us_somo/develop/src/us_hydrodyn_grpy.cpp M us_somo/develop/src/us_hydrodyn_save.cpp M us_somo/somo/doc/manual/somo/somo_hydro.html M us_somo/somo/doc/manual/somo/somo_save.html Log Message: ----------- somo/grpy: settings suffix on result files, GRPY options in the saved CSV Extends the shell-model naming of the previous commit to the .grpy_res and .grpy.csv result files, which had the same collision: a reduced and an unreduced calculation of one model, or two at different target accuracies, produced different numbers under the same name. Only non-defaults appear, so a run with shell reduction off in double precision writes exactly the names it always has. Also records the settings IN the saved file, which distinct names alone do not give you -- a new "GRPY options:" screen in the parameter selector with six entries: single precision, shell reduction, target accuracy, viscosity required, the estimated error achieved, and the quantity that error belongs to. Tabs are built from the section list, so the screen appears without a count to update anywhere. The estimated error is the one that matters. The CSV is what gets compared across runs, and until now it recorded the numbers with no uncertainty attached to them. These record the EFFECTIVE settings, not the dialog's: this_data.hydro now comes from a copy carrying any scripting or environment overrides, so a headless run reports what it actually used. Saving the dialog values would have been wrong precisely in the batch case where nobody would notice. FIX, found while checking this: used_beads was the count from setup, taken before any reduction, so a run using 2832 of 11328 beads reported 11328 in the CSV, the results table and the .grpy_res report line alike. Narrowed to what the ladder actually used, never widened, so shell-off runs are unaffected. Batch mode needs nothing: it enters through the same calc_grpy_hydro(), so the guard, the reduction, the cancellation and these names all apply, and the suffix is cleared at run start so a batch cannot inherit stale settings. Docs: somo_save.html goes from eight screens to nine, describes the six parameters, notes that the achieved error may exceed the target when stopped early or memory-limited, and records the used_beads correction. Fixes ehb54/ultrascan-tickets#984 Co-Authored-By: Claude Opus 5 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications From noreply at github.com Fri Aug 7 11:46:53 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 10:46:53 -0700 Subject: [us-commits] [ehb54/us3lims_common] dec8b8: CSP updates -wip Message-ID: Branch: refs/heads/ehb54-issue-478-rebase Home: https://github.com/ehb54/us3lims_common Commit: dec8b82be049d9f36fcd6440f1c503863eb24564 https://github.com/ehb54/us3lims_common/commit/dec8b82be049d9f36fcd6440f1c503863eb24564 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M class/progress.php M css/common.css M footer.php M js/main.js Log Message: ----------- CSP updates -wip Commit: c161f9cc98acb7fff64a78b4f9697fc8834fcd2d https://github.com/ehb54/us3lims_common/commit/c161f9cc98acb7fff64a78b4f9697fc8834fcd2d Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M css/common.css M footer.php Log Message: ----------- better class names Commit: d027e32b3bb873efcd134bebf82b4c84819f6515 https://github.com/ehb54/us3lims_common/commit/d027e32b3bb873efcd134bebf82b4c84819f6515 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M js/main.js Log Message: ----------- main.js - optional debugging messages Commit: 5cc6cf74d0a8552b1d1d794c471ee0dec3f0168d https://github.com/ehb54/us3lims_common/commit/5cc6cf74d0a8552b1d1d794c471ee0dec3f0168d Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M js/main.js Log Message: ----------- main.js - add onclick-form-submit delegated handler, CSP us3lims_dbinst queue_setup_2.php / queue_setup_3.php replace nine onclick='this.form.submit();' radio handlers with class 'onclick-form-submit', but only the change-event counterpart (onchange-form-submit) existed here, so those radios did nothing. Deliberately does not call preventDefault(): unlike the other click branches these are radio inputs, and suppressing the default action would stop them from becoming checked before the form is submitted. Compare: https://github.com/ehb54/us3lims_common/compare/dec8b82be049%5E...5cc6cf74d0a8 To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_common/settings/notifications From noreply at github.com Fri Aug 7 11:46:57 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 10:46:57 -0700 Subject: [us-commits] [ehb54/us3lims_dbinst] 867167: CSP updates -wip Message-ID: Branch: refs/heads/ehb54-issue-478-rebase Home: https://github.com/ehb54/us3lims_dbinst Commit: 86716746e0bbcd4abe0a9abe8050b71ebf4d7210 https://github.com/ehb54/us3lims_dbinst/commit/86716746e0bbcd4abe0a9abe8050b71ebf4d7210 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M 2DSA-CG_1.php M 2DSA_1.php M DMGA_1.php M GA_1.php M GA_2.php M PCSA_1.php M admin_edit_projects.php M admin_view_projects.php M data_sharing.php M edit_instruments.php M edit_labs.php M edit_projects.php M edit_users_actions.php M global_menu.php M globaldb_stats.php M header.php M js/2DSA.js M lib/controls.php M lib/motd.php M lib/reports.php M lib/selectboxes.php R lib/slider.php M lib/utility.php M links.php M login.php M mysql_admin.php M newaccount.php M print_version.php M profile.php M queue_setup_1.php M queue_setup_2.php M queue_setup_2_funcs.php M queue_setup_3.php M queue_viewer.php M runID_info.php M supporting_files.php M view_all.php M view_projects.php M view_users.php Log Message: ----------- CSP updates -wip Commit: 4f58dd4685d4ae0d47a05c06ab03aab4aaacb5ee https://github.com/ehb54/us3lims_dbinst/commit/4f58dd4685d4ae0d47a05c06ab03aab4aaacb5ee Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M 2DSA-CG_1.php M 2DSA_1.php M DMGA_1.php M GA_1.php M GA_2.php M PCSA_1.php M admin_edit_projects.php M admin_view_projects.php M edit_projects.php M globaldb_stats.php M header.php M links.php M login.php M mysql_admin.php M newaccount.php M print_version.php M queue_setup_1.php M queue_setup_2.php M queue_setup_3.php M supporting_files.php M view_all.php M view_projects.php Log Message: ----------- better class names Commit: c21284c7aaacf864e756acd35c1876eec1342533 https://github.com/ehb54/us3lims_dbinst/commit/c21284c7aaacf864e756acd35c1876eec1342533 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M lib/controls.php M lib/motd.php M lib/utility.php Log Message: ----------- better class names Commit: 8f365b4f691b34414b6b940573abf46e17240e2f https://github.com/ehb54/us3lims_dbinst/commit/8f365b4f691b34414b6b940573abf46e17240e2f Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: A js/reports_install_change_handlers.js M view_reports.php Log Message: ----------- reports.php - inline script to js file, CSP Commit: f30b9d79d1c263ea608095244d4ae31bbacb8a08 https://github.com/ehb54/us3lims_dbinst/commit/f30b9d79d1c263ea608095244d4ae31bbacb8a08 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: A js/reports_lib_changedoctype.js M lib/reports.php Log Message: ----------- reports.php - inline script to js file, CSP Commit: 665fbcdc72c02749c17a923f7182b610e267ec55 https://github.com/ehb54/us3lims_dbinst/commit/665fbcdc72c02749c17a923f7182b610e267ec55 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: A js/queue_setup_1_selectallcells.js M queue_setup_1.php Log Message: ----------- queue_setup_1.php - inline script to js file, CSP Commit: a8c6f5c9e0ed43983c12ef01c5916ea256a14973 https://github.com/ehb54/us3lims_dbinst/commit/a8c6f5c9e0ed43983c12ef01c5916ea256a14973 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: A js/supporting_files_setup.js M supporting_files.php Log Message: ----------- supporting_files.php - inline script to js file, CSP Commit: e9d6cc3e4d05e3570c0158f7418aca26c7efcf0d https://github.com/ehb54/us3lims_dbinst/commit/e9d6cc3e4d05e3570c0158f7418aca26c7efcf0d Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M 2DSA-CG_2.php M 2DSA_2.php M PCSA_2.php Log Message: ----------- 2DSA, 2DSA-CG, PCSA _2.php - remove us_submit_prog display scripts - CSP Commit: 8b5856f61ba38330c88a320c1a2987aac370605e https://github.com/ehb54/us3lims_dbinst/commit/8b5856f61ba38330c88a320c1a2987aac370605e Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M js/queue_setup_1_selectallcells.js M queue_setup_1.php Log Message: ----------- queue_setup_1.php - fix selectAllCells handler name mismatch, CSP The extracted handler defined SelectAllCells() and the button carried class 'onclick-SelectAllCells', but the delegated listener in us3lims_common js/main.js matches 'onclick-selectAllCells' and calls selectAllCells(). classList.contains() is case-sensitive, so the button was a no-op and the call would have thrown ReferenceError. Align both with the name main.js already uses. Commit: a29643c0101ac0bb3d0bcd32790954a84f120606 https://github.com/ehb54/us3lims_dbinst/commit/a29643c0101ac0bb3d0bcd32790954a84f120606 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M GA_2.php Log Message: ----------- GA_2.php - fix solutes validate handler class name, CSP The form carried class 'onsubmit-return-solutes-args' but the delegated submit listener in us3lims_common js/main.js matches 'onsubmit-return-validate-solutes-args'. The form therefore fell through to the default branch and submitted without running validate_solutes(). The data-args payload already matches what main.js expects. Commit: 8cc04b6cb2ae896ab7d9be94860ba74c153e5475 https://github.com/ehb54/us3lims_dbinst/commit/8cc04b6cb2ae896ab7d9be94860ba74c153e5475 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M view_reports.php Log Message: ----------- view_reports.php - drop stray trailing whitespace at EOF Compare: https://github.com/ehb54/us3lims_dbinst/compare/86716746e0bb%5E...8cc04b6cb2ae To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/us3lims_dbinst/settings/notifications From noreply at github.com Fri Aug 7 12:05:50 2026 From: noreply at github.com (emre brookes) Date: Fri, 07 Aug 2026 11:05:50 -0700 Subject: [us-commits] [ehb54/us3lims_common] ea843d: CSP: remove last inline script, add window-close h... Message-ID: Branch: refs/heads/ehb54-issue-478-rebase Home: https://github.com/ehb54/us3lims_common Commit: ea843de80aa1ce0e6795d27d26b43b60decd28a1 https://github.com/ehb54/us3lims_common/commit/ea843de80aa1ce0e6795d27d26b43b60decd28a1 Author: ehb54 Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M class/progress.php M css/common.css M js/main.js Log Message: ----------- CSP: remove last inline script, add window-close handler, font-bold utility - class/progress.php emitted an inline