2749 Commits
Author SHA1 Message Date
suter_a 47f24cb844 improve the HDF4 version handling at configuration level.
Build and Deploy Documentation / build-and-deploy (push) Successful in 22s
2026-09-17 08:45:33 +02:00
suter_a cd762a2808 add HDF4 library version in the configure output.
Build and Deploy Documentation / build-and-deploy (push) Successful in 33s
2026-09-17 08:28:26 +02:00
suter_a 99cf0b19ec HDF4 4.4.0 changed the Vgetname() prototype from
Build and Deploy Documentation / build-and-deploy (push) Successful in 25s
int32 Vgetname(int32 vkey, char *vgname)
to
   int32 Vgetname(int32 vkey, char *vgname, size_t *buf_size)
(a fix for a buffer-overflow issue). Detect which one is present so
PNeXus.cpp can call the right form for both old and new HDF4 releases.
2026-09-16 09:34:34 +02:00
suter_a 915e7552b2 reduce the number of 'PRunSingleHisto::CalcMaxLikelihood: **WARNING** NEGATIVE theorygit status -uno' messages.
Build and Deploy Documentation / build-and-deploy (push) Successful in 23s
2026-09-12 18:12:11 +02:00
suter_a a95318dc9f musredit: msr2data now is using the 'number of threads to be used' as set by the preferences.
Build and Deploy Documentation / build-and-deploy (push) Successful in 31s
2026-09-05 11:24:04 +02:00
suter_a 880dee9397 msr2data: the number of threads to be used can now be injected to musrfit from the command line.
Build and Deploy Documentation / build-and-deploy (push) Canceled after 0s
2026-09-05 11:09:50 +02:00
suter_a 6222fa5573 improve terminate fit in musredit qt5/qt6.
Build and Deploy Documentation / build-and-deploy (push) Successful in 22s
2026-09-04 12:41:51 +02:00
suter_a 32f2d3defa fix exit status: several executables reported success (0) on failure or vice versa
Build and Deploy Documentation / build-and-deploy (push) Successful in 23s
Two bug patterns fixed across src/*.cpp:

- musrfit, musrview, any2many, addRun, musrFT, musrt0: a local
  success/ok/isGood flag was tracked and an error printed, but the
  function fell through to an unconditional `return PMUSR_SUCCESS;`
  at the end instead of propagating the failure.
- msr2data, msr2msr: the success path returned a nonzero code (1)
  instead of 0.

Also propagate previously-ignored return codes to the process exit
status in dump_header (format-dispatch functions), musrRootValidation
(schema validation / consistency checks), and write_musrRoot_runHeader
(FillFolder failure).
2026-08-27 12:38:46 +02:00
suter_aandClaude Sonnet 5 b21b26d307 fix msr2data: strip separator when removing run-number suffix from parameter names
Build and Deploy Documentation / build-and-deploy (push) Successful in 23s
Parameter names in run-specific FITPARAMETER blocks (e.g. alpha_ForwBackw_0139)
kept a trailing '_' after the run-number suffix was stripped for the single-run
and global-mode output. Add StripRunNumberSuffix() and use it at all sites that
remove the suffix, so an immediately preceding separator is removed too.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 12:46:54 +02:00
suter_aandClaude Sonnet 5 8c02237bf3 ci: fix version extraction, grep -oP unsupported on Alpine/BusyBox
Build and Deploy Documentation / build-and-deploy (push) Successful in 22s
The gitea-pages workflow runs in the alpine-jupyterbook container,
whose grep lacks PCRE (-P) support, so the version-extraction step
failed. Use a portable awk field scan instead, and fail loudly if
the version can't be found.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 10:54:04 +02:00
suter_aandClaude Sonnet 5 79eb6450d1 doc: derive Doxygen PROJECT_NUMBER from CMakeLists.txt version
Build and Deploy Documentation / build-and-deploy (push) Failing after 13s
Extract the project version from the top-level CMakeLists.txt in the
Gitea Actions pages workflow and pass it to Doxygen via the
MUSRFIT_VERSION env var, so musrfit_dox.cfg's PROJECT_NUMBER no
longer needs to be kept in sync by hand.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 10:50:50 +02:00
suter_a 5e139a219c updating the ChangeLog.
Build and Deploy Documentation / build-and-deploy (push) Successful in 30s
2026-08-25 11:12:48 +02:00
suter_a c2327ba68a Implemented OpenMP parallelization of the independent-transform loops in both files, following the existing #ifdef HAVE_GOMP / #pragma omp parallel for pattern already used elsewhere in the codebase:
Build and Deploy Documentation / build-and-deploy (push) Successful in 24s
- src/musrFT.cpp: the timed Transform() loop over all PFourier objects is now parallelized. Added OpenMP::OpenMP_CXX linkage to the musrFT CMake target (it wasn't linked before).
  - src/classes/PMusrCanvas.cpp (HandleFourier() and HandleDifferenceFourier()): split each loop into three phases — serial PFourier construction (FFTW plan creation isn't thread-safe), a parallel Transform()
    loop (pure FFTW compute, safe to parallelize), and serial ROOT histogram creation/styling (ROOT globals aren't thread-safe). PMusr already links OpenMP, so only the #include <omp.h> and the pragma were
    needed.
v1.12.1
2026-08-25 09:29:45 +02:00
suter_a 7de725500f fix 'musrfit arguments not passed from msr2data with golbal+' bug report #17 gitea
Build and Deploy Documentation / build-and-deploy (push) Successful in 22s
2026-08-23 19:31:52 +02:00
suter_a 3236df1678 fix 'possible msr2data in global+ mode bug' bug report #16 gitea
Build and Deploy Documentation / build-and-deploy (push) Successful in 30s
2026-08-23 09:51:46 +02:00
suter_a 08559fdb59 allow initial comments in dat-files.
Build and Deploy Documentation / build-and-deploy (push) Successful in 31s
2026-08-22 09:52:24 +02:00
suter_a 2088bd1516 add missing 'ADDRUN' to the musredit highlighter.
Build and Deploy Documentation / build-and-deploy (push) Successful in 31s
2026-08-15 09:26:15 +02:00
suter_a 371282c1cb add missing PStringUtils.h,cpp to class docu.
Build and Deploy Documentation / build-and-deploy (push) Successful in 22s
2026-07-31 20:46:53 +02:00
suter_a 4eaeeb0e3e fix the beta/fun bug in Asymmetry, Asymmetry RRF, and beta-NMR Asymmetry Fit.
Build and Deploy Documentation / build-and-deploy (push) Successful in 24s
2026-07-31 20:31:11 +02:00
suter_aandClaude Sonnet 5 8e6f6d3752 cmake: auto-detect if std::filesystem needs -lstdc++fs (fixes RHEL8/gcc-8.5)
Build and Deploy Documentation / build-and-deploy (push) Successful in 26s
On gcc-8 (e.g. RHEL8's system compiler, 8.5), std::filesystem is present
but still split out into a separate archive, libstdc++fs.a, so linking
msr2msr failed with undefined references such as
std::filesystem::remove(std::filesystem::__cxx11::path const&, std::error_code&).
gcc>=9 and clang/libc++ ship it in the main runtime library already.

Detect this via an actual compile+link try (first with no extra lib, then
with -lstdc++fs/-lc++fs) instead of guessing from compiler/OS, so
macOS, RHEL9/10, Ubuntu, etc. are unaffected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 06:53:31 +02:00
suter_aandClaude Opus 5 618e96fb00 fix musrview ctest failures on macOS: RGB order and path buffers
Build and Deploy Documentation / build-and-deploy (push) Successful in 27s
Three unrelated issues made the musrview_check tests fail on macOS while
passing on Linux.

1. Unspecified argument evaluation order

   TColor::GetColor(rand.Integer(255), rand.Integer(255), rand.Integer(255))

   evaluates its (side-effecting) arguments in an unspecified order: clang
   goes left-to-right, gcc right-to-left, so the same seed yielded RGB on
   one platform and BGR on the other. Visible whenever more runs are
   plotted than the startup xml colour list provides, e.g.
   test-histo-HAL9500.msr with 16 runs against 10 colours.

   The rgb values are now drawn into separate variables first. This keeps
   the clang result and changes gcc to match, hence the regenerated
   reference PNG for musrview-histo-HAL9500 (99.94% of the differing
   pixels were exact R<->B swaps).

   Fixed in PMusrCanvas, PFourierCanvas and both mupp PMuppCanvas copies.

2. Fixed size path buffers

   char fileName[128] plus strncpy(dst, src, sizeof(dst)) truncates *and*
   leaves the buffer unterminated once the path reaches the buffer size.
   musrview then failed on a 132 character msr-path in doc/examples/ViewOpts.
   musrFT and musrt0 were worse: an unbounded strcpy of the startup file
   path into char startup_path_name[128], i.e. a stack buffer overflow.

   All path/filename buffers in the drivers are now std::string:
   musrview, musrFT, musrt0, musrfit, any2many, addRun, dump_header.
   PMusrCanvas::SaveGraphicsAndQuit() takes const Char_t* accordingly.

   Along the way in the same files:
   - msr2msr_replace() wrote a 256 byte line into char temp[128]
   - msr2msr assembled "cp"/"rm" shell commands from paths in a 256 byte
     buffer; replaced by std::filesystem
   - msr2msr and addRun read lines with getline(buf, N), which silently
     abandons the rest of the file on the first over-long line
   - addRun: bound the unbounded sscanf "%s" to "%255s"
   - dropped scratch buffers that only held a string literal, in favour of
     TString::ReplaceAll(const char*, const char*)

3. musrview_check.py left its PNGs behind on failure

   The two early error returns skipped the cleanup, and since generated
   PNGs were identified by "not in the pre-run snapshot", one leftover file
   permanently masked the real output of that test: musrview overwrites the
   stale PNG, so it was there, just filtered out. One failure thus poisoned
   every later run (30 of the 37 observed failures) after a 15 s poll each.

   Cleanup now runs in a finally block on every exit path, and generated
   PNGs are detected by mtime instead, which sees rewritten leftovers while
   staying safe for a sibling test running concurrently under ctest -j.
   Also dropped the MUSRVIEW_PNG_DIR env var and its tmp-dir fallback: it
   is read nowhere in src/, so the fallback was dead code that guaranteed
   the full 15 s poll before every "no PNGs found" failure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 19:44:50 +02:00
suter_a 3903038cc4 remove Pixmap for SVG's Icons, since this can now be handled directly.
Build and Deploy Documentation / build-and-deploy (push) Successful in 24s
2026-07-29 17:44:03 +02:00
suter_a c212db3835 Merge branch 'root6' of gitea.psi.ch:LMU/musrfit into root6
Build and Deploy Documentation / build-and-deploy (push) Successful in 36s
2026-07-29 13:04:30 +02:00
suter_aandClaude Sonnet 5 f8c04678c7 musrview_check: report missing Pillow/numpy explicitly
If Pillow or numpy aren't importable, fail fast with a clear
**ERROR** message and pip-install hint instead of a bare traceback
from inside pixel_diff().

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 13:03:15 +02:00
suter_a ab0aa13e83 Merge branch 'root6' of https://gitea.psi.ch/LMU/musrfit into root6
Build and Deploy Documentation / build-and-deploy (push) Successful in 27s
2026-07-28 10:25:05 +02:00
suter_aandClaude Sonnet 5 6735e90b5c cmake: find HDF4 under /usr/local/hdf4 and MacPorts, accept libhdf naming
HDF4 built with its own CMake build system (rather than autotools) is
commonly installed under a non-standard prefix like /usr/local/hdf4,
which CMake's default find_path/find_library search does not cover,
and names the low-level library 'hdf' instead of 'df'.

Verified working on macOS 27.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-28 10:24:11 +02:00
suter_a 05d2c573c4 musrview_check: fix flaky/failing musrview tests on RHEL9
Build and Deploy Documentation / build-and-deploy (push) Successful in 24s
Three independent issues made all 72 musrview-* ctest targets fail on a
RHEL9 box while passing elsewhere:

- Pixel-diff tolerance (1%) was tighter than needed; bump to 3%. Real
  diffs against the committed reference PNGs measure ~0.08%.
- find_package(Python3) picks the highest-versioned interpreter on the
  system, which on this machine is a bare /usr/bin/python3.14 without
  Pillow/numpy installed, while the distro's python3 (3.9) has both.
  Probe the interpreter CMake found and fall back to PATH's "python3"
  if it lacks the required modules.
- musrview reliably writes and closes the PNG before exiting, but under
  ctest (not reproducible via a plain shell loop) the new directory
  entry could take several seconds to become visible to the checking
  script's glob(). Poll for up to ~15s instead of failing on the first
  empty glob.
2026-07-27 20:42:13 +02:00
suter_aandClaude Opus 5 0577d5d211 fix dead time correction for Red/Green (period) NeXus IDF V2 data
Build and Deploy Documentation / build-and-deploy (push) Successful in 34s
Since the Red/Green mode handling was added for NeXus HDF5 IDF V2, the
histogram numbers of the routed histograms carry the period offset, i.e.
histoNo = period*10000 + histo. PRunBase::DeadTimeCorrection() was still
addressing the dead time parameter vector with 'histoNo-1', hence for any
period > 0 it read far beyond the end of the vector. The garbage picked up
there scaled the counts, so every invocation of musrfit gave a different
(sometimes nan) result for the affected run blocks.

The dead time parameters are stored contiguously, period-by-period, and
therefore need to be addressed as period*noOfHistosPerPeriod + histo - 1.
Introduce PERIOD_HISTO_OFFSET for the period encoding, keep the number of
histos per period in PRawRunData, and add PRawRunData::GetDeadTimeParam(histoNo)
which does the mapping and guards against out-of-range access.

Cross-checked against the HDF4 IDF V1 twin of the same run, where the two
periods are flattened into histos 1-192: both readers now yield bit-identical
chisq, with and without dead time correction.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 11:10:53 +02:00
suter_a 68a8fae1e5 cmake: auto-detect MacPorts install layout for OpenMP, Qt6, and rpath
MacPorts nests libomp's headers/library under an extra 'libomp'
subdirectory and installs the Qt6 CMake package configs under
libexec/qt6 rather than lib/cmake, so find_package(OpenMP)/find_package(Qt6...)
did not see them without manually injecting OpenMP_ROOT/CMAKE_PREFIX_PATH
on the command line. Detect the MacPorts prefix (/opt/local) automatically,
same as already done for Homebrew, including in the install RPATH fallback.
2026-07-25 21:52:26 +02:00
suter_aandClaude Opus 5 fd0b3c3b19 cmake: portability and macOS fixes
Fixes found while reviewing the cmake setup, with a focus on macOS. All
changes are either platform neutral or guarded by if (APPLE).

Portability / correctness:
* CMP0167 was guarded by 'CMAKE_VERSION GREATER_EQUAL 3.3', a *numeric*
  comparison which is true on e.g. cmake 3.22. Since the policy only exists
  since cmake 3.30, configuring aborted on RHEL 9 / Ubuntu 22.04, although
  cmake_minimum_required allows them. Use 'if (POLICY CMP0167)'.
* CMAKE_REQUIRED_INCLUDES expects directories, not header names. Setting it
  to 'math.h' injected a bogus -I<scratch>/math.h into every check_*() and
  leaked into the find_package() calls. Dropped, and CMAKE_REQUIRED_LIBRARIES
  is now unset after the checks. config.h is unchanged.
* The Qt3 fallback tested 'AND Qt4_FOUND' instead of 'AND NOT Qt4_FOUND'.
* NeXus regression tests were registered unconditionally and therefore failed
  in a default build. They are gated on 'nexus' now, and the HDF4 based ones
  additionally on HAVE_HDF4.
* HAVE_HDF4 was queried but never defined, i.e. there was no way to switch on
  the HDF4 support that PNeXus/PRunDataHandler/dump_header/musrfit implement.
  Added option(HAVE_HDF4), to be used together with -Dnexus=1. This is not
  academic: the ISIS example data are HDF4 files and test-histo-NeXus only
  passes with -DHAVE_HDF4=1.

Do not use ${ROOT_USE_FILE}:
  It overwrote CMAKE_CXX_STANDARD with ROOT's value and added ROOT's include
  dirs, definitions and recommended compiler flags to *every* target,
  including the Qt applications which do not use ROOT at all. Replaced by an
  explicit equivalent; the C++ standard is now only raised, never silently
  changed. The Qt sub-trees reset flags and include dirs again, mupp/plotter
  puts them back since it does use ROOT. ROOT's flags are kept wherever ROOT
  headers are used, -fsigned-char and -fsized-deallocation are ABI relevant
  there. Verified: the compile flags of all ROOT consuming targets are
  byte-identical to before.

Homebrew header shadowing:
  Boost_INCLUDE_DIRS and FFTW3_INCLUDE are both /opt/homebrew/include on a
  Homebrew system, i.e. the whole 3rd party header tree, and they were passed
  to target_include_directories() with BEFORE - ahead of musrfit's own
  src/include. They now come from the Boost::headers and FFTW3::FFTW3
  imported targets, which contribute them as SYSTEM includes after the
  project's own directories.

macOS:
* mupp: do not set the VERSION property on a MACOSX_BUNDLE target. cmake then
  names the binary Contents/MacOS/mupp-1.1.0 and only leaves a symlink 'mupp'
  beside it, contradicting CFBundleExecutable and not surviving
  zipping/codesigning. This is the reason the symlink had to be created by
  hand so far. VERSION is still set for the non-APPLE build.
* All four app bundles had an empty CFBundleShortVersionString and
  CFBundleVersion; set MACOSX_BUNDLE_SHORT_VERSION_STRING / _BUNDLE_VERSION.
* APPLE is UNIX, so the RPM generator was also active on macOS -> restrict to
  'UNIX AND NOT APPLE'. Likewise the /usr/local/lib rpath, which on Apple
  silicon should be /opt/homebrew/lib; macOS gets its own branch now.
* mupp: -fpermissive is a GCC option, hand it to GCC only.
* musredit: use VERSION_GREATER_EQUAL for the Darwin version icon switch.

Verified on macOS 26 / arm64 with ROOT 6.40.03, Qt 6.11, cmake 4.4: full
build clean in the default configuration, with -DASlibs -DBMWlibs -DBNMRlibs
-DDummyUserFcn (identical list of 55 targets), and with -Dnexus / -DHAVE_HDF4.
ctest shows no regression at any step; no maxLH test fails in any of the three
NeXus configurations.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 18:28:30 +02:00
suter_a 63c8ae85e3 add CLAUDE.md 2026-07-25 17:16:12 +02:00
suter_a ead8c4b17a move on to v1.12.0 - refactoring.
Build and Deploy Documentation / build-and-deploy (push) Successful in 26s
2026-07-22 08:25:19 +02:00
suter_a e663d229e6 Merge remote-tracking branch 'origin/refactor-pmsrhandler-cpp17-tokenizer' into root6 v1.12.0 2026-07-22 08:03:49 +02:00
suter_aandClaude Opus 4.8 2a6c4bb9ce PMsrHighlighter: adopt CERN/ROOT naming scheme
Build and Deploy Documentation / build-and-deploy (push) Successful in 33s
Rename data members to the f-prefixed CamelCase convention, the
nested helper struct to PHighlightingRule (P instead of T for
musrfit classes), and the addRule() helper to AddRule(). The Qt
override highlightBlock() keeps its lowercase name as required by
QSyntaxHighlighter. Doc comments updated to reference PMsrHighlighter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 09:35:50 +02:00
suter_a 1f4fa54928 add Red/Green mode handling for NeXus HDF5 IDF V2. See also the musrfit docu.
Build and Deploy Documentation / build-and-deploy (push) Successful in 32s
v1.11.3
2026-07-15 07:54:42 +02:00
suter_a c8b87bb4f7 add another NeXus HDF4 IDF V1 example.
Build and Deploy Documentation / build-and-deploy (push) Successful in 37s
2026-07-13 15:36:27 +02:00
suter_aandClaude Sonnet 4.6 05d8d51699 guard all any_cast attribute reads in ReadNexusFileIdf1 against bad_any_cast
Build and Deploy Documentation / build-and-deploy (push) Successful in 29s
Uncaught std::bad_any_cast calls terminated the program when an HDF4
attribute's stored type didn't match the expected type (e.g. vector<int>
instead of int, or a non-string units attribute). Wrap all eight attribute
casts with try/catch so type mismatches produce a warning rather than a crash.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 08:05:38 +02:00
suter_a 61e7fac90a fix of wrong type: float instead of int, for frames_good.
Build and Deploy Documentation / build-and-deploy (push) Successful in 32s
2026-07-12 16:59:24 +02:00
suter_aandClaude Opus 4.8 3aeaa5477f PMsrHighlighter: fix keyword bugs and C++17 tidy-ups
Build and Deploy Documentation / build-and-deploy (push) Successful in 32s
- Fix missing comma that concatenated "ab" and "skg" into the
  bogus keyword "abskg", dropping abragam/skewedGss highlighting.
- Remove duplicate "snkzf" short name in the theory keyword list.
- Add missing theory keywords: "sg" (simpleGss short form),
  "userFcn" and its short form "u", to match src/include/PTheory.h.
- Use std::as_const in highlightBlock's range-for to avoid a
  potential QVector detach on every call.
- Pass QTextCharFormat to addRule by const reference.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 15:38:58 +02:00
suter_a dfa1b7ab0e Merge pull request 'Fix macOS 26 CLING runtime dictionary errors caused by Homebrew/SDK header conflicts' (#15) from macOS_dict_issue_fix into root6
Build and Deploy Documentation / build-and-deploy (push) Successful in 33s
Reviewed-on: #15
v1.11.2
2026-06-27 15:34:28 +02:00
suter_a f730385397 minor version increase, since this is relevant for the newest macOS 26.5.1 2026-06-27 15:28:05 +02:00
suter_aandClaude Sonnet 4.6 471b928622 Fix macOS 26 CLING runtime dictionary errors caused by Homebrew/SDK header conflicts
macOS 26 (Darwin 25.5.0) introduced stricter Clang module map rules in
DarwinFoundation1.modulemap: the '_c_standard_library_obsolete' module
now requires the 'found_incompatible_headers__check_search_paths' feature,
which CLING's runtime interpreter does not set. When fftw3.h (from
/opt/homebrew/include) was parsed by CLING via the inlined PStartupHandler
dictionary payload, it triggered this module map error, causing all
PStartupHandler signal/slot connections to fail.

Two fixes:
- PMusr.h: guard '#include "fftw3.h"' with '#ifndef __CLING__'. No fftw
  types appear in PMusr.h class definitions, so CLING does not need it
  for reflection. This is the primary runtime fix.
- CMakeLists.txt (src/classes and all src/external libs): replace
  '-I${FFTW3_INCLUDE}', '-I${Boost_INCLUDE_DIRS}', '-I${GSL_INCLUDE_DIRS}',
  and '-I${ROOT_INCLUDE_DIRS}' with '-isystem' in all root_generate_dictionary
  OPTIONS blocks, and change 'include_directories(${FFTW3_INCLUDE})' to
  'include_directories(SYSTEM ...)'. Internal project paths (MUSRFIT_INC,
  BMW_TOOLS_INC, NONLOCAL_INC, CMAKE_CURRENT_SOURCE_DIR, etc.) keep '-I'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 14:06:11 +02:00
suter_a 071ccf899a PMsrHighlighter tweak for Dark Color Schemes. Likely more work needs to be done (dynamic switching, etc.).
Build and Deploy Documentation / build-and-deploy (push) Successful in 24s
2026-06-24 09:33:42 +02:00
suter_a 70f42fa801 Ryan McFadden added a nice syntax-highlighter to musredit (Qt6).
Build and Deploy Documentation / build-and-deploy (push) Successful in 32s
Merge branch 'highlight' into root6
2026-06-24 07:26:06 +02:00
ext-mcfadd_r bba3bf703a syntax/keyword highlighting in musredit
This commit introduces a syntax/keyword highlighting mechanism for musredit
(Qt6 version only). This is done by way of a custom "highligher" class
derived from QSyntaxHighlighter, which allows for fonts, weights, and
colours, to be applied to specific text components via regular expression
rules.

The colour scheme provided is experimental/arbitrary; it uses the "Tableau 20"
palette, which provides reasonable contrast.
2026-06-23 19:07:21 -07:00
suter_a 6ed33d6500 PPrefsDialog.ui adopted for Qt5.
Build and Deploy Documentation / build-and-deploy (push) Successful in 23s
2026-06-07 11:30:41 +02:00
suter_a e90590b908 allow to set the number of threads for fitting directly via the preferences of musredit. Qt5 ui not yet adopted.
Build and Deploy Documentation / build-and-deploy (push) Successful in 31s
v1.11.1
2026-06-07 11:03:02 +02:00
suter_a f2ab8dbeb9 add missing path to CMakeLists.txt. 2026-06-06 17:52:59 +02:00
suter_aandClaude Opus 4.8 017be1fc9c musrFT: replace TObjArray/TObjString with PStringUtils
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 16:59:58 +02:00
suter_aandClaude Opus 4.8 41301bd988 PRunDataHandler: replace tokenizer TObjArray/TObjString with PStringUtils
Convert all TString::Tokenize() call sites to PStringUtils::Split. The
persisted RunSummary TObjArray (read from the MusrRoot file via
FindObjectAny and iterated with TObjArrayIter) and the run-title TObjString
returned by TLemRunHeader::GetRunTitle() remain ROOT types, since they come
from external interfaces / on-disk format, not from tokenization.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 16:54:46 +02:00