diff --git a/plugins/XPSSpectrum.form b/plugins/XPSSpectrum.form index d88c6ded..160327fd 100644 --- a/plugins/XPSSpectrum.form +++ b/plugins/XPSSpectrum.form @@ -16,64 +16,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + @@ -81,78 +39,308 @@ - + - + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/XPSSpectrum.java b/plugins/XPSSpectrum.java index 4e2a44fc..9304aca2 100644 --- a/plugins/XPSSpectrum.java +++ b/plugins/XPSSpectrum.java @@ -8,11 +8,11 @@ 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 ch.psi.wsaf.Task; import java.io.File; import java.nio.file.Files; import java.util.HashMap; @@ -34,6 +34,7 @@ public class XPSSpectrum extends Panel { public XPSSpectrum() { initComponents(); + buttonSkip.setVisible(false); 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() { @@ -50,9 +51,9 @@ public class XPSSpectrum extends Panel { 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); + model.setValueAt(valueTime.getValue(), row, 3); + model.setValueAt(valueSize.getValue(), row, 4); + model.setValueAt((int)valueIterations.getValue(), row, 5); } } }); @@ -66,13 +67,24 @@ public class XPSSpectrum extends Panel { scienta = (Scienta) getDevice("scienta"); scienta.getTotalChannels().addListener(progressListener); scienta.getCurrentChannel().addListener(progressListener); + /* + valueLow.setValue(scienta.getLowEnergy().take()); + valueHigh.setValue(scienta.getHighEnergy().take()); + valueTime.setValue(scienta.getStepTime().take()); + valueSize.setValue(scienta.getStepSize().take()); + comboPass.setSelectedItem(0); + valueIterations.setValue(1); + */ } @Override public void onStateChange(State state, State former) { setEnabled(state == State.Ready); if (!state.isProcessing()){ + buttonSkip.setVisible(false); if (running){ + monitoringTask.stop(); + monitoringTask.stopScheduler(); running = false; getView().getStatusBar().setProgress(-1); } @@ -117,6 +129,10 @@ public class XPSSpectrum extends Panel { rangeSelectionPanel.setEnabled(value); valueLow.setEnabled(value); valueHigh.setEnabled(value); + valueTime.setEnabled(value); + valueSize.setEnabled(value); + valueIterations.setEnabled(value); + comboPass.setEnabled(value); updateButtons(); } @@ -124,7 +140,7 @@ public class XPSSpectrum extends Panel { buttonInitialScan.setEnabled(isEnabled()); buttonDetailedScan.setEnabled(isEnabled() && rangeSelectionPanel.getPlot().getSelectedRanges().length > 0); btLoad.setEnabled(isEnabled()); - btSave.setEnabled(buttonDetailedScan.isEnabled()); + btSave.setEnabled(buttonDetailedScan.isEnabled()); } DeviceListener progressListener = new DeviceListener() { @@ -141,16 +157,62 @@ public class XPSSpectrum extends Panel { if ((total!=null) && (current!=null)){ getView().getStatusBar().setProgress(scienta.getProgress()); } - } + } } }; + public final String STEP_VAR = "xps_spectrum_step"; + int currentScanIndex ; + Task monitoringTask = new Task() { + @Override + protected Object execute() throws Exception { + Object index = XPSSpectrum.this.eval(STEP_VAR, true); + if ((index!=null) && (index instanceof Integer) && ((Integer)index > 0)){ + int scanIndex = ((Integer)index)-1; + if (scanIndex!=currentScanIndex){ + buttonSkip.setEnabled(true); + } + currentScanIndex = scanIndex; + RangeSelection range = rangeSelectionPanel.getRangesOrdered()[scanIndex]; + for (int row = 0; row< rangeSelectionPanel.getTable().getRowCount(); row++){ + if (range.equals((Double)rangeSelectionPanel.getTable().getValueAt(row, 0), (Double)rangeSelectionPanel.getTable().getValueAt(row, 2))){ + rangeSelectionPanel.getTable().setRowSelectionInterval(row, row); + break; + } + if (row == (rangeSelectionPanel.getTable().getRowCount()-1)){ + rangeSelectionPanel.getTable().clearSelection(); + } + } + } else { + rangeSelectionPanel.getTable().clearSelection(); + } + + return true; + } + }; + @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { - buttonAbort = new javax.swing.JButton(); + jPanel1 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + valueIterations = new ch.psi.pshell.swing.ValueSelection(); + jLabel9 = new javax.swing.JLabel(); + valueTime = new ch.psi.pshell.swing.ValueSelection(); + comboPass = new javax.swing.JComboBox(); + valueSize = new ch.psi.pshell.swing.ValueSelection(); + jLabel11 = new javax.swing.JLabel(); + valueLow = new ch.psi.pshell.swing.ValueSelection(); + jLabel2 = new javax.swing.JLabel(); + valueHigh = new ch.psi.pshell.swing.ValueSelection(); + jLabel8 = new javax.swing.JLabel(); + jLabel17 = new javax.swing.JLabel(); + jPanel2 = new javax.swing.JPanel(); + btLoad = new javax.swing.JButton(); + btSave = new javax.swing.JButton(); buttonInitialScan = new javax.swing.JButton(); + buttonDetailedScan = new javax.swing.JButton(); rangeSelectionPanel = new ch.psi.pshell.swing.RangeSelectionPanel() { protected void onSeriesChanged() { updateButtons(); @@ -160,18 +222,143 @@ public class XPSSpectrum extends Panel { } } ; - 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 = new javax.swing.JButton(); + buttonSkip = new javax.swing.JButton(); - buttonAbort.setText("Abort"); - buttonAbort.addActionListener(new java.awt.event.ActionListener() { + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Arguments")); + + jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel1.setText("Low:"); + + valueIterations.setDecimals(0); + valueIterations.setMaxValue(1000.0); + valueIterations.setMinValue(0.0); + valueIterations.setShowButtons(false); + valueIterations.setValue(1.0); + + jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel9.setText("Size:"); + + valueTime.setDecimals(2); + valueTime.setMaxValue(1000.0); + valueTime.setMinValue(0.0); + valueTime.setShowButtons(false); + valueTime.setValue(1.0); + + comboPass.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "2", "5", "10", "20", "50", "100", "200" })); + comboPass.setToolTipText(""); + + valueSize.setDecimals(2); + valueSize.setMaxValue(1000.0); + valueSize.setMinValue(0.0); + valueSize.setShowButtons(false); + valueSize.setValue(1.0); + + jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel11.setText("Pass:"); + + valueLow.setDecimals(2); + valueLow.setMaxValue(1000.0); + valueLow.setMinValue(0.0); + valueLow.setShowButtons(false); + valueLow.setValue(0.0); + + jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel2.setText("High:"); + + valueHigh.setDecimals(2); + valueHigh.setMaxValue(1000.0); + valueHigh.setMinValue(0.0); + valueHigh.setShowButtons(false); + valueHigh.setValue(100.0); + + jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel8.setText("Time:"); + + jLabel17.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel17.setText("Iter:"); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .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)) + .addGroup(jPanel1Layout.createSequentialGroup() + .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)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel11) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(comboPass, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel8) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(valueTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel9) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(valueSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel17) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(valueIterations, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) + ); + + jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboPass, valueHigh, valueIterations, valueLow, valueSize, valueTime}); + + jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel11, jLabel17, jLabel2, jLabel8, jLabel9}); + + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(valueLow, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.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)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel8) + .addComponent(valueTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel9) + .addComponent(valueSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel17) + .addComponent(valueIterations, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel11) + .addComponent(comboPass, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); + + btLoad.setText("Load"); + btLoad.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonAbortActionPerformed(evt); + btLoadActionPerformed(evt); + } + }); + + btSave.setText("Save"); + btSave.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btSaveActionPerformed(evt); } }); @@ -189,93 +376,83 @@ public class XPSSpectrum extends Panel { } }); - btSave.setText("Save"); - btSave.addActionListener(new java.awt.event.ActionListener() { + buttonAbort.setText("Abort"); + buttonAbort.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - btSaveActionPerformed(evt); + buttonAbortActionPerformed(evt); } }); - btLoad.setText("Load"); - btLoad.addActionListener(new java.awt.event.ActionListener() { + buttonSkip.setText("Skip"); + buttonSkip.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - btLoadActionPerformed(evt); + buttonSkipActionPerformed(evt); } }); - jLabel1.setText("Low:"); + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addGap(342, 351, Short.MAX_VALUE) + .addComponent(btLoad) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(btSave)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup() + .addGap(20, 20, 20) + .addComponent(buttonInitialScan) + .addGap(18, 18, 18) + .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(buttonSkip) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(buttonAbort)) + .addComponent(rangeSelectionPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); - valueLow.setDecimals(2); - valueLow.setMaxValue(1000.0); - valueLow.setMinValue(0.0); - valueLow.setShowButtons(false); - valueLow.setValue(0.0); + jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btLoad, btSave, buttonAbort, buttonDetailedScan, buttonInitialScan, buttonSkip}); - jLabel2.setText("High:"); - - valueHigh.setDecimals(2); - valueHigh.setMaxValue(1000.0); - valueHigh.setMinValue(0.0); - valueHigh.setShowButtons(false); - valueHigh.setValue(100.0); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonInitialScan) + .addComponent(buttonDetailedScan) + .addComponent(buttonAbort) + .addComponent(buttonSkip)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(rangeSelectionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(btLoad, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(btSave, javax.swing.GroupLayout.Alignment.TRAILING)) + .addContainerGap()) + ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 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))) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .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)))) + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); }// //GEN-END:initComponents @@ -287,11 +464,17 @@ public class XPSSpectrum extends Panel { 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())}); + HashMap args = new HashMap<>(); + RangeSelection initialRange = new RangeSelection(valueLow.getValue(),valueHigh.getValue()); + initialRange.setVars(new Object[]{valueSize.getValue(),valueTime.getValue(),(int)valueIterations.getValue()}); + args.put("ranges", new RangeSelection[]{initialRange}); + args.put("pass_energy", Integer.valueOf(comboPass.getSelectedItem().toString())); + rangeSelectionPanel.clear(); detailedScan = false; runAsync("XPSSpectrum", args); + buttonSkip.setVisible(true); + buttonSkip.setEnabled(true); running = true; } catch (Exception ex) { showException(ex); @@ -302,10 +485,14 @@ public class XPSSpectrum extends Panel { private void buttonDetailedScanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDetailedScanActionPerformed try { RangeSelection[] ranges = rangeSelectionPanel.getRangesOrdered(); - HashMap args = new HashMap<>(); + HashMap args = new HashMap<>(); args.put("ranges", ranges); - detailedScan = true; + args.put("pass_energy", Integer.valueOf(comboPass.getSelectedItem().toString())); + detailedScan = true; runAsync("XPSSpectrum", args); + monitoringTask.schedule(100, 500); + buttonSkip.setVisible(true); + buttonSkip.setEnabled(true); running = true; } catch (Exception ex) { showException(ex); @@ -371,16 +558,36 @@ public class XPSSpectrum extends Panel { } }//GEN-LAST:event_btLoadActionPerformed + private void buttonSkipActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSkipActionPerformed + try { + this.eval("skip_iteration = True", true); + buttonSkip.setEnabled(false); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonSkipActionPerformed + // 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.JButton buttonSkip; + private javax.swing.JComboBox comboPass; private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel11; + private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel8; + private javax.swing.JLabel jLabel9; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; private ch.psi.pshell.swing.RangeSelectionPanel rangeSelectionPanel; private ch.psi.pshell.swing.ValueSelection valueHigh; + private ch.psi.pshell.swing.ValueSelection valueIterations; private ch.psi.pshell.swing.ValueSelection valueLow; + private ch.psi.pshell.swing.ValueSelection valueSize; + private ch.psi.pshell.swing.ValueSelection valueTime; // End of variables declaration//GEN-END:variables } diff --git a/script/XPSSpectrum.py b/script/XPSSpectrum.py index 82389c4e..375003ba 100644 --- a/script/XPSSpectrum.py +++ b/script/XPSSpectrum.py @@ -1,32 +1,71 @@ #Parameters (global variables): -# ranges: list of RangeSelection +# ranges: list of RangeSelection havinf args = (step_size, step_time, iterations) +# pass_energy +# +# skip_iteration: if set to 1 then skips after end of current iteration + +from ch.psi.pshell.data.ScanPersistenceStrategyDefault import ATTR_WRITABLE_DIMENSION as ATTR_WRITABLE_DIMENSION if scienta.acquisitionMode == scienta.AcquisitionMode.Fixed: scienta.acquisitionMode = scienta.AcquisitionMode.Swept ret=[] + +#Global arguments +scienta.passEnergy = pass_energy + +xps_spectrum_step = 0 names=[] for i in range(len(ranges)): names.append(str(ranges[i])) plots = plot(None, names) try: - for i in range(len(ranges)): + for i in range(len(ranges)): + skip_iteration = False + xps_spectrum_step = xps_spectrum_step+1 scienta.lowEnergy.put(ranges[i].min) scienta.highEnergy.put(ranges[i].max) + scienta.update() vars = ranges[i].vars - if vars is not None and len(vars)==3: - scienta.stepTime.write(vars[0]) - scienta.stepSize.write(vars[1]) - scienta.setIterations(vars[2]) - - trig_scienta() - ydata = scienta.spectrum.read() + scienta.stepTime.write(vars[0]) + scienta.stepSize.write(vars[1]) + scienta.setIterations(1) + + #iterations done in script xdata = scienta.spectrumX - plots[i].getSeries(0).setData(xdata, ydata) + ydata = None + for j in range(vars[2]): + trig_scienta() + spectrum_array = scienta.spectrum.read() + if ydata is None: + ydata = spectrum_array + else: + for k in range (len(spectrum_array)): + ydata[k] = ydata[k] + spectrum_array[k] + plots[i].getSeries(0).setData(xdata, ydata) + if skip_iteration: + break + plots[i].setTitle(str(ranges[i]) + " - iteration " + str(j+1)) + + plots[i].setTitle(str(ranges[i])) ret.append((xdata, ydata)) - #time.sleep(3.0) + + data1d = [1,2,3,4,5] + path="scan" + str(i+1) + "/" + save_dataset(path + "spectrum", ydata) + save_dataset(path + "channels", xdata) + set_attribute(path + "channels", ATTR_WRITABLE_DIMENSION, 1) + set_attribute(path, "Range Low", ranges[i].min) + set_attribute(path, "Range High", ranges[i].max) + set_attribute(path, "Step Time",vars[0]) + set_attribute(path, "Step Size",vars[1]) + set_attribute(path, "Pass Energy",pass_energy) + set_attribute(path, "Iterations",j+1) + + finally: + xps_spectrum_step = 0 if not scienta.isReady(): scienta.stop() set_return(to_array(ret,'o')) \ No newline at end of file