diff --git a/.gitignore b/.gitignore index 1e79cd23..c3395165 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,8 @@ /sessions /context /log -/plugins /extensions script/cachedir script/Lib script/*.class -/script/ \ No newline at end of file +/script/ diff --git a/plugins/HoloScan$1.class b/plugins/HoloScan$1.class new file mode 100644 index 00000000..19c747bd Binary files /dev/null and b/plugins/HoloScan$1.class differ diff --git a/plugins/HoloScan$2.class b/plugins/HoloScan$2.class new file mode 100644 index 00000000..f427ebde Binary files /dev/null and b/plugins/HoloScan$2.class differ diff --git a/plugins/HoloScan$3.class b/plugins/HoloScan$3.class new file mode 100644 index 00000000..da893ec8 Binary files /dev/null and b/plugins/HoloScan$3.class differ diff --git a/plugins/HoloScan$4.class b/plugins/HoloScan$4.class new file mode 100644 index 00000000..cf287555 Binary files /dev/null and b/plugins/HoloScan$4.class differ diff --git a/plugins/HoloScan$5.class b/plugins/HoloScan$5.class new file mode 100644 index 00000000..9ea0a352 Binary files /dev/null and b/plugins/HoloScan$5.class differ diff --git a/plugins/HoloScan$6.class b/plugins/HoloScan$6.class new file mode 100644 index 00000000..f31fda19 Binary files /dev/null and b/plugins/HoloScan$6.class differ diff --git a/plugins/HoloScan$7.class b/plugins/HoloScan$7.class new file mode 100644 index 00000000..b9566c1b Binary files /dev/null and b/plugins/HoloScan$7.class differ diff --git a/plugins/HoloScan.class b/plugins/HoloScan.class new file mode 100644 index 00000000..f97677b7 Binary files /dev/null and b/plugins/HoloScan.class differ diff --git a/plugins/HoloScan.form b/plugins/HoloScan.form new file mode 100644 index 00000000..57c90969 --- /dev/null +++ b/plugins/HoloScan.form @@ -0,0 +1,626 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/HoloScan.java b/plugins/HoloScan.java new file mode 100644 index 00000000..6d3f2738 --- /dev/null +++ b/plugins/HoloScan.java @@ -0,0 +1,630 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +import ch.psi.pshell.dev.Motor; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.State; +import ch.psi.utils.swing.SwingUtils; +import java.awt.Component; +import java.util.ArrayList; +import java.util.HashMap; +import javax.swing.JCheckBox; +import javax.swing.SpinnerNumberModel; + +/** + * + */ +public class HoloScan extends Panel { + + public HoloScan() { + initComponents(); + } + + //Overridable callbacks + @Override + public void onInitialize(int runCount) { + Motor phi = (Motor) getDevice("phi"); + Motor theta = (Motor) getDevice("theta"); + motorPanelPhi.setDevice(phi); + motorPanelTheta.setDevice(theta); + spinnerFromPhi.setModel(new SpinnerNumberModel(phi.getMinValue(), phi.getMinValue(), phi.getMaxValue(), 1.0)); + spinnerToPhi.setModel(new SpinnerNumberModel(phi.getMaxValue(), phi.getMinValue(), phi.getMaxValue(), 1.0)); + spinnerFromTheta.setModel(new SpinnerNumberModel(theta.getMinValue(), theta.getMinValue(), theta.getMaxValue(), 1.0)); + spinnerToTheta.setModel(new SpinnerNumberModel(theta.getMaxValue(), theta.getMinValue(), theta.getMaxValue(), 1.0)); + } + + @Override + public void onStateChange(State state, State former) { + setEnabled(isEnabled()); + } + + @Override + public void onExecutedFile(String fileName, Object result) { + } + + + @Override + public void setEnabled(boolean value) { + super.setEnabled(value); + buttonAbort.setEnabled(value && getState().isInitialized()); + + boolean enableControls = (value && (getState()==State.Ready)); + for (Component c : panelSensors.getComponents()) { + c.setEnabled(enableControls); + } + for (Component c : panelPhi.getComponents()) { + c.setEnabled(enableControls); + } + buttonStart.setEnabled(enableControls); + + spinnerStepSizePhi.setEnabled(enableControls && radioStepSize.isSelected()); + spinnerStepsPhi.setEnabled(enableControls && radioSteps.isSelected()); + spinnerFromPhi.setEnabled(enableControls && radioAbsolute.isSelected()); + spinnerToPhi.setEnabled(enableControls && radioAbsolute.isSelected()); + spinnerRangePhi.setEnabled(enableControls && !radioAbsolute.isSelected()); + + spinnerStepSizeTheta.setEnabled(spinnerStepSizePhi.isEnabled()); + spinnerStepsTheta.setEnabled(spinnerStepsPhi.isEnabled()); + spinnerFromTheta.setEnabled(spinnerFromPhi.isEnabled()); + spinnerToTheta.setEnabled(spinnerToPhi.isEnabled()); + spinnerRangeTheta.setEnabled(spinnerRangePhi.isEnabled()); + } + + void startScan() throws Exception{ + HashMap args = new HashMap<>(); + ArrayList sensors = new ArrayList(); + for (Component c : panelSensors.getComponents()) { + if ((c instanceof JCheckBox) && ((JCheckBox) c).isSelected()) { + sensors.add(c.getName()); + } + } + args.put("SENSORS", sensors); + if (radioRelative.isSelected()) { + args.put("PHI_RANGE", new Double[]{-(Double) spinnerRangePhi.getValue() / 2, (Double) spinnerRangePhi.getValue() / 2}); + args.put("THETA_RANGE", new Double[]{-(Double) spinnerRangeTheta.getValue() / 2, (Double) spinnerRangeTheta.getValue() / 2}); + } else { + args.put("PHI_RANGE", new Double[]{(Double) spinnerFromPhi.getValue(), (Double) spinnerToPhi.getValue()}); + args.put("THETA_RANGE", new Double[]{(Double) spinnerFromTheta.getValue(), (Double) spinnerToTheta.getValue()}); + } + ArrayList steps = new ArrayList(); + if (radioStepSize.isSelected()) { + steps.add((Double) spinnerStepSizePhi.getValue()); + steps.add((Double) spinnerStepSizeTheta.getValue()); + } else { + steps.add((Integer) spinnerStepsPhi.getValue()); + steps.add((Integer) spinnerStepsTheta.getValue()); + } + args.put("STEPS", steps); + args.put("LATENCY", (Double) 0.0); + args.put("RELATIVE", radioRelative.isSelected()); + + runAsync("HoloScan", args); + } + + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonGroup1 = new javax.swing.ButtonGroup(); + buttonGroup2 = new javax.swing.ButtonGroup(); + panelPhi = new javax.swing.JPanel(); + motorPanelPhi = new ch.psi.pshell.swing.MotorReadoutPanel(); + jLabel2 = new javax.swing.JLabel(); + spinnerRangePhi = new javax.swing.JSpinner(); + radioStepSize = new javax.swing.JRadioButton(); + radioSteps = new javax.swing.JRadioButton(); + spinnerStepSizePhi = new javax.swing.JSpinner(); + spinnerStepsPhi = new javax.swing.JSpinner(); + radioAbsolute = new javax.swing.JRadioButton(); + spinnerFromPhi = new javax.swing.JSpinner(); + jLabel4 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + spinnerToPhi = new javax.swing.JSpinner(); + radioRelative = new javax.swing.JRadioButton(); + jLabel6 = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + motorPanelTheta = new ch.psi.pshell.swing.MotorReadoutPanel(); + jLabel8 = new javax.swing.JLabel(); + jLabel9 = new javax.swing.JLabel(); + spinnerFromTheta = new javax.swing.JSpinner(); + spinnerToTheta = new javax.swing.JSpinner(); + jLabel10 = new javax.swing.JLabel(); + spinnerRangeTheta = new javax.swing.JSpinner(); + jLabel11 = new javax.swing.JLabel(); + jLabel12 = new javax.swing.JLabel(); + spinnerStepSizeTheta = new javax.swing.JSpinner(); + jLabel13 = new javax.swing.JLabel(); + jLabel14 = new javax.swing.JLabel(); + spinnerStepsTheta = new javax.swing.JSpinner(); + panelSensors = new javax.swing.JPanel(); + checkImage = new javax.swing.JCheckBox(); + checkImageIntegration = new javax.swing.JCheckBox(); + checkSpectrum = new javax.swing.JCheckBox(); + checkCounts1 = new javax.swing.JCheckBox(); + checkTotalCount = new javax.swing.JCheckBox(); + checkCounts2 = new javax.swing.JCheckBox(); + checkCounts3 = new javax.swing.JCheckBox(); + checkCounts4 = new javax.swing.JCheckBox(); + checkCurrent = new javax.swing.JCheckBox(); + checkCur1 = new javax.swing.JCheckBox(); + checkCur2 = new javax.swing.JCheckBox(); + checkCur3 = new javax.swing.JCheckBox(); + buttonScientaSetup = new javax.swing.JButton(); + jPanel3 = new javax.swing.JPanel(); + buttonStart = new javax.swing.JButton(); + buttonAbort = new javax.swing.JButton(); + + panelPhi.setBorder(javax.swing.BorderFactory.createTitledBorder("Positioners")); + panelPhi.setPreferredSize(new java.awt.Dimension(239, 538)); + + jLabel2.setText("Range Phi:"); + + spinnerRangePhi.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.001d, 100.0d, 1.0d)); + spinnerRangePhi.setEnabled(false); + + buttonGroup1.add(radioStepSize); + radioStepSize.setSelected(true); + radioStepSize.setText("Step Size"); + radioStepSize.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + buttonGroup1.add(radioSteps); + radioSteps.setText("Number of Steps"); + radioSteps.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + spinnerStepSizePhi.setModel(new javax.swing.SpinnerNumberModel(0.1d, 0.001d, 10.0d, 0.1d)); + + spinnerStepsPhi.setModel(new javax.swing.SpinnerNumberModel(10, 1, 1000, 1)); + spinnerStepsPhi.setEnabled(false); + + buttonGroup2.add(radioAbsolute); + radioAbsolute.setSelected(true); + radioAbsolute.setText("Absolute Scan"); + radioAbsolute.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioAbsoluteActionPerformed(evt); + } + }); + + spinnerFromPhi.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + jLabel4.setText("Phi From:"); + + jLabel5.setText("Phi To:"); + + spinnerToPhi.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + buttonGroup2.add(radioRelative); + radioRelative.setText("Relative Scan"); + radioRelative.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioAbsoluteActionPerformed(evt); + } + }); + + jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel6.setText("Phi:"); + + jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel7.setText("Theta:"); + + jLabel8.setText("Theta To:"); + + jLabel9.setText("Theta From:"); + + spinnerFromTheta.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + spinnerToTheta.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + jLabel10.setText("Range Theta:"); + + spinnerRangeTheta.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.001d, 100.0d, 1.0d)); + spinnerRangeTheta.setEnabled(false); + + jLabel11.setText("Phi:"); + + jLabel12.setText("Theta:"); + + spinnerStepSizeTheta.setModel(new javax.swing.SpinnerNumberModel(0.1d, 0.001d, 10.0d, 0.1d)); + + jLabel13.setText("Phi:"); + + jLabel14.setText("Theta:"); + + spinnerStepsTheta.setModel(new javax.swing.SpinnerNumberModel(10, 1, 1000, 1)); + spinnerStepsTheta.setEnabled(false); + + javax.swing.GroupLayout panelPhiLayout = new javax.swing.GroupLayout(panelPhi); + panelPhi.setLayout(panelPhiLayout); + panelPhiLayout.setHorizontalGroup( + panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPhiLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPhiLayout.createSequentialGroup() + .addComponent(jLabel6) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(motorPanelPhi, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(panelPhiLayout.createSequentialGroup() + .addComponent(jLabel7) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(motorPanelTheta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(panelPhiLayout.createSequentialGroup() + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(radioSteps) + .addComponent(radioStepSize) + .addComponent(radioAbsolute) + .addComponent(radioRelative)) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPhiLayout.createSequentialGroup() + .addGap(0, 16, Short.MAX_VALUE) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPhiLayout.createSequentialGroup() + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel10, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(spinnerFromPhi, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerRangePhi, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerToPhi, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerFromTheta, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerToTheta, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerRangeTheta, javax.swing.GroupLayout.Alignment.TRAILING))) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPhiLayout.createSequentialGroup() + .addComponent(jLabel11) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerStepSizePhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPhiLayout.createSequentialGroup() + .addComponent(jLabel12) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerStepSizeTheta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPhiLayout.createSequentialGroup() + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel14) + .addComponent(jLabel13)) + .addGap(6, 6, 6) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerStepsPhi, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerStepsTheta, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))) + .addContainerGap()) + ); + + panelPhiLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {radioStepSize, radioSteps}); + + panelPhiLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerRangePhi, spinnerStepSizePhi, spinnerStepsPhi}); + + panelPhiLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel6, jLabel7}); + + panelPhiLayout.setVerticalGroup( + panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPhiLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel6) + .addComponent(motorPanelPhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel7) + .addComponent(motorPanelTheta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(radioAbsolute) + .addGap(3, 3, 3) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerFromPhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addGap(3, 3, 3) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerToPhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5)) + .addGap(3, 3, 3) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerFromTheta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel9)) + .addGap(3, 3, 3) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerToTheta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel8)) + .addGap(18, 18, 18) + .addComponent(radioRelative) + .addGap(1, 1, 1) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(spinnerRangePhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(1, 1, 1) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel10) + .addComponent(spinnerRangeTheta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(radioStepSize) + .addGap(3, 3, 3) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepSizePhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel11)) + .addGap(3, 3, 3) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepSizeTheta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel12)) + .addGap(1, 1, 1) + .addComponent(radioSteps) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepsPhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel13)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPhiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepsTheta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel14)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + panelSensors.setBorder(javax.swing.BorderFactory.createTitledBorder("Sensors")); + panelSensors.setPreferredSize(new java.awt.Dimension(239, 422)); + + checkImage.setSelected(true); + checkImage.setText("Scienta Image"); + checkImage.setToolTipText(""); + checkImage.setContentAreaFilled(false); + checkImage.setName("scienta.dataMatrix"); // NOI18N + + checkImageIntegration.setSelected(true); + checkImageIntegration.setText("Scienta Image Integration"); + checkImageIntegration.setToolTipText(""); + checkImageIntegration.setContentAreaFilled(false); + checkImageIntegration.setName("integration"); // NOI18N + + checkSpectrum.setSelected(true); + checkSpectrum.setText("Scienta Spectrum"); + checkSpectrum.setName("scienta.spectrum"); // NOI18N + + checkCounts1.setText("Counts Region 1"); + checkCounts1.setName("countsr1"); // NOI18N + + checkTotalCount.setSelected(true); + checkTotalCount.setText("Total Counts"); + checkTotalCount.setName("counts"); // NOI18N + + checkCounts2.setText("Counts Region 2"); + checkCounts2.setName("countsr2"); // NOI18N + + checkCounts3.setText("Counts Region 3"); + checkCounts3.setName("countsr3"); // NOI18N + + checkCounts4.setText("Counts Region 4"); + checkCounts4.setName("countsr4"); // NOI18N + + checkCurrent.setText("Current"); + checkCurrent.setName("current"); // NOI18N + + checkCur1.setText("Cur 1"); + checkCur1.setName("cur1"); // NOI18N + + checkCur2.setText("Cur 2"); + checkCur2.setName("cur2"); // NOI18N + + checkCur3.setText("Cur 3"); + checkCur3.setName("cur3"); // NOI18N + + buttonScientaSetup.setText("Scienta Setup"); + buttonScientaSetup.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonScientaSetupActionPerformed(evt); + } + }); + + javax.swing.GroupLayout panelSensorsLayout = new javax.swing.GroupLayout(panelSensors); + panelSensors.setLayout(panelSensorsLayout); + panelSensorsLayout.setHorizontalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonScientaSetup, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addGroup(panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(checkImage) + .addComponent(checkImageIntegration) + .addComponent(checkSpectrum) + .addComponent(checkCounts1) + .addComponent(checkTotalCount) + .addComponent(checkCounts2) + .addComponent(checkCounts3) + .addComponent(checkCounts4) + .addComponent(checkCurrent) + .addComponent(checkCur1) + .addComponent(checkCur2) + .addComponent(checkCur3)) + .addGap(0, 14, Short.MAX_VALUE))) + .addContainerGap()) + ); + panelSensorsLayout.setVerticalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addComponent(checkImage) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkImageIntegration) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkSpectrum) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkTotalCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCurrent) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur3) + .addGap(18, 18, Short.MAX_VALUE) + .addComponent(buttonScientaSetup) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); + jPanel3.setPreferredSize(new java.awt.Dimension(239, 119)); + + 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); + } + }); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonStart, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonAbort, javax.swing.GroupLayout.DEFAULT_SIZE, 203, Short.MAX_VALUE)) + .addContainerGap()) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addComponent(buttonStart) + .addGap(18, 18, 18) + .addComponent(buttonAbort) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(panelSensors, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(panelPhi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jPanel3, panelPhi, panelSensors}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelPhi, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelSensors, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE) + .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void buttonScientaSetupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonScientaSetupActionPerformed + try{ + showDevicePanel("scienta"); + } catch (Exception ex){ + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonScientaSetupActionPerformed + + private void buttonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStartActionPerformed + try{ + startScan(); + } catch (Exception ex){ + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonStartActionPerformed + + private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed + abort(); + }//GEN-LAST:event_buttonAbortActionPerformed + + private void radioStepSizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioStepSizeActionPerformed + setEnabled(isEnabled()); + }//GEN-LAST:event_radioStepSizeActionPerformed + + private void radioAbsoluteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioAbsoluteActionPerformed + setEnabled(isEnabled()); + }//GEN-LAST:event_radioAbsoluteActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonAbort; + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.ButtonGroup buttonGroup2; + private javax.swing.JButton buttonScientaSetup; + private javax.swing.JButton buttonStart; + private javax.swing.JCheckBox checkCounts1; + private javax.swing.JCheckBox checkCounts2; + private javax.swing.JCheckBox checkCounts3; + private javax.swing.JCheckBox checkCounts4; + private javax.swing.JCheckBox checkCur1; + private javax.swing.JCheckBox checkCur2; + private javax.swing.JCheckBox checkCur3; + private javax.swing.JCheckBox checkCurrent; + private javax.swing.JCheckBox checkImage; + private javax.swing.JCheckBox checkImageIntegration; + private javax.swing.JCheckBox checkSpectrum; + private javax.swing.JCheckBox checkTotalCount; + 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 jLabel2; + 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 jPanel3; + private ch.psi.pshell.swing.MotorReadoutPanel motorPanelPhi; + private ch.psi.pshell.swing.MotorReadoutPanel motorPanelTheta; + private javax.swing.JPanel panelPhi; + private javax.swing.JPanel panelSensors; + private javax.swing.JRadioButton radioAbsolute; + private javax.swing.JRadioButton radioRelative; + private javax.swing.JRadioButton radioStepSize; + private javax.swing.JRadioButton radioSteps; + private javax.swing.JSpinner spinnerFromPhi; + private javax.swing.JSpinner spinnerFromTheta; + private javax.swing.JSpinner spinnerRangePhi; + private javax.swing.JSpinner spinnerRangeTheta; + private javax.swing.JSpinner spinnerStepSizePhi; + private javax.swing.JSpinner spinnerStepSizeTheta; + private javax.swing.JSpinner spinnerStepsPhi; + private javax.swing.JSpinner spinnerStepsTheta; + private javax.swing.JSpinner spinnerToPhi; + private javax.swing.JSpinner spinnerToTheta; + // End of variables declaration//GEN-END:variables +} + diff --git a/plugins/ManipulatorScan$1.class b/plugins/ManipulatorScan$1.class new file mode 100644 index 00000000..6693d87a Binary files /dev/null and b/plugins/ManipulatorScan$1.class differ diff --git a/plugins/ManipulatorScan$2.class b/plugins/ManipulatorScan$2.class new file mode 100644 index 00000000..a63bcf25 Binary files /dev/null and b/plugins/ManipulatorScan$2.class differ diff --git a/plugins/ManipulatorScan$3.class b/plugins/ManipulatorScan$3.class new file mode 100644 index 00000000..a8ccb663 Binary files /dev/null and b/plugins/ManipulatorScan$3.class differ diff --git a/plugins/ManipulatorScan$4.class b/plugins/ManipulatorScan$4.class new file mode 100644 index 00000000..9c24ec3f Binary files /dev/null and b/plugins/ManipulatorScan$4.class differ diff --git a/plugins/ManipulatorScan$5.class b/plugins/ManipulatorScan$5.class new file mode 100644 index 00000000..be1a568c Binary files /dev/null and b/plugins/ManipulatorScan$5.class differ diff --git a/plugins/ManipulatorScan$6.class b/plugins/ManipulatorScan$6.class new file mode 100644 index 00000000..568fd739 Binary files /dev/null and b/plugins/ManipulatorScan$6.class differ diff --git a/plugins/ManipulatorScan$7.class b/plugins/ManipulatorScan$7.class new file mode 100644 index 00000000..d146dcae Binary files /dev/null and b/plugins/ManipulatorScan$7.class differ diff --git a/plugins/ManipulatorScan$8.class b/plugins/ManipulatorScan$8.class new file mode 100644 index 00000000..3b78ae4f Binary files /dev/null and b/plugins/ManipulatorScan$8.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$1.class b/plugins/ManipulatorScan$PluginPanel$1.class new file mode 100644 index 00000000..757be361 Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$1.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$2.class b/plugins/ManipulatorScan$PluginPanel$2.class new file mode 100644 index 00000000..5da771a0 Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$2.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$3.class b/plugins/ManipulatorScan$PluginPanel$3.class new file mode 100644 index 00000000..87d0ffca Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$3.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$4.class b/plugins/ManipulatorScan$PluginPanel$4.class new file mode 100644 index 00000000..316b6889 Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$4.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$5.class b/plugins/ManipulatorScan$PluginPanel$5.class new file mode 100644 index 00000000..26d9a4ba Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$5.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$6.class b/plugins/ManipulatorScan$PluginPanel$6.class new file mode 100644 index 00000000..879490e2 Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$6.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$7.class b/plugins/ManipulatorScan$PluginPanel$7.class new file mode 100644 index 00000000..4fad40b5 Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$7.class differ diff --git a/plugins/ManipulatorScan$PluginPanel$8.class b/plugins/ManipulatorScan$PluginPanel$8.class new file mode 100644 index 00000000..79d6dc1a Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel$8.class differ diff --git a/plugins/ManipulatorScan$PluginPanel.class b/plugins/ManipulatorScan$PluginPanel.class new file mode 100644 index 00000000..67b0404d Binary files /dev/null and b/plugins/ManipulatorScan$PluginPanel.class differ diff --git a/plugins/ManipulatorScan.class b/plugins/ManipulatorScan.class new file mode 100644 index 00000000..5df2d7ae Binary files /dev/null and b/plugins/ManipulatorScan.class differ diff --git a/plugins/ManipulatorScan.form b/plugins/ManipulatorScan.form new file mode 100644 index 00000000..d3e63957 --- /dev/null +++ b/plugins/ManipulatorScan.form @@ -0,0 +1,557 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/ManipulatorScan.form~ b/plugins/ManipulatorScan.form~ new file mode 100644 index 00000000..4fb280fb --- /dev/null +++ b/plugins/ManipulatorScan.form~ @@ -0,0 +1,530 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/ManipulatorScan.java b/plugins/ManipulatorScan.java new file mode 100644 index 00000000..467696be --- /dev/null +++ b/plugins/ManipulatorScan.java @@ -0,0 +1,603 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +import ch.psi.pshell.dev.Motor; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.State; +import ch.psi.utils.swing.SwingUtils; +import java.awt.Component; +import java.util.ArrayList; +import java.util.HashMap; +import javax.swing.JCheckBox; +import javax.swing.SpinnerNumberModel; + +/** + * + */ +public class ManipulatorScan extends Panel { + + public ManipulatorScan() { + initComponents(); + } + + //Overridable callbacks + @Override + public void onInitialize(int runCount) { + comboMotorActionPerformed(null); + } + + @Override + public void onStateChange(State state, State former) { + setEnabled(isEnabled()); + } + + @Override + public void onExecutedFile(String fileName, Object result) { + } + + @Override + public void setEnabled(boolean value) { + super.setEnabled(value); + buttonAbort.setEnabled(value && getState().isInitialized()); + + boolean enableControls = (value && (getState() == State.Ready)); + for (Component c : panelSensors.getComponents()) { + c.setEnabled(enableControls); + } + for (Component c : panelPositioner.getComponents()) { + c.setEnabled(enableControls); + } + buttonStart.setEnabled(enableControls); + spinnerStepSize.setEnabled(enableControls && radioStepSize.isSelected()); + spinnerSteps.setEnabled(enableControls && radioSteps.isSelected()); + + spinnerFrom.setEnabled(enableControls && radioAbsolute.isSelected()); + spinnerTo.setEnabled(enableControls && radioAbsolute.isSelected()); + spinnerRange.setEnabled(enableControls && !radioAbsolute.isSelected()); + + } + + void startScan() throws Exception { + HashMap args = new HashMap<>(); + args.put("MOTOR", comboMotor.getSelectedItem().toString()); + ArrayList sensors = new ArrayList(); + for (Component c : panelSensors.getComponents()) { + if ((c instanceof JCheckBox) && ((JCheckBox) c).isSelected()) { + sensors.add(c.getName()); + } + } + args.put("SENSORS", sensors); + if (radioRelative.isSelected()) { + args.put("RANGE", new Double[]{-(Double) spinnerRange.getValue() / 2, (Double) spinnerRange.getValue() / 2}); + } else { + args.put("RANGE", new Double[]{(Double) spinnerFrom.getValue(), (Double) spinnerTo.getValue()}); + } + if (radioStepSize.isSelected()) { + ArrayList steps = new ArrayList(); + steps.add((Double) spinnerStepSize.getValue()); + args.put("STEPS", steps); + } else { + args.put("STEPS", (Integer) spinnerSteps.getValue()); + } + args.put("LATENCY", (Double) spinnerLatency.getValue()); + args.put("RELATIVE", radioRelative.isSelected()); + + runAsync("ManipulatorScan", args); + + /* + getController().setExecutingContext("manip_scan"); + String scan ="lscan(" + comboMotor.getSelectedItem().toString() + ", ( " ; + for (Component c : panelSensors.getComponents()) { + if ((c instanceof JCheckBox) && ((JCheckBox)c).isSelected()) + scan += c.getName() + ", "; + } + scan+="), "; + if (radioRelative.isSelected()){ + double halfRange = (Double)spinnerRange.getValue()/2; + scan+= (-halfRange) + ", " + (halfRange)+ ", "; + } else { + Double from = (Double)spinnerFrom.getValue(); + Double to = (Double)spinnerTo.getValue(); + + if (to <= from){ + throw new Exception ("Invalid range"); + } + scan+= from + ", " + to + ", "; + } + + scan+= (radioStepSize.isSelected()) ? "(" +((Double)spinnerStepSize.getValue())+",)" :((Integer)spinnerSteps.getValue()); + scan+=", " + (Double)spinnerLatency.getValue() + ", "; + if (radioRelative.isSelected()){ + scan+="True, "; //Relative + } + scan+="before_read=trig_scienta)"; //Relative + + if (checkImageIntegration.isSelected()){ + scan = "set_preference(Preference.PLOT_TYPES,{'integration':1}); " + scan; + } + + evalAsync(scan); + */ + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonGroup1 = new javax.swing.ButtonGroup(); + buttonGroup2 = new javax.swing.ButtonGroup(); + panelPositioner = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + comboMotor = new javax.swing.JComboBox(); + motorPanel = new ch.psi.pshell.swing.MotorReadoutPanel(); + txtSize = new javax.swing.JLabel(); + spinnerRange = new javax.swing.JSpinner(); + radioStepSize = new javax.swing.JRadioButton(); + radioSteps = new javax.swing.JRadioButton(); + spinnerStepSize = new javax.swing.JSpinner(); + spinnerSteps = new javax.swing.JSpinner(); + jLabel3 = new javax.swing.JLabel(); + spinnerLatency = new javax.swing.JSpinner(); + radioAbsolute = new javax.swing.JRadioButton(); + spinnerFrom = new javax.swing.JSpinner(); + jLabel4 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + spinnerTo = new javax.swing.JSpinner(); + radioRelative = new javax.swing.JRadioButton(); + jLabel6 = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + jLabel8 = new javax.swing.JLabel(); + panelSensors = new javax.swing.JPanel(); + checkImage = new javax.swing.JCheckBox(); + checkImageIntegration = new javax.swing.JCheckBox(); + checkSpectrum = new javax.swing.JCheckBox(); + checkCounts1 = new javax.swing.JCheckBox(); + checkTotalCount = new javax.swing.JCheckBox(); + checkCounts2 = new javax.swing.JCheckBox(); + checkCounts3 = new javax.swing.JCheckBox(); + checkCounts4 = new javax.swing.JCheckBox(); + checkCurrent = new javax.swing.JCheckBox(); + checkCur1 = new javax.swing.JCheckBox(); + checkCur2 = new javax.swing.JCheckBox(); + checkCur3 = new javax.swing.JCheckBox(); + buttonScientaSetup = new javax.swing.JButton(); + jPanel3 = new javax.swing.JPanel(); + buttonStart = new javax.swing.JButton(); + buttonAbort = new javax.swing.JButton(); + + panelPositioner.setBorder(javax.swing.BorderFactory.createTitledBorder("Positioner")); + + jLabel1.setText("Motor:"); + + comboMotor.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "dummy", "x", "y", "z", "theta", "tilt", "phi" })); + comboMotor.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboMotorActionPerformed(evt); + } + }); + + txtSize.setText("Size:"); + + spinnerRange.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.001d, 100.0d, 1.0d)); + spinnerRange.setEnabled(false); + + buttonGroup1.add(radioStepSize); + radioStepSize.setSelected(true); + radioStepSize.setText("Step Size"); + radioStepSize.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + buttonGroup1.add(radioSteps); + radioSteps.setText("Number of Steps"); + radioSteps.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + spinnerStepSize.setModel(new javax.swing.SpinnerNumberModel(0.1d, 0.001d, 10.0d, 0.1d)); + + spinnerSteps.setModel(new javax.swing.SpinnerNumberModel(10, 1, 1000, 1)); + spinnerSteps.setEnabled(false); + + jLabel3.setText("Latency(s):"); + + spinnerLatency.setModel(new javax.swing.SpinnerNumberModel(0.0d, 0.0d, 10.0d, 0.1d)); + + buttonGroup2.add(radioAbsolute); + radioAbsolute.setSelected(true); + radioAbsolute.setText("Absolute Scan"); + radioAbsolute.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioAbsoluteActionPerformed(evt); + } + }); + + spinnerFrom.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + jLabel4.setText("From:"); + + jLabel5.setText("To:"); + + spinnerTo.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + buttonGroup2.add(radioRelative); + radioRelative.setText("Relative Scan"); + radioRelative.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioAbsoluteActionPerformed(evt); + } + }); + + jLabel6.setText("Position:"); + + jLabel7.setText("Range:"); + + jLabel8.setText("Steps:"); + + javax.swing.GroupLayout panelPositionerLayout = new javax.swing.GroupLayout(panelPositioner); + panelPositioner.setLayout(panelPositionerLayout); + panelPositionerLayout.setHorizontalGroup( + panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(radioSteps, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel6) + .addComponent(jLabel1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(motorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(comboMotor, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 41, Short.MAX_VALUE) + .addComponent(spinnerLatency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(radioStepSize) + .addComponent(radioAbsolute) + .addComponent(radioRelative)) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionerLayout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionerLayout.createSequentialGroup() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addComponent(jLabel7) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(spinnerFrom, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerRange, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerTo, javax.swing.GroupLayout.Alignment.TRAILING))) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionerLayout.createSequentialGroup() + .addComponent(jLabel8) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerSteps, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionerLayout.createSequentialGroup() + .addComponent(txtSize) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerStepSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addContainerGap()) + ); + + panelPositionerLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerLatency, spinnerRange, spinnerStepSize, spinnerSteps}); + + panelPositionerLayout.setVerticalGroup( + panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(comboMotor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel6) + .addComponent(motorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(radioAbsolute) + .addGap(3, 3, 3) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerFrom, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addGap(3, 3, 3) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerTo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5)) + .addGap(18, 18, 18) + .addComponent(radioRelative) + .addGap(1, 1, 1) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerRange, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel7)) + .addGap(18, 18, 18) + .addComponent(radioStepSize) + .addGap(0, 0, 0) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(txtSize)) + .addGap(12, 12, 12) + .addComponent(radioSteps) + .addGap(0, 0, 0) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerSteps, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel8)) + .addGap(18, 18, 18) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(spinnerLatency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + panelSensors.setBorder(javax.swing.BorderFactory.createTitledBorder("Sensors")); + + checkImage.setSelected(true); + checkImage.setText("Scienta Image"); + checkImage.setToolTipText(""); + checkImage.setContentAreaFilled(false); + checkImage.setName("scienta.dataMatrix"); // NOI18N + + checkImageIntegration.setSelected(true); + checkImageIntegration.setText("Scienta Image Integration"); + checkImageIntegration.setToolTipText(""); + checkImageIntegration.setContentAreaFilled(false); + checkImageIntegration.setName("integration"); // NOI18N + + checkSpectrum.setSelected(true); + checkSpectrum.setText("Scienta Spectrum"); + checkSpectrum.setName("scienta.spectrum"); // NOI18N + + checkCounts1.setText("Counts Region 1"); + checkCounts1.setName("countsr1"); // NOI18N + + checkTotalCount.setSelected(true); + checkTotalCount.setText("Total Counts"); + checkTotalCount.setName("counts"); // NOI18N + + checkCounts2.setText("Counts Region 2"); + checkCounts2.setName("countsr2"); // NOI18N + + checkCounts3.setText("Counts Region 3"); + checkCounts3.setName("countsr3"); // NOI18N + + checkCounts4.setText("Counts Region 4"); + checkCounts4.setName("countsr4"); // NOI18N + + checkCurrent.setText("Current"); + checkCurrent.setName("current"); // NOI18N + + checkCur1.setText("Cur 1"); + checkCur1.setName("cur1"); // NOI18N + + checkCur2.setText("Cur 2"); + checkCur2.setName("cur2"); // NOI18N + + checkCur3.setText("Cur 3"); + checkCur3.setName("cur3"); // NOI18N + + buttonScientaSetup.setText("Scienta Setup"); + buttonScientaSetup.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonScientaSetupActionPerformed(evt); + } + }); + + javax.swing.GroupLayout panelSensorsLayout = new javax.swing.GroupLayout(panelSensors); + panelSensors.setLayout(panelSensorsLayout); + panelSensorsLayout.setHorizontalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonScientaSetup, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addGroup(panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(checkImage) + .addComponent(checkImageIntegration) + .addComponent(checkSpectrum) + .addComponent(checkCounts1) + .addComponent(checkTotalCount) + .addComponent(checkCounts2) + .addComponent(checkCounts3) + .addComponent(checkCurrent) + .addComponent(checkCur1) + .addComponent(checkCur2) + .addComponent(checkCur3) + .addComponent(checkCounts4)) + .addGap(0, 14, Short.MAX_VALUE))) + .addContainerGap()) + ); + panelSensorsLayout.setVerticalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addComponent(checkImage) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkImageIntegration) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkSpectrum) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkTotalCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCurrent) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur3) + .addGap(18, 18, Short.MAX_VALUE) + .addComponent(buttonScientaSetup) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); + + 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); + } + }); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonStart, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonAbort, javax.swing.GroupLayout.DEFAULT_SIZE, 203, Short.MAX_VALUE)) + .addContainerGap()) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addComponent(buttonStart) + .addGap(18, 18, 18) + .addComponent(buttonAbort) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(panelSensors, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(panelPositioner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jPanel3, panelPositioner, panelSensors}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelPositioner, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelSensors, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void buttonScientaSetupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonScientaSetupActionPerformed + try { + showDevicePanel("scienta"); + } catch (Exception ex) { + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonScientaSetupActionPerformed + + private void buttonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStartActionPerformed + try { + startScan(); + } catch (Exception ex) { + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonStartActionPerformed + + private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed + abort(); + }//GEN-LAST:event_buttonAbortActionPerformed + + private void radioStepSizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioStepSizeActionPerformed + setEnabled(isEnabled()); + }//GEN-LAST:event_radioStepSizeActionPerformed + + private void comboMotorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboMotorActionPerformed + try { + Motor motor = (Motor) getDevice(comboMotor.getSelectedItem().toString()); + motorPanel.setDevice(motor); + spinnerFrom.setModel(new SpinnerNumberModel(motor.getMinValue(), motor.getMinValue(), motor.getMaxValue(), 1.0)); + spinnerTo.setModel(new SpinnerNumberModel(motor.getMaxValue(), motor.getMinValue(), motor.getMaxValue(), 1.0)); + txtSize.setText("Size (" + motor.getUnit() +")"); + //spinnerFrom.setModel(new javax.swing.SpinnerNumberModel(3.0, 0.001, 100.0, 1.0)); + //spinnerTo.setModel(new javax.swing.SpinnerNumberModel(2.0, 0.001, 100.0, 1.0)); + } catch (Exception ex) { + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_comboMotorActionPerformed + + private void radioAbsoluteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioAbsoluteActionPerformed + setEnabled(isEnabled()); + }//GEN-LAST:event_radioAbsoluteActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonAbort; + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.ButtonGroup buttonGroup2; + private javax.swing.JButton buttonScientaSetup; + private javax.swing.JButton buttonStart; + private javax.swing.JCheckBox checkCounts1; + private javax.swing.JCheckBox checkCounts2; + private javax.swing.JCheckBox checkCounts3; + private javax.swing.JCheckBox checkCounts4; + private javax.swing.JCheckBox checkCur1; + private javax.swing.JCheckBox checkCur2; + private javax.swing.JCheckBox checkCur3; + private javax.swing.JCheckBox checkCurrent; + private javax.swing.JCheckBox checkImage; + private javax.swing.JCheckBox checkImageIntegration; + private javax.swing.JCheckBox checkSpectrum; + private javax.swing.JCheckBox checkTotalCount; + private javax.swing.JComboBox comboMotor; + private javax.swing.JLabel jLabel1; + 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.JPanel jPanel3; + private ch.psi.pshell.swing.MotorReadoutPanel motorPanel; + private javax.swing.JPanel panelPositioner; + private javax.swing.JPanel panelSensors; + private javax.swing.JRadioButton radioAbsolute; + private javax.swing.JRadioButton radioRelative; + private javax.swing.JRadioButton radioStepSize; + private javax.swing.JRadioButton radioSteps; + private javax.swing.JSpinner spinnerFrom; + private javax.swing.JSpinner spinnerLatency; + private javax.swing.JSpinner spinnerRange; + private javax.swing.JSpinner spinnerStepSize; + private javax.swing.JSpinner spinnerSteps; + private javax.swing.JSpinner spinnerTo; + private javax.swing.JLabel txtSize; + // End of variables declaration//GEN-END:variables +} diff --git a/plugins/ManipulatorScan.java~ b/plugins/ManipulatorScan.java~ new file mode 100644 index 00000000..1c1a1ed6 --- /dev/null +++ b/plugins/ManipulatorScan.java~ @@ -0,0 +1,575 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +import ch.psi.pshell.dev.Motor; +import ch.psi.utils.swing.MonitoredPanel; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.State; +import ch.psi.utils.swing.SwingUtils; +import java.awt.Component; +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import javax.swing.SpinnerNumberModel; + +/** + * + */ +public class ManipulatorScan extends Panel { + + @Override + protected JPanel create() { + return new PluginPanel(); + } + + @Override + public PluginPanel getComponent(){ + return (PluginPanel) super.getComponent(); + } + + //Overridables + @Override + protected void onInitialize(int runCount) { + getComponent().comboMotorActionPerformed(null); + } + + @Override + protected void onStateChange(State state, State former) { + getComponent().setEnabled(getComponent().isEnabled()); + } + + @Override + protected void onExecutedFile(String fileName, Object result) { + } + + @Override + protected void doUpdate() { + } + + + //Panel Class + public class PluginPanel extends MonitoredPanel { + + public PluginPanel() { + initComponents(); + } + + @Override + public void setEnabled(boolean value) { + super.setEnabled(value); + buttonAbort.setEnabled(value && getState().isInitialized()); + + boolean enableControls = (value && (getState()==State.Ready)); + for (Component c : panelSensors.getComponents()) { + c.setEnabled(enableControls); + } + for (Component c : panelPositioner.getComponents()) { + c.setEnabled(enableControls); + } + buttonStart.setEnabled(enableControls); + spinnerStepSize.setEnabled(enableControls && radioStepSize.isSelected()); + spinnerSteps.setEnabled(enableControls && radioSteps.isSelected()); + + spinnerFrom.setEnabled(enableControls && radioAbsolute.isSelected()); + spinnerTo.setEnabled(enableControls && radioAbsolute.isSelected()); + spinnerRange.setEnabled(enableControls && !radioAbsolute.isSelected()); + + } + + void startScan() throws Exception{ + String scan ="lscan(" + comboMotor.getSelectedItem().toString() + ",( " ; + for (Component c : panelSensors.getComponents()) { + if ((c instanceof JCheckBox) && ((JCheckBox)c).isSelected()) + scan += c.getName() + ", "; + } + scan+="), "; + if (radioRelative.isSelected()){ + double halfRange = (Double)spinnerRange.getValue()/2; + scan+= (-halfRange) + ", " + (halfRange)+ ", "; + } else { + Double from = (Double)spinnerFrom.getValue(); + Double to = (Double)spinnerTo.getValue(); + + if (to <= from){ + throw new Exception ("Invalid range"); + } + scan+= from + ", " + to + ", "; + } + + scan+= (radioStepSize.isSelected()) ? "(" +((Double)spinnerStepSize.getValue())+",)" :((Integer)spinnerSteps.getValue()); + scan+=", " + (Double)spinnerLatency.getValue() + ", "; + if (radioRelative.isSelected()){ + scan+="True, "; //Relative + } + scan+="before_read=trig_scienta)"; //Relative + + if (checkImageIntegration.isSelected()){ + scan = "set_preference(Preference.PLOT_TYPES,{'integration':1}); " + scan; + } + + evalAsync(scan); + } + + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonGroup1 = new javax.swing.ButtonGroup(); + buttonGroup2 = new javax.swing.ButtonGroup(); + panelPositioner = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + comboMotor = new javax.swing.JComboBox(); + motorPanel = new ch.psi.pshell.swing.MotorReadoutPanel(); + jLabel2 = new javax.swing.JLabel(); + spinnerRange = new javax.swing.JSpinner(); + radioStepSize = new javax.swing.JRadioButton(); + radioSteps = new javax.swing.JRadioButton(); + spinnerStepSize = new javax.swing.JSpinner(); + spinnerSteps = new javax.swing.JSpinner(); + jLabel3 = new javax.swing.JLabel(); + spinnerLatency = new javax.swing.JSpinner(); + radioAbsolute = new javax.swing.JRadioButton(); + spinnerFrom = new javax.swing.JSpinner(); + jLabel4 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + spinnerTo = new javax.swing.JSpinner(); + radioRelative = new javax.swing.JRadioButton(); + jLabel6 = new javax.swing.JLabel(); + panelSensors = new javax.swing.JPanel(); + checkImage = new javax.swing.JCheckBox(); + checkImageIntegration = new javax.swing.JCheckBox(); + checkSpectrum = new javax.swing.JCheckBox(); + checkCounts1 = new javax.swing.JCheckBox(); + checkTotalCount = new javax.swing.JCheckBox(); + checkCounts2 = new javax.swing.JCheckBox(); + checkCounts3 = new javax.swing.JCheckBox(); + checkCounts4 = new javax.swing.JCheckBox(); + checkCurrent = new javax.swing.JCheckBox(); + checkCur1 = new javax.swing.JCheckBox(); + checkCur2 = new javax.swing.JCheckBox(); + checkCur3 = new javax.swing.JCheckBox(); + buttonScientaSetup = new javax.swing.JButton(); + jPanel3 = new javax.swing.JPanel(); + buttonStart = new javax.swing.JButton(); + buttonAbort = new javax.swing.JButton(); + + panelPositioner.setBorder(javax.swing.BorderFactory.createTitledBorder("Positioner")); + + jLabel1.setText("Motor:"); + + comboMotor.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "dummy", "x", "y", "z", "theta", "tilt", "phi" })); + comboMotor.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboMotorActionPerformed(evt); + } + }); + + jLabel2.setText("Range:"); + + spinnerRange.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.001d, 100.0d, 1.0d)); + spinnerRange.setEnabled(false); + + buttonGroup1.add(radioStepSize); + radioStepSize.setSelected(true); + radioStepSize.setText("Step size:"); + radioStepSize.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + buttonGroup1.add(radioSteps); + radioSteps.setText("Steps:"); + radioSteps.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + spinnerStepSize.setModel(new javax.swing.SpinnerNumberModel(0.1d, 0.001d, 10.0d, 0.1d)); + + spinnerSteps.setModel(new javax.swing.SpinnerNumberModel(10, 1, 1000, 1)); + spinnerSteps.setEnabled(false); + + jLabel3.setText("Latency(s):"); + + spinnerLatency.setModel(new javax.swing.SpinnerNumberModel(0.0d, 0.0d, 10.0d, 0.1d)); + + buttonGroup2.add(radioAbsolute); + radioAbsolute.setSelected(true); + radioAbsolute.setText("Absolute Scan"); + radioAbsolute.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioAbsoluteActionPerformed(evt); + } + }); + + spinnerFrom.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + jLabel4.setText("From:"); + + jLabel5.setText("To:"); + + spinnerTo.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + buttonGroup2.add(radioRelative); + radioRelative.setText("Relative Scan"); + radioRelative.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioAbsoluteActionPerformed(evt); + } + }); + + jLabel6.setText("Position:"); + + javax.swing.GroupLayout panelPositionerLayout = new javax.swing.GroupLayout(panelPositioner); + panelPositioner.setLayout(panelPositionerLayout); + panelPositionerLayout.setHorizontalGroup( + panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addComponent(radioStepSize) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE) + .addComponent(spinnerStepSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel6) + .addComponent(jLabel1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(motorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(comboMotor, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addComponent(radioSteps) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(spinnerSteps, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(spinnerLatency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionerLayout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(spinnerFrom, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerRange, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerTo, javax.swing.GroupLayout.Alignment.TRAILING))) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(radioAbsolute) + .addComponent(radioRelative)) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + + panelPositionerLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {radioStepSize, radioSteps}); + + panelPositionerLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerLatency, spinnerRange, spinnerStepSize, spinnerSteps}); + + panelPositionerLayout.setVerticalGroup( + panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionerLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(comboMotor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel6) + .addComponent(motorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(radioAbsolute) + .addGap(3, 3, 3) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerFrom, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addGap(3, 3, 3) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerTo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5)) + .addGap(18, 18, 18) + .addComponent(radioRelative) + .addGap(1, 1, 1) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(spinnerRange, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(radioStepSize) + .addComponent(spinnerStepSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(radioSteps) + .addComponent(spinnerSteps, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(spinnerLatency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + panelSensors.setBorder(javax.swing.BorderFactory.createTitledBorder("Sensors")); + + checkImage.setSelected(true); + checkImage.setText("Scienta Image"); + checkImage.setToolTipText(""); + checkImage.setContentAreaFilled(false); + checkImage.setName("scienta.dataMatrix"); // NOI18N + + checkImageIntegration.setSelected(true); + checkImageIntegration.setText("Scienta Image Integration"); + checkImageIntegration.setToolTipText(""); + checkImageIntegration.setContentAreaFilled(false); + checkImageIntegration.setName("integration"); // NOI18N + + checkSpectrum.setSelected(true); + checkSpectrum.setText("Scienta Spectrum"); + checkSpectrum.setName("scienta.spectrum"); // NOI18N + + checkCounts1.setText("Counts Region 1"); + checkCounts1.setName("countsr1"); // NOI18N + + checkTotalCount.setSelected(true); + checkTotalCount.setText("Total Counts"); + checkTotalCount.setName("counts"); // NOI18N + + checkCounts2.setText("Counts Region 2"); + checkCounts2.setName("countsr2"); // NOI18N + + checkCounts3.setText("Counts Region 3"); + checkCounts3.setName("countsr3"); // NOI18N + + checkCounts4.setText("Counts Region 4"); + checkCounts4.setName("countsr4"); // NOI18N + + checkCurrent.setText("Current"); + checkCurrent.setName("current"); // NOI18N + + checkCur1.setText("Cur 1"); + checkCur1.setName("cur1"); // NOI18N + + checkCur2.setText("Cur 2"); + checkCur2.setName("cur2"); // NOI18N + + checkCur3.setText("Cur 3"); + checkCur3.setName("cur3"); // NOI18N + + buttonScientaSetup.setText("Scienta Setup"); + buttonScientaSetup.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonScientaSetupActionPerformed(evt); + } + }); + + javax.swing.GroupLayout panelSensorsLayout = new javax.swing.GroupLayout(panelSensors); + panelSensors.setLayout(panelSensorsLayout); + panelSensorsLayout.setHorizontalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonScientaSetup, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addGroup(panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(checkImage) + .addComponent(checkSpectrum) + .addComponent(checkCounts1) + .addComponent(checkTotalCount) + .addComponent(checkCounts2) + .addComponent(checkCounts3) + .addComponent(checkCounts4) + .addComponent(checkCurrent) + .addComponent(checkCur1) + .addComponent(checkCur2) + .addComponent(checkCur3) + .addComponent(checkImageIntegration)) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + panelSensorsLayout.setVerticalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addComponent(checkImage) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkImageIntegration) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkSpectrum) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkTotalCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCounts4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCurrent) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkCur3) + .addGap(18, 18, Short.MAX_VALUE) + .addComponent(buttonScientaSetup) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); + + 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); + } + }); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonStart, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonAbort, javax.swing.GroupLayout.DEFAULT_SIZE, 189, Short.MAX_VALUE)) + .addContainerGap()) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addComponent(buttonStart) + .addGap(18, 18, 18) + .addComponent(buttonAbort) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(panelSensors, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(panelPositioner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jPanel3, panelPositioner, panelSensors}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelPositioner, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelSensors, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void buttonScientaSetupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonScientaSetupActionPerformed + try{ + showDevicePanel("scienta"); + } catch (Exception ex){ + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonScientaSetupActionPerformed + + private void buttonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStartActionPerformed + try{ + startScan(); + } catch (Exception ex){ + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonStartActionPerformed + + private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed + ManipulatorScan.this.abort(); + }//GEN-LAST:event_buttonAbortActionPerformed + + private void radioStepSizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioStepSizeActionPerformed + setEnabled(isEnabled()); + }//GEN-LAST:event_radioStepSizeActionPerformed + + private void comboMotorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboMotorActionPerformed + try{ + Motor motor = (Motor) getDevice(comboMotor.getSelectedItem().toString()); + motorPanel.setDevice(motor); + spinnerFrom.setModel(new SpinnerNumberModel(motor.getMinValue(), motor.getMinValue(), motor.getMaxValue(), 1.0)); + spinnerTo.setModel(new SpinnerNumberModel(motor.getMaxValue(), motor.getMinValue(), motor.getMaxValue(), 1.0)); + //spinnerFrom.setModel(new javax.swing.SpinnerNumberModel(3.0, 0.001, 100.0, 1.0)); + //spinnerTo.setModel(new javax.swing.SpinnerNumberModel(2.0, 0.001, 100.0, 1.0)); + } catch (Exception ex){ + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_comboMotorActionPerformed + + private void radioAbsoluteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioAbsoluteActionPerformed + setEnabled(isEnabled()); + }//GEN-LAST:event_radioAbsoluteActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonAbort; + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.ButtonGroup buttonGroup2; + private javax.swing.JButton buttonScientaSetup; + private javax.swing.JButton buttonStart; + private javax.swing.JCheckBox checkCounts1; + private javax.swing.JCheckBox checkCounts2; + private javax.swing.JCheckBox checkCounts3; + private javax.swing.JCheckBox checkCounts4; + private javax.swing.JCheckBox checkCur1; + private javax.swing.JCheckBox checkCur2; + private javax.swing.JCheckBox checkCur3; + private javax.swing.JCheckBox checkCurrent; + private javax.swing.JCheckBox checkImage; + private javax.swing.JCheckBox checkImageIntegration; + private javax.swing.JCheckBox checkSpectrum; + private javax.swing.JCheckBox checkTotalCount; + private javax.swing.JComboBox comboMotor; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel6; + private javax.swing.JPanel jPanel3; + private ch.psi.pshell.swing.MotorReadoutPanel motorPanel; + private javax.swing.JPanel panelPositioner; + private javax.swing.JPanel panelSensors; + private javax.swing.JRadioButton radioAbsolute; + private javax.swing.JRadioButton radioRelative; + private javax.swing.JRadioButton radioStepSize; + private javax.swing.JRadioButton radioSteps; + private javax.swing.JSpinner spinnerFrom; + private javax.swing.JSpinner spinnerLatency; + private javax.swing.JSpinner spinnerRange; + private javax.swing.JSpinner spinnerStepSize; + private javax.swing.JSpinner spinnerSteps; + private javax.swing.JSpinner spinnerTo; + // End of variables declaration//GEN-END:variables +} +} diff --git a/plugins/XPSSpectrum$1$1.class b/plugins/XPSSpectrum$1$1.class new file mode 100644 index 00000000..14e46611 Binary files /dev/null and b/plugins/XPSSpectrum$1$1.class differ diff --git a/plugins/XPSSpectrum$1.class b/plugins/XPSSpectrum$1.class new file mode 100644 index 00000000..cd774769 Binary files /dev/null and b/plugins/XPSSpectrum$1.class differ diff --git a/plugins/XPSSpectrum$10.class b/plugins/XPSSpectrum$10.class new file mode 100644 index 00000000..ae225e47 Binary files /dev/null and b/plugins/XPSSpectrum$10.class differ diff --git a/plugins/XPSSpectrum$2.class b/plugins/XPSSpectrum$2.class new file mode 100644 index 00000000..d2253ef3 Binary files /dev/null and b/plugins/XPSSpectrum$2.class differ diff --git a/plugins/XPSSpectrum$3.class b/plugins/XPSSpectrum$3.class new file mode 100644 index 00000000..098ba17c Binary files /dev/null and b/plugins/XPSSpectrum$3.class differ diff --git a/plugins/XPSSpectrum$4.class b/plugins/XPSSpectrum$4.class new file mode 100644 index 00000000..9ff802db Binary files /dev/null and b/plugins/XPSSpectrum$4.class differ diff --git a/plugins/XPSSpectrum$5.class b/plugins/XPSSpectrum$5.class new file mode 100644 index 00000000..4c559d9c Binary files /dev/null and b/plugins/XPSSpectrum$5.class differ diff --git a/plugins/XPSSpectrum$6.class b/plugins/XPSSpectrum$6.class new file mode 100644 index 00000000..94590102 Binary files /dev/null and b/plugins/XPSSpectrum$6.class differ diff --git a/plugins/XPSSpectrum$7.class b/plugins/XPSSpectrum$7.class new file mode 100644 index 00000000..b2f5caa1 Binary files /dev/null and b/plugins/XPSSpectrum$7.class differ diff --git a/plugins/XPSSpectrum$8.class b/plugins/XPSSpectrum$8.class new file mode 100644 index 00000000..d5494bf3 Binary files /dev/null and b/plugins/XPSSpectrum$8.class differ diff --git a/plugins/XPSSpectrum$9.class b/plugins/XPSSpectrum$9.class new file mode 100644 index 00000000..0a7b42c2 Binary files /dev/null and b/plugins/XPSSpectrum$9.class differ diff --git a/plugins/XPSSpectrum.class b/plugins/XPSSpectrum.class new file mode 100644 index 00000000..ce6bafe2 Binary files /dev/null and b/plugins/XPSSpectrum.class differ diff --git a/plugins/XPSSpectrum.form b/plugins/XPSSpectrum.form new file mode 100644 index 00000000..d88c6ded --- /dev/null +++ b/plugins/XPSSpectrum.form @@ -0,0 +1,158 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/XPSSpectrum.java b/plugins/XPSSpectrum.java new file mode 100644 index 00000000..4e2a44fc --- /dev/null +++ b/plugins/XPSSpectrum.java @@ -0,0 +1,386 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +import ch.psi.pshell.dev.Device; +import ch.psi.pshell.dev.DeviceListener; +import ch.psi.pshell.epics.Scienta; +import ch.psi.pshell.plot.LinePlotSeries; +import ch.psi.pshell.plot.RangeSelectionPlot.RangeSelection; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.Convert; +import ch.psi.utils.IO; +import ch.psi.utils.Serializer; +import ch.psi.utils.State; +import ch.psi.utils.swing.SwingUtils; +import java.io.File; +import java.nio.file.Files; +import java.util.HashMap; +import javax.swing.JFileChooser; +import javax.swing.SwingUtilities; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.table.DefaultTableModel; + +/** + * + */ +public class XPSSpectrum extends Panel { + + boolean detailedScan; + boolean running; + Scienta scienta; + + public XPSSpectrum() { + initComponents(); + rangeSelectionPanel.setAditionalColumns(new String[]{"Time", "Size", "Iter"}, new Class[]{Double.class, Double.class, Integer.class}); + final DefaultTableModel model = (DefaultTableModel) rangeSelectionPanel.getTable().getModel(); + model.addTableModelListener(new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + if (e.getType() == TableModelEvent.INSERT) { + final int row = e.getFirstRow(); + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + if (row > 0) { + for (int col = 3; col < 6; col++) { + model.setValueAt(model.getValueAt(row - 1, col), row, col); + } + } else { + model.setValueAt(scienta.getStepTime().take(), row, 3); + model.setValueAt(scienta.getStepSize().take(), row, 4); + model.setValueAt(Integer.valueOf(1), row, 5); + } + } + }); + } + } + }); + } + + @Override + public void onInitialize(int runCount) { + scienta = (Scienta) getDevice("scienta"); + scienta.getTotalChannels().addListener(progressListener); + scienta.getCurrentChannel().addListener(progressListener); + } + + @Override + public void onStateChange(State state, State former) { + setEnabled(state == State.Ready); + if (!state.isProcessing()){ + if (running){ + running = false; + getView().getStatusBar().setProgress(-1); + } + } + } + + @Override + public void onExecutedFile(String fileName, Object result) { + String script = IO.getPrefix(fileName); + if (script != null) { + switch (script) { + case "XPSSpectrum": + if (result instanceof Exception) { + //SwingUtils.showMessage(getComponent(), "Error in " + fileName, exception.getMessage()); + } else { + if (detailedScan) { + + } else { + Object[] ret = (Object[]) ((Object[]) result)[0]; + if (ret.length > 0) { + //double[] data = (double[]) Convert.wrapperArrayToPrimitiveArray(ret[0], Double.class); + double[] xdata = (double[]) ret[0]; + double[] ydata = (double[]) ret[1]; + + //double[] data = new double[]{1.0,1.0,1.0,1.0,1.0}; + LinePlotSeries series = new LinePlotSeries("Data"); + rangeSelectionPanel.setSeries(series); + series.setData(xdata, ydata); + } + } + } + break; + } + } + detailedScan = false; + updateButtons(); + } + + @Override + public void setEnabled(boolean value) { + super.setEnabled(value); + rangeSelectionPanel.setEnabled(value); + valueLow.setEnabled(value); + valueHigh.setEnabled(value); + updateButtons(); + } + + void updateButtons() { + buttonInitialScan.setEnabled(isEnabled()); + buttonDetailedScan.setEnabled(isEnabled() && rangeSelectionPanel.getPlot().getSelectedRanges().length > 0); + btLoad.setEnabled(isEnabled()); + btSave.setEnabled(buttonDetailedScan.isEnabled()); + } + + DeviceListener progressListener = new DeviceListener() { + + @Override + public void onStateChanged(Device device, State state, State state1) { + } + + @Override + public void onValueChanged(Device device, Object o, Object o1) { + if (running){ + Double total = scienta.getTotalChannels().take(); + Double current = scienta.getCurrentChannel().take(); + if ((total!=null) && (current!=null)){ + getView().getStatusBar().setProgress(scienta.getProgress()); + } + } + } + }; + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonAbort = new javax.swing.JButton(); + buttonInitialScan = new javax.swing.JButton(); + rangeSelectionPanel = new ch.psi.pshell.swing.RangeSelectionPanel() { + protected void onSeriesChanged() { + updateButtons(); + } + protected void onSelectionChanged() { + updateButtons(); + } + } + ; + buttonDetailedScan = new javax.swing.JButton(); + btSave = new javax.swing.JButton(); + btLoad = new javax.swing.JButton(); + jLabel1 = new javax.swing.JLabel(); + valueLow = new ch.psi.pshell.swing.ValueSelection(); + jLabel2 = new javax.swing.JLabel(); + valueHigh = new ch.psi.pshell.swing.ValueSelection(); + + buttonAbort.setText("Abort"); + buttonAbort.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonAbortActionPerformed(evt); + } + }); + + buttonInitialScan.setText("Initial Scan"); + buttonInitialScan.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonInitialScanActionPerformed(evt); + } + }); + + buttonDetailedScan.setText("Detailed Scan"); + buttonDetailedScan.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonDetailedScanActionPerformed(evt); + } + }); + + btSave.setText("Save"); + btSave.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btSaveActionPerformed(evt); + } + }); + + btLoad.setText("Load"); + btLoad.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btLoadActionPerformed(evt); + } + }); + + jLabel1.setText("Low:"); + + valueLow.setDecimals(2); + valueLow.setMaxValue(1000.0); + valueLow.setMinValue(0.0); + valueLow.setShowButtons(false); + valueLow.setValue(0.0); + + jLabel2.setText("High:"); + + valueHigh.setDecimals(2); + valueHigh.setMaxValue(1000.0); + valueHigh.setMinValue(0.0); + valueHigh.setShowButtons(false); + valueHigh.setValue(100.0); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rangeSelectionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 900, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(buttonInitialScan, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(18, 18, 18) + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(valueLow, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(valueHigh, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(60, 60, 60) + .addComponent(buttonDetailedScan, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonAbort)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(btLoad) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(btSave))) + .addContainerGap()) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btLoad, btSave, buttonAbort, buttonDetailedScan, buttonInitialScan}); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {valueHigh, valueLow}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonInitialScan) + .addComponent(buttonDetailedScan) + .addComponent(buttonAbort) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel2) + .addComponent(valueHigh, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(valueLow, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1))) + .addGap(18, 18, 18) + .addComponent(rangeSelectionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE) + .addGap(43, 43, 43)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(btLoad, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(btSave, javax.swing.GroupLayout.Alignment.TRAILING)))) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed + abort(); + }//GEN-LAST:event_buttonAbortActionPerformed + + private void buttonInitialScanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonInitialScanActionPerformed + try { + //getApp().startTask(task); + HashMap args = new HashMap<>(); + args.put("ranges", new RangeSelection[]{new RangeSelection(valueLow.getValue(),valueHigh.getValue())}); + rangeSelectionPanel.clear(); + detailedScan = false; + runAsync("XPSSpectrum", args); + running = true; + } catch (Exception ex) { + showException(ex); + } + + }//GEN-LAST:event_buttonInitialScanActionPerformed + + private void buttonDetailedScanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDetailedScanActionPerformed + try { + RangeSelection[] ranges = rangeSelectionPanel.getRangesOrdered(); + HashMap args = new HashMap<>(); + args.put("ranges", ranges); + detailedScan = true; + runAsync("XPSSpectrum", args); + running = true; + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonDetailedScanActionPerformed + + private void btSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btSaveActionPerformed + try { + JFileChooser chooser = new JFileChooser(getController().getSetup().getContextPath()); + FileNameExtensionFilter filter = new FileNameExtensionFilter("XPS Spectrum scan definition file", "xps"); + chooser.setFileFilter(filter); + int rVal = chooser.showSaveDialog(this); + if (rVal == JFileChooser.APPROVE_OPTION) { + File f = chooser.getSelectedFile(); + if (IO.getExtension(f).isEmpty()){ + f = new File(f.getPath() + ".xps"); + } + Object[] obj = new Object[]{SwingUtils.getTableData(rangeSelectionPanel.getTable()), + rangeSelectionPanel.getPlot().getSeries(0).getX(), + rangeSelectionPanel.getPlot().getSeries(0).getY()}; + Files.write(f.toPath(), Serializer.encode(obj, Serializer.EncoderType.bin)); + + } + } catch (Exception ex) { + showException(ex); + } + + }//GEN-LAST:event_btSaveActionPerformed + + private void btLoadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btLoadActionPerformed + try { + JFileChooser chooser = new JFileChooser(getController().getSetup().getContextPath()); + FileNameExtensionFilter filter = new FileNameExtensionFilter("XPS Spectrum scan definition file", "xps"); + chooser.setFileFilter(filter); + int rVal = chooser.showOpenDialog(this); + if (rVal == JFileChooser.APPROVE_OPTION) { + rangeSelectionPanel.removeAllRanges(); + Object[] obj = (Object[])Serializer.decode(Files.readAllBytes(chooser.getSelectedFile().toPath()), Serializer.EncoderType.bin); + Object[][] table = (Object[][]) obj[0]; + if (!rangeSelectionPanel.getPlot().hasData()){ + double[] x = (double[]) obj[1]; + double[] y = (double[]) obj[2]; + LinePlotSeries series = new LinePlotSeries("Data"); + rangeSelectionPanel.setSeries(series); + series.setData(x, y); + } + for (Object[] row:table){ + rangeSelectionPanel.getPlot().addRange((Double)row[0], (Double)row[2]); + } + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + for (int row = 0; row < table.length; row++) { + for (int col = 3; col < 6; col++) { + rangeSelectionPanel.getTable().setValueAt(table[row][col], row , col); + } + } + } + }); + } + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_btLoadActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton btLoad; + private javax.swing.JButton btSave; + private javax.swing.JButton buttonAbort; + private javax.swing.JButton buttonDetailedScan; + private javax.swing.JButton buttonInitialScan; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private ch.psi.pshell.swing.RangeSelectionPanel rangeSelectionPanel; + private ch.psi.pshell.swing.ValueSelection valueHigh; + private ch.psi.pshell.swing.ValueSelection valueLow; + // End of variables declaration//GEN-END:variables +}