import ch.psi.pshell.core.Context; import ch.psi.pshell.core.JsonSerializer; import ch.psi.pshell.device.DiscretePositioner; import ch.psi.pshell.device.MasterPositioner; import ch.psi.pshell.device.Motor; import ch.psi.pshell.device.Positioner; import ch.psi.pshell.device.ProcessVariable; import ch.psi.pshell.device.ReadonlyProcessVariable; import ch.psi.pshell.device.Register; import ch.psi.pshell.plot.MatrixPlotSeries; import ch.psi.pshell.plot.Plot; import ch.psi.pshell.swing.DataPanel; import ch.psi.pshell.swing.DevicePanel; import ch.psi.pshell.ui.PanelProcessor; import ch.psi.pshell.ui.QueueProcessor; import ch.psi.utils.Arr; import ch.psi.utils.Convert; import ch.psi.utils.IO; import ch.psi.utils.Reflection; import ch.psi.utils.State; import ch.psi.utils.swing.SwingUtils; import java.awt.Color; import java.awt.Component; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.DefaultComboBoxModel; import javax.swing.DropMode; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.TransferHandler; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.DefaultTableModel; /** * */ public class SIStem extends PanelProcessor { File currentFile; final DefaultTableModel modelInactive; final DefaultTableModel modelFixed; final DefaultTableModel modelScanned; final DefaultTableModel modelMaster; QueueProcessor queueProcessor; JDialog dataDialog; public static final String FILE_EXTENSION = "json"; final JTextField[] scientaFloatFields; final JTextField[] scientaIntFields; final JComboBox[] scientaCombos; final JTextField[] scientaRangeFields; final JComboBox[] deviceCombos; boolean intialized; public SIStem() { initComponents(); modelInactive = (DefaultTableModel) tableInactive.getModel(); modelFixed = (DefaultTableModel) tableFixed.getModel(); modelScanned = (DefaultTableModel) tableScanned.getModel(); modelMaster = (DefaultTableModel) tableMaster.getModel(); abstract class PositinerTransferHandler extends TransferHandler { @Override public int getSourceActions(JComponent c) { return DnDConstants.ACTION_COPY_OR_MOVE; } @Override public Transferable createTransferable(JComponent comp) { try { JTable table = (JTable) comp; return new StringSelection((String) table.getModel().getValueAt(table.getSelectedRow(), 0)); } catch (Exception ex) { return null; } } @Override public boolean canImport(TransferHandler.TransferSupport support) { return support.isDataFlavorSupported(DataFlavor.stringFlavor); } @Override public boolean importData(TransferHandler.TransferSupport support) { if (support.isDrop() && canImport(support)) { try { JTable.DropLocation dl = (JTable.DropLocation) support.getDropLocation(); String name = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor); DefaultTableModel model = ((DefaultTableModel) ((JTable) support.getComponent()).getModel()); ProcessVariable pos = getContext().getDevicePool().getByName(name, ProcessVariable.class); if (pos != null) { addDevice(pos, model, dl.getRow(), getRowData(pos)); } } catch (Exception ex) { ex.printStackTrace(); return false; } } return true; } abstract Object[] getRowData(ProcessVariable pos); }; tableInactive.setDragEnabled(true); tableInactive.setDropMode(DropMode.INSERT_ROWS); tableInactive.setFillsViewportHeight(true); tableInactive.setTransferHandler(new PositinerTransferHandler() { @Override Object[] getRowData(ProcessVariable dev) { return new Object[]{dev.getName()}; } }); tableFixed.setDragEnabled(true); tableFixed.setDropMode(DropMode.INSERT_ROWS); tableFixed.setFillsViewportHeight(true); tableFixed.setTransferHandler(new PositinerTransferHandler() { @Override Object[] getRowData(ProcessVariable dev) { return new Object[]{dev.getName(), Double.NaN, dev.getUnit()}; } }); tableScanned.setDragEnabled(true); tableScanned.setDropMode(DropMode.INSERT_ROWS); tableScanned.setFillsViewportHeight(true); tableScanned.setTransferHandler(new PositinerTransferHandler() { @Override Object[] getRowData(ProcessVariable dev) { return new Object[]{dev.getName(), Double.NaN, Double.NaN, 0, dev.getUnit()}; } }); scientaFloatFields = new JTextField[]{textLowEnergy, textCenterEnergy, textHighEnergy, textStepEnergy, textLowThetaY, textCenterThetaY, textHighThetaY, textStepThetaY, textCenterThetaX}; scientaIntFields = new JTextField[]{textSlices, textChannels}; scientaRangeFields = new JTextField[]{textXChannelMax, textXChannelMin, textYChannelMax, textYChannelMin}; scientaCombos = new JComboBox[]{comboPass, comboAcquisition, comboEnergy, comboLens, comboDetMode}; deviceCombos = new JComboBox[]{comboPol, comboGrating}; try { Class scienta = getContext().getClassByName("Scienta"); SwingUtils.setEnumCombo(comboLens, Reflection.getDeclaredClass(scienta, "LensMode"), true); SwingUtils.setEnumCombo(comboEnergy, Reflection.getDeclaredClass(scienta, "EnergyMode"), true); SwingUtils.setEnumCombo(comboAcquisition, Reflection.getDeclaredClass(scienta, "AcquisitionMode"), true); SwingUtils.setEnumCombo(comboDetMode, Reflection.getDeclaredClass(scienta, "DetectorMode"), true); comboPass.setModel(new javax.swing.DefaultComboBoxModel(Convert.toStringArray(scienta.getField("PASS_ENERGY_VALUES").get(null)))); } catch (Exception ex) { getLogger().log(Level.SEVERE, null, ex); } for (JComboBox combo : scientaCombos) { SwingUtils.insertCombo(combo, "", 0); } buttonData.setVisible(isDetached()); detectorPlot.getAxis(Plot.AxisId.X).setLabel("X-Scale (energy)"); detectorPlot.getAxis(Plot.AxisId.Y).setLabel("Y-Scale (distance or angle)"); clear(); } void addDevice(ProcessVariable dev, DefaultTableModel model, int row, Object[] data) { if (row < 0) { row = model.getRowCount(); } model.insertRow(row, data); removeDevice(dev, modelInactive, (model == modelInactive) ? row : -1); removeDevice(dev, modelFixed, (model == modelFixed) ? row : -1); removeDevice(dev, modelScanned, (model == modelScanned) ? row : -1); } void removeDevice(ProcessVariable dev, DefaultTableModel model, int except) { for (int i = 0; i < model.getRowCount(); i++) { if ((except < 0) || (i != except)) { if (model.getValueAt(i, 0).equals(dev.getName())) { model.removeRow(i); break; } } } } //Overridable callbacks @Override public void onInitialize(int runCount) { if (runCount == 0) { clear(); } if (getState()==State.Ready){ onStateChange(State.Ready, State.Initializing); } updateMaster(); } @Override public void onStateChange(State state, State former) { if (!intialized) { if ((state == State.Ready) && (former == State.Initializing)) { try { Class enumClass = (Class) eval("scienta.getLensModeClass()"); String[] mode_position = (String[]) eval("id_mode.getPositions()"); String[] grating_position = (String[]) eval("grating.getPositions()"); SwingUtilities.invokeLater(() -> { try { SwingUtils.setEnumCombo(comboLens, enumClass, true); SwingUtils.insertCombo(comboLens, "", 0); comboLens.setSelectedIndex(0); comboPol.setModel(new DefaultComboBoxModel(mode_position)); SwingUtils.insertCombo(comboPol, "", 0); comboPol.setSelectedIndex(0); comboGrating.setModel(new DefaultComboBoxModel(grating_position)); SwingUtils.insertCombo(comboGrating, "", 0); comboGrating.setSelectedIndex(0); } catch (Exception ex) { ex.printStackTrace(); Logger.getLogger(SIStem.class.getName()).log(Level.SEVERE, null, ex); } }); intialized = true; } catch (Exception ex) { ex.printStackTrace(); Logger.getLogger(SIStem.class.getName()).log(Level.SEVERE, null, ex); } } } updateControls(); } @Override public void onExecutedFile(String fileName, Object result) { } //Callback to perform update - in event thread @Override protected void doUpdate() { } @Override public String getFileName() { return (currentFile == null) ? null : currentFile.toString(); } @Override public boolean isTabNameUpdated() { return false; } @Override public String getType() { return "SIStem"; } @Override public boolean createMenuNew() { return true; } @Override public boolean createFilePanel() { return true; } @Override public String getDescription() { return "SIStem Scan definition file (*." + FILE_EXTENSION + ")"; } @Override public String[] getExtensions() { return new String[]{FILE_EXTENSION}; } @Override public String getHomePath() { return "{script}/scans"; } @Override public void saveAs(String fileName) throws IOException { currentFile = new File(fileName); Map preActions = new LinkedHashMap(); for (JComboBox combo : deviceCombos) { if ((combo.isVisible()) && (combo.getSelectedIndex() > 0)) { preActions.put(combo.getName(), String.valueOf(combo.getSelectedItem())); } } for (JComboBox combo : scientaCombos) { if ((combo.isVisible()) && (combo.getSelectedIndex() > 0)) { preActions.put(combo.getName(), String.valueOf(combo.getSelectedItem())); } } for (JTextField text : scientaFloatFields) { if ((text.isVisible()) && (!text.getText().isBlank())) { preActions.put(text.getName(), Double.valueOf(text.getText().trim())); } } for (JTextField text : scientaIntFields) { if ((text.isVisible()) && (!text.getText().isBlank())) { preActions.put(text.getName(), Integer.valueOf(text.getText().trim())); } } for (int i = 0; i < modelFixed.getRowCount(); i++) { preActions.put(modelFixed.getValueAt(i, 0), modelFixed.getValueAt(i, 1)); } String[] positioners = new String[modelScanned.getRowCount()]; Double[] start = new Double[modelScanned.getRowCount()]; Double[] stop = new Double[modelScanned.getRowCount()]; Integer[] steps = new Integer[modelScanned.getRowCount()]; for (int i = 0; i < modelScanned.getRowCount(); i++) { positioners[i] = (String) modelScanned.getValueAt(i, 0); start[i] = (Double) modelScanned.getValueAt(i, 1); stop[i] = (Double) modelScanned.getValueAt(i, 2); steps[i] = (Integer) modelScanned.getValueAt(i, 3) - 1; } Integer[] range = new Integer[4]; for (int i = 0; i < scientaRangeFields.length; i++) { range[i] = scientaRangeFields[i].getText().isBlank() ? null : Integer.valueOf(scientaRangeFields[i].getText().trim()); } Map config = new HashMap(); config.put("PRE_ACTIONS", preActions); config.put("RANGE", range.equals(new Integer[]{null, null, null, null}) ? new ArrayList() : Arr.toList(range)); config.put("POSITIONERS", positioners); config.put("START", start); config.put("STOP", stop); config.put("STEPS", steps); config.put("SENSORS", getDevices(textSensors)); config.put("SNAPS", getDevices(textSnapshots)); config.put("DIAGS", getDevices(textDiagnostics)); config.put("MONITORS", getDevices(textMonitors)); config.put("SETTLING_TIME", spinnerLatency.getValue()); config.put("PASSES", spinnerPasses.getValue()); config.put("ZIGZAG", checkZigzag.isSelected()); config.put("COMPRESSION", checkCompression.isSelected()); String json = JsonSerializer.encode(config, true); Files.write(currentFile.toPath(), json.getBytes()); updateControls(); } @Override public void open(String fileName) throws IOException { clear(); if (fileName != null) { Path path = Paths.get(fileName); String json = new String(Files.readAllBytes(path)); currentFile = path.toFile(); Map config = (Map) JsonSerializer.decode(json, Map.class); Map preActions = (Map) config.get("PRE_ACTIONS"); List range = (List) config.getOrDefault("RANGE", new ArrayList()); List positioners = (List) config.get("POSITIONERS"); List start = (List) config.get("START"); List stop = (List) config.get("STOP"); List steps = (List) config.get("STEPS"); for (String name : preActions.keySet()) { for (JComboBox combo : deviceCombos) { if (name.equals(combo.getName())) { combo.setSelectedItem(String.valueOf(preActions.get(name))); break; } } for (JComboBox combo : scientaCombos) { if (name.equals(combo.getName())) { combo.setSelectedItem(String.valueOf(preActions.get(name))); break; } } for (JTextField text : Arr.append(scientaFloatFields, scientaIntFields)) { if (name.equals(text.getName())) { text.setText(String.valueOf(preActions.get(name))); break; } } for (int i = 0; i < range.size(); i++) { if (range.get(i) != null) { scientaRangeFields[i].setText(String.valueOf(range.get(i)).trim()); } } Positioner pos = getContext().getDevicePool().getByName(name, Positioner.class); if (pos != null) { addDevice(pos, modelFixed, -1, new Object[]{name, preActions.get(name), pos.getUnit()}); } } for (int i = 0; i < positioners.size(); i++) { String name = positioners.get(i); Positioner pos = getContext().getDevicePool().getByName(name, Positioner.class); if (pos != null) { addDevice(pos, modelScanned, -1, new Object[]{name, start.get(i), stop.get(i), steps.get(i) + 1, pos.getUnit()}); } } setDevices(textSensors, (List) config.get("SENSORS")); setDevices(textSnapshots, (List) config.get("SNAPS")); setDevices(textDiagnostics, (List) config.get("DIAGS")); setDevices(textMonitors, (List) config.get("MONITORS")); spinnerLatency.setValue(config.get("SETTLING_TIME")); spinnerPasses.setValue(config.get("PASSES")); checkZigzag.setSelected((Boolean) config.get("ZIGZAG")); checkCompression.setSelected((Boolean) config.get("COMPRESSION")); updateDetectorPlot(); } updateControls(); } @Override public void clear() { currentFile = null; for (JComboBox combo : deviceCombos) { combo.setSelectedIndex(0); } for (JComboBox combo : scientaCombos) { combo.setSelectedIndex(0); } for (JTextField text : Arr.append(Arr.append(scientaFloatFields, scientaIntFields), scientaRangeFields)) { text.setText(""); } modelFixed.setRowCount(0); modelScanned.setRowCount(0); String[] DEFAULT_SENSORS = new String[]{"scienta.dataMatrix"}; //String[] DEFAULT_SNAPS = new String[]{"temp_cryostat", "temp_sample1", "temp_headmech", "temp_sample2", // "temp_boot1", "temp_shield", "temp_boot2", "temp_cryopump", // "acmi", "tcmp", "exit_slit", "fe_vert_width", "fe_horiz_width"}; //String[] DEFAULT_DIAGS = new String[]{"x", "y", "z", "phi", "theta", "tilt"}; String[] DEFAULT_DIAGS = getContext().getDevicePool().getAllNamesOrderedByName(Motor.class); String[] DEFAULT_SNAPS = Arr.remove(getContext().getDevicePool().getAllNamesOrderedByName(ReadonlyProcessVariable.class), DEFAULT_DIAGS); String[] DEFAULT_MONITORS = new String[]{"current"}; setDevices(textSensors, Arr.toList(DEFAULT_SENSORS)); setDevices(textSnapshots, Arr.toList(DEFAULT_SNAPS)); setDevices(textDiagnostics, Arr.toList(DEFAULT_DIAGS)); setDevices(textMonitors, Arr.toList(DEFAULT_MONITORS)); initInactive(); spinnerLatency.setValue(0.0); spinnerPasses.setValue(1); checkZigzag.setSelected(false); checkCompression.setSelected(true); updateControls(); if (isLoaded()) { updateDetectorPlot(); try { updateLens(); } catch (Exception ex) { getLogger().log(Level.WARNING, null, ex); } } } @Override protected void onUnloaded() { if (queueProcessor != null) { getContext().getPluginManager().unloadPlugin(queueProcessor); getApp().exit(this); } } public List getDevices(JTextArea text) { String[] devices = text.getText().split("\n"); for (int i = 0; i < devices.length; i++) { devices[i] = devices[i].trim(); } return Arr.toList(Arr.removeEquals(devices, "")); } public void setDevices(JTextArea text, List devices) { text.setText(String.join("\n", devices)); } void initInactive() { modelInactive.setRowCount(0); List names = new ArrayList<>(); names.addAll(Arrays.asList(getContext().getDevicePool().getAllNamesOrderedByName(Motor.class))); names.addAll(Arrays.asList(getContext().getDevicePool().getAllNamesOrderedByName(MasterPositioner.class))); names.add("energy"); names.add("exit_slit"); names.add("fe_vert_width"); names.add("fe_horiz_width"); names.add("cff"); for (String name : names) { modelInactive.addRow(new Object[]{name}); } } @Override public void execute() throws Exception { checkValues(); checkBeamline(); save(); if (currentFile == null) { return; } HashMap args = new HashMap(); args.put("NAME", getScanName()); this.runAsync("templates/SIStem", args).handle((ret, ex) -> { if (ex != null) { } try { } catch (Exception e) { Logger.getLogger(SIStem.class.getName()).log(Level.SEVERE, null, e); } return ret; }); } String getScanName() { String scan = null; if (currentFile != null) { scan = IO.getPrefix(currentFile); String home = getContext().getSetup().expandPath(getHomePath()); String path = IO.getRelativePath(currentFile.getParentFile().getPath(), home); if ((path != null) && (!path.isBlank()) && !path.equals("/")) { if (!path.endsWith("/")) { path = path + "/"; } scan = path + scan; } } return scan; } void updateControls() { State state = getState(); String fileName = getFileName(); if (fileName == null) { textFile.setText(""); } else { String home = getContext().getSetup().expandPath(getHomePath()); if (IO.isSubPath(fileName, home)) { fileName = IO.getRelativePath(fileName, home); } textFile.setText(fileName); } buttonStart.setEnabled((state == State.Ready) && (currentFile != null)); buttonAddToQueue.setEnabled(((state == State.Ready) && (currentFile != null)) || isDetached()); buttonAbort.setEnabled(state.isProcessing()); buttonScienta.setEnabled(state.isInitialized()); boolean selected = tableMaster.getSelectedRow() >= 0; boolean enabled = state.isInitialized(); buttonEditMaster.setEnabled(enabled && selected); } void updateMaster() { modelMaster.setNumRows(0); for (MasterPositioner dev : getContext().getDevicePool().getAllDevices(MasterPositioner.class)) { try { Positioner[] slaves = dev.getSlaves(); String[] names = new String[slaves.length]; for (int i = 0; i < slaves.length; i++) { names[i] = slaves[i].getName(); } modelMaster.addRow(new Object[]{dev.getName(), dev.getMaster().getName(), String.join(", ", names)}); } catch (Exception ex) { Logger.getLogger(SIStem.class.getName()).log(Level.SEVERE, null, ex); } } updateControls(); } void updateLens() throws Exception { String lens = (String) comboLens.getSelectedItem(); boolean empty = ((lens == null) || (lens.isBlank())); //if (empty){ //lens = (String) eval("str(scienta.lensMode)", true); //} boolean visibleX = empty || lens.startsWith("A") || lens.startsWith("D"); boolean visibleY = empty || lens.startsWith("D"); panelX.setVisible(visibleX); for (Component c : SwingUtils.getComponentsByType(panelX, Component.class)) { c.setVisible(visibleX); } panelY.setVisible(visibleY); for (Component c : SwingUtils.getComponentsByType(panelY, Component.class)) { c.setVisible(visibleY); } } void checkValues() { for (int i = 0; i < modelFixed.getRowCount(); i++) { String positioner = (String) modelFixed.getValueAt(i, 0); Double value = (Double) modelFixed.getValueAt(i, 1); if (Double.isNaN(value)) { throw new IllegalArgumentException("Invalid value for " + positioner); } Positioner dev = (Positioner) getDevice(positioner); dev.assertValidValue(value); } for (int i = 0; i < modelScanned.getRowCount(); i++) { Double start = (Double) modelScanned.getValueAt(i, 1); Double end = (Double) modelScanned.getValueAt(i, 2); Integer points = (Integer) modelScanned.getValueAt(i, 3); String positioner = (String) modelScanned.getValueAt(i, 0); /* if ((start == null) || Double.isNaN(start)) { throw new IllegalArgumentException("Invalid start for " + positioner); } if ((end == null) || Double.isNaN(end)) { throw new IllegalArgumentException("Invalid stop for " + positioner); } */ Positioner dev = (Positioner) getDevice(positioner); dev.assertValidValue(start); dev.assertValidValue(end); /* double min = Math.min(start, end); double max = Math.max(start, end); if ((min < dev.getMinValue()) || (max > dev.getMaxValue())) { throw new IllegalArgumentException("Invalid scan range for " + positioner); } if ((points == null) || (points < 1)) { throw new IllegalArgumentException("Invalid points for " + positioner); } */ } for (JTextArea text : new JTextArea[]{textSensors, textDiagnostics, textSnapshots, textMonitors}) { for (String name : getDevices(text)) { try { eval(name + ".take()", true); } catch (Exception ex) { throw new IllegalArgumentException("Invalid device " + name + " in " + text.getName() + " table"); } } } for (JTextField text : scientaFloatFields) { if (!text.getText().isBlank()) { try { Double.valueOf(text.getText().trim()); } catch (Exception ex) { throw new IllegalArgumentException("Invalid value in " + text.getName()); } } } for (JTextField text : scientaIntFields) { if (!text.getText().isBlank()) { try { Integer.valueOf(text.getText().trim()); } catch (Exception ex) { throw new IllegalArgumentException("Invalid value in " + text.getName()); } } } List defined = new ArrayList(); for (JTextField text : scientaRangeFields) { if (!text.getText().isBlank()) { try { Integer.valueOf(text.getText().trim()); } catch (Exception ex) { throw new IllegalArgumentException("Invalid value in " + text.getName()); } } defined.add(text.getText().isBlank() ? false : true); } if ((defined.get(0) != defined.get(1)) || (defined.get(2) != defined.get(3))) { throw new IllegalArgumentException("Invalid detector range"); } } void checkBeamline() { Register chamber = (Register) getDevice("chamber"); if (!chamber.isSimulated()) { if (!"AC".equals(chamber.take())) { throw new IllegalArgumentException("Manipulator not in AC"); } } } void onTabChanged() { } void updateDetectorPlot() { if (getState().isInitialized()) { new Thread(() -> { try { int[] sensor = (int[]) eval("scienta.getSensorSize()", true); int[] _roi = (int[]) eval("scienta.getROI()", true); SwingUtilities.invokeAndWait(() -> { int[] roi = _roi; roi = new int[]{roi[0], roi[1], roi[2] + roi[0], roi[3] + roi[1]};//Change to xmin, ymin, xmax, ymax try { roi[0] = Integer.valueOf(textXChannelMin.getText()); } catch (Exception ex) { } try { roi[1] = Integer.valueOf(textYChannelMin.getText()); } catch (Exception ex) { } try { roi[2] = Integer.valueOf(textXChannelMax.getText()); } catch (Exception ex) { } try { roi[3] = Integer.valueOf(textYChannelMax.getText()); } catch (Exception ex) { } detectorPlot.getAxis(Plot.AxisId.X).setRange(0, sensor[0] - 1); detectorPlot.getAxis(Plot.AxisId.Y).setRange(0, sensor[1] - 1); if (detectorPlot.getNumberOfSeries() == 0) { double[][] arr = new double[][]{new double[]{Double.NaN}}; detectorPlot.addSeries(new MatrixPlotSeries("")); detectorPlot.getSeries(0).setData(arr); } detectorPlot.removeMarker(null); detectorPlot.addMarker(roi[0], Plot.AxisId.X, "", Color.GREEN); detectorPlot.addMarker(roi[1], Plot.AxisId.Y, "", Color.GREEN); detectorPlot.addMarker(roi[2], Plot.AxisId.X, "", Color.GREEN); detectorPlot.addMarker(roi[3], Plot.AxisId.Y, "", Color.GREEN); }); } catch (Exception ex) { getLogger().log(Level.WARNING, null, ex); } }).start(); } } /* String getMastersFile(){ return getContext().getSetup().expandPath("{config}/masters.json"); } void saveMasters() throws IOException{ Vector vector = modelMaster.getDataVector(); String json = JsonSerializer.encode(vector, true); Files.write(Paths.get(getMastersFile()), json.getBytes()); } void loadMasters() throws IOException{ String json = new String(Files.readAllBytes(Paths.get(getMastersFile()))); Vector vector = (Vector) JsonSerializer.decode(json, Vector.class); Vector header = new Vector<>(); Collections.addAll(header, SwingUtils.getTableColumnNames(tableMaster)); modelMaster.setDataVector(vector, header); } */ void plotImage() throws Exception { double[][] arr = new double[][]{new double[]{Double.NaN}}; int[] sensor = (int[]) eval("scienta.getSensorSize()", true); int[] roi = (int[]) eval("scienta.getROI()", true); try { Object data = eval("scienta.getDataMatrix().take()", true); if (data != null) { double[][] a = (double[][]) Convert.toDouble(data); double scaleX = roi[2] / a[0].length; double scaleY = roi[3] / a.length; arr = new double[sensor[0]][sensor[1]]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[0].length; j++) { arr[(int) (scaleY * i) + roi[1]][(int) (scaleX * j) + roi[0]] = a[i][j]; } } } } catch (Exception ex) { getLogger().log(Level.WARNING, null, ex); } detectorPlot.addSeries(new MatrixPlotSeries("")); detectorPlot.getSeries(0).setData(arr); } void onPlotShow() { detectorPlot.clear(); updateDetectorPlot(); } void onPlotHide() { detectorPlot.clear(); } @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { buttonScienta = new javax.swing.JButton(); buttonStart = new javax.swing.JButton(); buttonAbort = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel4 = new javax.swing.JPanel(); panelEnergy = new javax.swing.JPanel(); jLabel14 = new javax.swing.JLabel(); textStepEnergy = new javax.swing.JTextField(); jLabel13 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); jLabel15 = new javax.swing.JLabel(); textHighEnergy = new javax.swing.JTextField(); textCenterEnergy = new javax.swing.JTextField(); textLowEnergy = new javax.swing.JTextField(); panelY = new javax.swing.JPanel(); jLabel17 = new javax.swing.JLabel(); textStepThetaY = new javax.swing.JTextField(); jLabel18 = new javax.swing.JLabel(); jLabel19 = new javax.swing.JLabel(); jLabel20 = new javax.swing.JLabel(); textHighThetaY = new javax.swing.JTextField(); textCenterThetaY = new javax.swing.JTextField(); textLowThetaY = new javax.swing.JTextField(); panelX = new javax.swing.JPanel(); jLabel26 = new javax.swing.JLabel(); textCenterThetaX = new javax.swing.JTextField(); jPanel10 = new javax.swing.JPanel(); jLabel11 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); comboPass = new javax.swing.JComboBox(); comboLens = new javax.swing.JComboBox(); jLabel7 = new javax.swing.JLabel(); comboAcquisition = new javax.swing.JComboBox(); comboEnergy = new javax.swing.JComboBox(); jPanel5 = new javax.swing.JPanel(); jLabel16 = new javax.swing.JLabel(); comboDetMode = new javax.swing.JComboBox(); jLabel9 = new javax.swing.JLabel(); jLabel25 = new javax.swing.JLabel(); textSlices = new javax.swing.JTextField(); textChannels = new javax.swing.JTextField(); jLabel27 = new javax.swing.JLabel(); textXChannelMin = new javax.swing.JTextField(); textXChannelMax = new javax.swing.JTextField(); jLabel10 = new javax.swing.JLabel(); textYChannelMin = new javax.swing.JTextField(); textYChannelMax = new javax.swing.JTextField(); detectorPlot = new ch.psi.pshell.plot.MatrixPlotJFree(){ @Override protected void onShow(){ super.onShow(); onPlotShow(); } @Override protected void onHide(){ super.onHide(); onPlotHide(); } }; butonPlot = new javax.swing.JButton(); jPanel11 = new javax.swing.JPanel(); checkZigzag = new javax.swing.JCheckBox(); jLabel4 = new javax.swing.JLabel(); spinnerLatency = new javax.swing.JSpinner(); jLabel1 = new javax.swing.JLabel(); spinnerPasses = new javax.swing.JSpinner(); jLabel8 = new javax.swing.JLabel(); jLabel22 = new javax.swing.JLabel(); checkCompression = new javax.swing.JCheckBox(); jLabel21 = new javax.swing.JLabel(); comboPol = new javax.swing.JComboBox(); comboGrating = new javax.swing.JComboBox(); jLabel23 = new javax.swing.JLabel(); jPanel6 = new javax.swing.JPanel(); jScrollPane8 = new javax.swing.JScrollPane(); tableMaster = new javax.swing.JTable(); buttonEditMaster = new javax.swing.JButton(); jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); tableInactive = new javax.swing.JTable(); jScrollPane2 = new javax.swing.JScrollPane(); tableFixed = new javax.swing.JTable(); jScrollPane3 = new javax.swing.JScrollPane(); tableScanned = new javax.swing.JTable(); jPanel3 = new javax.swing.JPanel(); jScrollPane4 = new javax.swing.JScrollPane(); textSensors = new javax.swing.JTextArea(); jScrollPane5 = new javax.swing.JScrollPane(); textSnapshots = new javax.swing.JTextArea(); jScrollPane6 = new javax.swing.JScrollPane(); textDiagnostics = new javax.swing.JTextArea(); jScrollPane7 = new javax.swing.JScrollPane(); textMonitors = new javax.swing.JTextArea(); buttonAddToQueue = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); textFile = new javax.swing.JTextField(); buttonOpen = new javax.swing.JButton(); buttonSave = new javax.swing.JButton(); buttonClear = new javax.swing.JButton(); buttonData = new javax.swing.JButton(); buttonScienta.setText("Scienta Panel"); buttonScienta.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonScientaActionPerformed(evt); } }); buttonStart.setText("Start"); buttonStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonStartActionPerformed(evt); } }); buttonAbort.setText("Abort"); buttonAbort.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonAbortActionPerformed(evt); } }); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Parameters")); jTabbedPane1.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { jTabbedPane1StateChanged(evt); } }); panelEnergy.setBorder(javax.swing.BorderFactory.createTitledBorder("Energy Range (eV)")); jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel14.setText("High:"); textStepEnergy.setName("scienta.energyStepSize"); // NOI18N jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel13.setText("Center:"); jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel12.setText("Low:"); jLabel15.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel15.setText("Step:"); textHighEnergy.setName("scienta.highEnergy"); // NOI18N textCenterEnergy.setName("scienta.centerEnergy"); // NOI18N textLowEnergy.setName("scienta.lowEnergy"); // NOI18N javax.swing.GroupLayout panelEnergyLayout = new javax.swing.GroupLayout(panelEnergy); panelEnergy.setLayout(panelEnergyLayout); panelEnergyLayout.setHorizontalGroup( panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelEnergyLayout.createSequentialGroup() .addContainerGap() .addGroup(panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelEnergyLayout.createSequentialGroup() .addGroup(panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel14) .addComponent(jLabel12, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(textLowEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textCenterEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textHighEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelEnergyLayout.createSequentialGroup() .addComponent(jLabel15) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textStepEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); panelEnergyLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {textCenterEnergy, textHighEnergy, textLowEnergy, textStepEnergy}); panelEnergyLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel12, jLabel13, jLabel14, jLabel15}); panelEnergyLayout.setVerticalGroup( panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelEnergyLayout.createSequentialGroup() .addContainerGap() .addGroup(panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textLowEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel12)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textCenterEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel13)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textHighEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel14)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelEnergyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textStepEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel15)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelY.setBorder(javax.swing.BorderFactory.createTitledBorder("ThetaY ")); jLabel17.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel17.setText("High:"); textStepThetaY.setName("scienta.thetaYStepSize"); // NOI18N jLabel18.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel18.setText("Center:"); jLabel19.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel19.setText("Low:"); jLabel20.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel20.setText("Step:"); textHighThetaY.setName("scienta.highThetaY"); // NOI18N textCenterThetaY.setName("scienta.centerThetaY"); // NOI18N textLowThetaY.setName("scienta.lowThetaY"); // NOI18N javax.swing.GroupLayout panelYLayout = new javax.swing.GroupLayout(panelY); panelY.setLayout(panelYLayout); panelYLayout.setHorizontalGroup( panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelYLayout.createSequentialGroup() .addContainerGap() .addGroup(panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelYLayout.createSequentialGroup() .addGroup(panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel17) .addComponent(jLabel19, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel18, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(textLowThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textCenterThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textHighThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelYLayout.createSequentialGroup() .addComponent(jLabel20) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textStepThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); panelYLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel17, jLabel18, jLabel19, jLabel20}); panelYLayout.setVerticalGroup( panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelYLayout.createSequentialGroup() .addContainerGap() .addGroup(panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textLowThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel19)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textCenterThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel18)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textHighThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel17)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelYLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textStepThetaY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel20)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelX.setBorder(javax.swing.BorderFactory.createTitledBorder("ThetaX")); jLabel26.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel26.setText("Center:"); textCenterThetaX.setName("scienta.centerThetaX"); // NOI18N javax.swing.GroupLayout panelXLayout = new javax.swing.GroupLayout(panelX); panelX.setLayout(panelXLayout); panelXLayout.setHorizontalGroup( panelXLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelXLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel26) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textCenterThetaX, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); panelXLayout.setVerticalGroup( panelXLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelXLayout.createSequentialGroup() .addGap(38, 38, 38) .addGroup(panelXLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textCenterThetaX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel26)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel11.setText("Pass Energy:"); jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel6.setText("Acquisition:"); jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel5.setText("Energy Mode:"); comboPass.setModel(new javax.swing.DefaultComboBoxModel(new String[] { " " })); comboPass.setToolTipText(""); comboPass.setName("scienta.passEnergyDev"); // NOI18N comboLens.setModel(new javax.swing.DefaultComboBoxModel(new String[] { " " })); comboLens.setName("scienta.lensModeDev"); // NOI18N comboLens.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { comboLensActionPerformed(evt); } }); jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel7.setText("Lens Mode:"); comboAcquisition.setModel(new javax.swing.DefaultComboBoxModel(new String[] { " " })); comboAcquisition.setName("scienta.acquisitionModeDev"); // NOI18N comboEnergy.setModel(new javax.swing.DefaultComboBoxModel(new String[] { " " })); comboEnergy.setName("scienta.energyModeDev"); // NOI18N javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10); jPanel10.setLayout(jPanel10Layout); jPanel10Layout.setHorizontalGroup( jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel10Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel10Layout.createSequentialGroup() .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel5) .addComponent(jLabel6) .addComponent(jLabel11)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(comboPass, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(comboAcquisition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(comboEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(jPanel10Layout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(comboLens, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); jPanel10Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboAcquisition, comboEnergy, comboLens, comboPass}); jPanel10Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel11, jLabel5, jLabel6, jLabel7}); jPanel10Layout.setVerticalGroup( jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel10Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel11) .addComponent(comboPass, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(comboAcquisition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(comboEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(comboLens, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, Short.MAX_VALUE) .addComponent(panelEnergy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(12, 12, 12) .addComponent(panelX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(100, Short.MAX_VALUE)) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addGap(20, 20, 20) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(panelEnergy, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelY, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelX, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Analyzer", jPanel4); jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel16.setText("Mode:"); comboDetMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { " " })); comboDetMode.setToolTipText(""); comboDetMode.setName("scienta.detectorModeDev"); // NOI18N jLabel9.setText("X Channel Range:"); jLabel25.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel25.setText("Slices:"); textSlices.setName("scienta.slices"); // NOI18N textSlices.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { roiChanged(evt); } }); textChannels.setName("scienta.channels"); // NOI18N textChannels.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { roiChanged(evt); } }); jLabel27.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel27.setText("Channels:"); textXChannelMin.setName("x_channel_min"); // NOI18N textXChannelMin.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { roiChanged(evt); } }); textXChannelMax.setName("x_channel_max"); // NOI18N textXChannelMax.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { roiChanged(evt); } }); jLabel10.setText("Y Channel Range:"); textYChannelMin.setName("y_channel_min"); // NOI18N textYChannelMin.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { roiChanged(evt); } }); textYChannelMax.setName("y_channel_max"); // NOI18N textYChannelMax.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { roiChanged(evt); } }); detectorPlot.setLegendVisible(false); detectorPlot.setTitle(""); butonPlot.setText("Plot Image"); butonPlot.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { butonPlotActionPerformed(evt); } }); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel16) .addComponent(jLabel9)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(textXChannelMin, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textXChannelMax, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(comboDetMode, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel10) .addComponent(jLabel25)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(textSlices, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(textYChannelMin, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textYChannelMax, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jLabel27) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textChannels, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(butonPlot)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(detectorPlot, javax.swing.GroupLayout.DEFAULT_SIZE, 561, Short.MAX_VALUE) .addContainerGap()) ); jPanel5Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel10, jLabel16, jLabel25, jLabel27, jLabel9}); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addGap(21, 21, 21) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel16) .addComponent(comboDetMode, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(textXChannelMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textXChannelMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textChannels, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel27)) .addGap(18, 18, 18) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(textYChannelMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textYChannelMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textSlices, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel25)) .addGap(18, 18, Short.MAX_VALUE) .addComponent(butonPlot)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() .addContainerGap() .addComponent(detectorPlot, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))) .addContainerGap()) ); jTabbedPane1.addTab("Detector", jPanel5); jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel4.setText("Settling Time:"); spinnerLatency.setModel(new javax.swing.SpinnerNumberModel(0.0d, 0.0d, 1000.0d, 1.0d)); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel1.setText("Passes:"); spinnerPasses.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel8.setText("Zigzag:"); jLabel22.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel22.setText("Compression:"); jLabel21.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel21.setText("Polarization:"); comboPol.setModel(new javax.swing.DefaultComboBoxModel(new String[] { " " })); comboPol.setToolTipText(""); comboPol.setName("id_mode"); // NOI18N comboGrating.setModel(new javax.swing.DefaultComboBoxModel(new String[] { " " })); comboGrating.setName("grating"); // NOI18N jLabel23.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel23.setText("Grating:"); javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11); jPanel11.setLayout(jPanel11Layout); jPanel11Layout.setHorizontalGroup( jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel11Layout.createSequentialGroup() .addContainerGap(175, Short.MAX_VALUE) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel22) .addComponent(jLabel8) .addComponent(jLabel4) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel11Layout.createSequentialGroup() .addComponent(checkCompression) .addGap(59, 59, 59)) .addComponent(spinnerPasses, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(checkZigzag) .addComponent(spinnerLatency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(139, 139, 139) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel21) .addComponent(jLabel23)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(comboPol, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(comboGrating, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(175, Short.MAX_VALUE)) ); jPanel11Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerLatency, spinnerPasses}); jPanel11Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel22, jLabel4, jLabel8}); jPanel11Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboGrating, comboPol}); jPanel11Layout.setVerticalGroup( jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel11Layout.createSequentialGroup() .addGap(52, 52, 52) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel11Layout.createSequentialGroup() .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(checkCompression) .addComponent(jLabel22)) .addGap(18, 18, 18) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(checkZigzag) .addComponent(jLabel8))) .addGroup(jPanel11Layout.createSequentialGroup() .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel21) .addComponent(comboPol, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel23) .addComponent(comboGrating, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(spinnerLatency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(spinnerPasses, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(134, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Scan", jPanel11); jScrollPane8.setBorder(javax.swing.BorderFactory.createTitledBorder("")); tableMaster.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Name", "Master", "Slaves" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class, java.lang.String.class }; boolean[] canEdit = new boolean [] { false, false, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableMaster.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); tableMaster.getTableHeader().setReorderingAllowed(false); tableMaster.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tableMasterMouseClicked(evt); } public void mousePressed(java.awt.event.MouseEvent evt) { tableMasterMousePressed(evt); } }); tableMaster.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { tableMasterKeyReleased(evt); } }); jScrollPane8.setViewportView(tableMaster); buttonEditMaster.setText("Edit"); buttonEditMaster.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonEditMasterActionPerformed(evt); } }); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 743, Short.MAX_VALUE) .addGap(18, 18, 18) .addComponent(buttonEditMaster, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(buttonEditMaster) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 282, Short.MAX_VALUE))) ); jTabbedPane1.addTab("Master Axis", jPanel6); jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder("Inactive")); tableInactive.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Name" } ) { Class[] types = new Class [] { java.lang.String.class }; boolean[] canEdit = new boolean [] { false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableInactive.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); tableInactive.getTableHeader().setReorderingAllowed(false); jScrollPane1.setViewportView(tableInactive); jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder("Fixed")); tableFixed.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Name", "Value", "Units" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Double.class, java.lang.String.class }; boolean[] canEdit = new boolean [] { false, true, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableFixed.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); tableFixed.getTableHeader().setReorderingAllowed(false); jScrollPane2.setViewportView(tableFixed); jScrollPane3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scanned")); tableScanned.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Name", "Start", "Stop", "Points", "Units" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Double.class, java.lang.Double.class, java.lang.Integer.class, java.lang.String.class }; boolean[] canEdit = new boolean [] { false, true, true, true, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableScanned.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); tableScanned.getTableHeader().setReorderingAllowed(false); jScrollPane3.setViewportView(tableScanned); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(0, 0, 0) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 217, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 371, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(14, 14, 14) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 201, Short.MAX_VALUE) .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) .addContainerGap()) ); jTabbedPane1.addTab("Positioners", jPanel1); jScrollPane4.setBorder(javax.swing.BorderFactory.createTitledBorder("Sensors")); textSensors.setColumns(12); textSensors.setRows(5); textSensors.setName("sensors"); // NOI18N jScrollPane4.setViewportView(textSensors); jScrollPane5.setBorder(javax.swing.BorderFactory.createTitledBorder("Snapshots")); textSnapshots.setColumns(12); textSnapshots.setRows(5); textSnapshots.setName("snapshots"); // NOI18N jScrollPane5.setViewportView(textSnapshots); jScrollPane6.setBorder(javax.swing.BorderFactory.createTitledBorder("Diagnostics")); textDiagnostics.setColumns(12); textDiagnostics.setRows(5); textDiagnostics.setName("diagnostics"); // NOI18N jScrollPane6.setViewportView(textDiagnostics); jScrollPane7.setBorder(javax.swing.BorderFactory.createTitledBorder("Monitors")); textMonitors.setColumns(12); textMonitors.setRows(5); textMonitors.setName("monitors"); // NOI18N jScrollPane7.setViewportView(textMonitors); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addGap(0, 0, 0) .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE) .addGap(0, 0, 0)) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addGap(14, 14, 14) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane6, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 201, Short.MAX_VALUE) .addComponent(jScrollPane5, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane4, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane7)) .addContainerGap()) ); jTabbedPane1.addTab("Records", jPanel3); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jTabbedPane1) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jTabbedPane1) .addContainerGap()) ); buttonAddToQueue.setText("Queue"); buttonAddToQueue.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonAddToQueueActionPerformed(evt); } }); jLabel3.setText("File:"); textFile.setDisabledTextColor(javax.swing.UIManager.getDefaults().getColor("TextField.foreground")); textFile.setEnabled(false); buttonOpen.setText("Open"); buttonOpen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonOpenActionPerformed(evt); } }); buttonSave.setText("Save As"); buttonSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSaveActionPerformed(evt); } }); buttonClear.setText("Clear"); buttonClear.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonClearActionPerformed(evt); } }); buttonData.setText("Data Panel"); buttonData.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonDataActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(buttonScienta) .addGap(18, 18, 18) .addComponent(buttonData) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonStart) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonAbort)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textFile) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonOpen) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonSave) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonAddToQueue) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonClear))) .addContainerGap()) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonAbort, buttonAddToQueue, buttonStart}); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonClear, buttonOpen, buttonSave}); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonData, buttonScienta}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(10, 10, 10) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonOpen) .addComponent(buttonSave) .addComponent(jLabel3) .addComponent(textFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonClear) .addComponent(buttonAddToQueue)) .addGap(18, 18, 18) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonScienta) .addComponent(buttonStart) .addComponent(buttonAbort) .addComponent(buttonData)) .addContainerGap()) ); }// //GEN-END:initComponents private void buttonScientaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonScientaActionPerformed try { this.showDevicePanel("scienta"); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonScientaActionPerformed private void buttonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStartActionPerformed try { execute(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonStartActionPerformed private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed try { abort(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonAbortActionPerformed private void buttonOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonOpenActionPerformed try { open(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonOpenActionPerformed private void buttonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSaveActionPerformed try { checkValues(); //TODO: Factorized JFileChooser chooser = new JFileChooser(getContext().getSetup().expandPath(getHomePath())); FileNameExtensionFilter filter = new FileNameExtensionFilter(getDescription(), getExtensions()); chooser.setFileFilter(filter); try { if (currentFile != null) { chooser.setSelectedFile(currentFile); } } catch (Exception ex) { this.showException(ex); } int rVal = chooser.showSaveDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { String fileName = chooser.getSelectedFile().getAbsolutePath(); if (IO.getExtension(chooser.getSelectedFile().getAbsolutePath()).isEmpty()) { fileName += "." + FILE_EXTENSION; } saveAs(fileName); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonSaveActionPerformed private void buttonAddToQueueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAddToQueueActionPerformed try { QueueProcessor tq = null; if (this.isDetached()) { if ((queueProcessor == null) || !queueProcessor.isLoaded()) { queueProcessor = new QueueProcessor(); Context.getInstance().getPluginManager().loadPlugin(queueProcessor, "Queue"); Context.getInstance().getPluginManager().startPlugin(queueProcessor); } tq = queueProcessor; tq.requestFocus(); } else { List queues = getView().getQueues(); if (queues.size() == 0) { tq = getView().openProcessor(QueueProcessor.class, null); } else { tq = queues.get(0); } getView().getDocumentsTab().setSelectedComponent(tq); } if (currentFile != null) { tq.addNewFile(currentFile.getPath()); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonAddToQueueActionPerformed private void buttonClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonClearActionPerformed try { clear(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonClearActionPerformed private void buttonDataActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDataActionPerformed try { if ((dataDialog == null) || (!dataDialog.isDisplayable())) { DataPanel panel = new DataPanel(); panel.initialize(); panel.setDefaultDataPanelListener(); dataDialog = showDialog("Data", null, panel); } dataDialog.requestFocus(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonDataActionPerformed private void jTabbedPane1StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jTabbedPane1StateChanged try { onTabChanged(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_jTabbedPane1StateChanged private void butonPlotActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butonPlotActionPerformed try { plotImage(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_butonPlotActionPerformed private void roiChanged(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_roiChanged updateDetectorPlot(); }//GEN-LAST:event_roiChanged private void comboLensActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboLensActionPerformed try { updateLens(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_comboLensActionPerformed private void buttonEditMasterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonEditMasterActionPerformed try { String name = (String) modelMaster.getValueAt(tableMaster.getSelectedRow(), 0); DevicePanel pn = showDevicePanel(name); SwingUtils.getWindow(pn).setLocationRelativeTo(this); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonEditMasterActionPerformed private void tableMasterKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tableMasterKeyReleased updateControls(); }//GEN-LAST:event_tableMasterKeyReleased private void tableMasterMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMasterMousePressed updateControls(); }//GEN-LAST:event_tableMasterMousePressed private void tableMasterMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMasterMouseClicked try { if ((evt.getClickCount() % 2) == 0) { buttonEditMasterActionPerformed(null); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_tableMasterMouseClicked // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton butonPlot; private javax.swing.JButton buttonAbort; private javax.swing.JButton buttonAddToQueue; private javax.swing.JButton buttonClear; private javax.swing.JButton buttonData; private javax.swing.JButton buttonEditMaster; private javax.swing.JButton buttonOpen; private javax.swing.JButton buttonSave; private javax.swing.JButton buttonScienta; private javax.swing.JButton buttonStart; private javax.swing.JCheckBox checkCompression; private javax.swing.JCheckBox checkZigzag; private javax.swing.JComboBox comboAcquisition; private javax.swing.JComboBox comboDetMode; private javax.swing.JComboBox comboEnergy; private javax.swing.JComboBox comboGrating; private javax.swing.JComboBox comboLens; private javax.swing.JComboBox comboPass; private javax.swing.JComboBox comboPol; private ch.psi.pshell.plot.MatrixPlotJFree detectorPlot; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel18; private javax.swing.JLabel jLabel19; private javax.swing.JLabel jLabel20; private javax.swing.JLabel jLabel21; private javax.swing.JLabel jLabel22; private javax.swing.JLabel jLabel23; private javax.swing.JLabel jLabel25; private javax.swing.JLabel jLabel26; private javax.swing.JLabel jLabel27; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel10; private javax.swing.JPanel jPanel11; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JScrollPane jScrollPane4; private javax.swing.JScrollPane jScrollPane5; private javax.swing.JScrollPane jScrollPane6; private javax.swing.JScrollPane jScrollPane7; private javax.swing.JScrollPane jScrollPane8; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JPanel panelEnergy; private javax.swing.JPanel panelX; private javax.swing.JPanel panelY; private javax.swing.JSpinner spinnerLatency; private javax.swing.JSpinner spinnerPasses; private javax.swing.JTable tableFixed; private javax.swing.JTable tableInactive; private javax.swing.JTable tableMaster; private javax.swing.JTable tableScanned; private javax.swing.JTextField textCenterEnergy; private javax.swing.JTextField textCenterThetaX; private javax.swing.JTextField textCenterThetaY; private javax.swing.JTextField textChannels; private javax.swing.JTextArea textDiagnostics; private javax.swing.JTextField textFile; private javax.swing.JTextField textHighEnergy; private javax.swing.JTextField textHighThetaY; private javax.swing.JTextField textLowEnergy; private javax.swing.JTextField textLowThetaY; private javax.swing.JTextArea textMonitors; private javax.swing.JTextArea textSensors; private javax.swing.JTextField textSlices; private javax.swing.JTextArea textSnapshots; private javax.swing.JTextField textStepEnergy; private javax.swing.JTextField textStepThetaY; private javax.swing.JTextField textXChannelMax; private javax.swing.JTextField textXChannelMin; private javax.swing.JTextField textYChannelMax; private javax.swing.JTextField textYChannelMin; // End of variables declaration//GEN-END:variables }