Commit Graph
56 Commits
Author SHA1 Message Date
markusro 1bed381639 add toolbar buttons copying the plot as PNG and SVG to the clipboard
Two new buttons below the plot copy the current figure to the
clipboard. The PNG copy renders off-screen on a temporary Agg canvas
at a fixed 12:8 inches and 800 px width, independent of the window
size, and restores figure canvas, size and dpi afterwards so the
on-screen plot is untouched. The RGBA buffer is wrapped in GLib.Bytes
for GdkPixbuf.Pixbuf.new_from_bytes, which current PyGObject requires
(fixes the 'Expected GLib.Bytes, but got bytes' error). The SVG copy
keeps using savefig into a text buffer; both report through logger.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-19 23:16:34 +02:00
markusro 0135f9b7a3 route the unknown-data-type message through the logger
save_display_data_as_text printed via the removed log() helper;
use logger.warning instead so the message lands in the log window.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-19 23:16:26 +02:00
markusro 0135504de2 remove the canvas context menu
The middle-click context menu (crosshair toggle, copy as PNG/SVG)
duplicated functionality that is now reachable elsewhere: the
crosshair is toggled by its own toolbar button and the PNG/SVG
clipboard copies get dedicated toolbar buttons. Removing it frees the
middle mouse button on the plot canvas.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-19 23:16:22 +02:00
markusro d539a27423 ignore duplicate quit events when the window is closed twice
quit_event ran its cleanup path again when a second delete-event
arrived after the state had already switched to Quit_State, hanging
the application on shutdown. Return early instead.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-19 23:16:14 +02:00
markusro 34eb7b2728 cap matplotlib canvas at logical resolution for fast HiDPI rendering
The stock GTK3Agg canvas renders one buffer pixel per physical pixel,
so on a scaled (HiDPI) screen every full redraw rasterizes four times
the pixel count, which makes the interactive plot sluggish. Override
_update_device_pixel_ratio in BlitSafeCanvas to pin the device pixel
ratio at 1: the plot renders at logical resolution and the window
system scales the output up. Measured ~2.3x faster full redraws on a
2x-scaled screen; non-scaled screens are unaffected.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-19 23:15:30 +02:00
markusro 18e085d3ee make the crosshair cursor fast on HiDPI screens with dirty-strip blitting
The previous blit path converted the whole axes bbox (several megapixels
on HiDPI displays) from RGBA to premultiplied ARGB on every motion
event, costing about 84 ms per frame on a maximized window. Per frame
now only the thin strips around the old and new line positions are
erased from a cached full-figure background, redrawn and blitted,
which brings the frame cost below 1 ms.

- BlitSafeCanvas paints blitted regions immediately instead of queueing
  them, which kept regular paints partial and wiped the axis labels
- CrosshairCursor coalesces motion events to 60 fps and erases strips
  by direct numpy copy from the background; matplotlib's restore_region
  with a bbox argument addresses a different coordinate frame and
  restores the wrong area, so it is avoided
- after a full render the old line positions are blitted right away,
  otherwise motion events processed before the pending repaint drew the
  cursor at its new position next to the stale one on screen
- clear_display recreates the crosshair so it survives plot switches

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-18 19:10:17 +02:00
markusro fe65073988 draw the crosshair toolbar icon from inline XPM data
The crosshair toggle button loaded the "crosshairs" icon from the
icon theme inside a bare try/except, so on systems without that
icon the button was empty and invisible. Replace it with a
self-contained red reticle (circle, center dot, cross arms) drawn
from inline XPM data, and set always-show-image so the desktop
default gtk-button-images=False cannot hide it.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-18 17:47:59 +02:00
markusro 9cc449d6e1 build HTML docs at package build time and open them from the Help menu
Build Debian Packages / build (bookworm, debian12) (push) Successful in 8m30s
Build Debian Packages / build (trixie, debian13) (push) Successful in 9m14s
- debian/rules: build sphinx HTML into build/html
- debian/install: install it as usr/share/doc/python3-damaris/html/
  instead of shipping the raw doc/ source tree (whose gitignored
  doc/_build never existed on CI checkouts)
- debian/control: declare ${sphinxdoc:Depends} and python3-sphinx
  (provides sphinx-build) explicitly
- requirements.debian: install python3-sphinx explicitly
- DamarisGUI: point the manual at the packaged HTML path with a
  source-tree fallback, populate the Help dropdown menu, and open
  the DAMARIS manual on a plain toolbar click
- doc/manual.rst: document the Help menu

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-18 17:20:33 +02:00
markusro ab943c30ae add FitResult fit overlays and close leaked HDF5 files after experiment stop
Build Debian Packages / build (bookworm, debian12) (push) Successful in 8m50s
Build Debian Packages / build (trixie, debian13) (push) Successful in 8m55s
FitResult is a new Drawable in damaris.data with x-values independent of
the measured points, so fits can be sampled on a dense grid. It is stored
as its own data pool entry (e.g. "measurement/fit"), written to and read
from the HDF5 data pool (damaris_type "FitResult", params as attributes),
and drawn by the GUI as overlay on its measurement, including a fit
parameter text box. Fits get no entry in the display tree, so measurement
rows stay directly selectable. Result scripts create them via
FitResult(x, y, title, source, params).

