From 99fefd6ee85a0e29cdc3c70c9d80f781dcc0a6dc Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 25 Sep 2026 16:53:55 -0700 Subject: [PATCH] add the separate time points setting to the api --- .../api/AcquisitionSettings.java | 22 ++++++++++++++ .../api/internal/BaseAcquisitionSettings.java | 30 +++++++++++++++++++ .../internal/DispimAcquisitionSettings.java | 2 ++ .../internal/ScapeAcquisitionSettings.java | 2 ++ .../model/SettingsAdapter.java | 7 ++++- 5 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettings.java index 7683de99..b95e9515 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettings.java @@ -88,6 +88,18 @@ interface Builder> { */ T useTimePoints(final boolean state); + /** + * Sets the acquisition to write each time point to its own dataset. + * + *

Only applies when time points are used. Requires saving images during the + * acquisition: a run with this set and saving off is refused. Hardware time points are + * never used in this mode. + * + * @param state true to write one dataset per time point + * @return {@code this} builder + */ + T separateTimePoints(final boolean state); + /** * Sets the number of time points. * @@ -217,6 +229,16 @@ interface Builder> { */ boolean isUsingTimePoints(); + /** + * Returns true if each time point is written to its own dataset. + * + *

Only applies when time points are used, and requires saving images during the + * acquisition. + * + * @return true if each time point is written to its own dataset + */ + boolean isUsingSeparateTimePoints(); + /** * Returns the number of time points. * diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java index 8b50a25b..d474ea02 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java @@ -33,6 +33,7 @@ public abstract static class Builder> implements Acquisitio private boolean useMultiplePositions = false; private int postMoveDelay = 0; private boolean useTimePoints = false; + private boolean separateTimePoints = false; private int numTimePoints = 1; private double timePointIntervalSec = 0.0; private AcquisitionMode acquisitionMode = AcquisitionMode.NO_SCAN; @@ -55,6 +56,7 @@ public Builder(final AcquisitionSettings settings) { useMultiplePositions = settings.isUsingMultiplePositions(); postMoveDelay = settings.postMoveDelay(); useTimePoints = settings.isUsingTimePoints(); + separateTimePoints = settings.isUsingSeparateTimePoints(); numTimePoints = settings.numTimePoints(); timePointIntervalSec = settings.timePointIntervalSec(); acquisitionMode = settings.acquisitionMode(); @@ -178,6 +180,18 @@ public T useTimePoints(final boolean state) { return self(); } + /** + * Sets the acquisition to write each time point to its own dataset. + * + * @param state true to write one dataset per time point + * @return {@code this} builder + */ + @Override + public T separateTimePoints(final boolean state) { + separateTimePoints = state; + return self(); + } + /** * Sets the number of time points. * @@ -276,6 +290,7 @@ public VolumeSettings.Builder volumeBuilder() { private final boolean useMultiplePositions; private final int postMoveDelay; private final boolean useTimePoints; + private final boolean separateTimePoints; private final int numTimePoints; private final double timePointIntervalSec; private final AcquisitionMode acquisitionMode; @@ -301,6 +316,7 @@ protected BaseAcquisitionSettings(Builder builder) { useMultiplePositions = builder.useMultiplePositions; postMoveDelay = builder.postMoveDelay; useTimePoints = builder.useTimePoints; + separateTimePoints = builder.separateTimePoints; numTimePoints = builder.numTimePoints; timePointIntervalSec = builder.timePointIntervalSec; acquisitionMode = builder.acquisitionMode; @@ -409,6 +425,20 @@ public boolean isUsingTimePoints() { return useTimePoints; } + /** + * Returns true if each time point is written to its own dataset. + * + *

One dataset per time point, inside a series folder named after the save name. Requires + * saving during the acquisition, because each time point's window is closed once the next + * time point starts, and cannot be combined with hardware time points. + * + * @return true if each time point is written to its own dataset + */ + @Override + public boolean isUsingSeparateTimePoints() { + return separateTimePoints; + } + /** * Returns the number of time points. * diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DispimAcquisitionSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DispimAcquisitionSettings.java index 68cf036e..b1d2f0d6 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DispimAcquisitionSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DispimAcquisitionSettings.java @@ -123,6 +123,7 @@ public boolean equals(Object obj) { cameraMode() == other.cameraMode() && Arrays.equals(imagingCameraOrder(), other.imagingCameraOrder()) && isUsingTimePoints() == other.isUsingTimePoints() && + isUsingSeparateTimePoints() == other.isUsingSeparateTimePoints() && isUsingMultiplePositions() == other.isUsingMultiplePositions() && useHardwareTimePoints == other.useHardwareTimePoints && useAdvancedTiming == other.useAdvancedTiming && @@ -147,6 +148,7 @@ public int hashCode() { cameraMode(), Arrays.hashCode(imagingCameraOrder()), isUsingTimePoints(), + isUsingSeparateTimePoints(), isUsingMultiplePositions(), useHardwareTimePoints, useAdvancedTiming, diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java index d7a352e6..59bbb461 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java @@ -101,6 +101,7 @@ public boolean equals(Object obj) { cameraMode() == other.cameraMode() && Arrays.equals(imagingCameraOrder(), other.imagingCameraOrder()) && isUsingTimePoints() == other.isUsingTimePoints() && + isUsingSeparateTimePoints() == other.isUsingSeparateTimePoints() && isUsingMultiplePositions() == other.isUsingMultiplePositions() && useHardwareTimePoints == other.useHardwareTimePoints && useAdvancedTiming == other.useAdvancedTiming && @@ -123,6 +124,7 @@ public int hashCode() { cameraMode(), Arrays.hashCode(imagingCameraOrder()), isUsingTimePoints(), + isUsingSeparateTimePoints(), isUsingMultiplePositions(), useHardwareTimePoints, useAdvancedTiming, diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/SettingsAdapter.java b/src/main/java/org/micromanager/lightsheetmanager/model/SettingsAdapter.java index 50168def..d698ba26 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/SettingsAdapter.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/SettingsAdapter.java @@ -208,7 +208,12 @@ public SettingsAdapter(final LightSheetManager model) { .cameraMode(convertCameraMode((String) value))); // hardwareTimepoints - computed by the acquisition setup - // separateTimepoints - not used + + // the key keeps the 1.4 spelling because that is what is in the file being converted + registry.put("separateTimepoints", + value -> model_.acquisitions().settingsBuilder() + .separateTimePoints((boolean) value)); + // usePathPresets - not used registry.put("useAdvancedSliceTiming",