diff --git a/plugins/HystScan.form b/plugins/HystScan.form index 1cf0345..0e1597d 100644 --- a/plugins/HystScan.form +++ b/plugins/HystScan.form @@ -44,45 +44,66 @@ - - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -117,13 +138,25 @@ + + - + + + + + + + + + + + @@ -197,7 +230,7 @@ - + @@ -207,6 +240,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/HystScan.java b/plugins/HystScan.java index 169b64e..b970546 100644 --- a/plugins/HystScan.java +++ b/plugins/HystScan.java @@ -24,7 +24,7 @@ public class HystScan extends Panel { //Overridable callbacks @Override public void onInitialize(int runCount) { - + } @Override @@ -50,6 +50,7 @@ public class HystScan extends Panel { c.setEnabled(value); } } + spinnerE3.setEnabled(value && checkE3.isSelected()); } @SuppressWarnings("unchecked") @@ -69,6 +70,12 @@ public class HystScan extends Panel { spinnerStartField = new javax.swing.JSpinner(); spinnerEndField = new javax.swing.JSpinner(); jLabel4 = new javax.swing.JLabel(); + spinnerE3 = new javax.swing.JSpinner(); + checkE3 = new javax.swing.JCheckBox(); + jLabel5 = new javax.swing.JLabel(); + comboMode = new javax.swing.JComboBox(); + jLabel10 = new javax.swing.JLabel(); + spinnerOffset = new javax.swing.JSpinner(); jPanel3 = new javax.swing.JPanel(); buttonExecute = new javax.swing.JButton(); buttonAbort = new javax.swing.JButton(); @@ -100,50 +107,86 @@ public class HystScan extends Panel { spinnerStartField.setModel(new javax.swing.SpinnerNumberModel(-0.2d, -10.0d, 10.0d, 0.1d)); - spinnerEndField.setModel(new javax.swing.SpinnerNumberModel(0.2d, -10.0d, 10.0d, 1.0d)); + spinnerEndField.setModel(new javax.swing.SpinnerNumberModel(0.2d, -10.0d, 10.0d, 0.1d)); jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel4.setText("End Field:"); + spinnerE3.setModel(new javax.swing.SpinnerNumberModel(703.9d, 0.0d, 9999.0d, 1.0d)); + spinnerE3.setEnabled(false); + + checkE3.setText("E3:"); + checkE3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + checkE3ActionPerformed(evt); + } + }); + + jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel5.setText("Mode:"); + + comboMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "CIRC +", "CIRC -" })); + + jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel10.setText("Offset:"); + + spinnerOffset.setModel(new javax.swing.SpinnerNumberModel(0.0d, -20.0d, 20.0d, 1.0d)); + javax.swing.GroupLayout panelParametersLayout = new javax.swing.GroupLayout(panelParameters); panelParameters.setLayout(panelParametersLayout); panelParametersLayout.setHorizontalGroup( panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelParametersLayout.createSequentialGroup() - .addContainerGap(30, Short.MAX_VALUE) .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(panelParametersLayout.createSequentialGroup() - .addComponent(jLabel2) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(spinnerE2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerE2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerE1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() + .addComponent(checkE3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(spinnerE3, 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(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerRampRate, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerSleep, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerEndField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerStartField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(panelParametersLayout.createSequentialGroup() - .addComponent(jLabel1) + .addContainerGap(298, Short.MAX_VALUE) + .addComponent(jLabel10) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(spinnerE1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 45, Short.MAX_VALUE) - .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() - .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING)) + .addComponent(spinnerOffset, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(panelParametersLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(spinnerRampRate, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(spinnerSleep, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() - .addComponent(jLabel4) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(spinnerEndField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() - .addComponent(jLabel3) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(spinnerStartField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(28, Short.MAX_VALUE)) + .addComponent(comboMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(24, Short.MAX_VALUE)) ); - panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerEndField, spinnerRampRate, spinnerSleep, spinnerStartField}); + panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboMode, spinnerEndField, spinnerOffset, spinnerRampRate, spinnerSleep, spinnerStartField}); - panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerE1, spinnerE2}); + panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerE1, spinnerE2, spinnerE3}); panelParametersLayout.setVerticalGroup( panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -168,12 +211,22 @@ public class HystScan extends Panel { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel8) - .addComponent(spinnerRampRate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(spinnerRampRate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerE3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(checkE3)) .addGap(5, 5, 5) .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerSleep, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel9)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(comboMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel10) + .addComponent(spinnerOffset, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(17, Short.MAX_VALUE)) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); @@ -241,12 +294,19 @@ public class HystScan extends Panel { ArrayList energies = new ArrayList<>(); energies.add(e1); energies.add(e2); + if (checkE3.isSelected()){ + Double e3 = (Double) spinnerE3.getValue(); + energies.add(e3); + } args.put("ENERGIES", energies); args.put("START_FIELD", (Double) spinnerStartField.getValue()); args.put("END_FIELD", (Double) spinnerEndField.getValue()); args.put("RAMP_RATE", (Double) spinnerRampRate.getValue()); args.put("ENERGY_CHANGE_SLEEP", (Double) spinnerSleep.getValue()); + args.put("MODE", comboMode.getSelectedItem().toString()); + args.put("OFFSET", (Double) spinnerOffset.getValue()); buttonAbort.setEnabled(true); + buttonExecute.setEnabled(false); runAsync("HystScan", args).handle((ok, ex) -> { buttonAbort.setEnabled(false); if (ex != null) { @@ -264,20 +324,30 @@ public class HystScan extends Panel { abort(); }//GEN-LAST:event_buttonAbortActionPerformed + private void checkE3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkE3ActionPerformed + spinnerE3.setEnabled(checkE3.isSelected()); + }//GEN-LAST:event_checkE3ActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton buttonAbort; private javax.swing.JButton buttonExecute; + private javax.swing.JCheckBox checkE3; + private javax.swing.JComboBox comboMode; private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel3; private javax.swing.JPanel panelParameters; private javax.swing.JSpinner spinnerE1; private javax.swing.JSpinner spinnerE2; + private javax.swing.JSpinner spinnerE3; private javax.swing.JSpinner spinnerEndField; + private javax.swing.JSpinner spinnerOffset; private javax.swing.JSpinner spinnerRampRate; private javax.swing.JSpinner spinnerSleep; private javax.swing.JSpinner spinnerStartField; diff --git a/script/HystScan.py b/script/HystScan.py index e674b20..0c948e4 100644 --- a/script/HystScan.py +++ b/script/HystScan.py @@ -7,12 +7,16 @@ END_FIELD = 0.1 ENERGIES = (707.90, 703.90) RAMP_RATE = 0.2 ENERGY_CHANGE_SLEEP = 0.5 +MODE = 'CIRC +' +OFFSET = -1.0 """ +FIELD_PRECISION = 0.005 + #Pre-actions cawait('ACOAU-ACCU:OP-MODE', 'Light Available', type = 's') -caput('X07MA-ID:MODE', 'CIRC +') -caput('X07MA-ID:ENERGY-OFFS', '-1.0') +caput('X07MA-ID:MODE', MODE) +caput('X07MA-ID:ENERGY-OFFS', OFFSET) caputq('X07MA-PC:CSCALER.INPB', '1') caputq('X07MA-PC-PS2:SET:DMD:RAMPRATE:TPM', RAMP_RATE) #sleep(15.0) @@ -60,11 +64,10 @@ fieldAnalogX = Channel('X07MA-ES1-AI:SIGNAL4', type = 'd') print "Waiting for start field" -#WORKAROUND TO BUG IN DRIVER -#if abs(fieldReadback.get() - START_FIELD) < 0.005: -# caput('X07MA-PC-PS2:M:GO.A', START_FIELD + 0.01) -caput('X07MA-PC-PS2:M:GO.A', START_FIELD) -#caputq('X07MA-PC-PS2:M:GO.A', START_FIELD) + +if abs(fieldReadback.get() - START_FIELD) > FIELD_PRECISION: + caput('X07MA-PC-PS2:M:GO.A', START_FIELD) + #caput("X07MA-PC-MAG:X:DMD", START_FIELD)