Additionally, HDF5 files that experiment or result scripts left open
(e.g. after a script failure) are closed when the experiment stops.
pytables keeps such handles registered process-wide, which blocked
reopening the dump file and the scripts' own files on the next run.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-18 17:11:05 +02:00
markusro 35d040426b fix startup: register GtkSourceView GType for GtkBuilder
Removing gobject.type_register(GtkSource.View) broke startup: the
call was load-bearing, it forced registration of the GtkSourceView
GType so GtkBuilder could resolve the type in damaris3.glade
("Invalid object type 'GtkSourceView'"). Restore the registration
by referencing gtksourceview.View at import time, which is the
same effect without the PyGTK compat API.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-18 16:25:51 +02:00
markusro f18bbdf48c replace gtk2/PyGTK and Python 2 idioms in DamarisGUI.py
- raise "RuntimeError" -> raise RuntimeError(...)
- gobject.timeout_add/idle_add/PRIORITY_* -> GLib equivalents
  (PyGIDeprecationWarning)
- remove no-op gobject.type_register(GtkSource.View)
- gtk.HBox -> gtk.Box(orientation=HORIZONTAL) (deprecated since 3.2)
- menu.popup(6-arg) -> menu.popup_at_pointer (deprecated since 3.22)
- Thread.getName() -> Thread.name (deprecated since 3.10)
- rename gtksourceview2 alias to gtksourceview
- rename bare iter locals/params to treeiter to avoid shadowing
  the builtin

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-18 16:24:59 +02:00
markusro 6d46e8ca1a fixed bug with counter updates
Build Debian Packages / build (bookworm, debian12) (push) Successful in 8m52s
Build Debian Packages / build (trixie, debian13) (push) Successful in 9m1s
2026-10-18 15:36:04 +02:00
markusro e5472484cb fixed non workign stop button
Build Debian Packages / build (bookworm, debian12) (push) Successful in 9m16s
Build Debian Packages / build (trixie, debian13) (push) Successful in 9m16s
2026-10-18 14:25:31 +02:00
markusro 0ca78cc566 snapshot log text on GTK main thread before HDF5 dump 2026-10-18 11:27:16 +02:00
markusro da1dc4a088 fix log dump race and unclosed HDF5 data pool file in DamarisGUI 2026-10-18 11:11:14 +02:00
markusro f9d8de7697 fix return-value/deprecated API bugs, accumulation lock leaks, code cleanup
Build Debian Packages / build (bookworm, debian12) (push) Successful in 8m56s
Build Debian Packages / build (trixie, debian13) (push) Successful in 9m3s
- raise instead of silent None for unsupported operands and empty negation
- validate before acquiring lock in Accumulation operators (no RLock leak)
- Accumulation._copy_provenance helper, ADC_Result._copy_metadata for all result paths
- shared _sandbox_stdout_redirect contextmanager for sandboxed scripts
- TemperatureMonitor dead code removal (gtk helper, traceback, unused properties)
- new unit tests incl. lock-freedom regression test
- gitignore sphinx generated doc/_autosummary/ and doc/damaris/
2026-10-17 19:17:43 +02:00
markusro 8bd088d97f merge
Merge branch 'main' of gitea.pkm.physik.tu-darmstadt.de:IPKM/python3-damaris
2026-07-14 23:08:12 +02:00
markusro f06af28827 make estimation nicer 2026-07-14 23:07:49 +02:00
markusro 523c544750 added extensive doc string to main classes
Build Debian Packages / build (trixie, debian13) (push) Successful in 14m45s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 14m55s
2026-07-13 23:42:12 +02:00
markusro 9b9a0ec1df no the print in the experiment and result script are also printed 2026-07-13 23:19:10 +02:00
markusro 1bb92a9157 switch all prints to logging module 2026-07-13 22:59:54 +02:00
markusro fa064c1727 small performance improvemnt when using synchronize: polling reduced from 100ms to 50ms
Build Debian Packages / build (trixie, debian13) (push) Successful in 16m24s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 16m38s
2026-07-13 22:21:49 +02:00
markusro 65649bb307 improved performance a lot, incremental writing of HDF5 2026-07-13 16:55:52 +02:00
markusro 6f7ca7ecaf preformance improvement: starting experiment after createing lots of data is now much faster 2026-07-13 13:56:03 +02:00
markusro ebc2daf170 preformance improvment when using many data_pool objects
Build Debian Packages / build (trixie, debian13) (push) Successful in 13m42s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 13m56s
2026-07-12 22:52:39 +02:00
markusro a75917efd5 preformance improvment when using many data_pool objects 2026-07-12 22:40:32 +02:00
markusro 3d847588c4 debug timing added for performance test 2026-07-12 21:07:41 +02:00
markusro a1323a7a5d debug timing added for performance test 2026-07-12 21:04:48 +02:00
markusro 7dc3f6560e fix ctrl+s missing in config pane 2026-07-12 19:13:00 +02:00
markusro e4cdea3b07 renamed and fully integrated lowpass filter 2026-07-12 18:32:40 +02:00
markusro baaf6b90b6 Fix #37: Press button to get experiment duration
Build Debian Packages / build (trixie, debian13) (push) Successful in 13m16s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 13m21s
2026-07-12 12:21:35 +02:00
markusro 3c069a559d added EstimateDuration function 2026-07-12 12:09:56 +02:00
markusro 7f29f2d173 fix: replace ComboBoxText.set_active_text() with model-based lookup
Build Debian Packages / build (trixie, debian13) (push) Successful in 13m8s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 13m13s
Build Debian Packages / build (trixie, debian13) (pull_request) Successful in 13m14s
Build Debian Packages / build (bookworm, debian12) (pull_request) Successful in 13m53s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
Build Debian Packages / build (bullseye, debian11) (pull_request) Has been cancelled
set_active_text() does not exist in GTK 3.24.x (only in GTK 4.x).
When loading a saved config with temperature_controller_type='simulated',
the set() method crashed on startup with AttributeError.

