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 @@ -2,18 +2,18 @@

import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public enum MultiChannelMode {
NONE("None"),
VOLUME("Every Volume"),
VOLUME_HW("Every Volume (PLogic)"),
SLICE_HW("Every Slice (PLogic)");

private final String text_;

private static final Map<String, MultiChannelMode> stringToEnum =
private static final Map<String, MultiChannelMode> STRING_TO_ENUM =
Stream.of(values()).collect(Collectors.toMap(Object::toString, e -> e));

MultiChannelMode(final String text) {
Expand All @@ -25,10 +25,6 @@ public String toString() {
return text_;
}

public static MultiChannelMode fromString(final String symbol) {
return stringToEnum.getOrDefault(symbol, MultiChannelMode.NONE);
}

public static MultiChannelMode getByIndex(final int index) {
return values()[index];
}
Expand All @@ -39,4 +35,8 @@ public static String[] toArray() {
.toArray(String[]::new);
}

public static Optional<MultiChannelMode> fromString(final String str) {
return Optional.ofNullable(str).map(STRING_TO_ENUM::get);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public static class Builder extends DefaultAcquisitionSettings.Builder<Builder>
private DefaultSheetCalibration.Builder[] shcb_ = new DefaultSheetCalibration.Builder[2];
private DefaultSliceCalibration.Builder[] slcb_ = new DefaultSliceCalibration.Builder[2];
private AcquisitionMode acquisitionMode_ = AcquisitionMode.NO_SCAN;
private MultiChannelMode channelMode_ = MultiChannelMode.NONE;
private MultiChannelMode channelMode_ = MultiChannelMode.VOLUME;
private CameraMode cameraMode_ = CameraMode.EDGE;

private boolean useChannels_ = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class DefaultChannelSettings implements ChannelSettings {
public static class Builder implements ChannelSettings.Builder {

private String channelGroup_ = "";
private MultiChannelMode channelMode_ = MultiChannelMode.NONE;
private MultiChannelMode channelMode_ = MultiChannelMode.VOLUME;
private HashMap<String, ChannelSpec[]> groups_ = new HashMap<>();

public Builder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,18 +279,35 @@ public <T extends DeviceBase> T requiredDevice(final String name, final Class<T>
}

public CameraBase firstImagingCamera() {
final LightSheetDeviceManager adapter = model_.devices().adapter();
String deviceKey;
if (adapter.numSimultaneousCameras() > 1 && adapter.numImagingPaths() == 1) {
deviceKey = "ImagingCamera1";
} else if (adapter.numSimultaneousCameras() > 1) {
deviceKey = "Imaging1Camera1";
} else if (adapter.numImagingPaths() > 1) {
deviceKey = "Imaging1Camera";
if (model_.acquisitions().settings().isUsingSimultaneousCameras()) {
deviceKey = firstActiveCameraName();
} else {
deviceKey = "ImagingCamera";
final LightSheetDeviceManager adapter = model_.devices().adapter();
if (adapter.numSimultaneousCameras() > 1 && adapter.numImagingPaths() == 1) {
deviceKey = "ImagingCamera1";
} else if (adapter.numSimultaneousCameras() > 1) {
deviceKey = "Imaging1Camera1";
} else if (adapter.numImagingPaths() > 1) {
deviceKey = "Imaging1Camera";
} else {
deviceKey = "ImagingCamera";
}
}
return (CameraBase) deviceMap_.get(deviceKey);
}

// TODO: active needs to be synchronized with the order, since order changes but active does not
// For simultaneous cameras
public String firstActiveCameraName() {
final String[] cameras = model_.acquisitions().settings().imagingCameraOrder();
final boolean[] active = model_.acquisitions().settings().imagingCamerasActive();
for (int i = 0; i < cameras.length; i++) {
if (active[i]) {
return cameras[i];
}
}
return (CameraBase)deviceMap_.get(deviceKey);
return "";
}

public CameraBase imagingCamera(final int view, final int num) {
Expand Down Expand Up @@ -328,7 +345,21 @@ public String[] imagingCameraNames() {
}

public CameraBase[] imagingCameras() {
return Arrays.stream(imagingCameraNames())
String[] cameraNames;
if (model_.acquisitions().settings().isUsingSimultaneousCameras()) {
ArrayList<String> names = new ArrayList<>();
final String[] cameras = model_.acquisitions().settings().imagingCameraOrder();
final boolean[] active = model_.acquisitions().settings().imagingCamerasActive();
for (int i = 0; i < cameras.length; i++) {
if (active[i]) {
names.add(cameras[i]);
}
}
cameraNames = names.toArray(String[]::new);
} else {
cameraNames = imagingCameraNames();
}
return Arrays.stream(cameraNames)
.map(name -> (CameraBase)deviceMap_.get(name))
.filter(Objects::nonNull)
.toArray(CameraBase[]::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import java.awt.geom.Point2D;
import java.io.IOException;
import java.util.ArrayList;
import java.util.stream.IntStream;


public class AcquisitionEngineSCAPE extends AcquisitionEngine {
Expand All @@ -65,13 +66,35 @@ public AcquisitionEngineSCAPE(final LightSheetManager model) {
@Override
boolean setup() {

isPolling_ = model_.positions().isPolling();
if (isPolling_) {
model_.positions().stopPolling();
studio_.logs().logMessage("stopped position polling");
}

asb_.sheetCalibrationBuilder(1).useAutoSheetWidth(true);
asb_.sheetCalibrationBuilder(1).autoSheetWidthPerPixel(0.0);

// make settings current
updateAcquisitionSettings();

// // check pixel size
// if (core_.getPixelSizeUm() < 1e-6) {
// studio_.logs().showError(
// "Pixel size not set, navigate to \"Devices > Pixel Size Calibration...\" to set the value.");
// return false;
// }

// we must have an active camera if we are using simultaneous cameras
if (model_.acquisitions().settings().isUsingSimultaneousCameras()) {
final boolean[] active = model_.acquisitions().settings().imagingCamerasActive();
if (IntStream.range(0, active.length).noneMatch(i -> active[i])) {
studio_.logs().showError("Using simultaneous cameras and no cameras are active!");
return false;
}
// TODO: primary camera must be active
}

// this is needed for LSMAcquisitionEvents to work with multiple positions
if (core_.getFocusDevice().isEmpty()
&& acqSettings_.isUsingMultiplePositions()) {
Expand All @@ -94,17 +117,6 @@ boolean setup() {

@Override
boolean run() {
isPolling_ = model_.positions().isPolling();
if (isPolling_) {
model_.positions().stopPolling();
studio_.logs().logMessage("stopped position polling");
}

asb_.sheetCalibrationBuilder(1).useAutoSheetWidth(true);
asb_.sheetCalibrationBuilder(1).autoSheetWidthPerPixel(0.0);

// make settings current
updateAcquisitionSettings();

// TODO: delete later, this is the settings before everything is set up in doHardwareCalculations (used to debug)
//studio_.logs().logMessage("debug info:\n" + acqSettings_.toPrettyJson());
Expand Down Expand Up @@ -545,15 +557,12 @@ public void close() {
// multiple simultaneous cameras
if (model_.acquisitions().settings().isUsingSimultaneousCameras()) {
// use 2 cameras
String secondCamera = "ImagingCamera2";
final String primaryCamera = "ImagingCamera1";//model_.acquisitions().settings().primaryCamera();
if (primaryCamera.equals(secondCamera)) {
secondCamera = "ImagingCamera1";
final ArrayList<String> names = new ArrayList<>();
final CameraBase[] cameraList = model_.devices().imagingCameras();
for (CameraBase camera: cameraList) {
names.add(camera.getDeviceName());
}
cameraNames = new String[] {
model_.devices().device(primaryCamera).getDeviceName(),
model_.devices().device(secondCamera).getDeviceName()
};
cameraNames = names.toArray(String[]::new);
} else {
// use 1 camera
final String camera = "ImagingCamera1"; // model_.acquisitions().settings().primaryCamera();
Expand Down Expand Up @@ -693,7 +702,7 @@ boolean finish() {

// Stop all cameras sequences
try {
for (CameraBase camera : model_.devices().imagingCameras()) {
for (CameraBase camera : cameras) {
if (core_.isSequenceRunning(camera.getDeviceName())) {
core_.stopSequenceAcquisition(camera.getDeviceName());
}
Expand Down
Loading