From a904eac8eb197fdcaa233fd5ab5151889c0217da Mon Sep 17 00:00:00 2001 From: gobbo_a Date: Wed, 26 Apr 2023 09:22:59 +0200 Subject: [PATCH] Preliminary implementation of SwissMX RT --- pom.xml | 28 ++- src/main/java/ch/psi/mxsc/BasePlate.java | 22 ++- src/main/java/ch/psi/mxsc/Controller.java | 31 ++- src/main/java/ch/psi/mxsc/ControllerRT.java | 47 +++++ src/main/java/ch/psi/mxsc/MainPanel.form | 26 +-- src/main/java/ch/psi/mxsc/MainPanel.java | 208 +++++++++++--------- src/main/java/ch/psi/mxsc/Puck.java | 54 ++++- src/main/java/ch/psi/mxsc/PuckGraphics.java | 41 +++- src/main/java/ch/psi/mxsc/SampleInfo.java | 1 + 9 files changed, 321 insertions(+), 137 deletions(-) create mode 100644 src/main/java/ch/psi/mxsc/ControllerRT.java diff --git a/pom.xml b/pom.xml index 3fb4070..2b34ce9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 ch.psi MXSC - 1.12.0 + 1.19.0 jar @@ -14,13 +14,13 @@ org.zeromq jeromq - 0.5.1 + 0.5.3 UTF-8 - 1.8 - 1.8 + 11 + 11 @@ -39,6 +39,26 @@ imagej http://maven.imagej.net/content/repositories/public + + libs-snapshots-local + libs-snapshots-local + https://artifacts.psi.ch/artifactory/libs-snapshots-local/ + + + scijava-pub + scijava-pub + https://maven.scijava.org/content/repositories/public/ + + + scijava + scijava + https://maven.scijava.org/ + + + releases + releases + https://artifacts.psi.ch/artifactory/releases + MXSC diff --git a/src/main/java/ch/psi/mxsc/BasePlate.java b/src/main/java/ch/psi/mxsc/BasePlate.java index a6c7e14..8144059 100644 --- a/src/main/java/ch/psi/mxsc/BasePlate.java +++ b/src/main/java/ch/psi/mxsc/BasePlate.java @@ -134,18 +134,36 @@ public class BasePlate extends DeviceBase { new PointDouble(-129.9, -150), new PointDouble(-64.95, -187.5), }; + + final static PointDouble[] pucksPositionRt = new PointDouble[]{ + new PointDouble(0, 150), + new PointDouble(-130, 75), + new PointDouble(-130, -75), + new PointDouble(0, -150), + new PointDouble(130, -75), + new PointDouble(130, 75) + }; + //TODO: Fix SF only to change address based on BASE_PLATE_LAYOUT final static PointDouble[] pucksPosition = (MainPanel.BASE_PLATE_LAYOUT == BasePlateLayout.normal) ? pucksPositionNormal : - ((MainPanel.BASE_PLATE_LAYOUT == BasePlateLayout.sf) ? pucksPositionSf : pucksPosition6s ); + ( (MainPanel.BASE_PLATE_LAYOUT == BasePlateLayout.sf) ? pucksPositionSf : + ((MainPanel.BASE_PLATE_LAYOUT == BasePlateLayout.rt) ? pucksPositionRt : pucksPosition6s) + ); final static int numberOfPucks = pucksPosition.length; + final static int numberOfSegments = 6; + final static int numberOfPucksPerSegments = numberOfPucks/numberOfSegments; + //final static DimensionDouble size = new DimensionDouble(580.0, 580.0); final static DimensionDouble size = new DimensionDouble(470.0, 470.0); BasePlate() { super("BasePlate", new BasePlateConfig()); + if (MainPanel.BASE_PLATE_LAYOUT == BasePlateLayout.rt){ + //Controller.getInstance().getContext().getDevicePool().removeDevice("puck_detection"); + } ArrayList pucks = new ArrayList<>(); for (int i = 0; i < numberOfPucks; i++) { new Puck(this, i); @@ -193,7 +211,7 @@ public class BasePlate extends DeviceBase { Puck.Detection[] getDetection() { Puck.Detection[] ret = new Puck.Detection[Controller.NUMBER_OF_PUCKS]; for (int i = 0; i < ret.length; i++) { - ret[i] = getPucks()[i].detection; + ret[i] = getPucks()[i].getDetection(); } return ret; } diff --git a/src/main/java/ch/psi/mxsc/Controller.java b/src/main/java/ch/psi/mxsc/Controller.java index 38a9ea3..c66eecb 100644 --- a/src/main/java/ch/psi/mxsc/Controller.java +++ b/src/main/java/ch/psi/mxsc/Controller.java @@ -54,8 +54,8 @@ public class Controller { static Controller instance; final BasePlate basePlate; - final RoomTemperatureBasePlate roomTemperatureBasePlate; - final /*Panel*/ MainPanel mainFrame; + RoomTemperatureBasePlate roomTemperatureBasePlate; + static /*Panel*/ MainPanel mainFrame; Device hexiposi; Device barcode_reader; Device barcode_reader_puck; @@ -67,9 +67,19 @@ public class Controller { public static Controller getInstance() { return instance; } + + public static boolean isRt() { + return Controller.mainFrame.isRt(); + } static void createInstance(Panel mainFrame) { - instance = new Controller(mainFrame); + Controller.mainFrame = (MainPanel) mainFrame; + System.setProperty(GenericDevice.PROPERTY_CONFIG_PATH, Context.getInstance().getSetup().getDevicesPath()); + if (isRt()){ + instance = new ControllerRT(mainFrame); + } else { + instance = new Controller(mainFrame); + } } enum PuckMountMode { @@ -120,16 +130,19 @@ public class Controller { static String PUCK_ESERA_DEVICE = "onewire"; public static final int NUMBER_OF_PUCKS = 30; - - private Controller(Panel mainFrame) { - System.setProperty(GenericDevice.PROPERTY_CONFIG_PATH, Context.getInstance().getSetup().getDevicesPath()); + + protected Controller(){ basePlate = new BasePlate(); + instance = this; + } + + private Controller(Panel mainFrame) { + this(); + //basePlate = new BasePlate(); puckState = new PuckState[NUMBER_OF_PUCKS]; for (int i = 0; i < NUMBER_OF_PUCKS; i++) { puckState[i] = new PuckState(i + 1); } - this.mainFrame = (MainPanel) mainFrame; - instance = this; clearPuckStates(); basePlate.addListener(basePlateListener); @@ -369,7 +382,7 @@ public class Controller { } } - final PuckState[] puckState; + PuckState[] puckState; public PuckState[] getPuckStates() { return puckState; diff --git a/src/main/java/ch/psi/mxsc/ControllerRT.java b/src/main/java/ch/psi/mxsc/ControllerRT.java new file mode 100644 index 0000000..6244ed7 --- /dev/null +++ b/src/main/java/ch/psi/mxsc/ControllerRT.java @@ -0,0 +1,47 @@ + +package ch.psi.mxsc; + +import static ch.psi.mxsc.Controller.NUMBER_OF_PUCKS; +import static ch.psi.mxsc.Controller.instance; +import ch.psi.pshell.core.Context; +import ch.psi.pshell.device.Device; +import ch.psi.pshell.device.DeviceAdapter; +import ch.psi.pshell.device.DeviceListener; +import ch.psi.pshell.device.GenericDevice; +import ch.psi.pshell.ui.Panel; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + */ +public class ControllerRT extends Controller{ + ControllerRT(Panel mainFrame) { + //basePlate = new BasePlate(); + basePlate.addListener(basePlateListener); + setPuckLoading(false); + + } + + final DeviceListener basePlateListener = new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + if (value != null) { + String segment = ((Object[]) value)[0].toString(); + Integer puck = (Integer) ((Object[]) value)[1]; + Integer sample = (Integer) ((Object[]) value)[2]; + mainFrame.onSelectionChanged(segment, puck, sample); + } else { + mainFrame.onSelectionChanged(null, null, null); + } + } + }; + + void onTimer() { + try { + refreshSamplesTable(); + } catch (Exception ex) { + Logger.getLogger(Controller.class.getName()).log(Level.WARNING, null, ex); + } + } +} diff --git a/src/main/java/ch/psi/mxsc/MainPanel.form b/src/main/java/ch/psi/mxsc/MainPanel.form index 0efb893..1112d04 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.form +++ b/src/main/java/ch/psi/mxsc/MainPanel.form @@ -31,7 +31,7 @@ - + @@ -334,21 +334,21 @@ - + - + - + - + @@ -384,12 +384,12 @@ - + - + @@ -896,7 +896,7 @@ - + @@ -1004,21 +1004,21 @@ - + - + - + - + - + diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java index 7d09c81..6615a8d 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.java +++ b/src/main/java/ch/psi/mxsc/MainPanel.java @@ -55,11 +55,19 @@ public class MainPanel extends Panel { public enum BasePlateLayout { normal, sf, - x06da + x06da, + rt } - public static final BasePlateLayout BASE_PLATE_LAYOUT = App.hasArgument("sf") ? BasePlateLayout.sf : - ( App.hasArgument("6d") ? BasePlateLayout.x06da : BasePlateLayout.normal); + public static final BasePlateLayout BASE_PLATE_LAYOUT = + App.hasArgument("sf") ? BasePlateLayout.sf : + ( App.hasArgument("6d") ? BasePlateLayout.x06da : + ( App.hasArgument("rt") ? BasePlateLayout.rt : BasePlateLayout.normal) + ); + public static boolean isRt(){ + return App.hasArgument("rt"); + } + public MainPanel() { initComponents(); getContext().getPluginManager().addDynamicClass(PuckDetection.class); @@ -69,10 +77,15 @@ public class MainPanel extends Panel { setDefaultDetail(); panelTablePucks.getVerticalScrollBar().setPreferredSize(new Dimension(20, 0)); panelTableSamples.getVerticalScrollBar().setPreferredSize(new Dimension(20, 0)); + + if (isRt()){ + panelLegend.setVisible(false); + } + ((DefaultTableModel)tablePucks.getModel()).setNumRows(BasePlate.numberOfPucks); int row = 0; for (String segment : new String[]{"A", "B", "C", "D", "E", "F"}) { - for (int puck = 1; puck <= 5; puck++) { + for (int puck = 1; puck <= BasePlate.numberOfPucksPerSegments; puck++) { tablePucks.getModel().setValueAt(segment + puck, row++, 0); } } @@ -153,84 +166,88 @@ public class MainPanel extends Panel { @Override public void onInitialize(int runCount) { stopTimer(); - Controller.getInstance().onInitialize(runCount); - panelDisplayMode.setVisible(Controller.getInstance().isRoomTempEnabled()); - panelBeamlineStatus.setVisible(Controller.getInstance().isBeamlineStatusEnabled()); - if (basePlatePanel.getDevice() != (Device) getDevice("BasePlate")) { - basePlatePanel.setDevice((Device) getDevice("BasePlate")); - } - try { - devicesPanel.initialize(); - ((Device) getDevice("dewar_level")).addListener(new DeviceAdapter() { - @Override - public void onValueChanged(Device device, Object value, Object former) { - updateLevel(value); - } - }); - updateLevel(((Device) getDevice("dewar_level")).take()); - - ((Device) getDevice("air_pressure_ok")).addListener(new DeviceAdapter() { - @Override - public void onValueChanged(Device device, Object value, Object former) { - updateAirPressure(value); - } - }); - updateAirPressure(((Device) getDevice("air_pressure_ok")).take()); - - ((Device) getDevice("n2_pressure_ok")).addListener(new DeviceAdapter() { - @Override - public void onValueChanged(Device device, Object value, Object former) { - updateN2Pressure(value); - } - }); - updateN2Pressure(((Device) getDevice("n2_pressure_ok")).take()); - - ((Device) getDevice("feedback_local_safety")).addListener(new DeviceAdapter() { - @Override - public void onValueChanged(Device device, Object value, Object former) { - updateLocalSafety(value); - } - }); - updateLocalSafety(((Device) getDevice("feedback_local_safety")).take()); - - updateN2Pressure(((Device) getDevice("n2_pressure_ok")).take()); - - ((Device) getDevice("gripper_dryer")).addListener(new DeviceAdapter() { - @Override - public void onValueChanged(Device device, Object value, Object former) { - updateDryer(value); - } - }); - updateDryer(((Device) getDevice("gripper_dryer")).take()); - - ((Device) getDevice("feedback_psys_safety")).addListener(new DeviceAdapter() { - @Override - public void onValueChanged(Device device, Object value, Object former) { - updatePsysSafety(value); - } - }); - updatePsysSafety(((Device) getDevice("feedback_psys_safety")).take()); - ((Device) getDevice("robot")).addListener(new DeviceAdapter() { - @Override - public void onValueChanged(Device device, Object value, Object former) { - updateMode(value); - } - - public void onStateChanged(Device device, State state, State former) { - if (!state.isNormal()) { - updateMode(null); + try{ + Controller.getInstance().onInitialize(runCount); + panelDisplayMode.setVisible(Controller.getInstance().isRoomTempEnabled()); + panelBeamlineStatus.setVisible(Controller.getInstance().isBeamlineStatusEnabled()); + if (basePlatePanel.getDevice() != (Device) getDevice("BasePlate")) { + basePlatePanel.setDevice((Device) getDevice("BasePlate")); + } + try { + devicesPanel.initialize(); + ((Device) getDevice("dewar_level")).addListener(new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + updateLevel(value); } - } - }); - updateMode(((Device) getDevice("robot")).take()); - } catch (Exception ex) { - this.getLogger().log(Level.SEVERE, null, ex); + }); + updateLevel(((Device) getDevice("dewar_level")).take()); + + ((Device) getDevice("air_pressure_ok")).addListener(new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + updateAirPressure(value); + } + }); + updateAirPressure(((Device) getDevice("air_pressure_ok")).take()); + + ((Device) getDevice("n2_pressure_ok")).addListener(new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + updateN2Pressure(value); + } + }); + updateN2Pressure(((Device) getDevice("n2_pressure_ok")).take()); + + ((Device) getDevice("feedback_local_safety")).addListener(new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + updateLocalSafety(value); + } + }); + updateLocalSafety(((Device) getDevice("feedback_local_safety")).take()); + + updateN2Pressure(((Device) getDevice("n2_pressure_ok")).take()); + + ((Device) getDevice("gripper_dryer")).addListener(new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + updateDryer(value); + } + }); + updateDryer(((Device) getDevice("gripper_dryer")).take()); + + ((Device) getDevice("feedback_psys_safety")).addListener(new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + updatePsysSafety(value); + } + }); + updatePsysSafety(((Device) getDevice("feedback_psys_safety")).take()); + ((Device) getDevice("robot")).addListener(new DeviceAdapter() { + @Override + public void onValueChanged(Device device, Object value, Object former) { + updateMode(value); + } + + public void onStateChanged(Device device, State state, State former) { + if (!state.isNormal()) { + updateMode(null); + } + } + }); + updateMode(((Device) getDevice("robot")).take()); + } catch (Exception ex) { + this.getLogger().log(Level.SEVERE, null, ex); + } + setPuckDatamatrix(null); + setSampleDatamatrix(null); + setBackgroundUpdate(true); + startTimer(3000, 1000); + updateCameraView(); + } catch (Exception ex){ + getLogger().log(Level.SEVERE, null, ex); } - setPuckDatamatrix(null); - setSampleDatamatrix(null); - setBackgroundUpdate(true); - startTimer(3000, 1000); - updateCameraView(); } @Override @@ -490,7 +507,7 @@ public class MainPanel extends Panel { buttonCalibrateCover.setVisible(expert); devicesPanel.setActive(expert); panelViewType.setVisible(expert); - panelDetection.setVisible(expert); + panelDetection.setVisible(expert && !isRt()); buttonDetectCover.setVisible(expert); buttonConfig.setVisible(expert); Puck.setDisplayDetectionError(expert); @@ -575,6 +592,13 @@ public class MainPanel extends Panel { } } ); + if (isRt()){ + for (int i=0; i<3; i++){ + tableSamples.getColumnModel().getColumn(i).setMinWidth(0); + tableSamples.getColumnModel().getColumn(i).setMaxWidth(0); + tableSamples.getColumnModel().getColumn(i).setWidth(0); + } + } } void onSelectionChanged(String segment, Integer puck, Integer sample) { @@ -876,18 +900,18 @@ public class MainPanel extends Panel { panelHexiposiLayout.setHorizontalGroup( panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelHexiposiLayout.createSequentialGroup() - .addContainerGap(13, Short.MAX_VALUE) + .addContainerGap(9, Short.MAX_VALUE) .addGroup(panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(buttonDetectCover) .addComponent(hexiposiPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(14, Short.MAX_VALUE)) + .addContainerGap(9, Short.MAX_VALUE)) ); panelHexiposiLayout.setVerticalGroup( panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelHexiposiLayout.createSequentialGroup() - .addContainerGap(15, Short.MAX_VALUE) + .addContainerGap(14, Short.MAX_VALUE) .addComponent(hexiposiPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE) .addComponent(buttonDetectCover) .addContainerGap()) ); @@ -914,11 +938,11 @@ public class MainPanel extends Panel { panelViewTypeLayout.setHorizontalGroup( panelViewTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelViewTypeLayout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap(8, Short.MAX_VALUE) .addGroup(panelViewTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(buttonDrawing) .addComponent(buttonCamera)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(8, Short.MAX_VALUE)) ); panelViewTypeLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonCamera, buttonDrawing}); @@ -1374,9 +1398,9 @@ public class MainPanel extends Panel { .addGroup(panelDevicesLayout.createSequentialGroup() .addGap(0, 0, 0) .addComponent(devicesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelExpert, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(30, Short.MAX_VALUE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelDevicesLayout.setVerticalGroup( panelDevicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -1385,7 +1409,7 @@ public class MainPanel extends Panel { .addGroup(panelDevicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panelExpert, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(devicesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(8, Short.MAX_VALUE)) ); javax.swing.GroupLayout panelRightLayout = new javax.swing.GroupLayout(panelRight); @@ -1404,7 +1428,7 @@ public class MainPanel extends Panel { panelRightLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRightLayout.createSequentialGroup() .addGap(0, 0, 0) - .addComponent(panelDetail, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE) + .addComponent(panelDetail, javax.swing.GroupLayout.DEFAULT_SIZE, 108, Short.MAX_VALUE) .addGap(0, 0, 0) .addComponent(panelDevices, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) @@ -1575,7 +1599,7 @@ public class MainPanel extends Panel { .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(panelTop, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(0, 0, 0) - .addComponent(panelBottom, javax.swing.GroupLayout.DEFAULT_SIZE, 74, Short.MAX_VALUE) + .addComponent(panelBottom, javax.swing.GroupLayout.DEFAULT_SIZE, 76, Short.MAX_VALUE) .addGap(1, 1, 1)) ); }// //GEN-END:initComponents diff --git a/src/main/java/ch/psi/mxsc/Puck.java b/src/main/java/ch/psi/mxsc/Puck.java index 910ba15..a4226b1 100644 --- a/src/main/java/ch/psi/mxsc/Puck.java +++ b/src/main/java/ch/psi/mxsc/Puck.java @@ -18,7 +18,7 @@ import java.util.ArrayList; public class Puck extends DeviceBase { final static int signalX = -1; - final static PointDouble[] samplesPosition = new PointDouble[]{ + final static PointDouble[] SAMPLES_POSITION_NORMAL = new PointDouble[]{ new PointDouble(0 * signalX, 24.24), new PointDouble(23.05360995 * signalX, 7.490571944), new PointDouble(14.24791452* signalX, -19.61057194), @@ -37,6 +37,21 @@ public class Puck extends DeviceBase { new PointDouble(-28.39445573 * signalX, 44.18263554) }; + final static PointDouble[] SAMPLES_POSITION_RT = new PointDouble[]{ + new PointDouble(-30.0,-40.0), + new PointDouble(-2.0, -30.0), + new PointDouble(25.0, -40.0), + new PointDouble(45.0, -15.0), + new PointDouble(-30.0,0.0), + new PointDouble(-30.0, 40.0), + new PointDouble(-2.0, 30.0), + new PointDouble(25.0, 40.0), + new PointDouble(45.0, 15.0) + }; + + final static PointDouble[] samplesPosition = (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt) ? + SAMPLES_POSITION_RT : SAMPLES_POSITION_NORMAL; + static final Character[] SEGMENTS_NORMAL =new Character[]{ 'A', 'A','A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', @@ -64,6 +79,10 @@ public class Puck extends DeviceBase { 'F', 'F', 'F', 'F', 'F', }; + static final Character[] SEGMENTS_RT =new Character[]{ + 'A', 'B','C', 'D', 'E', 'F' + }; + static final int[] NUMBERS_NORMAL = new int[]{ 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, @@ -90,6 +109,10 @@ public class Puck extends DeviceBase { 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, }; + + static final int[] NUMBERS_RT = new int[]{ + 1, 1, 1, 1, 1, 1 + }; static final int[] ADDRESSES_NORMAL = new int[]{ 1, 2, 3, 4, 5, @@ -144,12 +167,19 @@ public class Puck extends DeviceBase { 240.00, 240.00, 210.00, 220.89, 199.11, }; + static final double[] ANGLES_RT = new double[]{ + 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 + }; + static final Character[] SEGMENTS = (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.normal) ? SEGMENTS_NORMAL : ( - (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.sf) ? SEGMENTS_SF : SEGMENTS_6D + (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.sf) ? SEGMENTS_SF : ( + (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt) ? SEGMENTS_RT : SEGMENTS_6D + ) ); static final int[] NUMBERS = (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.normal) ? NUMBERS_NORMAL : ( - (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.sf) ? NUMBERS_SF : NUMBERS_6D + (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.sf) ? NUMBERS_SF : + ((MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt) ? NUMBERS_RT : NUMBERS_6D) ); @@ -159,7 +189,8 @@ public class Puck extends DeviceBase { static final double[] ANGLES = (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.normal) ? ANGLES_NORMAL : ( - (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.sf) ? ANGLES_SF : ANGLES_6D + (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.sf) ? ANGLES_SF : + ((MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt) ? ANGLES_RT : ANGLES_6D) ); final static PointDouble referencePosition = new PointDouble(0.0, -66.9 - 0.2); @@ -168,12 +199,15 @@ public class Puck extends DeviceBase { final static PointDouble ledMinispinePosition = new PointDouble(0.0, -36.0); final static Double unipuckLedSize = 10.0; final static Double minispineLedSize = 8.0; - PuckType puckType = PuckType.Unknown; public PuckType getPuckType(){ + if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){ + return PuckType.RT; + } + return puckType; } @@ -185,16 +219,19 @@ public class Puck extends DeviceBase { Empty, Minispine, Unipuck, + RT, Error, Unknown; public boolean isDefined(){ - return (this==Minispine) || (this==Unipuck); + return (this==Minispine) || (this==Unipuck)|| (this==RT); } } public String getStatus(){ + Detection detection = getDetection(); + PuckType puckType = getPuckType(); if ((detection==Detection.Present) && puckType.isDefined()) { return puckType.toString(); } @@ -347,7 +384,7 @@ public class Puck extends DeviceBase { } public int getUserIndex(){ - return (getSegment() - new Character('A')) * 5 + getNumber() - 1; + return (getSegment() - new Character('A')) * BasePlate.numberOfPucksPerSegments + getNumber() - 1; } boolean enabled; @@ -370,6 +407,9 @@ public class Puck extends DeviceBase { Detection detection = Detection.Error; public Detection getDetection() { + if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){ + return Detection.Present; + } return detection; } diff --git a/src/main/java/ch/psi/mxsc/PuckGraphics.java b/src/main/java/ch/psi/mxsc/PuckGraphics.java index 3122248..6527df5 100644 --- a/src/main/java/ch/psi/mxsc/PuckGraphics.java +++ b/src/main/java/ch/psi/mxsc/PuckGraphics.java @@ -104,7 +104,7 @@ public class PuckGraphics { if (puck.isDisabled()){ return basePlateGraphics.getColor(); } - switch (puck.detection) { + switch (puck.getDetection()) { case Empty: //ret = isHighlithted() ? new Color(224, 224, 224) : Color.LIGHT_GRAY; ret = getEmptyColor(); @@ -142,9 +142,14 @@ public class PuckGraphics { int getDrawSize() { //All pucks if (basePlateGraphics!=null) { + DimensionDouble puckSize = puck.getSize(); + if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){ + puckSize = new DimensionDouble(100,100); + } + Rectangle rect = basePlateGraphics.getBoundingBox(); //TODO - int ret = Math.min((int) Math.round(((double)puck.getSize().getWidth() / basePlate.getSize().getWidth()) * rect.width), - (int) Math.round(((double)puck.getSize().getHeight() / basePlate.getSize().getHeight()) * rect.height) + int ret = Math.min((int) Math.round(((double)puckSize.getWidth() / basePlate.getSize().getWidth()) * rect.width), + (int) Math.round(((double)puckSize.getHeight() / basePlate.getSize().getHeight()) * rect.height) ); if (puck.isSelected()) { ret += 2; @@ -228,10 +233,16 @@ public class PuckGraphics { } int getReferenceDrawSize() { + if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){ + return getDrawSize(10.0) ; + } return getDrawSize(puck.referenceSize) ; } Point getReferenceDrawPosition() { + if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){ + return getDrawPosition(new PointDouble(-67.0, 0.0)); + } return getDrawPosition(new PointDouble(0, -67.0)); } @@ -270,13 +281,23 @@ public class PuckGraphics { g.setColor(refColor); position = getReferenceDrawPosition(); size = getReferenceDrawSize(); - //size+=1; - g.fillOval(position.x - size / 2, position.y - size / 2, size, size); - g.setColor(getBorderColor(drawBackground)); - //size-=1; - g.setStroke(new BasicStroke(getBorderWidth(drawBackground))); - g.drawArc(position.x - size / 2, position.y - size / 2 , size, size, (int) (190 + (rotated ? puck.angle : 0)), 154); - g.setStroke(new BasicStroke(1f)); + if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){ + g.fillRect(position.x-1, position.y - size*3 , size+1, size*6); + g.setColor(getBorderColor(drawBackground)); + //size-=1; + g.setStroke(new BasicStroke(getBorderWidth(drawBackground))); + int height = (int)(size*2.4); + g.drawLine(position.x+size, position.y -height , position.x +size, position.y +height); + g.setStroke(new BasicStroke(1f)); + } else { + //size+=1; + g.fillOval(position.x - size / 2, position.y - size / 2, size, size); + g.setColor(getBorderColor(drawBackground)); + //size-=1; + g.setStroke(new BasicStroke(getBorderWidth(drawBackground))); + g.drawArc(position.x - size / 2, position.y - size / 2 , size, size, (int) (190 + (rotated ? puck.angle : 0)), 154); + g.setStroke(new BasicStroke(1f)); + } } else { Point pu = getDrawUnipuckLedPosition(); Point pm = getDrawMinispineLedPosition(); diff --git a/src/main/java/ch/psi/mxsc/SampleInfo.java b/src/main/java/ch/psi/mxsc/SampleInfo.java index c392f13..801c290 100644 --- a/src/main/java/ch/psi/mxsc/SampleInfo.java +++ b/src/main/java/ch/psi/mxsc/SampleInfo.java @@ -10,6 +10,7 @@ public class SampleInfo extends HashMap { public enum PuckType { Unipuck, MiniSpine, + RT, Unknown }