/* * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. */ import ch.psi.pshell.ui.Panel; import ch.psi.utils.State; import java.awt.Component; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.DefaultComboBoxModel; import javax.swing.JLabel; import javax.swing.table.DefaultTableModel; /** * */ public class HystScan extends Panel { final static boolean POP_SCRIPT_EXCEPTIONS = true; public HystScan() { initComponents(); buttonDefaultsActionPerformed(null); } //Overridable callbacks @Override public void onInitialize(int runCount) { loadConfig(); } @Override public void onStateChange(State state, State former) { setEnabled(state == State.Ready); } @Override public void onExecutedFile(String fileName, Object result) { } //Callback to perform update - in event thread @Override protected void doUpdate() { } @Override public void setEnabled(boolean value) { super.setEnabled(value); buttonExecute.setEnabled(value); tableEnergies.setEnabled(value); textFile.setEnabled(value); buttonDefaults.setEnabled(value); comboSetup.setEnabled(value); comboRunType.setEnabled(value); for (Component c : panelParameters.getComponents()) { if (!(c instanceof JLabel)) { c.setEnabled(value); } } } Path getConfigFile() { return Paths.get(getContext().getSetup().getConfigPath(), "energy_scan.properties"); } void loadConfig() { DefaultComboBoxModel model = (DefaultComboBoxModel) comboSetup.getModel(); model.removeAllElements(); try { for (String line : Files.readAllLines(getConfigFile())) { if ((line != null) && (!line.trim().isEmpty())) { String[] tokens = line.split("="); if (tokens.length > 0) { model.addElement(tokens[0].trim()); } } } } catch (Exception ex) { } } String expandPath(String path) { long time = System.currentTimeMillis(); String mode; if (comboMode.getSelectedIndex() == 0) { mode = "plus"; } else { //if (comboMode.getSelectedIndex() == 1) { mode = "minus"; } path = getContext().getSetup().expandPath(path); path = path.replaceAll("\\{el\\}", String.valueOf(comboSetup.getSelectedItem())); path = path.replaceAll("\\{mode\\}", mode); return path; } enum Mode { plus, minus, } Mode[] batch; int batchIndex; double[] offsets = new double[2]; boolean reverseScan; boolean isManualRun() { return (comboRunType.getSelectedIndex() == 0); } void setElement() throws Exception { String selection = comboSetup.getSelectedItem().toString(); for (String line : Files.readAllLines(getConfigFile())) { if ((line != null) && (!line.trim().isEmpty())) { String[] tokens = line.split("="); if (tokens.length <2) { throw new Exception("Invalid file format"); } if (tokens[0].equals(selection)){ tokens = tokens[1].trim().split(";"); if (tokens.length != 8) { throw new Exception("Invalid file format"); } offsets[0] = Double.valueOf(tokens[4].trim()); offsets[1] = Double.valueOf(tokens[5].trim()); break; } } } } void setMode(Mode mode) { switch (mode) { case plus: comboMode.setSelectedIndex(0); spinnerOffset.setValue(offsets[0]); return; case minus: comboMode.setSelectedIndex(1); spinnerOffset.setValue(offsets[1]); return; } } void run() throws Exception { String file = expandPath(textFile.getText()); eval("FILENAME = '" + file + "'"); HashMap args = new HashMap(); args.put("FIELD", spinnerField.getValue().toString()); ArrayList energies = new ArrayList<>(); int rows = (Integer) spinnerEnergies.getValue(); ((DefaultTableModel) tableEnergies.getModel()).setNumRows(rows); for (int i = 0; i < tableEnergies.getRowCount(); i++) { energies.add((Double) ((DefaultTableModel) tableEnergies.getModel()).getValueAt(i, 1)); } args.put("ENERGIES", energies); if (reverseScan){ getLogger().warning("Setting reverse scan"); args.put("START_FIELD", (Double) spinnerEndField.getValue()); args.put("END_FIELD", (Double) spinnerStartField.getValue()); } else { 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) -> { try{ buttonAbort.setEnabled(false); try { eval("FILENAME = None"); } catch (Exception ex1) { Logger.getLogger(HystScan.class.getName()).log(Level.WARNING, null, ex1); } if (ex != null) { throw ex; } else { if (batch != null) { batchIndex++; reverseScan = !reverseScan; if (batchIndex >= batch.length) { batch = null; reverseScan = false; } else { setMode(batch[batchIndex]); run(); } } } } catch (Throwable t){ batch = null; reverseScan = false; getLogger().log(Level.WARNING, null, ex); //showException((Exception)ex); } return ok; }); } @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { panelParameters = new javax.swing.JPanel(); jLabel8 = new javax.swing.JLabel(); spinnerRampRate = new javax.swing.JSpinner(); jLabel9 = new javax.swing.JLabel(); spinnerSleep = new javax.swing.JSpinner(); jLabel3 = new javax.swing.JLabel(); spinnerStartField = new javax.swing.JSpinner(); spinnerEndField = new javax.swing.JSpinner(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); comboMode = new javax.swing.JComboBox(); jLabel10 = new javax.swing.JLabel(); spinnerOffset = new javax.swing.JSpinner(); jScrollPane1 = new javax.swing.JScrollPane(); tableEnergies = new javax.swing.JTable(); jLabel13 = new javax.swing.JLabel(); spinnerEnergies = new javax.swing.JSpinner(); jLabel14 = new javax.swing.JLabel(); spinnerField = new javax.swing.JSpinner(); jPanel3 = new javax.swing.JPanel(); buttonExecute = new javax.swing.JButton(); buttonAbort = new javax.swing.JButton(); panelData = new javax.swing.JPanel(); buttonDefaults = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); textFile = new javax.swing.JTextField(); jPanel1 = new javax.swing.JPanel(); comboSetup = new javax.swing.JComboBox(); jLabel11 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); comboRunType = new javax.swing.JComboBox(); panelParameters.setBorder(javax.swing.BorderFactory.createTitledBorder("Parameters")); jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel8.setText("Ramp Rate:"); spinnerRampRate.setModel(new javax.swing.SpinnerNumberModel(0.02d, 0.01d, 100.0d, 1.0d)); jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel9.setText("Energy Change Sleep:"); spinnerSleep.setModel(new javax.swing.SpinnerNumberModel(0.5d, 0.0d, 120.0d, 1.0d)); jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel3.setText("Start Field:"); spinnerStartField.setModel(new javax.swing.SpinnerNumberModel(-0.01d, -10.0d, 10.0d, 0.1d)); spinnerEndField.setModel(new javax.swing.SpinnerNumberModel(0.01d, -10.0d, 10.0d, 0.1d)); jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel4.setText("End Field:"); 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)); tableEnergies.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { { new Integer(1), new Double(707.9)}, { new Integer(2), new Double(703.9)} }, new String [] { "Index", "Energy" } ) { Class[] types = new Class [] { java.lang.Integer.class, java.lang.Double.class }; boolean[] canEdit = new boolean [] { false, true }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableEnergies.setRowSelectionAllowed(false); tableEnergies.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(tableEnergies); jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel13.setText("Energies:"); spinnerEnergies.setModel(new javax.swing.SpinnerNumberModel(2, 1, 9, 1)); spinnerEnergies.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerEnergiesStateChanged(evt); } }); jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel14.setText("Field:"); spinnerField.setModel(new javax.swing.SpinnerListModel(new String[] {"Hx", "Hz"})); spinnerField.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerFieldStateChanged(evt); } }); 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() .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addGroup(panelParametersLayout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE) .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerEnergies, javax.swing.GroupLayout.DEFAULT_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(jLabel10) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerOffset, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(comboMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParametersLayout.createSequentialGroup() .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel14) .addComponent(jLabel3)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(spinnerStartField) .addComponent(spinnerField)))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboMode, spinnerEndField, spinnerField, spinnerOffset, spinnerRampRate, spinnerSleep, spinnerStartField}); panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel13, jLabel14}); panelParametersLayout.setVerticalGroup( panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelParametersLayout.createSequentialGroup() .addContainerGap() .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(panelParametersLayout.createSequentialGroup() .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel14) .addComponent(spinnerField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(spinnerStartField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(spinnerEndField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .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)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .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)) .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))) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) .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) .addComponent(jLabel13) .addComponent(spinnerEnergies, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); buttonExecute.setText("Start"); buttonExecute.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonExecuteActionPerformed(evt); } }); buttonAbort.setText("Abort"); buttonAbort.setEnabled(false); 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(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(buttonAbort, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonExecute, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addGap(4, 4, 4) .addComponent(buttonExecute) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonAbort) .addContainerGap()) ); panelData.setBorder(javax.swing.BorderFactory.createTitledBorder("File")); buttonDefaults.setText("Default"); buttonDefaults.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonDefaultsActionPerformed(evt); } }); jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel6.setText("File:"); javax.swing.GroupLayout panelDataLayout = new javax.swing.GroupLayout(panelData); panelData.setLayout(panelDataLayout); panelDataLayout.setHorizontalGroup( panelDataLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelDataLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textFile) .addGap(18, 18, 18) .addComponent(buttonDefaults) .addContainerGap()) ); panelDataLayout.setVerticalGroup( panelDataLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelDataLayout.createSequentialGroup() .addGroup(panelDataLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(textFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonDefaults, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Setup")); comboSetup.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { comboSetupActionPerformed(evt); } }); jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel11.setText("Element:"); jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel12.setText("Run Type:"); comboRunType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Manual", "2-loop", "4-loop" })); 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(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(comboSetup, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(comboRunType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel11, jLabel12}); jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboRunType, comboSetup}); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(4, 4, 4) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(comboSetup, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel11)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel12) .addComponent(comboRunType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panelParameters, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelData, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(panelParameters, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelData, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jPanel1, 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(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents private void buttonExecuteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonExecuteActionPerformed try { batchIndex = 0; switch (comboRunType.getSelectedIndex()) { case 1: batch = new Mode[]{Mode.plus, Mode.minus}; setMode(batch[0]); break; case 2: batch = new Mode[]{Mode.plus, Mode.minus, Mode.minus, Mode.plus}; setMode(batch[0]); break; default: batch = null; } run(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonExecuteActionPerformed private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed try { abort(); } catch (InterruptedException ex) { } }//GEN-LAST:event_buttonAbortActionPerformed private void buttonDefaultsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDefaultsActionPerformed textFile.setText("{el}_hyst_{mode}"); }//GEN-LAST:event_buttonDefaultsActionPerformed private void comboSetupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboSetupActionPerformed try { if (comboSetup.getSelectedItem()!=null){ setElement(); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_comboSetupActionPerformed private void spinnerEnergiesStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerEnergiesStateChanged int rows = (Integer)spinnerEnergies.getValue(); ((DefaultTableModel)tableEnergies.getModel()).setNumRows(rows); for (int i=0; i