From b9950af43d2e80a1b58e8c776e608399cd08f595 Mon Sep 17 00:00:00 2001 From: Alexandre Gobbo Date: Fri, 8 Nov 2019 15:48:44 +0100 Subject: [PATCH] Startup --- config/plugins.properties | 6 +- plugins/Eiger.java | 1109 +++++++++++++++++++++++++++++++++++++ 2 files changed, 1114 insertions(+), 1 deletion(-) create mode 100644 plugins/Eiger.java diff --git a/config/plugins.properties b/config/plugins.properties index 7758238..b3efcc5 100755 --- a/config/plugins.properties +++ b/config/plugins.properties @@ -1,5 +1,9 @@ +Eiger.java=enabled +AthosCameras.java=disabled +ScreenPanel5.java=disabled +ScreenPanelBack.java=disabled +ScreenPanel4OLD.java=disabled ScreenPanel3OLD.java=disabled -ScreenPanel4.java=disabled ScreenPanel3New.java=disabled a.java=disabled maxsize.java=disabled diff --git a/plugins/Eiger.java b/plugins/Eiger.java new file mode 100644 index 0000000..f0455c2 --- /dev/null +++ b/plugins/Eiger.java @@ -0,0 +1,1109 @@ + +import ch.psi.pshell.core.Context; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.Arr; +import ch.psi.utils.State; +import ch.psi.utils.swing.SwingUtils; +import java.awt.Component; +import java.util.HashMap; +import javax.swing.JComboBox; +import javax.swing.JPanel; +import javax.swing.JSpinner; +import javax.swing.JToggleButton; + +/** + * + */ +public class Eiger extends Panel { + + public enum ID { + ID1, + ID2, + ID1_ID2 + } + + public enum Switching { + Normal, + Tune_Detune, + Chopper + } + + public enum Polarization { + Circ_Plus, + Circ_Minus, + Lin_Hor, + Lin_Ver + } + + public enum ImgMethod { + Two_Pol, + Two_Energies, + Take_Image + } + + static String DEFAULT_PATH = "{data}/{year}_{month}/{date}_{seq}%03d"; + + final Component[] parameterControls; + + public Eiger() { + initComponents(); + ((JSpinner.ListEditor) spinnerHar1.getEditor()).getTextField().setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + ((JSpinner.ListEditor) spinnerHar2.getEditor()).getTextField().setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + SwingUtils.setEnumCombo(comboID, ID.class); + SwingUtils.setEnumCombo(comboSwitch, Switching.class); + SwingUtils.setEnumCombo(comboPol1, Polarization.class); + SwingUtils.setEnumCombo(comboPol2, Polarization.class); + SwingUtils.setEnumCombo(comboImgPol1, Polarization.class); + SwingUtils.setEnumCombo(comboImgPol2, Polarization.class); + SwingUtils.setEnumCombo(comboImgMethod, ImgMethod.class); + Component[] parameterControls = new Component[0]; + for (JPanel panel : new JPanel[]{panelBeamline, panelImgControls, panelSpectrum}){ + for (Class cls : new Class[]{JComboBox.class, JSpinner.class, JToggleButton.class}){ + parameterControls = Arr.append(parameterControls, SwingUtils.getComponentsByType(panelBeamline, cls)); + } + } + this.parameterControls = parameterControls; + setPersistedComponents(parameterControls); + } + + //Overridable callbacks + @Override + public void onInitialize(int runCount) { + } + + @Override + public void onStateChange(State state, State former) { + textDataPath.setText(getContext().getConfig().dataPath); + spinnerSeq.setValue(getContext().getFileSequentialNumber()); + updateControls(); + } + + @Override + public void onExecutedFile(String fileName, Object result) { + } + + //Callback to perform update - in event thread + @Override + protected void doUpdate() { + } + + void updateControls() { + boolean editable = getState().isInitialized() && !getState().isProcessing(); + textDataPath.setEnabled(editable); + spinnerSeq.setEnabled(editable); + buttonDefaultPath.setEnabled(editable && !textDataPath.getText().equals(DEFAULT_PATH)); + buttonSetPath.setEnabled(editable && !textDataPath.getText().equals(getContext().getConfig().dataPath)); + buttonUndoPath.setEnabled(editable && !textDataPath.getText().equals(getContext().getConfig().dataPath)); + buttonSetSeq.setEnabled(editable && !spinnerSeq.getValue().equals(getContext().getFileSequentialNumber())); + buttonUndoSeq.setEnabled(editable && !spinnerSeq.getValue().equals(getContext().getFileSequentialNumber())); + + for (Component c : parameterControls) { + c.setEnabled(editable); + } + + if (editable) { + comboImgPol1.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Pol); + comboImgPol2.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Pol); + spinnerImgEng1.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies); + spinnerImgEng2.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies); + } + + buttonImgStart.setEnabled(getState() == State.Ready); + buttonImgAbort.setEnabled(getState().isProcessing()); + } + + void setBeamlineArgs(HashMap args){ + args.put("ID", comboID.getSelectedItem().toString()); + args.put("SWITCHING", comboSwitch.getSelectedItem().toString()); + args.put("POL_ID_1", comboPol1.getSelectedItem().toString()); + args.put("ALPHA_ID_1", spinnerAlp1.getValue()); + args.put("HARMONIC_ID_1", spinnerHar1.getValue()); + args.put("OFFSET_ID_1", spinnerOff1.getValue()); + args.put("POL_ID_2", comboPol2.getSelectedItem().toString()); + args.put("ALPHA_ID_2", spinnerAlp2.getValue()); + args.put("HARMONIC_ID_2", spinnerHar2.getValue()); + args.put("OFFSET_ID_2", spinnerOff2.getValue()); + } + + void run2Images() throws Context.ContextStateException { + + HashMap args = new HashMap(); + args.put("METHOD", comboImgMethod.getSelectedItem().toString()); + args.put("MEASUREMENTS", spinnerImgMeasurements.getValue()); + args.put("CONTRAST", spinnerImgContrast.getValue()); + args.put("AUTO_SAVE", checkImgAutosave.isSelected()); + args.put("AS_SEQUENCE", checImgAsSeq.isSelected()); + args.put("EXPOSURE_1", spinnerImgExp1.getValue()); + args.put("AVERAGE_1", spinnerImgAvg1.getValue()); + args.put("ENERGY_1", spinnerImgEng1.getValue()); + args.put("POLARIZATION_1", comboImgPol1.getSelectedItem().toString()); + args.put("EXPOSURE_2", spinnerImgExp2.getValue()); + args.put("AVERAGE_2", spinnerImgAvg2.getValue()); + args.put("ENERGY_2", spinnerImgEng2.getValue()); + args.put("POLARIZATION_2", comboImgPol2.getSelectedItem().toString()); + setBeamlineArgs(args); + + runAsync("templates/Eiger2Img", args).handle((ret, t) -> { + if ((t != null) && (!getContext().isAborted())) { + showException((Exception) t); + } + return t; + }); + } + + void runAbsSpectrum() throws Context.ContextStateException { + HashMap args = new HashMap(); + args.put("SAVE_SPECTRUM", checkSpecSaveSpectrum.isSelected()); + args.put("SAVE_IMAGES", checkSpecSaveImages.isSelected()); + args.put("WITH_I0", checkSpecWithI0.isSelected()); + args.put("SWITCH_POL", checkSpecSwitchPol.isSelected()); + args.put("EXPOSURE", spinnerSpecExp.getValue()); + args.put("AVERAGE", spinnerSpecAvg.getValue()); + args.put("NUMBER_SCANS", spinnerSpecScans.getValue()); + setBeamlineArgs(args); + + runAsync("templates/EigerAbsSpec", args).handle((ret, t) -> { + if ((t != null) && (!getContext().isAborted())) { + showException((Exception) t); + } + return t; + }); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jTabbedPane1 = new javax.swing.JTabbedPane(); + jPanel1 = new javax.swing.JPanel(); + panelDataFile = new javax.swing.JPanel(); + buttonSetSeq = new javax.swing.JButton(); + buttonUndoSeq = new javax.swing.JButton(); + buttonDefaultPath = new javax.swing.JButton(); + buttonSetPath = new javax.swing.JButton(); + buttonUndoPath = new javax.swing.JButton(); + jLabel2 = new javax.swing.JLabel(); + spinnerSeq = new javax.swing.JSpinner(); + textDataPath = new javax.swing.JTextField(); + jLabel1 = new javax.swing.JLabel(); + panelBeamline = new javax.swing.JPanel(); + jLabel3 = new javax.swing.JLabel(); + labelSwitching = new javax.swing.JLabel(); + comboID = new javax.swing.JComboBox<>(); + comboSwitch = new javax.swing.JComboBox<>(); + jPanel7 = new javax.swing.JPanel(); + jLabel5 = new javax.swing.JLabel(); + comboPol1 = new javax.swing.JComboBox<>(); + jLabel6 = new javax.swing.JLabel(); + spinnerAlp1 = new javax.swing.JSpinner(); + jLabel7 = new javax.swing.JLabel(); + spinnerHar1 = new javax.swing.JSpinner(); + jLabel8 = new javax.swing.JLabel(); + spinnerOff1 = new javax.swing.JSpinner(); + jPanel9 = new javax.swing.JPanel(); + jLabel13 = new javax.swing.JLabel(); + comboPol2 = new javax.swing.JComboBox<>(); + jLabel14 = new javax.swing.JLabel(); + spinnerAlp2 = new javax.swing.JSpinner(); + jLabel15 = new javax.swing.JLabel(); + spinnerHar2 = new javax.swing.JSpinner(); + jLabel16 = new javax.swing.JLabel(); + spinnerOff2 = new javax.swing.JSpinner(); + jPanel2 = new javax.swing.JPanel(); + buttonImgStart = new javax.swing.JButton(); + buttonImgAbort = new javax.swing.JButton(); + panelImgControls = new javax.swing.JPanel(); + jPanel8 = new javax.swing.JPanel(); + jLabel4 = new javax.swing.JLabel(); + spinnerImgExp1 = new javax.swing.JSpinner(); + jLabel9 = new javax.swing.JLabel(); + spinnerImgAvg1 = new javax.swing.JSpinner(); + jLabel10 = new javax.swing.JLabel(); + comboImgPol1 = new javax.swing.JComboBox<>(); + jLabel11 = new javax.swing.JLabel(); + spinnerImgEng1 = new javax.swing.JSpinner(); + jPanel10 = new javax.swing.JPanel(); + jLabel12 = new javax.swing.JLabel(); + spinnerImgExp2 = new javax.swing.JSpinner(); + jLabel17 = new javax.swing.JLabel(); + spinnerImgAvg2 = new javax.swing.JSpinner(); + jLabel18 = new javax.swing.JLabel(); + comboImgPol2 = new javax.swing.JComboBox<>(); + jLabel19 = new javax.swing.JLabel(); + spinnerImgEng2 = new javax.swing.JSpinner(); + jLabel21 = new javax.swing.JLabel(); + spinnerImgMeasurements = new javax.swing.JSpinner(); + comboImgMethod = new javax.swing.JComboBox<>(); + jLabel20 = new javax.swing.JLabel(); + checImgAsSeq = new javax.swing.JCheckBox(); + checkImgAutosave = new javax.swing.JCheckBox(); + jLabel22 = new javax.swing.JLabel(); + spinnerImgContrast = new javax.swing.JSpinner(); + jPanel3 = new javax.swing.JPanel(); + panelSpectrum = new javax.swing.JPanel(); + jLabel23 = new javax.swing.JLabel(); + jLabel24 = new javax.swing.JLabel(); + checkSpecSaveImages = new javax.swing.JCheckBox(); + spinnerSpecAvg = new javax.swing.JSpinner(); + checkSpecSwitchPol = new javax.swing.JCheckBox(); + spinnerSpecScans = new javax.swing.JSpinner(); + jLabel25 = new javax.swing.JLabel(); + spinnerSpecExp = new javax.swing.JSpinner(); + checkSpecWithI0 = new javax.swing.JCheckBox(); + checkSpecSaveSpectrum = new javax.swing.JCheckBox(); + buttonSpecStart = new javax.swing.JButton(); + buttonSpecAbort = new javax.swing.JButton(); + + panelDataFile.setBorder(javax.swing.BorderFactory.createTitledBorder("Data File")); + + buttonSetSeq.setText("Save"); + buttonSetSeq.setEnabled(false); + buttonSetSeq.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonSetSeqActionPerformed(evt); + } + }); + + buttonUndoSeq.setText("Undo"); + buttonUndoSeq.setEnabled(false); + buttonUndoSeq.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonUndoSeqActionPerformed(evt); + } + }); + + buttonDefaultPath.setText("Default"); + buttonDefaultPath.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonDefaultPathActionPerformed(evt); + } + }); + + buttonSetPath.setText("Save"); + buttonSetPath.setEnabled(false); + buttonSetPath.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonSetPathActionPerformed(evt); + } + }); + + buttonUndoPath.setText("Undo"); + buttonUndoPath.setEnabled(false); + buttonUndoPath.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonUndoPathActionPerformed(evt); + } + }); + + jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel2.setText("Sequential:"); + + spinnerSeq.setModel(new javax.swing.SpinnerNumberModel(0, 0, 99999, 1)); + spinnerSeq.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spinnerSeqStateChanged(evt); + } + }); + + textDataPath.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyTyped(java.awt.event.KeyEvent evt) { + textDataPathKeyTyped(evt); + } + public void keyReleased(java.awt.event.KeyEvent evt) { + textDataPathKeyReleased(evt); + } + }); + + jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel1.setText("Name Pattern:"); + + javax.swing.GroupLayout panelDataFileLayout = new javax.swing.GroupLayout(panelDataFile); + panelDataFile.setLayout(panelDataFileLayout); + panelDataFileLayout.setHorizontalGroup( + panelDataFileLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDataFileLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelDataFileLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelDataFileLayout.createSequentialGroup() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerSeq, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(buttonSetSeq) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(buttonUndoSeq)) + .addGroup(panelDataFileLayout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(textDataPath, javax.swing.GroupLayout.PREFERRED_SIZE, 362, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelDataFileLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(panelDataFileLayout.createSequentialGroup() + .addComponent(buttonSetPath) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(buttonUndoPath)) + .addComponent(buttonDefaultPath)) + .addContainerGap()) + ); + + panelDataFileLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonDefaultPath, buttonSetPath, buttonUndoPath}); + + panelDataFileLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2}); + + panelDataFileLayout.setVerticalGroup( + panelDataFileLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelDataFileLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelDataFileLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(textDataPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(buttonSetPath) + .addComponent(buttonUndoPath)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelDataFileLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(spinnerSeq, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(buttonSetSeq) + .addComponent(buttonUndoSeq) + .addComponent(buttonDefaultPath)) + .addContainerGap()) + ); + + panelBeamline.setBorder(javax.swing.BorderFactory.createTitledBorder("Beamline")); + + jLabel3.setText("ID:"); + + labelSwitching.setText("Switching:"); + + comboID.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + comboSwitch.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder("ID1")); + + jLabel5.setText("Polarization:"); + + comboPol1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + jLabel6.setText("Alpha:"); + + spinnerAlp1.setModel(new javax.swing.SpinnerNumberModel(0.0d, -360.0d, 360.0d, 1.0d)); + + jLabel7.setText("Harmonic:"); + + spinnerHar1.setModel(new javax.swing.SpinnerListModel(new String[] {"1", "3"})); + + jLabel8.setText("Offset:"); + + spinnerOff1.setModel(new javax.swing.SpinnerNumberModel(0.0d, -10.0d, 10.0d, 1.0d)); + + javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7); + jPanel7.setLayout(jPanel7Layout); + jPanel7Layout.setHorizontalGroup( + jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel7Layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel6, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel7, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerOff1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerHar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerAlp1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(comboPol1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel7Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboPol1, spinnerAlp1, spinnerHar1, spinnerOff1}); + + jPanel7Layout.setVerticalGroup( + jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel7Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel5) + .addComponent(comboPol1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel6) + .addComponent(spinnerAlp1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel7) + .addComponent(spinnerHar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel8) + .addComponent(spinnerOff1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel9.setBorder(javax.swing.BorderFactory.createTitledBorder("ID2")); + + jLabel13.setText("Polarization:"); + + comboPol2.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + jLabel14.setText("Alpha:"); + + spinnerAlp2.setModel(new javax.swing.SpinnerNumberModel(0.0d, -360.0d, 360.0d, 1.0d)); + + jLabel15.setText("Harmonic:"); + + spinnerHar2.setModel(new javax.swing.SpinnerListModel(new String[] {"1", "3"})); + + jLabel16.setText("Offset:"); + + spinnerOff2.setModel(new javax.swing.SpinnerNumberModel(0.0d, -10.0d, 10.0d, 1.0d)); + + javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9); + jPanel9.setLayout(jPanel9Layout); + jPanel9Layout.setHorizontalGroup( + jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel14, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel15, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel16, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerOff2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerHar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerAlp2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(comboPol2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel9Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboPol2, spinnerAlp2, spinnerHar2, spinnerOff2}); + + jPanel9Layout.setVerticalGroup( + jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel13) + .addComponent(comboPol2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel14) + .addComponent(spinnerAlp2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel15) + .addComponent(spinnerHar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel16) + .addComponent(spinnerOff2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout panelBeamlineLayout = new javax.swing.GroupLayout(panelBeamline); + panelBeamline.setLayout(panelBeamlineLayout); + panelBeamlineLayout.setHorizontalGroup( + panelBeamlineLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelBeamlineLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelBeamlineLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(labelSwitching) + .addComponent(jLabel3)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelBeamlineLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(comboID, 0, 121, Short.MAX_VALUE) + .addComponent(comboSwitch, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(18, 18, Short.MAX_VALUE) + .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(18, 18, 18) + .addComponent(jPanel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + ); + + panelBeamlineLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboID, comboSwitch}); + + panelBeamlineLayout.setVerticalGroup( + panelBeamlineLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelBeamlineLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(panelBeamlineLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(panelBeamlineLayout.createSequentialGroup() + .addGap(30, 30, 30) + .addGroup(panelBeamlineLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(comboID, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel3)) + .addGap(18, 18, 18) + .addGroup(panelBeamlineLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelSwitching) + .addComponent(comboSwitch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap()) + ); + + 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) + .addComponent(panelDataFile, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelBeamline, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(panelDataFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(panelBeamline, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab("Config", jPanel1); + + buttonImgStart.setText("Start"); + buttonImgStart.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonImgStartActionPerformed(evt); + } + }); + + buttonImgAbort.setText("Abort"); + buttonImgAbort.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonImgAbortActionPerformed(evt); + } + }); + + jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder("First Image")); + + jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel4.setText("Exposure(s):"); + + spinnerImgExp1.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); + + jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel9.setText("Average:"); + + spinnerImgAvg1.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); + + jLabel10.setText("Polarization:"); + + comboImgPol1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel11.setText("Energy:"); + + spinnerImgEng1.setModel(new javax.swing.SpinnerNumberModel(1000.0d, 90.0d, 2000.0d, 1.0d)); + + javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); + jPanel8.setLayout(jPanel8Layout); + jPanel8Layout.setHorizontalGroup( + jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel8Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel10, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel11, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerImgExp1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerImgAvg1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(comboImgPol1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerImgEng1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel8Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboImgPol1, spinnerImgAvg1, spinnerImgEng1, spinnerImgExp1}); + + jPanel8Layout.setVerticalGroup( + jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel8Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel4) + .addComponent(spinnerImgExp1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel9) + .addComponent(spinnerImgAvg1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel11) + .addComponent(spinnerImgEng1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel10) + .addComponent(comboImgPol1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel10.setBorder(javax.swing.BorderFactory.createTitledBorder("Second Image")); + + jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel12.setText("Exposure(s):"); + + spinnerImgExp2.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); + + jLabel17.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel17.setText("Average:"); + + spinnerImgAvg2.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); + + jLabel18.setText("Polarization:"); + + comboImgPol2.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + jLabel19.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel19.setText("Energy:"); + + spinnerImgEng2.setModel(new javax.swing.SpinnerNumberModel(1000.0d, 90.0d, 2000.0d, 1.0d)); + + javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10); + jPanel10.setLayout(jPanel10Layout); + jPanel10Layout.setHorizontalGroup( + jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel10Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel19, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel18, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel17, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel12, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerImgExp2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerImgAvg2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(comboImgPol2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerImgEng2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel10Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboImgPol2, spinnerImgAvg2, spinnerImgEng2, spinnerImgExp2}); + + jPanel10Layout.setVerticalGroup( + jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel10Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel12) + .addComponent(spinnerImgExp2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel17) + .addComponent(spinnerImgAvg2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel19) + .addComponent(spinnerImgEng2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel18) + .addComponent(comboImgPol2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jLabel21.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel21.setText("Method:"); + + spinnerImgMeasurements.setModel(new javax.swing.SpinnerNumberModel(1, 1, 10000, 1)); + + comboImgMethod.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + comboImgMethod.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboImgMethodActionPerformed(evt); + } + }); + + jLabel20.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel20.setText("Measurements:"); + + checImgAsSeq.setText("As Sequence"); + + checkImgAutosave.setSelected(true); + checkImgAutosave.setText("Autosave"); + + jLabel22.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel22.setText("Contrast:"); + + spinnerImgContrast.setModel(new javax.swing.SpinnerNumberModel(0.0d, 0.0d, 1000.0d, 1.0d)); + + javax.swing.GroupLayout panelImgControlsLayout = new javax.swing.GroupLayout(panelImgControls); + panelImgControls.setLayout(panelImgControlsLayout); + panelImgControlsLayout.setHorizontalGroup( + panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelImgControlsLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel21) + .addComponent(jLabel20) + .addComponent(jLabel22)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerImgMeasurements, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(comboImgMethod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(checkImgAutosave) + .addComponent(checImgAsSeq) + .addComponent(spinnerImgContrast, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, Short.MAX_VALUE) + .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(18, 18, Short.MAX_VALUE) + .addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + ); + + panelImgControlsLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {checImgAsSeq, checkImgAutosave, comboImgMethod, spinnerImgContrast, spinnerImgMeasurements}); + + panelImgControlsLayout.setVerticalGroup( + panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelImgControlsLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(panelImgControlsLayout.createSequentialGroup() + .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(comboImgMethod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel21)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel20) + .addComponent(spinnerImgMeasurements, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel22) + .addComponent(spinnerImgContrast, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(checkImgAutosave) + .addGap(11, 11, 11) + .addComponent(checImgAsSeq))) + .addContainerGap()) + ); + + 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.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(buttonImgStart) + .addGap(76, 76, 76) + .addComponent(buttonImgAbort) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(panelImgControls, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + + jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonImgAbort, buttonImgStart}); + + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(panelImgControls, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 114, Short.MAX_VALUE) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonImgStart) + .addComponent(buttonImgAbort)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab("2-Images", jPanel2); + + jLabel23.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel23.setText("Exposure(s):"); + + jLabel24.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel24.setText("Average:"); + + checkSpecSaveImages.setText("Save images"); + + spinnerSpecAvg.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); + + checkSpecSwitchPol.setText("Switch pol after scan"); + + spinnerSpecScans.setModel(new javax.swing.SpinnerNumberModel(1, 1, 10000, 1)); + + jLabel25.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel25.setText("Number of Scans:"); + + spinnerSpecExp.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); + + checkSpecWithI0.setSelected(true); + checkSpecWithI0.setText("With I0"); + + checkSpecSaveSpectrum.setSelected(true); + checkSpecSaveSpectrum.setText("Save spectrum"); + + javax.swing.GroupLayout panelSpectrumLayout = new javax.swing.GroupLayout(panelSpectrum); + panelSpectrum.setLayout(panelSpectrumLayout); + panelSpectrumLayout.setHorizontalGroup( + panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSpectrumLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel24) + .addComponent(jLabel23) + .addComponent(jLabel25)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(checkSpecWithI0) + .addComponent(checkSpecSaveImages) + .addComponent(checkSpecSwitchPol) + .addComponent(checkSpecSaveSpectrum) + .addComponent(spinnerSpecScans, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerSpecExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerSpecAvg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + + panelSpectrumLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerSpecAvg, spinnerSpecExp, spinnerSpecScans}); + + panelSpectrumLayout.setVerticalGroup( + panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSpectrumLayout.createSequentialGroup() + .addContainerGap() + .addComponent(checkSpecSaveSpectrum) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkSpecSaveImages) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkSpecWithI0) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel23) + .addComponent(spinnerSpecExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel24) + .addComponent(spinnerSpecAvg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel25) + .addComponent(spinnerSpecScans, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(checkSpecSwitchPol) + .addContainerGap()) + ); + + buttonSpecStart.setText("Start"); + buttonSpecStart.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonSpecStartActionPerformed(evt); + } + }); + + buttonSpecAbort.setText("Abort"); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGap(176, 176, 176) + .addComponent(panelSpectrum, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(202, Short.MAX_VALUE)) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonSpecStart) + .addGap(76, 76, 76) + .addComponent(buttonSpecAbort) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGap(23, 23, 23) + .addComponent(panelSpectrum, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(46, 46, 46) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonSpecStart) + .addComponent(buttonSpecAbort)) + .addContainerGap()) + ); + + jTabbedPane1.addTab("Absorption Spectrum", jPanel3); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 691, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jTabbedPane1) + .addGap(0, 0, 0)) + ); + }// //GEN-END:initComponents + + private void buttonSetPathActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSetPathActionPerformed + try { + getContext().getConfig().dataPath = textDataPath.getText(); + getContext().getConfig().save(); + updateControls(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonSetPathActionPerformed + + private void buttonUndoPathActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonUndoPathActionPerformed + try { + textDataPath.setText(getContext().getConfig().dataPath); + updateControls(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonUndoPathActionPerformed + + private void buttonSetSeqActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSetSeqActionPerformed + try { + getContext().setFileSequentialNumber(((Number) spinnerSeq.getValue()).intValue()); + updateControls(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonSetSeqActionPerformed + + private void buttonUndoSeqActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonUndoSeqActionPerformed + try { + spinnerSeq.setValue(getContext().getFileSequentialNumber()); + updateControls(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonUndoSeqActionPerformed + + private void textDataPathKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textDataPathKeyTyped + + }//GEN-LAST:event_textDataPathKeyTyped + + private void spinnerSeqStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerSeqStateChanged + updateControls(); + }//GEN-LAST:event_spinnerSeqStateChanged + + private void buttonDefaultPathActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDefaultPathActionPerformed + textDataPath.setText(DEFAULT_PATH); + updateControls(); + }//GEN-LAST:event_buttonDefaultPathActionPerformed + + private void textDataPathKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textDataPathKeyReleased + updateControls(); + }//GEN-LAST:event_textDataPathKeyReleased + + private void buttonImgStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonImgStartActionPerformed + try { + run2Images(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonImgStartActionPerformed + + private void comboImgMethodActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboImgMethodActionPerformed + updateControls(); + }//GEN-LAST:event_comboImgMethodActionPerformed + + private void buttonSpecStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSpecStartActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_buttonSpecStartActionPerformed + + private void buttonImgAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonImgAbortActionPerformed + try { + getContext().abort(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonImgAbortActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonDefaultPath; + private javax.swing.JButton buttonImgAbort; + private javax.swing.JButton buttonImgStart; + private javax.swing.JButton buttonSetPath; + private javax.swing.JButton buttonSetSeq; + private javax.swing.JButton buttonSpecAbort; + private javax.swing.JButton buttonSpecStart; + private javax.swing.JButton buttonUndoPath; + private javax.swing.JButton buttonUndoSeq; + private javax.swing.JCheckBox checImgAsSeq; + private javax.swing.JCheckBox checkImgAutosave; + private javax.swing.JCheckBox checkSpecSaveImages; + private javax.swing.JCheckBox checkSpecSaveSpectrum; + private javax.swing.JCheckBox checkSpecSwitchPol; + private javax.swing.JCheckBox checkSpecWithI0; + private javax.swing.JComboBox comboID; + private javax.swing.JComboBox comboImgMethod; + private javax.swing.JComboBox comboImgPol1; + private javax.swing.JComboBox comboImgPol2; + private javax.swing.JComboBox comboPol1; + private javax.swing.JComboBox comboPol2; + private javax.swing.JComboBox comboSwitch; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel10; + private javax.swing.JLabel jLabel11; + private javax.swing.JLabel jLabel12; + private javax.swing.JLabel jLabel13; + private javax.swing.JLabel jLabel14; + private javax.swing.JLabel jLabel15; + private javax.swing.JLabel jLabel16; + private javax.swing.JLabel jLabel17; + private javax.swing.JLabel jLabel18; + private javax.swing.JLabel jLabel19; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel20; + private javax.swing.JLabel jLabel21; + private javax.swing.JLabel jLabel22; + private javax.swing.JLabel jLabel23; + private javax.swing.JLabel jLabel24; + private javax.swing.JLabel jLabel25; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel6; + private javax.swing.JLabel jLabel7; + private javax.swing.JLabel jLabel8; + private javax.swing.JLabel jLabel9; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel10; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel3; + private javax.swing.JPanel jPanel7; + private javax.swing.JPanel jPanel8; + private javax.swing.JPanel jPanel9; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JLabel labelSwitching; + private javax.swing.JPanel panelBeamline; + private javax.swing.JPanel panelDataFile; + private javax.swing.JPanel panelImgControls; + private javax.swing.JPanel panelSpectrum; + private javax.swing.JSpinner spinnerAlp1; + private javax.swing.JSpinner spinnerAlp2; + private javax.swing.JSpinner spinnerHar1; + private javax.swing.JSpinner spinnerHar2; + private javax.swing.JSpinner spinnerImgAvg1; + private javax.swing.JSpinner spinnerImgAvg2; + private javax.swing.JSpinner spinnerImgContrast; + private javax.swing.JSpinner spinnerImgEng1; + private javax.swing.JSpinner spinnerImgEng2; + private javax.swing.JSpinner spinnerImgExp1; + private javax.swing.JSpinner spinnerImgExp2; + private javax.swing.JSpinner spinnerImgMeasurements; + private javax.swing.JSpinner spinnerOff1; + private javax.swing.JSpinner spinnerOff2; + private javax.swing.JSpinner spinnerSeq; + private javax.swing.JSpinner spinnerSpecAvg; + private javax.swing.JSpinner spinnerSpecExp; + private javax.swing.JSpinner spinnerSpecScans; + private javax.swing.JTextField textDataPath; + // End of variables declaration//GEN-END:variables +}