diff --git a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManager.java b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManager.java index 66556952..20f522fc 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManager.java +++ b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManager.java @@ -65,8 +65,7 @@ public boolean setup() { positionUpdater_.setup(); // create different acq engine based on microscope geometry - final GeometryType geometryType = deviceManager_ - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = deviceManager_.adapter().geometry(); switch (geometryType) { case SCAPE: acqEngine_ = new AcquisitionEngineSCAPE(this); @@ -85,7 +84,7 @@ public boolean setup() { // TODO: put this somewhere better, need to put this value into LSMAcquisitionEvents for now LSMAcquisitionEvents.isUsingMultipleCameras = - deviceManager_.getDeviceAdapter().getNumSimultaneousCameras() > 1; + deviceManager_.adapter().numSimultaneousCameras() > 1; // if we made it here then everything loaded correctly return true; diff --git a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java index 89c919fe..cc78ae3b 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java +++ b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerFrame.java @@ -13,7 +13,6 @@ import org.micromanager.lightsheetmanager.gui.data.Icons; import org.micromanager.lightsheetmanager.gui.tabs.TabPanel; import org.micromanager.lightsheetmanager.gui.tabs.navigation.NavigationPanel; -import org.micromanager.lightsheetmanager.gui.tabs.setup.PositionPanel; import org.micromanager.lightsheetmanager.gui.utils.WindowUtils; import org.micromanager.internal.utils.WindowPositioning; @@ -46,8 +45,7 @@ public LightSheetManagerFrame(final LightSheetManager model, final boolean isLoa // create the user interface if (isLoaded) { initDialogs(); - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); switch (geometryType) { case DISPIM: case SCAPE: 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 859fad4e..9dd59435 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/AcquisitionTab.java @@ -162,7 +162,7 @@ private void createUserInterface() { // acquisition mode combo box final boolean isUsingScanSettings = model_.devices().isUsingStageScanning(); - final GeometryType geometryType = model_.devices().getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); cmbAcquisitionModes_ = new ComboBox(AcquisitionMode.getLabels(geometryType, isUsingScanSettings), acqSettings.acquisitionMode().toString(), 180, 24); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/CameraTab.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/CameraTab.java index b7c6ea4f..d623104d 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/CameraTab.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/CameraTab.java @@ -55,6 +55,7 @@ private void createUserInterface() { // get the imaging camera library final CameraBase camera = model_.devices().getFirstImagingCamera(); + final CameraLibrary camLib = CameraLibrary.fromString(camera.getDeviceLibrary()); cmbCameraTriggerMode_ = new ComboBox(CameraMode.getAvailableModes(camLib), diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/DeviceTab.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/DeviceTab.java index e8704661..6291d291 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/DeviceTab.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/DeviceTab.java @@ -37,15 +37,15 @@ private void createUserInterface() { btnCreateConfigGroup_ = new Button("Create Devices Configuration Group", 220, 30); final JLabel lblGeometryType = new JLabel("Microscope Geometry: " - + devices_.getDeviceAdapter().getMicroscopeGeometry()); + + devices_.adapter().geometry()); final JLabel lblLightSheetType = new JLabel("Light Sheet Type: " - + devices_.getDeviceAdapter().getLightSheetType()); + + devices_.adapter().lightSheetType()); final JLabel lblNumImagingPaths = new JLabel("Imaging Paths: " - + devices_.getDeviceAdapter().getNumImagingPaths()); + + devices_.adapter().numImagingPaths()); final JLabel lblNumIlluminationPaths = new JLabel("Illumination Paths: " - + devices_.getDeviceAdapter().getNumIlluminationPaths()); + + devices_.adapter().numIlluminationPaths()); final JLabel lblNumSimultaneousCameras = new JLabel("Simultaneous Cameras: " - + devices_.getDeviceAdapter().getNumSimultaneousCameras()); + + devices_.adapter().numSimultaneousCameras()); btnCreateConfigGroup_.setToolTipText("Creates or updates the \"LightSheetManager::Devices\" " + "configuration group with all editable properties from the Light Sheet Manager device adapter."); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/TabPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/TabPanel.java index 01ca8594..9da333e8 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/TabPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/TabPanel.java @@ -65,7 +65,7 @@ private void createUserInterface() { tabbedPane_.addTab(createTabTitle("Navigation"), navigationTab_); // create a setup path tab for each imaging path - final int numImagingPaths = devices_.getDeviceAdapter().getNumImagingPaths(); + final int numImagingPaths = devices_.adapter().numImagingPaths(); for (int i = 0; i < numImagingPaths; i++) { SetupPathTab setupPathTab = new SetupPathTab(model_, i + 1); tabbedPane_.add(createTabTitle("Setup Path " + (i + 1)), setupPathTab); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java index 8887ef38..4824db55 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/VolumeSettingsPanel.java @@ -30,11 +30,9 @@ public VolumeSettingsPanel(final LightSheetManager model) { } private void createUserInterface() { - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); - final int numImagingPaths = model_.devices() - .getDeviceAdapter().getNumImagingPaths(); + final int numImagingPaths = model_.devices().adapter().numImagingPaths(); final DefaultVolumeSettings volumeSettings = model_.acquisitions() .settings().volumeSettings(); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java index 8a3877b5..3dbf8ba1 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java @@ -62,11 +62,11 @@ private void createUserInterface() { final String imaging = "Imaging"; // use pre-init property settings and Microscope Geometry data from Device Adapter - final LightSheetDeviceManager deviceAdapter = devices_.getDeviceAdapter(); - final int numImagingPaths = deviceAdapter.getNumImagingPaths(); - final int numIllumPaths = deviceAdapter.getNumIlluminationPaths(); - final Map deviceMap = deviceAdapter.getDeviceMap(); - final Map deviceTypeMap = deviceAdapter.getDeviceTypeMap(); + final LightSheetDeviceManager deviceAdapter = devices_.adapter(); + final int numImagingPaths = deviceAdapter.numImagingPaths(); + final int numIllumPaths = deviceAdapter.numIlluminationPaths(); + final Map deviceMap = deviceAdapter.deviceMap(); + final Map deviceTypeMap = deviceAdapter.deviceTypeMap(); // init ControlPanel arrays final ArrayList stageProperties = new ArrayList<>(); @@ -83,11 +83,7 @@ private void createUserInterface() { // create a ControlPanel for each device int devicesFound = 0; for (String propertyName : deviceMap.keySet()) { - final String deviceName = deviceMap.get(propertyName); - if (deviceName.equals("Undefined")) { - continue; // skip this property => device not set - } // TODO: only add certain kinds of devices //System.out.println(propertyName); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/BeamSheetControlPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/BeamSheetControlPanel.java index d45752b4..ae5555d0 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/BeamSheetControlPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/BeamSheetControlPanel.java @@ -11,7 +11,6 @@ import org.micromanager.lightsheetmanager.LightSheetManager; import javax.swing.JLabel; -import javax.swing.SwingConstants; import java.util.Objects; public class BeamSheetControlPanel extends Panel { @@ -63,11 +62,9 @@ public BeamSheetControlPanel(final LightSheetManager model, final int pathNum) { } private void createUserInterface() { - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); - final DefaultAcquisitionSettingsSCAPE acqSettings = model_.acquisitions() - .settings(); + final DefaultAcquisitionSettingsSCAPE acqSettings = model_.acquisitions().settings(); //setMigLayout("", "[]10[]", ""); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/CameraPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/CameraPanel.java index fd703ca0..b6a3753e 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/CameraPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/CameraPanel.java @@ -39,8 +39,7 @@ public CameraPanel(final LightSheetManager model) { } private void createUserInterface() { - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); setMigLayout( "", @@ -85,8 +84,7 @@ private void createUserInterface() { } private void createEventHandlers() { - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); switch (geometryType) { case DISPIM: diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/ExcitationPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/ExcitationPanel.java index ce60fbc2..64fad066 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/ExcitationPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/ExcitationPanel.java @@ -32,8 +32,7 @@ public ExcitationPanel(final LightSheetManager model) { } private void createUserInterface() { - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); isUsingPLogic_ = model_.devices().isUsingPLogic(); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PiezoCalibrationPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PiezoCalibrationPanel.java index bf9fd4db..86c1020d 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PiezoCalibrationPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PiezoCalibrationPanel.java @@ -47,8 +47,7 @@ public PiezoCalibrationPanel(final LightSheetManager model, final PositionPanel } private void createUserInterface() { - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); isUsingPLogic_ = model_.devices().isUsingPLogic(); diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PositionPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PositionPanel.java index 9ff27a03..c569054f 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PositionPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/PositionPanel.java @@ -53,8 +53,7 @@ public PositionPanel(final LightSheetManager model, final int pathNum) { } private void createUserInterface() { - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); isUsingPLogic_ = model_.devices().isUsingPLogic(); @@ -173,10 +172,10 @@ private void createUserInterface() { // TODO: currently set up for SCAPE geometry, compare to original diSPIM plugin private void createEventHandlers() { // TODO: find a way to refresh these values - if (model_.devices().getDeviceAdapter().hasDevice("ImagingFocus")) { + if (model_.devices().adapter().hasDevice("ImagingFocus")) { model_.positions().register(this, "ImagingFocus"); } - if (model_.devices().getDeviceAdapter().hasDevice("IllumSlice")) { + if (model_.devices().adapter().hasDevice("IllumSlice")) { model_.positions().register(this, "IllumSlice"); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/SetupPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/SetupPanel.java index 95878b58..cefa73ed 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/SetupPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/setup/SetupPanel.java @@ -57,7 +57,7 @@ public SetupPanel(final LightSheetManager model, final int pathNum) { // TODO: add joystick panel back in leftPanel_.add(excitationPanel_, "growx, wrap"); //leftPanel_.add(joystickPanel_, "growx, wrap"); - if (model_.devices().getDeviceAdapter().getMicroscopeGeometry() == GeometryType.SCAPE) { + if (model_.devices().adapter().geometry() == GeometryType.SCAPE) { singleAxisPanel_ = new SingleAxisPanel(model_); leftPanel_.add(singleAxisPanel_, "growx, wrap"); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/DeviceManager.java b/src/main/java/org/micromanager/lightsheetmanager/model/DeviceManager.java index 17789ccb..01fe16ce 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/DeviceManager.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/DeviceManager.java @@ -71,7 +71,6 @@ public void setup() { // always add an entry for the device adapter final LightSheetDeviceManager lsm = new LightSheetDeviceManager(studio_, deviceAdapterName_); - lsm.getPreInitProperties(); deviceMap_.put("LightSheetDeviceManager", lsm); // keep track of devices we have already added to the map @@ -241,12 +240,12 @@ public T getDevice(final String deviceName) { } public CameraBase getFirstImagingCamera() { - final LightSheetDeviceManager adapter = model_.devices().getDeviceAdapter(); - if (adapter.getNumSimultaneousCameras() > 1 && adapter.getNumImagingPaths() == 1) { + final LightSheetDeviceManager adapter = model_.devices().adapter(); + if (adapter.numSimultaneousCameras() > 1 && adapter.numImagingPaths() == 1) { return (CameraBase)deviceMap_.get("ImagingCamera1"); - } else if (adapter.getNumSimultaneousCameras() > 1) { + } else if (adapter.numSimultaneousCameras() > 1) { return (CameraBase)deviceMap_.get("Imaging1Camera1"); - } else if (adapter.getNumImagingPaths() > 1) { + } else if (adapter.numImagingPaths() > 1) { return (CameraBase)deviceMap_.get("Imaging1Camera"); } else { return (CameraBase)deviceMap_.get("ImagingCamera"); @@ -254,13 +253,13 @@ public CameraBase getFirstImagingCamera() { } public CameraBase getImagingCamera(final int view, final int num) { - final LightSheetDeviceManager adapter = model_.devices().getDeviceAdapter(); + final LightSheetDeviceManager adapter = model_.devices().adapter(); String cameraName = "Imaging"; - if (adapter.getNumImagingPaths() > 1) { + if (adapter.numImagingPaths() > 1) { cameraName += String.valueOf(view); } cameraName += "Camera"; - if (adapter.getNumSimultaneousCameras() > 1) { + if (adapter.numSimultaneousCameras() > 1) { cameraName += String.valueOf(num); } return (CameraBase)deviceMap_.get(cameraName); @@ -268,9 +267,9 @@ public CameraBase getImagingCamera(final int view, final int num) { public CameraBase[] getImagingCameras() { ArrayList cameraNames = new ArrayList<>(); - final LightSheetDeviceManager adapter = model_.devices().getDeviceAdapter(); - final int numImagingPaths = adapter.getNumImagingPaths(); - final int numCameras = adapter.getNumSimultaneousCameras(); + final LightSheetDeviceManager adapter = model_.devices().adapter(); + final int numImagingPaths = adapter.numImagingPaths(); + final int numCameras = adapter.numSimultaneousCameras(); for (int i = 0; i < numImagingPaths; i++) { for (int j = 0; j < numCameras; j++) { String cameraName = "Imaging"; @@ -299,7 +298,7 @@ public CameraBase[] getImagingCameras() { // return deviceMap_.get("Imaging" + view + "Camera" + num); // } - public LightSheetDeviceManager getDeviceAdapter() { + public LightSheetDeviceManager adapter() { return (LightSheetDeviceManager)deviceMap_.get("LightSheetDeviceManager"); } @@ -446,8 +445,8 @@ public void createConfigGroup() { */ private ArrayList updateConfig(final String groupName, final String configName) { ArrayList newProperties = new ArrayList<>(); - final String[] props = getDeviceAdapter().getDevicePropertyNames(); - final String[] properties = getDeviceAdapter().getEditableProperties(props); + final String[] props = adapter().getDevicePropertyNames(); + final String[] properties = adapter().getEditableProperties(props); Configuration config; try { diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/PLogicDISPIM.java b/src/main/java/org/micromanager/lightsheetmanager/model/PLogicDISPIM.java index 6d701610..974f2828 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/PLogicDISPIM.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/PLogicDISPIM.java @@ -89,8 +89,7 @@ public PLogicDISPIM(final LightSheetManager model) { lastDistanceStr_ = ""; lastPosStr_ = ""; - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); // populate devices switch (geometryType) { @@ -506,7 +505,7 @@ public boolean prepareControllerForAcquisitionSide( } // TODO: make a separate method for scape? two classes instead? no need for switch - if (model_.devices().getDeviceAdapter().getMicroscopeGeometry() == GeometryType.SCAPE) { + if (model_.devices().adapter().geometry() == GeometryType.SCAPE) { scanner = scanner_; piezo = piezo_; } @@ -1012,7 +1011,7 @@ public double getSheetWidth(CameraMode cameraMode, int view) { double sheetWidth; //final String cameraName = devices_.getMMDevice(cameraDevice); String deviceName = "ImagingCamera" + view; // diSPIM - if (model_.devices().getDeviceAdapter().getMicroscopeGeometry() == GeometryType.SCAPE) { + if (model_.devices().adapter().geometry() == GeometryType.SCAPE) { deviceName = "ImagingCamera"; } CameraBase camera = devices_.getDevice(deviceName); // TODO: find a way of adapting to different cameras @@ -1131,7 +1130,7 @@ public void setPathPreset(int side) { } public void stopSPIMStateMachines() { - if (model_.devices().getDeviceAdapter().getMicroscopeGeometry() == GeometryType.SCAPE) { + if (model_.devices().adapter().geometry() == GeometryType.SCAPE) { scanner_.setSPIMState(ASIScanner.SPIMState.IDLE); } else { scanner1_.setSPIMState(ASIScanner.SPIMState.IDLE); diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/PLogicSCAPE.java b/src/main/java/org/micromanager/lightsheetmanager/model/PLogicSCAPE.java index 6399f2dd..690ace8d 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/PLogicSCAPE.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/PLogicSCAPE.java @@ -906,9 +906,9 @@ public double getSheetWidth(CameraMode cameraMode, int view) { double sheetWidth; //final String cameraName = devices_.getMMDevice(cameraDevice); String deviceName = "ImagingCamera" + view; // diSPIM - if (model_.devices().getDeviceAdapter().getMicroscopeGeometry() == GeometryType.SCAPE) { + if (model_.devices().adapter().geometry() == GeometryType.SCAPE) { deviceName = "ImagingCamera"; - if (model_.devices().getDeviceAdapter().getNumSimultaneousCameras() > 1 ) { + if (model_.devices().adapter().numSimultaneousCameras() > 1 ) { deviceName += String.valueOf(view); } } diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/UserSettings.java b/src/main/java/org/micromanager/lightsheetmanager/model/UserSettings.java index 1e50cc7c..9c87ac8c 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/UserSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/UserSettings.java @@ -73,8 +73,7 @@ public void clear() { */ public void load() { // get json from settings based on microscope geometry type - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); + final GeometryType geometryType = model_.devices().adapter().geometry(); final String key = SETTINGS_PREFIX + geometryType.toString().toUpperCase(); final String json = settings_.getString(key, SETTINGS_NOT_FOUND); @@ -116,10 +115,8 @@ public void save() { model_.acquisitions().updateAcquisitionSettings(); // settings key based on geometry type - final GeometryType geometryType = model_.devices() - .getDeviceAdapter().getMicroscopeGeometry(); - final String key = SETTINGS_PREFIX + - geometryType.toString().toUpperCase(); + final GeometryType geometryType = model_.devices().adapter().geometry(); + final String key = SETTINGS_PREFIX + geometryType.toString().toUpperCase(); // save acquisition settings settings_.putString(key, model_.acquisitions().settings().toJson()); 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 e9f420ac..d28071f8 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineDISPIM.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineDISPIM.java @@ -679,7 +679,7 @@ public void recalculateSliceTiming() { // don't change timing settings if user is using advanced timing if (acqSettings_.isUsingAdvancedTiming()) { // TODO: find a better place to set the camera trigger mode for SCAPE - if (model_.devices().getDeviceAdapter().getMicroscopeGeometry() == GeometryType.SCAPE) { + if (model_.devices().adapter().geometry() == GeometryType.SCAPE) { CameraBase camera = model_.devices().getDevice("ImagingCamera"); camera.setTriggerMode(acqSettings_.cameraMode()); studio_.logs().logDebugMessage( 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 98788827..90dfa0c8 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/acquisitions/AcquisitionEngineSCAPE.java @@ -539,8 +539,8 @@ public void close() { } cameraNames = cameraDeviceNames.toArray(new String[0]); } else { - final LightSheetDeviceManager adapter = model_.devices().getDeviceAdapter(); - if (adapter.getNumSimultaneousCameras() > 1 && adapter.getNumImagingPaths() == 1) { + final LightSheetDeviceManager adapter = model_.devices().adapter(); + if (adapter.numSimultaneousCameras() > 1 && adapter.numImagingPaths() == 1) { // multiple simultaneous cameras cameraNames = new String[]{ model_.devices().getDevice("ImagingCamera1").getDeviceName(), @@ -825,7 +825,7 @@ private boolean doHardwareCalculations(PLogicSCAPE plc) { // TODO: make this more robust String cameraName; - if (model_.devices().getDeviceAdapter().getNumSimultaneousCameras() > 1) { + if (model_.devices().adapter().numSimultaneousCameras() > 1) { cameraName = "ImagingCamera1"; } else { cameraName = "ImagingCamera"; diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/devices/DeviceBase.java b/src/main/java/org/micromanager/lightsheetmanager/model/devices/DeviceBase.java index e98cdf2d..03fd8f41 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/devices/DeviceBase.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/devices/DeviceBase.java @@ -4,7 +4,6 @@ import mmcorej.DeviceType; import mmcorej.StrVector; import org.micromanager.Studio; -import org.micromanager.lightsheetmanager.model.utils.jplus.PredicateUtils; import java.util.Arrays; import java.util.Objects; @@ -122,15 +121,6 @@ public boolean isPropertyReadOnly(final String propertyName) { return result; } - // TODO: remove this - public DeviceType getDeviceType(final String deviceName) { - try { - return core_.getDeviceType(deviceName); - } catch (Exception e) { - return DeviceType.UnknownType; - } - } - public DeviceType getDeviceType() { try { return core_.getDeviceType(deviceName_); @@ -159,8 +149,8 @@ public String[] getDevicePropertyNames() { public String[] getEditableProperties(final String[] properties) { return Arrays.stream(properties) - .filter(PredicateUtils.not(this::isPropertyPreInit)) - .filter(PredicateUtils.not(this::isPropertyReadOnly)) + .filter(p -> !isPropertyPreInit(p)) + .filter(p -> !isPropertyReadOnly(p)) .toArray(String[]::new); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/devices/LightSheetDeviceManager.java b/src/main/java/org/micromanager/lightsheetmanager/model/devices/LightSheetDeviceManager.java index 96e8d557..344d554f 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/devices/LightSheetDeviceManager.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/devices/LightSheetDeviceManager.java @@ -4,7 +4,6 @@ import org.micromanager.Studio; import org.micromanager.lightsheetmanager.api.data.GeometryType; import org.micromanager.lightsheetmanager.api.data.LightSheetType; -import org.micromanager.lightsheetmanager.model.utils.jplus.PredicateUtils; import java.util.Arrays; import java.util.Map; @@ -12,17 +11,18 @@ /** - * This class is for interacting with the LightSheetDeviceManager device adapter. + * The device adapter "LightSheetDeviceManager". * - *

This class is contained in the DeviceManager object as "LightSheetDeviceManager". + *

Contained in the DeviceManager object as "LightSheetDeviceManager". */ public class LightSheetDeviceManager extends DeviceBase { // used to indicate that the device is not set to any hardware public static final String UNDEFINED = "Undefined"; - // TODO: put this here? - // private String deviceAdapterVersion_; + // TODO: use this for validation + // TODO: parse this to a more useful object for version comparisons? + private String version_; // pre-init properties private GeometryType geometryType_; @@ -33,97 +33,129 @@ public class LightSheetDeviceManager extends DeviceBase { public LightSheetDeviceManager(final Studio studio, final String deviceName) { super(studio, deviceName); + loadPreInitProperties(); } - // TODO: safely use Integer.parseInt /** - * Gets the pre-init properties from LightSheetDeviceManager and caches them. Call this method before - * using the getters for pre-init properties. + * Queries the pre-init properties from the device adapter and caches them. */ - public void getPreInitProperties() { - // convert pre-init property strings to ints - numImagingPaths_ = Integer.parseInt(getProperty("ImagingPaths")); - numIlluminationPaths_ = Integer.parseInt(getProperty("IlluminationPaths")); - numSimultaneousCameras_ = Integer.parseInt(getProperty("SimultaneousCameras")); - // convert pre-init property strings to enum constants + private void loadPreInitProperties() { + version_ = getProperty("Version"); geometryType_ = GeometryType.fromString(getProperty("MicroscopeGeometry")); lightSheetType_ = LightSheetType.fromString(getProperty("LightSheetType")); + // change defaults based on microscope geometry + int defaultImaging = 1; + int defaultIllumination = 1; + if (geometryType_ == GeometryType.DISPIM) { + defaultImaging = 2; + defaultIllumination = 2; + } + numImagingPaths_ = parsePropertyInt("ImagingPaths", defaultImaging); + numIlluminationPaths_ = parsePropertyInt("IlluminationPaths", defaultIllumination); + numSimultaneousCameras_ = parsePropertyInt("SimultaneousCameras", 1); } - // TODO: is this needed? - private int tryIntParse(final String text) { + /** + * Safely parses a device property to an integer, returns the default value on failure. + */ + private int parsePropertyInt(final String propertyName, final int defaultValue) { try { - return Integer.parseInt(text); + return Integer.parseInt(getProperty(propertyName)); } catch (NumberFormatException e) { - return -1; + studio_.logs().logError("Error parsing " + propertyName + + " from the device adapter, use default value " + defaultValue); + return defaultValue; } } - public GeometryType getMicroscopeGeometry() { - return geometryType_; + private boolean isPositionDevice(final String deviceName) { + final DeviceType deviceType = getDeviceType(deviceName); + return deviceType == DeviceType.StageDevice + || deviceType == DeviceType.XYStageDevice + || deviceType == DeviceType.GalvoDevice; } - public LightSheetType getLightSheetType() { - return lightSheetType_; + private DeviceType getDeviceType(final String deviceName) { + try { + return core_.getDeviceType(deviceName); + } catch (Exception e) { + return DeviceType.UnknownType; + } } - public int getNumImagingPaths() { - return numImagingPaths_; + public String version() { + return version_; } - public int getNumIlluminationPaths() { - return numIlluminationPaths_; + public GeometryType geometry() { + return geometryType_; } - public int getNumSimultaneousCameras() { - return numSimultaneousCameras_; + public LightSheetType lightSheetType() { + return lightSheetType_; } - private boolean isPropertyUndefined(final String propertyName) { - return getProperty(propertyName).equals(UNDEFINED); + public int numImagingPaths() { + return numImagingPaths_; } - private boolean isPropertyPositionDevice(final String propertyName) { - final DeviceType deviceType = getDeviceType(getProperty(propertyName)); - return deviceType == DeviceType.StageDevice - || deviceType == DeviceType.XYStageDevice - || deviceType == DeviceType.GalvoDevice; + public int numIlluminationPaths() { + return numIlluminationPaths_; } - public Map getDeviceMap() { - final String[] properties = getDevicePropertyNames(); - return Arrays.stream(properties) - .filter(PredicateUtils.not(this::isPropertyPreInit)) - .filter(PredicateUtils.not(this::isPropertyReadOnly)) - .collect(Collectors.toMap(p -> p, this::getProperty)); + public int numSimultaneousCameras() { + return numSimultaneousCameras_; } - public String[] getPositionDevices() { + /** + * Returns a map of internal device names to hardware device names. + * + * @return a map of internal device names to hardware device names + */ + public Map deviceMap() { final String[] properties = getDevicePropertyNames(); return Arrays.stream(properties) - .filter(PredicateUtils.not(this::isPropertyPreInit)) - .filter(PredicateUtils.not(this::isPropertyReadOnly)) - .filter(this::isPropertyPositionDevice) - .toArray(String[]::new); + .filter(p -> !isPropertyPreInit(p) && !isPropertyReadOnly(p)) + .map(p -> Map.entry(p, getProperty(p))) + .filter(e -> !e.getValue().equals(UNDEFINED)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } - public Map getDeviceTypeMap() { - final Map deviceMap = getDeviceMap(); - return deviceMap.entrySet().stream() + /** + * Returns a map of internal device names to device types. + * + * @return a map of internal device names to device types + */ + public Map deviceTypeMap() { + return deviceMap().entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> getDeviceType(e.getValue()))); } - /** - * Return true if the device adapter has the deviceName property - * set to a value other than the default: "Undefined". - * - *

Example deviceName properties: "SampleXY"}, "ImagingFocus". - * - * @param deviceName the name of the device in the device adapter - * @return true if the device is not "Undefined". - */ + /** + * Returns an array of internal device names for all position devices. + *

+ * A "Position Device" is a StageDevice, XYStageDevice, or GalvoDevice. + * + * @return an array of internal devices names for all position devices + */ + public String[] positionDevices() { + return deviceMap().entrySet().stream() + .filter(entry -> isPositionDevice(entry.getValue())) + .map(Map.Entry::getKey) + .toArray(String[]::new); + } + + /** + * Return {@code true} if the device adapter has the deviceName property + * set to a value other than the default: "Undefined". + *

+ * Example deviceName properties: "SampleXY", "ImagingFocus". + * + * @param deviceName the name of the device in the device adapter + * @return {@code true} if the device is not "Undefined". + */ public boolean hasDevice(final String deviceName) { - return !getProperty(deviceName).equals("Undefined"); + return !getProperty(deviceName).equals(UNDEFINED); } } diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/positions/PositionUpdater.java b/src/main/java/org/micromanager/lightsheetmanager/model/positions/PositionUpdater.java index 9caa3e81..ea605661 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/model/positions/PositionUpdater.java +++ b/src/main/java/org/micromanager/lightsheetmanager/model/positions/PositionUpdater.java @@ -33,8 +33,7 @@ public PositionUpdater(final LightSheetManager model) { // call this after the devices are found public void setup() { - final String[] devices = model_.devices() - .getDeviceAdapter().getPositionDevices(); + final String[] devices = model_.devices().adapter().positionDevices(); for (String device : devices) { positions_.put(device, 0.0); // TODO: how to init? topics_.put(device, new ArrayList<>()); diff --git a/src/main/java/org/micromanager/lightsheetmanager/model/utils/jplus/PredicateUtils.java b/src/main/java/org/micromanager/lightsheetmanager/model/utils/jplus/PredicateUtils.java deleted file mode 100644 index 9d52a205..00000000 --- a/src/main/java/org/micromanager/lightsheetmanager/model/utils/jplus/PredicateUtils.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.micromanager.lightsheetmanager.model.utils.jplus; - -import java.util.Objects; -import java.util.function.Predicate; - -/** - * JDK11 added a static Predicate.not() method to the Predicate interface. - * This can be removed and replaced if Micro-Manager adopts JDK11. - */ -public interface PredicateUtils { - - @SuppressWarnings("unchecked") - static Predicate not(Predicate target) { - Objects.requireNonNull(target); - return (Predicate)target.negate(); - } - -}