From 50ed6ce84d83556a2b614770c468ec457e8e1881 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 20 Feb 2026 14:17:16 -0800 Subject: [PATCH 1/2] change getSliceDuration to take immutable obj --- .../DefaultAcquisitionSettingsSCAPE.java | 23 +++---------------- .../api/internal/DefaultTimingSettings.java | 14 +++++------ .../acquisitions/AcquisitionEngineSCAPE.java | 18 +++++++-------- 3 files changed, 18 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultAcquisitionSettingsSCAPE.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultAcquisitionSettingsSCAPE.java index e6823bb3..75403257 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultAcquisitionSettingsSCAPE.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultAcquisitionSettingsSCAPE.java @@ -356,32 +356,15 @@ private DefaultAcquisitionSettingsSCAPE(Builder builder) { postMoveDelay_ = builder.postMoveDelay_; liveScanPeriod_= builder.liveScanPeriod_; } - // /** + +// /** // * Creates a Builder populated with settings of this DefaultAcquisitionSettingsDISPIM instance. // * // * @return DefaultAcquisitionSettingsDISPIM.Builder pre-populated with settings of this instance. // */ // @Override // public DefaultAcquisitionSettingsDISPIM.Builder copyBuilder() { -// return new Builder( -// timingSettings_.copyBuilder(), -// volumeSettings_.copyBuilder(), -// sliceSettings_.copyBuilder(), -// sliceSettingsLS_.copyBuilder(), -// acquisitionMode_, -// channelMode_, -// cameraMode_, -// useChannels_, -// useTimePoints_, -// useAutofocus_, -// useStageScanning_, -// useMultiplePositions_, -// useHardwareTimePoints_, -// useAdvancedTiming_, -// numTimePoints_, -// timePointInterval_, -// postMoveDelay_ -// ); +// return new Builder(this); // } /** diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultTimingSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultTimingSettings.java index 78dc56d9..b3a86c6e 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultTimingSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultTimingSettings.java @@ -144,13 +144,13 @@ public TimingSettings.Builder useAlternateScanDirection(final boolean state) { @Override public String toString() { - return String.format("[scansPerSlice_=%s, delayBeforeScan_=%s, scanDuration_=%s, " + - "delayBeforeLaser_=%s, laserTriggerDuration_=%s, delayBeforeCamera_=%s, " + - "cameraTriggerDuration_=%s, cameraExposure_=%s, sliceDuration_=%s, alternateScanDirection_=%s]", - scansPerSlice_, delayBeforeScan_, scanDuration_, delayBeforeLaser_, - laserTriggerDuration_, delayBeforeCamera_, cameraTriggerDuration_, - cameraExposure_, sliceDuration_, alternateScanDirection_ - + return String.format("%s[scansPerSlice_=%s, delayBeforeScan_=%s, scanDuration_=%s, " + + "delayBeforeLaser_=%s, laserTriggerDuration_=%s, delayBeforeCamera_=%s, " + + "cameraTriggerDuration_=%s, cameraExposure_=%s, sliceDuration_=%s, " + + "alternateScanDirection_=%s]", + getClass().getSimpleName(), scansPerSlice_, delayBeforeScan_, scanDuration_, + delayBeforeLaser_, laserTriggerDuration_, delayBeforeCamera_, + cameraTriggerDuration_, cameraExposure_, sliceDuration_, alternateScanDirection_ ); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java index 1b3aecf1..9908fbe7 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java @@ -17,7 +17,6 @@ import org.micromanager.data.internal.DefaultSummaryMetadata; import org.micromanager.internal.MMStudio; import org.micromanager.lightsheetmanager.api.data.AcquisitionMode; -import org.micromanager.lightsheetmanager.api.data.CameraData; import org.micromanager.lightsheetmanager.api.data.CameraLibrary; import org.micromanager.lightsheetmanager.api.data.CameraMode; import org.micromanager.lightsheetmanager.api.data.MultiChannelMode; @@ -948,7 +947,7 @@ private boolean doHardwareCalculations(PLogicSCAPE plc) { // } // } - final double sliceDuration = getSliceDuration(asb_.timingSettingsBuilder()); + final double sliceDuration = getSliceDuration(asb_.timingSettingsBuilder().build()); if (exposureTime + cameraReadoutTime > sliceDuration) { // should only possible to mess this up using advanced timing settings // or if there are errors in our own calculations @@ -998,7 +997,7 @@ public void recalculateSliceTiming() { DefaultTimingSettings.Builder tsb = getTimingFromExposure(); asb_.timingSettingsBuilder(tsb); } - final double sliceDuration = getSliceDuration(asb_.timingSettingsBuilder()); + final double sliceDuration = getSliceDuration(asb_.timingSettingsBuilder().build()); asb_.timingSettingsBuilder().sliceDuration(sliceDuration); //System.out.println(asb_.timingSettingsBuilder()); } @@ -1101,7 +1100,7 @@ public DefaultTimingSettings.Builder getTimingFromExposure() { } if (!acqSettings_.sliceSettings().isSlicePeriodMinimized()) { - double globalDelay = acqSettings_.sliceSettings().slicePeriod() - getSliceDuration(tsb); + double globalDelay = acqSettings_.sliceSettings().slicePeriod() - getSliceDuration(tsb.build()); if (cameraMode == CameraMode.VIRTUAL_SLIT) { globalDelay = 0; } @@ -1129,7 +1128,7 @@ public DefaultTimingSettings.Builder getTimingFromExposure() { tsb.delayBeforeScan(delayBeforeScan); // update the slice duration based on our new values - tsb.sliceDuration(getSliceDuration(tsb)); + tsb.sliceDuration(getSliceDuration(tsb.build())); return tsb; } @@ -1334,14 +1333,13 @@ private double getSliceDuration( ); } - private double getSliceDuration(DefaultTimingSettings.Builder tsb) { - DefaultTimingSettings s = tsb.build(); + private double getSliceDuration(final DefaultTimingSettings ts) { // slice duration is the max out of the scan time, laser time, and camera time return Math.max(Math.max( - s.delayBeforeScan() + (s.scanDuration() * s.scansPerSlice()), // scan time - s.delayBeforeLaser() + s.laserTriggerDuration() // laser time + ts.delayBeforeScan() + (ts.scanDuration() * ts.scansPerSlice()), // scan time + ts.delayBeforeLaser() + ts.laserTriggerDuration() // laser time ), - s.delayBeforeCamera() + s.cameraTriggerDuration() // camera time + ts.delayBeforeCamera() + ts.cameraTriggerDuration() // camera time ); } From 1a167686b0065777893fca17d3b45e9c9e1d14a2 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 20 Feb 2026 16:18:10 -0800 Subject: [PATCH 2/2] use the TimingSettings version of getSliceDuration() --- .../model/acquisitions/AcquisitionEngineDISPIM.java | 1 - .../model/acquisitions/AcquisitionEngineSCAPE.java | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineDISPIM.java b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineDISPIM.java index c69c11a8..f87b793a 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineDISPIM.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineDISPIM.java @@ -835,7 +835,6 @@ public DefaultTimingSettings.Builder getTimingFromPeriodAndLightExposure() { break; default: studio_.logs().showError("Invalid camera mode"); - // FIXME: set to invalid! break; } diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java index 9908fbe7..6492a1f4 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java @@ -1280,13 +1280,12 @@ public DefaultTimingSettings.Builder getTimingFromPeriodAndLightExposure() { break; default: studio_.logs().showError("Invalid camera mode"); - // FIXME: set to invalid! break; } // fix corner case of negative calculated scanDelay if (delayBeforeScan < 0) { - delayBeforeCamera-= delayBeforeScan; + delayBeforeCamera -= delayBeforeScan; delayBeforeLaser -= delayBeforeScan; delayBeforeScan = 0; // same as (-= delayBeforeScan) } @@ -1302,7 +1301,7 @@ public DefaultTimingSettings.Builder getTimingFromPeriodAndLightExposure() { } // update the slice duration based on our new values - sliceDuration = getSliceDuration(delayBeforeScan, scanDuration, scansPerSlice, delayBeforeLaser, laserDuration, delayBeforeCamera, cameraDuration); + //sliceDuration = getSliceDuration(delayBeforeScan, scanDuration, scansPerSlice, delayBeforeLaser, laserDuration, delayBeforeCamera, cameraDuration); tsb.scansPerSlice(scansPerSlice); tsb.scanDuration(scanDuration); @@ -1312,7 +1311,8 @@ public DefaultTimingSettings.Builder getTimingFromPeriodAndLightExposure() { tsb.delayBeforeCamera(delayBeforeCamera); tsb.delayBeforeLaser(delayBeforeLaser); tsb.delayBeforeScan(delayBeforeScan); - tsb.sliceDuration(sliceDuration); + + tsb.sliceDuration(getSliceDuration(tsb.build())); return tsb; }