Added _set_combo_active_text() helper that iterates the model to find
the matching entry and calls set_active(index) instead.
2026-07-12 10:11:58 +02:00
markusro 847ab4d89c working prototype: stopping with experiment, display data 2026-07-12 02:16:57 +02:00
markusro d6da2f2bda fix thread locking when reading temeprature 2026-07-11 22:18:08 +02:00
markusro 5338304ee8 added POC for temperature logging 2026-07-11 22:11:03 +02:00
markusro 6d9f55f788 implemented incremental HDF5 writing (Fixes #33) 2026-07-09 16:49:51 +02:00
markusro 08e1fe2a1a Small fixes
Merge branch 'main' of gitea.pkm.physik.tu-darmstadt.de:IPKM/python3-damaris
2026-07-09 14:45:28 +02:00
markusro 064036241b small fixes 2026-07-09 14:45:25 +02:00
markusro 68da261ab4 remove load successful message from hdf5 loader 2026-07-06 20:48:21 +02:00
markusro 00466cb559 Merge pull request 'Hdfreader' (#31) from hdfreader into main
Build Debian Packages / build (trixie, debian13) (push) Successful in 13m56s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 14m24s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
Reviewed-on: #31
2026-07-06 18:45:46 +00:00
markusro 7ba5c7d56a added HDF5 read capability. Closes #27
Build Debian Packages / build (trixie, debian13) (pull_request) Successful in 14m37s
Build Debian Packages / build (bookworm, debian12) (pull_request) Successful in 14m50s
Build Debian Packages / build (bullseye, debian11) (pull_request) Has been cancelled
2026-07-06 20:42:04 +02:00
markusro eab49db8d4 gtksourceview: minimum-word-size needs to be >= 2 otherwise a warning is triggered. (Fixes #28)
Build Debian Packages / build (trixie, debian13) (push) Successful in 13m56s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 14m3s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
2026-07-06 16:10:56 +02:00
markusro 4250039b3c can now set ADC_Result bit depth in the config window (Bug #16)
Build Debian Packages / build (trixie, debian13) (push) Successful in 14m3s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 14m4s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
2026-07-05 13:59:09 +02:00
markusro d3b1a9e3fd Show message if ADC_Data is clipped (solves #16)
Build Debian Packages / build (bookworm, debian12) (push) Successful in 14m38s
Build Debian Packages / build (trixie, debian13) (push) Successful in 14m40s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
2026-07-05 13:44:20 +02:00
markusro 06867ec17b Missing search input field fixed (Fixes #25)
Build Debian Packages / build (bookworm, debian12) (push) Successful in 14m5s
Build Debian Packages / build (trixie, debian13) (push) Successful in 14m7s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
2026-07-05 13:24:20 +02:00
markusro 80d8f1e78d fixed stop button, no can interrupt running experiment
Build Debian Packages / build (trixie, debian13) (push) Successful in 15m23s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 15m46s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
2026-07-04 21:03:23 +02:00
markusro 58e7846bbe description is plotted better now 2026-07-04 20:50:57 +02:00
markusro 1c4f8f5344 Improved interruptable sleep and warn user when using time.sleep.
Build Debian Packages / build (trixie, debian13) (push) Successful in 13m4s
Build Debian Packages / build (bookworm, debian12) (push) Successful in 13m9s
Build Debian Packages / build (bullseye, debian11) (push) Has been cancelled
2026-07-04 20:26:14 +02:00
markusro b5c3d951db fixed editor autocomplete 2026-07-04 19:58:44 +02:00