From 5ebc5f0a4a4f300712e018ba1b0ae430a63cc79c Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 15 Dec 2025 16:26:25 -0800 Subject: [PATCH] better support for multiple geometries in AcquisitionMode --- .../api/data/AcquisitionMode.java | 27 +++++++++++-------- .../gui/tabs/AcquisitionTab.java | 4 ++- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/data/AcquisitionMode.java b/src/main/java/org/micromanager/lightsheetmanager/api/data/AcquisitionMode.java index 6cf0a76..25fc535 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/data/AcquisitionMode.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/data/AcquisitionMode.java @@ -1,7 +1,7 @@ package org.micromanager.lightsheetmanager.api.data; -import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -9,7 +9,7 @@ // TODO: account for different naming on each geometry type (SLICE_SCAN_ONLY) /** - * Acquisition modes for diSPIM and SCAPE. + * Acquisition modes for all microscope geometry types. */ public enum AcquisitionMode { NONE("None"), @@ -22,6 +22,16 @@ public enum AcquisitionMode { SLICE_SCAN_ONLY("Galvo scan"), // for SCAPE PIEZO_SCAN_ONLY("Piezo scan only"); + // Maps GeometryType to a set of valid AcquisitionModes + private static final Map> MODES_BY_GEOMETRY_TYPE = Map.of( + GeometryType.SCAPE, List.of(NO_SCAN, STAGE_SCAN, SLICE_SCAN_ONLY), + GeometryType.DISPIM, List.of(NO_SCAN, STAGE_SCAN, SLICE_SCAN_ONLY) // TODO: add all valid modes + ); + + private static final List STAGE_SCAN_MODES = List.of( + STAGE_SCAN, STAGE_SCAN_INTERLEAVED, STAGE_SCAN_UNIDIRECTIONAL + ); + private final String text_; private static final Map stringToEnum = @@ -52,16 +62,11 @@ public static String[] toArray() { * @param isStageScanning {@code true} if stage scanning * @return an array of strings */ - public static String[] getValidKeys(final boolean isStageScanning) { - final ArrayList keys = new ArrayList<>(); - keys.add(NO_SCAN); - if (isStageScanning) { - keys.add(STAGE_SCAN); - } - keys.add(SLICE_SCAN_ONLY); - return keys.stream() + public static String[] getValidKeys(final GeometryType geometry, final boolean isStageScanning) { + final List baseModes = MODES_BY_GEOMETRY_TYPE.getOrDefault(geometry, List.of()); + return baseModes.stream() + .filter(mode -> isStageScanning || !STAGE_SCAN_MODES.contains(mode)) .map(AcquisitionMode::toString) .toArray(String[]::new); - } } diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java index 9ff3aae..0688633 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java @@ -5,6 +5,7 @@ import java.util.concurrent.Future; import javax.swing.SwingUtilities; import org.micromanager.Studio; +import org.micromanager.lightsheetmanager.api.data.GeometryType; import org.micromanager.lightsheetmanager.api.internal.DefaultAcquisitionSettingsSCAPE; import org.micromanager.lightsheetmanager.gui.components.ListeningPanel; import org.micromanager.lightsheetmanager.gui.data.Icons; @@ -161,7 +162,8 @@ private void createUserInterface() { // acquisition mode combo box final boolean isUsingScanSettings = model_.devices().isUsingStageScanning(); - cmbAcquisitionModes_ = new ComboBox(AcquisitionMode.getValidKeys(isUsingScanSettings), + final GeometryType geometryType = model_.devices().getDeviceAdapter().getMicroscopeGeometry(); + cmbAcquisitionModes_ = new ComboBox(AcquisitionMode.getValidKeys(geometryType, isUsingScanSettings), acqSettings.acquisitionMode().toString(), 180, 24);