Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@

@Plugin(type = MenuPlugin.class)
public class LightSheetManagerPlugin implements MenuPlugin, SciJavaPlugin {
public static final String copyright = "Applied Scientific Instrumentation (ASI), 2022-2025";
public static final String copyright = "Applied Scientific Instrumentation (ASI), 2022-2026";
public static final String description = "A plugin to control various types of light sheet microscopes.";
public static final String menuName = "Light Sheet Manager";
public static final String version = "0.5.1";
public static final String version = "0.5.2";

private Studio studio_;
private LightSheetManager model_;
private LightSheetManagerFrame frame_;

@Override
public void setContext(final Studio studio) {
this.studio_ = studio;
studio_ = studio;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1003,16 +1003,21 @@ public DefaultTimingSettings.Builder getTimingFromExposure() {
//final double desiredSlicePeriod = acqSettings_.sliceSettings().slicePeriod();
// final double slicePeriod = Math.max(Math.max(laserDuration, cameraTotalTime),
// isSlicePeriodMinimized ? 0 : desiredSlicePeriod);

// the delays may need to be increased by the global delay
double delayBeforeCamera = 0.0;
double delayBeforeLaser = 0.0;
double delayBeforeScan = 0.0;
switch (cameraMode) {
case PSEUDO_OVERLAP: // e.g. Kinetix
tsb.scansPerSlice(1);
tsb.scanDuration(0.25);
tsb.cameraExposure(laserDuration);
tsb.laserTriggerDuration(laserDuration);
tsb.cameraTriggerDuration(laserDuration);
tsb.delayBeforeCamera(0.25);
tsb.delayBeforeLaser(sliceDeadTime);
tsb.delayBeforeScan(0.0);
delayBeforeCamera = 0.25;
delayBeforeLaser = sliceDeadTime;
delayBeforeScan = 0.0;
break;
case OVERLAP: // e.g.
if (acqSettings_.isUsingChannels() && acqSettings_.channelSettings().numChannels() > 1
Expand All @@ -1023,19 +1028,19 @@ public DefaultTimingSettings.Builder getTimingFromExposure() {
tsb.cameraExposure(0.25);
tsb.laserTriggerDuration(laserDuration);
tsb.cameraTriggerDuration(0.0);
tsb.delayBeforeCamera(0.25);
tsb.delayBeforeLaser(sliceDeadTime + NumberUtils.ceilToQuarterMs(cameraResetTime));
tsb.delayBeforeScan(0.0);
delayBeforeCamera = 0.25;
delayBeforeLaser = sliceDeadTime + NumberUtils.ceilToQuarterMs(cameraResetTime);
delayBeforeScan = 0.0;
} else {
// the usual case
tsb.scansPerSlice(1);
tsb.scanDuration(1.0);
tsb.cameraExposure(0.25);
tsb.laserTriggerDuration(laserDuration);
tsb.cameraTriggerDuration(1.0);
tsb.delayBeforeCamera(0.0);
tsb.delayBeforeLaser(sliceDeadTime + sliceLaserInterleaved);
tsb.delayBeforeScan(0.0);
delayBeforeCamera = 0.0;
delayBeforeLaser = sliceDeadTime + sliceLaserInterleaved;
delayBeforeScan = 0.0;
}
break;
case EDGE:
Expand All @@ -1046,38 +1051,43 @@ public DefaultTimingSettings.Builder getTimingFromExposure() {
tsb.cameraExposure(laserDuration - NumberUtils.ceilToQuarterMs(actualCameraResetTime + cameraReadoutTime));
tsb.laserTriggerDuration(laserDuration);
tsb.cameraTriggerDuration(1.0);
tsb.delayBeforeCamera(sliceLaserInterleaved);
tsb.delayBeforeLaser(sliceDeadTime + sliceLaserInterleaved);
tsb.delayBeforeScan(0.0);
delayBeforeCamera = sliceLaserInterleaved;
delayBeforeLaser = sliceDeadTime + sliceLaserInterleaved;
delayBeforeScan = 0.0;
break;
default:
studio_.logs().showError("Invalid camera mode");
break;
}

// FIXME: needs delay
if (!acqSettings_.sliceSettings().isSlicePeriodMinimized()) {
double globalDelay = acqSettings_.sliceSettings().slicePeriod() - getSliceDuration(tsb);
if (cameraMode == CameraMode.VIRTUAL_SLIT) {
globalDelay = 0;
}
if (globalDelay < 0) {
globalDelay = 0;
studio_.logs().showError(
"Increasing slice period to meet laser exposure constraint\n"
+ "(time required for camera readout; readout time depends on ROI).");
}
// tsb.delayBeforeScan();
// tsb.delayBeforeCamera();
// tsb.delayBeforeLaser();
delayBeforeCamera += globalDelay;
delayBeforeLaser += globalDelay;
delayBeforeScan += globalDelay;
}

// FIXME: needs delay
final double cameraExposure = model_.acquisitions().settings().sliceSettings().sampleExposure();
double globalDelay = NumberUtils.ceilToQuarterMs(cameraExposure + cameraReadoutTime);
if (globalDelay > 0) {
// tsb.delayBeforeScan();
// tsb.delayBeforeCamera();
// tsb.delayBeforeLaser();
delayBeforeCamera += globalDelay;
delayBeforeLaser += globalDelay;
delayBeforeScan += globalDelay;
}

tsb.delayBeforeCamera(delayBeforeCamera);
tsb.delayBeforeLaser(delayBeforeLaser);
tsb.delayBeforeScan(delayBeforeScan);

// update the slice duration based on our new values
tsb.sliceDuration(getSliceDuration(tsb));
return tsb;
Expand Down
Loading