import ch.psi.pshell.core.Context; import ch.psi.pshell.imaging.Overlay; import ch.psi.pshell.imaging.Overlays.Rect; import ch.psi.pshell.imaging.Pen; import ch.psi.pshell.imaging.Renderer; import ch.psi.pshell.imaging.RendererListener; import ch.psi.pshell.ui.App; import ch.psi.pshell.ui.Panel; import ch.psi.utils.Arr; import ch.psi.utils.IO; import ch.psi.utils.Serializer; import ch.psi.utils.State; import ch.psi.utils.Str; import ch.psi.utils.swing.SwingUtils; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.script.ScriptException; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JToggleButton; import javax.swing.SwingUtilities; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.DefaultTableModel; /** * */ public class DataAcquisition extends Panel { public enum Switching { Normal, Tune_Detune } public enum Sequence { A, B } public enum SingleSwitching { Normal } public enum ImgMethod { Two_Pol, Two_Energies, Take_Image } static String DEFAULT_PATH = "{data}/{year}_{month}/{date}_{seq}%03d"; final String ABSORTION_SPECTRUM_PATH = getContext().getSetup().getConfigPath() + "/AbsortionSpectrum"; final String ABSORTION_SPECTRUM_EXT = "abs"; final String ROIS_PATH = getContext().getSetup().getConfigPath() + "/ROIs"; final String ROIS_EXT = "roi"; final Component[] parameterControls; final ArrayList rois = new ArrayList<>(); final DefaultTableModel modelRegions; final DefaultTableModel modelRois; public DataAcquisition() { initComponents(); SwingUtils.setEnumCombo(comboSwitch, Switching.class, true); comboSwitch.setSelectedIndex(1); SwingUtils.setEnumCombo(comboSeq, Sequence.class, true); comboSeq.setSelectedIndex(0); SwingUtils.setEnumCombo(comboImgMethod, ImgMethod.class, true); Component[] parameterControls = new Component[0]; for (JPanel panel : new JPanel[]{panelImgControls, panelSpectrum, panelParameters1}) { for (Class cls : new Class[]{JComboBox.class, JSpinner.class, JToggleButton.class}) { parameterControls = Arr.append(parameterControls, SwingUtils.getComponentsByType(panel, cls)); } } parameterControls = Arr.append(parameterControls, SwingUtils.getComponentsByType(panelRoi, JButton.class)); this.parameterControls = parameterControls; setPersistedComponents(parameterControls); rendererRoi.addListener(new RendererListener() { public void onMoveFinished(Renderer renderer, Overlay overlay) { if (rois.contains(overlay)) { updateRoiList(); } } @Override public void onDeleted(Renderer renderer, Overlay overlay) { if (rois.contains(overlay)) { rois.remove(overlay); updateRoiList(); } } }); DefaultTableModel model = (DefaultTableModel) tableRoi.getModel(); model.addTableModelListener(new TableModelListener() { boolean processingUpdate; @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); if ((tableRoi.isEditing()) && (e.getType() == TableModelEvent.UPDATE) && !processingUpdate) { processingUpdate = true; try { rois.get(row).update(new Point((Integer) model.getValueAt(row, 1), (Integer) model.getValueAt(row, 2)), new Dimension((Integer) model.getValueAt(row, 3), (Integer) model.getValueAt(row, 4))); rendererRoi.refresh(); } catch (Exception ex) { showException(ex); } finally { processingUpdate = false; } } } }); modelRegions = (DefaultTableModel) tableRegions.getModel(); modelRois = (DefaultTableModel) tableRoi.getModel(); new File(ABSORTION_SPECTRUM_PATH).mkdirs(); new File(ROIS_PATH).mkdirs(); imagingRoiOverlay = new Rect(new Pen(Color.GREEN.darker(),0)); imagingRoiOverlay.setSelectable(false); imagingRoiOverlay.setMovable(false); imagingRoiOverlay.setSolid(false); rendererRoi.addOverlay(imagingRoiOverlay); } //Overridable callbacks @Override public void onInitialize(int runCount) { try { textNorm.setText(String.valueOf(getSetting("NORM_FILE"))); removeNorm(); try { spinnerOutliersThreshold.setValue(Integer.valueOf(getSetting("OUTLIERS_THRESHOLD"))); } catch (IOException ex) { spinnerOutliersThreshold.setValue(0); } textOutliersMask.setText(String.valueOf(getSetting("OUTLIERS_MASK_FILE"))); } catch (IOException ex) { showException(ex); } } @Override public void onStateChange(State state, State former) { updateControls(); } @Override public void onExecutedFile(String fileName, Object result) { } @Override protected void onShow() { super.onShow(); new Thread(()->{ String fov=""; try { fov = String.valueOf(eval("microscope.get_preset_label()", true)); } catch (Exception ex) { } String label =fov; SwingUtilities.invokeLater(()->{ textFOV.setText(label); }); }).start(); Rectangle imagingRoi = getImagingRoi(); if (imagingRoi==null){ imagingRoiOverlay.setVisible(false); } else { imagingRoiOverlay.setPosition(imagingRoi.getLocation()); imagingRoiOverlay.setSize(imagingRoi.getSize()); imagingRoiOverlay.setVisible(true); } } Rect imagingRoiOverlay; Rectangle getImagingRoi(){ try{ return (Rectangle) getGlobalVar("IMAGING_ROI"); } catch (Exception ex){ return null; } } //Callback to perform update - in event thread @Override protected void doUpdate() { } void updateControls() { boolean editable = getState().isInitialized() && !getState().isProcessing(); for (Component c : parameterControls) { c.setEnabled(editable); } if (editable) { comboSwitch.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Pol.toString()); comboSeq.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Pol.toString()); } labelImgEng1.setVisible(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies.toString()); labelImgEng2.setVisible(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies.toString()); spinnerImgEng2.setVisible(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies.toString()); spinnerImgEng1.setVisible(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies.toString()); checkSwitchPol.setVisible(comboImgMethod.getSelectedItem() == ImgMethod.Take_Image.toString()); spinnerScans.setVisible(comboImgMethod.getSelectedItem() == ImgMethod.Take_Image.toString()); labelScans.setVisible(comboImgMethod.getSelectedItem() == ImgMethod.Take_Image.toString()); //panelSecondImage.setVisible(comboImgMethod.getSelectedItem() != ImgMethod.Take_Image.toString()); buttonImgStart.setEnabled(getState() == State.Ready); buttonImgAbort.setEnabled(getState().isProcessing()); buttonSpecStart.setEnabled(getState() == State.Ready); buttonSpecAbort.setEnabled(getState().isProcessing()); buttonImgOTFStart.setEnabled(getState() == State.Ready); buttonImgOTFAbort.setEnabled(getState().isProcessing()); /* try { String id = getSetting("ID"); boolean single = !id.equals("ID1_ID2"); if (single != (comboSwitch.getModel().getSize() == 1)) { if (single) { SwingUtils.setEnumCombo(comboSwitch, SingleSwitching.class, true); } else { SwingUtils.setEnumCombo(comboSwitch, Switching.class, true); comboSwitch.setSelectedIndex(1); } } labelID.setText(id); labelID1.setText(id); boolean id1 = !id.equals("ID2"); boolean id2 = !id.equals("ID1"); dvpModeID1a.setVisible(id1); labelModeID1a.setVisible(id1); dvpModeID1b.setVisible(id1); labelModeID1b.setVisible(id1); dvpOffID1a.setVisible(id1); labelOffID1a.setVisible(id1); dvpOffID1b.setVisible(id1); labelOffID1b.setVisible(id1); dvpModeID2a.setVisible(id2); labelModeID2a.setVisible(id2); dvpModeID2b.setVisible(id2); labelModeID2b.setVisible(id2); dvpOffID2a.setVisible(id2); labelOffID2a.setVisible(id2); dvpOffID2b.setVisible(id2); labelOffID2b.setVisible(id2); } catch (Exception ex) { getLogger().log(Level.WARNING, null, ex); } */ try { String setting = getSetting("AVERAGING_DETECTOR"); boolean det = setting.equalsIgnoreCase("true"); radioAvDetector.setSelected(det); radioAvPshell.setSelected(!det); } catch (Exception ex) { getLogger().log(Level.WARNING, null, ex); } } void updateRoiList() { DefaultTableModel model = (DefaultTableModel) tableRoi.getModel(); model.setRowCount(rois.size()); for (int i = 0; i < rois.size(); i++) { model.setValueAt("ROI" + (i + 1), i, 0); model.setValueAt(rois.get(i).getPosition().x, i, 1); model.setValueAt(rois.get(i).getPosition().y, i, 2); model.setValueAt(rois.get(i).getWidth(), i, 3); model.setValueAt(rois.get(i).getHeight(), i, 4); } Map> roi_dict = getRois(); setGlobalVar("DAQ_PANEL_ROIS", roi_dict); } void addRoi(Rect roi) { roi.setPen(new Pen(rendererRoi.getPenSelectedOverlay().getColor())); roi.setSelectable(true); roi.setMovable(true); roi.setSolid(true); rendererRoi.addOverlay(roi); rois.add(roi); updateRoiList(); } void addRoi() { final Rect selection = new Rect(rendererRoi.getPenMovingOverlay()); rendererRoi.addListener(new RendererListener() { @Override public void onSelectionFinished(Renderer renderer, Overlay overlay) { try { if (overlay.getLength() > 0) { Rect roi = (Rect) overlay.copy(); addRoi(roi); } } catch (Exception ex) { } finally { renderer.removeListener(this); } } @Override public void onSelectionAborted(Renderer renderer, Overlay overlay) { renderer.removeListener(this); } }); //selection.setFixed(true); selection.setPassive(false); rendererRoi.startSelection(selection); } void removeRoi() { for (Rect rect : rois) { if (rendererRoi.getSelectedOverlay() == rect) { rendererRoi.removeOverlay(rect); rois.remove(rect); updateRoiList(); break; } } rendererRoi.abortSelection(); } void clearRois() { rendererRoi.removeOverlays(rois.toArray(new Overlay[0])); rois.clear(); updateRoiList(); rendererRoi.abortSelection(); } void run2Images() throws Context.ContextStateException { HashMap args = new HashMap(); args.put("METHOD", comboImgMethod.getSelectedItem()); args.put("SWITCHING", comboSwitch.getSelectedItem()); args.put("SEQUENCE", comboSeq.getSelectedItem()); args.put("MEASUREMENTS", spinnerImgMeasurements.getValue()); args.put("AUTO_SAVE", checkImgAutosave.isSelected()); args.put("DRIFT_CORRECTION", checkDriftCorrection.isSelected()); args.put("EXPOSURE", spinnerImgExp.getValue()); args.put("AVERAGE", spinnerImgAvg.getValue()); args.put("ENERGY_1", spinnerImgEng1.getValue()); args.put("ENERGY_2", spinnerImgEng2.getValue()); args.put("SWITCH_POL", checkSwitchPol.isSelected()); args.put("NUMBER_SCANS", (comboImgMethod.getSelectedItem() == ImgMethod.Take_Image.toString()) ? ((Integer)spinnerScans.getValue()) : 1 ); runAsync("templates/Eiger2Img", args).handle((ret, t) -> { if ((t != null) && (!getContext().isAborted())) { showException((Exception) t); } return t; }); } Map> getRois(){ Map> roi = new HashMap<>(); for (int i = 0; i < rois.size(); i++) { roi.put("Region" + (i + 1), Arrays.asList(new Integer[]{rois.get(i).getPosition().x, rois.get(i).getPosition().y, rois.get(i).getSize().width, rois.get(i).getSize().height})); } return roi; } List getRanges(){ List ranges = new ArrayList(); for (int i = 0; i < modelRegions.getRowCount(); i++) { List row = new ArrayList(); row.add(modelRegions.getValueAt(i, 0)); row.add(modelRegions.getValueAt(i, 1)); row.add(modelRegions.getValueAt(i, 2)); ranges.add(row); } return ranges; } void runAbsSpectrum() throws Context.ContextStateException { HashMap args = new HashMap(); args.put("SAVE_SPECTRUM", checkSpecSaveSpectrum.isSelected()); args.put("SAVE_IMAGES", checkSpecSaveImages.isSelected()); args.put("DRIFT_CORRECTION", checkDriftCorrectionSpec.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()); args.put("RANGES", getRanges()); args.put("ROI", getRois()); runAsync("templates/EigerAbsSpec", args).handle((ret, t) -> { if ((t != null) && (!getContext().isAborted())) { showException((Exception) t); } return t; }); } void removeNorm() { try { JDialog dlg = App.getInstance().getDevicePanelManager().getPanelDialog("norm"); if (dlg != null) { dlg.dispose(); } removeDevice(this.getDevice("norm"), true); if (buttonShowNorm.isSelected()) { buttonShowNorm.setSelected(false); buttonShowNorm.setText("Show"); } } catch (Exception ex) { ex.printStackTrace(); } } void enableNorm(boolean enabled) throws Context.ContextStateException { if (!enabled) { removeNorm(); } else { runAsync("devices/norm", null).handle((ret, t) -> { if ((t != null) && (!getContext().isAborted())) { showException((Exception) t); } JDialog dlg = App.getInstance().getDevicePanelManager().getPanelDialog("norm"); if (dlg != null) { dlg.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { dlg.removeWindowListener(this); removeNorm(); } }); } return t; }); } } void assertIOCReady() throws Exception { if (getDevice("data").getState()!=State.Ready){ throw new Exception("OTF IOC is not running! Go to Launcher -> XMCD -> OTF new."); } } void runImageOTF() throws Exception { assertIOCReady(); HashMap args = new HashMap(); Double e1 = (Double) spinnerE1.getValue(); Double e2 = (Double) spinnerE2.getValue(); args.put("E1", e1); args.put("E2", e2); args.put("TIME", (Double) spinnerTime.getValue()); args.put("DELAY", (Double) spinnerDelay.getValue()); String file = getContext().getSetup().expandPath("ImageOTF"); args.put("FILE", file); String folder = getContext().getSetup().expandPath("{year}_{month}/{date}"); args.put("FOLDER", folder); args.put("ROI", getRois()); args.put("EXPOSURE", spinnerImgOTFExp.getValue()); args.put("SAVE_IMAGES", checkImgOTFSaveImages.isSelected()); buttonImgOTFAbort.setEnabled(true); runAsync("templates/EnergyScan_img", args).handle((ok, ex) -> { try { buttonImgOTFAbort.setEnabled(false); if (ex != null) { throw ex; } else { } } catch (Throwable t) { getLogger().log(Level.WARNING, null, ex); //showException((Exception)ex); } return ok; }); } @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel1 = new javax.swing.JPanel(); panelNorm = new javax.swing.JPanel(); buttonSetNorm = new javax.swing.JButton(); textNorm = new javax.swing.JTextField(); jLabel29 = new javax.swing.JLabel(); buttonShowNorm = new javax.swing.JToggleButton(); panelNorm1 = new javax.swing.JPanel(); textSelectOutliersMask = new javax.swing.JButton(); textOutliersMask = new javax.swing.JTextField(); jLabel30 = new javax.swing.JLabel(); jLabel31 = new javax.swing.JLabel(); textClearOutliersMask = new javax.swing.JButton(); spinnerOutliersThreshold = new javax.swing.JSpinner(); panelNorm2 = new javax.swing.JPanel(); radioAvDetector = new javax.swing.JRadioButton(); radioAvPshell = new javax.swing.JRadioButton(); panelRoi = new javax.swing.JPanel(); rendererRoi = new ch.psi.pshell.imaging.Renderer(); jLabel26 = new javax.swing.JLabel(); buttonRoiAdd = new javax.swing.JButton(); buttonRoiRemove = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); tableRoi = new javax.swing.JTable(); buttonRoiClear = new javax.swing.JButton(); buttonRoiSave = new javax.swing.JButton(); buttonRoiOpen = new javax.swing.JButton(); textFOV = new javax.swing.JTextField(); jLabel7 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); buttonImgStart = new javax.swing.JButton(); buttonImgAbort = new javax.swing.JButton(); panelImgControls = new javax.swing.JPanel(); jPanel5 = new javax.swing.JPanel(); checkImgAutosave = new javax.swing.JCheckBox(); jLabel20 = new javax.swing.JLabel(); jLabel21 = new javax.swing.JLabel(); labelSwitching = new javax.swing.JLabel(); comboSwitch = new javax.swing.JComboBox<>(); spinnerImgMeasurements = new javax.swing.JSpinner(); comboImgMethod = new javax.swing.JComboBox<>(); jLabel4 = new javax.swing.JLabel(); spinnerImgExp = new javax.swing.JSpinner(); jLabel9 = new javax.swing.JLabel(); spinnerImgAvg = new javax.swing.JSpinner(); labelImgEng2 = new javax.swing.JLabel(); spinnerImgEng1 = new javax.swing.JSpinner(); spinnerImgEng2 = new javax.swing.JSpinner(); labelImgEng1 = new javax.swing.JLabel(); labelSwitching1 = new javax.swing.JLabel(); comboSeq = new javax.swing.JComboBox<>(); checkSwitchPol = new javax.swing.JCheckBox(); labelScans = new javax.swing.JLabel(); spinnerScans = new javax.swing.JSpinner(); checkDriftCorrection = new javax.swing.JCheckBox(); 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(); jPanel4 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); tableRegions = new javax.swing.JTable(); buttonAdd = new javax.swing.JButton(); buttonRemove = new javax.swing.JButton(); buttonOpen = new javax.swing.JButton(); buttonSave = new javax.swing.JButton(); buttonClear = new javax.swing.JButton(); buttonSpecStart = new javax.swing.JButton(); buttonSpecAbort = new javax.swing.JButton(); checkDriftCorrectionSpec = new javax.swing.JCheckBox(); jPanel6 = new javax.swing.JPanel(); panelParameters1 = new javax.swing.JPanel(); jLabel6 = new javax.swing.JLabel(); spinnerE1 = new javax.swing.JSpinner(); jLabel8 = new javax.swing.JLabel(); spinnerE2 = new javax.swing.JSpinner(); jLabel10 = new javax.swing.JLabel(); spinnerTime = new javax.swing.JSpinner(); jLabel11 = new javax.swing.JLabel(); spinnerDelay = new javax.swing.JSpinner(); checkImgOTFSaveImages = new javax.swing.JCheckBox(); jLabel28 = new javax.swing.JLabel(); spinnerImgOTFExp = new javax.swing.JSpinner(); buttonImgOTFStart = new javax.swing.JButton(); buttonImgOTFAbort = new javax.swing.JButton(); deviceStatePanel1 = new ch.psi.pshell.swing.DeviceStatePanel(); panelNorm.setBorder(javax.swing.BorderFactory.createTitledBorder("Normalization")); buttonSetNorm.setText("Select"); buttonSetNorm.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSetNormActionPerformed(evt); } }); textNorm.setEditable(false); textNorm.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { textNormKeyTyped(evt); } public void keyReleased(java.awt.event.KeyEvent evt) { textNormKeyReleased(evt); } }); jLabel29.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel29.setText("File: "); buttonShowNorm.setText("Show"); buttonShowNorm.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonShowNormActionPerformed(evt); } }); javax.swing.GroupLayout panelNormLayout = new javax.swing.GroupLayout(panelNorm); panelNorm.setLayout(panelNormLayout); panelNormLayout.setHorizontalGroup( panelNormLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNormLayout.createSequentialGroup() .addContainerGap() .addComponent(buttonShowNorm) .addGap(18, 18, 18) .addComponent(jLabel29) .addGap(0, 0, 0) .addComponent(textNorm, javax.swing.GroupLayout.DEFAULT_SIZE, 600, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonSetNorm) .addContainerGap()) ); panelNormLayout.setVerticalGroup( panelNormLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNormLayout.createSequentialGroup() .addContainerGap() .addGroup(panelNormLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel29) .addComponent(textNorm, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonSetNorm) .addComponent(buttonShowNorm)) .addContainerGap()) ); panelNorm1.setBorder(javax.swing.BorderFactory.createTitledBorder("Outliers")); textSelectOutliersMask.setText("Select"); textSelectOutliersMask.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { textSelectOutliersMaskActionPerformed(evt); } }); textOutliersMask.setEditable(false); textOutliersMask.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { textOutliersMaskKeyTyped(evt); } public void keyReleased(java.awt.event.KeyEvent evt) { textOutliersMaskKeyReleased(evt); } }); jLabel30.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel30.setText("Mask File:"); jLabel31.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel31.setText("Threshold:"); textClearOutliersMask.setText("Clear"); textClearOutliersMask.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { textClearOutliersMaskActionPerformed(evt); } }); spinnerOutliersThreshold.setModel(new javax.swing.SpinnerNumberModel(Long.valueOf(0L), Long.valueOf(0L), Long.valueOf(1000000000000L), Long.valueOf(1L))); spinnerOutliersThreshold.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerOutliersThresholdStateChanged(evt); } }); javax.swing.GroupLayout panelNorm1Layout = new javax.swing.GroupLayout(panelNorm1); panelNorm1.setLayout(panelNorm1Layout); panelNorm1Layout.setHorizontalGroup( panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm1Layout.createSequentialGroup() .addContainerGap() .addGroup(panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm1Layout.createSequentialGroup() .addComponent(jLabel30) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textOutliersMask) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textClearOutliersMask) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textSelectOutliersMask)) .addGroup(panelNorm1Layout.createSequentialGroup() .addComponent(jLabel31) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerOutliersThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 490, Short.MAX_VALUE))) .addContainerGap()) ); panelNorm1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel30, jLabel31}); panelNorm1Layout.setVerticalGroup( panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm1Layout.createSequentialGroup() .addContainerGap() .addGroup(panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel30) .addComponent(textOutliersMask, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textSelectOutliersMask) .addComponent(textClearOutliersMask)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel31) .addComponent(spinnerOutliersThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); panelNorm2.setBorder(javax.swing.BorderFactory.createTitledBorder("Averaging")); buttonGroup1.add(radioAvDetector); radioAvDetector.setText("Detector"); radioAvDetector.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioAvDetectorActionPerformed(evt); } }); buttonGroup1.add(radioAvPshell); radioAvPshell.setSelected(true); radioAvPshell.setText("PShell"); radioAvPshell.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioAvPshellActionPerformed(evt); } }); javax.swing.GroupLayout panelNorm2Layout = new javax.swing.GroupLayout(panelNorm2); panelNorm2.setLayout(panelNorm2Layout); panelNorm2Layout.setHorizontalGroup( panelNorm2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm2Layout.createSequentialGroup() .addContainerGap() .addGroup(panelNorm2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(radioAvDetector) .addComponent(radioAvPshell)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelNorm2Layout.setVerticalGroup( panelNorm2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm2Layout.createSequentialGroup() .addContainerGap() .addComponent(radioAvDetector) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(radioAvPshell) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); 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(panelNorm, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelNorm1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelNorm2, 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() .addContainerGap() .addComponent(panelNorm, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelNorm2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelNorm1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(300, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Detector", jPanel1); rendererRoi.setDeviceName("image"); rendererRoi.setMode(ch.psi.pshell.imaging.RendererMode.Stretch); rendererRoi.setShowStatus(false); jLabel26.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel26.setText("ROIs:"); buttonRoiAdd.setText("Add"); buttonRoiAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRoiAddActionPerformed(evt); } }); buttonRoiRemove.setText("Remove"); buttonRoiRemove.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRoiRemoveActionPerformed(evt); } }); tableRoi.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Name", "X", "Y", "W", "H" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class }; boolean[] canEdit = new boolean [] { false, true, true, true, true }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableRoi.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(tableRoi); buttonRoiClear.setText("Clear"); buttonRoiClear.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRoiClearActionPerformed(evt); } }); buttonRoiSave.setText("Save"); buttonRoiSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRoiSaveActionPerformed(evt); } }); buttonRoiOpen.setText("Open"); buttonRoiOpen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRoiOpenActionPerformed(evt); } }); textFOV.setHorizontalAlignment(javax.swing.JTextField.CENTER); textFOV.setDisabledTextColor(new java.awt.Color(0, 0, 0)); textFOV.setEnabled(false); jLabel7.setText("FOV:"); javax.swing.GroupLayout panelRoiLayout = new javax.swing.GroupLayout(panelRoi); panelRoi.setLayout(panelRoiLayout); panelRoiLayout.setHorizontalGroup( panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRoiLayout.createSequentialGroup() .addGap(17, 17, 17) .addComponent(rendererRoi, javax.swing.GroupLayout.DEFAULT_SIZE, 585, Short.MAX_VALUE) .addGap(18, 18, 18) .addGroup(panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) .addComponent(buttonRoiRemove, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) .addComponent(buttonRoiAdd, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) .addComponent(jLabel26) .addComponent(buttonRoiClear, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonRoiOpen, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonRoiSave, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(panelRoiLayout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textFOV, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(13, 13, 13)) ); panelRoiLayout.setVerticalGroup( panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRoiLayout.createSequentialGroup() .addContainerGap() .addGroup(panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(rendererRoi, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(panelRoiLayout.createSequentialGroup() .addComponent(buttonRoiAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonRoiRemove, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(textFOV, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel26) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE) .addGap(18, 18, 18) .addComponent(buttonRoiClear, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonRoiOpen, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonRoiSave, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); jTabbedPane1.addTab("ROIs", panelRoi); 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); } }); panelImgControls.setBorder(javax.swing.BorderFactory.createTitledBorder("Parameters")); checkImgAutosave.setSelected(true); checkImgAutosave.setText("Autosave"); checkImgAutosave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { checkImgAutosaveActionPerformed(evt); } }); jLabel20.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel20.setText("Measurements:"); jLabel21.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel21.setText("Method:"); labelSwitching.setText("Switching:"); comboSwitch.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); spinnerImgMeasurements.setModel(new javax.swing.SpinnerNumberModel(20, 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); } }); jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel4.setText("Exposure(s):"); spinnerImgExp.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel9.setText("Average:"); spinnerImgAvg.setModel(new javax.swing.SpinnerNumberModel(10, 1, 1000, 1)); labelImgEng2.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); labelImgEng2.setText("Energy 1:"); spinnerImgEng1.setModel(new javax.swing.SpinnerNumberModel(1000.0d, 90.0d, 2000.0d, 1.0d)); spinnerImgEng2.setModel(new javax.swing.SpinnerNumberModel(1000.0d, 90.0d, 2000.0d, 1.0d)); labelImgEng1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); labelImgEng1.setText("Energy 2:"); labelSwitching1.setText("Sequence:"); comboSeq.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); checkSwitchPol.setText("Switch pol after scan"); labelScans.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); labelScans.setText("Scans:"); spinnerScans.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); checkDriftCorrection.setText("Drift correction"); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel21, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(labelSwitching, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(labelSwitching1, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(comboImgMethod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(comboSwitch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(comboSeq, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(checkImgAutosave, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 88, Short.MAX_VALUE) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel20, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(labelScans, javax.swing.GroupLayout.Alignment.TRAILING))) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(checkDriftCorrection, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerImgAvg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(checkSwitchPol) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerImgExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerImgMeasurements, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 88, Short.MAX_VALUE) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(labelImgEng1, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(labelImgEng2, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerImgEng1, 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))) .addComponent(spinnerScans, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(79, Short.MAX_VALUE)) ); jPanel5Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerImgAvg, spinnerImgEng1, spinnerImgEng2, spinnerImgExp, spinnerImgMeasurements, spinnerScans}); jPanel5Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {checkImgAutosave, comboImgMethod, comboSeq, comboSwitch}); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(jLabel21) .addComponent(comboImgMethod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel20) .addComponent(spinnerImgMeasurements, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(labelImgEng2) .addComponent(spinnerImgEng1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(labelSwitching) .addComponent(comboSwitch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4) .addComponent(spinnerImgExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(labelImgEng1) .addComponent(spinnerImgEng2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(labelSwitching1) .addComponent(comboSeq, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel9) .addComponent(spinnerImgAvg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(labelScans) .addComponent(spinnerScans, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(checkSwitchPol)) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(checkImgAutosave) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(checkDriftCorrection))) .addContainerGap()) ); jPanel5Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {comboImgMethod, comboSeq, comboSwitch}); jPanel5Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {spinnerImgAvg, spinnerImgExp, spinnerImgMeasurements, spinnerScans}); 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() .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); panelImgControlsLayout.setVerticalGroup( panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelImgControlsLayout.createSequentialGroup() .addContainerGap() .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(19, Short.MAX_VALUE)) ); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panelImgControls, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonImgStart) .addGap(76, 76, 76) .addComponent(buttonImgAbort) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonImgAbort, buttonImgStart}); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(panelImgControls, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(30, 30, 30) .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); panelSpectrum.setBorder(javax.swing.BorderFactory.createTitledBorder("Parameters")); jLabel23.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel23.setText("Exposure(s):"); jLabel24.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel24.setText("Average:"); checkSpecSaveImages.setSelected(true); 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("Scans:"); spinnerSpecExp.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); checkSpecWithI0.setSelected(true); checkSpecWithI0.setText("With I0"); checkSpecWithI0.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { checkSpecWithI0ActionPerformed(evt); } }); checkSpecSaveSpectrum.setSelected(true); checkSpecSaveSpectrum.setText("Save spectrum"); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Ranges")); tableRegions.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Start", "End", "Step" } ) { Class[] types = new Class [] { java.lang.Double.class, java.lang.Double.class, java.lang.Double.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); jScrollPane2.setViewportView(tableRegions); buttonAdd.setText("Add"); buttonAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonAddActionPerformed(evt); } }); buttonRemove.setText("Remove"); buttonRemove.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRemoveActionPerformed(evt); } }); buttonOpen.setText("Open"); buttonOpen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonOpenActionPerformed(evt); } }); buttonSave.setText("Save"); buttonSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSaveActionPerformed(evt); } }); buttonClear.setText("Clear"); buttonClear.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonClearActionPerformed(evt); } }); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 255, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(buttonAdd, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonRemove, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonOpen, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonSave, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonClear, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonAdd, buttonOpen, buttonRemove, buttonSave}); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addContainerGap()) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(buttonAdd) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonRemove) .addGap(18, 18, Short.MAX_VALUE) .addComponent(buttonClear) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonOpen) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonSave) .addGap(21, 21, 21)))) ); buttonSpecStart.setText("Start"); buttonSpecStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSpecStartActionPerformed(evt); } }); buttonSpecAbort.setText("Abort"); buttonSpecAbort.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSpecAbortActionPerformed(evt); } }); checkDriftCorrectionSpec.setText("Drift correction"); 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.LEADING) .addGroup(panelSpectrumLayout.createSequentialGroup() .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(checkSpecSwitchPol) .addComponent(spinnerSpecScans, 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) .addComponent(spinnerSpecExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(panelSpectrumLayout.createSequentialGroup() .addGap(24, 24, 24) .addComponent(buttonSpecStart) .addGap(18, 18, 18) .addComponent(buttonSpecAbort))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(128, Short.MAX_VALUE)) .addGroup(panelSpectrumLayout.createSequentialGroup() .addGap(99, 99, 99) .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(checkSpecSaveSpectrum) .addComponent(checkSpecSaveImages) .addComponent(checkSpecWithI0) .addComponent(checkDriftCorrectionSpec)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelSpectrumLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerSpecAvg, spinnerSpecExp, spinnerSpecScans}); panelSpectrumLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonSpecAbort, buttonSpecStart}); panelSpectrumLayout.setVerticalGroup( panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelSpectrumLayout.createSequentialGroup() .addGap(0, 0, 0) .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelSpectrumLayout.createSequentialGroup() .addComponent(jPanel4, 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(panelSpectrumLayout.createSequentialGroup() .addComponent(checkSpecSaveSpectrum) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(checkSpecSaveImages) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(checkDriftCorrectionSpec) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(checkSpecWithI0) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .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.RELATED) .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.RELATED) .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) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE) .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonSpecStart) .addComponent(buttonSpecAbort)) .addGap(19, 19, 19)))) ); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 84, Short.MAX_VALUE) ); panelParameters1.setBorder(javax.swing.BorderFactory.createTitledBorder("OTF")); jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel6.setText("E start:"); jLabel6.setToolTipText(""); spinnerE1.setModel(new javax.swing.SpinnerNumberModel(680.0d, 0.0d, 9999.0d, 1.0d)); jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel8.setText("E end:"); jLabel8.setToolTipText(""); spinnerE2.setModel(new javax.swing.SpinnerNumberModel(750.0d, 0.0d, 9999.0d, 1.0d)); jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel10.setText("Time(min):"); spinnerTime.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 60.0d, 1.0d)); jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel11.setText("Delay(s):"); spinnerDelay.setModel(new javax.swing.SpinnerNumberModel(0.1d, 0.0d, 600.0d, 1.0d)); checkImgOTFSaveImages.setText("Save images"); jLabel28.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel28.setText("Exposure(s):"); spinnerImgOTFExp.setModel(new javax.swing.SpinnerNumberModel(0.2d, 0.0d, 3600.0d, 1.0d)); buttonImgOTFStart.setText("Start"); buttonImgOTFStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonImgOTFStartActionPerformed(evt); } }); buttonImgOTFAbort.setText("Abort"); buttonImgOTFAbort.setEnabled(false); buttonImgOTFAbort.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonImgOTFAbortActionPerformed(evt); } }); deviceStatePanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("OTF IOC Status")); deviceStatePanel1.setDeviceName("data"); javax.swing.GroupLayout panelParameters1Layout = new javax.swing.GroupLayout(panelParameters1); panelParameters1.setLayout(panelParameters1Layout); panelParameters1Layout.setHorizontalGroup( panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelParameters1Layout.createSequentialGroup() .addContainerGap() .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(panelParameters1Layout.createSequentialGroup() .addComponent(buttonImgOTFStart) .addGap(18, 18, 18) .addComponent(buttonImgOTFAbort)) .addGroup(panelParameters1Layout.createSequentialGroup() .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel10) .addComponent(jLabel6)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerE1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerTime, 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) .addComponent(deviceStatePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 70, Short.MAX_VALUE) .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParameters1Layout.createSequentialGroup() .addComponent(jLabel28) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerImgOTFExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParameters1Layout.createSequentialGroup() .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel11, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerE2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerDelay, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addComponent(checkImgOTFSaveImages, javax.swing.GroupLayout.Alignment.TRAILING)) .addGap(161, 161, 161)) ); panelParameters1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonImgOTFAbort, buttonImgOTFStart}); panelParameters1Layout.setVerticalGroup( panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelParameters1Layout.createSequentialGroup() .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelParameters1Layout.createSequentialGroup() .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(spinnerE1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel8) .addComponent(spinnerE2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(spinnerTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel11) .addComponent(spinnerDelay, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel28) .addComponent(spinnerImgOTFExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(7, 7, 7) .addGroup(panelParameters1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonImgOTFStart) .addComponent(buttonImgOTFAbort) .addComponent(checkImgOTFSaveImages)) .addGap(0, 5, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelParameters1Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(deviceStatePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); 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() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panelSpectrum, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(panelParameters1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(panelSpectrum, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(panelParameters1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 56, Short.MAX_VALUE)) ); 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) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jTabbedPane1) .addGap(0, 0, 0)) ); }// //GEN-END:initComponents 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 try { runAbsSpectrum(); } catch (Exception ex) { showException(ex); } }//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 private void buttonRoiRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRoiRemoveActionPerformed try { removeRoi(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRoiRemoveActionPerformed private void buttonRoiAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRoiAddActionPerformed try { addRoi(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRoiAddActionPerformed private void buttonSpecAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSpecAbortActionPerformed try { getContext().abort(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonSpecAbortActionPerformed private void buttonAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAddActionPerformed try { modelRegions.addRow(new Object[]{Double.NaN, Double.NaN, Double.NaN}); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonAddActionPerformed private void buttonRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRemoveActionPerformed try { int row = tableRegions.getSelectedRow(); if (row >= 0) { modelRegions.removeRow(row); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRemoveActionPerformed private void buttonSetNormActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSetNormActionPerformed try { JFileChooser chooser = new JFileChooser(getContext().getSetup().expandPath(getContext().getConfig().dataPath)); FileNameExtensionFilter filter = new FileNameExtensionFilter("Image File", "tif", "tiff"); chooser.setFileFilter(filter); chooser.setFileHidingEnabled(true); int rVal = chooser.showOpenDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { textNorm.setText(chooser.getSelectedFile().getAbsoluteFile().toString()); this.setSetting("NORM_FILE", textNorm.getText()); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonSetNormActionPerformed private void textNormKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textNormKeyReleased // TODO add your handling code here: }//GEN-LAST:event_textNormKeyReleased private void textNormKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textNormKeyTyped // TODO add your handling code here: }//GEN-LAST:event_textNormKeyTyped private void buttonShowNormActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonShowNormActionPerformed try { this.enableNorm(buttonShowNorm.isSelected()); buttonShowNorm.setText(buttonShowNorm.isSelected() ? "Hide" : "Show"); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonShowNormActionPerformed private void textSelectOutliersMaskActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_textSelectOutliersMaskActionPerformed try { JFileChooser chooser = new JFileChooser(getContext().getSetup().expandPath(getContext().getConfig().dataPath)); FileNameExtensionFilter filter = new FileNameExtensionFilter("Image File", "tif", "tiff"); chooser.setFileFilter(filter); chooser.setFileHidingEnabled(true); int rVal = chooser.showOpenDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { textOutliersMask.setText(chooser.getSelectedFile().getAbsoluteFile().toString()); this.setSetting("OUTLIERS_MASK_FILE", textOutliersMask.getText()); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_textSelectOutliersMaskActionPerformed private void textOutliersMaskKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textOutliersMaskKeyTyped // TODO add your handling code here: }//GEN-LAST:event_textOutliersMaskKeyTyped private void textOutliersMaskKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textOutliersMaskKeyReleased // TODO add your handling code here: }//GEN-LAST:event_textOutliersMaskKeyReleased private void textClearOutliersMaskActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_textClearOutliersMaskActionPerformed try { setSetting("OUTLIERS_MASK_FILE", null); textOutliersMask.setText(""); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_textClearOutliersMaskActionPerformed private void spinnerOutliersThresholdStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerOutliersThresholdStateChanged try { setSetting("OUTLIERS_THRESHOLD", spinnerOutliersThreshold.getValue()); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_spinnerOutliersThresholdStateChanged private void buttonOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonOpenActionPerformed try { JFileChooser chooser = new JFileChooser(ABSORTION_SPECTRUM_PATH); FileNameExtensionFilter filter = new FileNameExtensionFilter("Absortion Spectrum scan definition file", ABSORTION_SPECTRUM_EXT); chooser.setFileFilter(filter); int rVal = chooser.showOpenDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { Object[] obj = (Object[]) Serializer.decode(Files.readAllBytes(chooser.getSelectedFile().toPath()), Serializer.EncoderType.bin); Object[][] table = (Object[][]) obj[0]; modelRegions.setDataVector(table, SwingUtils.getTableColumnNames(tableRegions)); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonOpenActionPerformed private void buttonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSaveActionPerformed try { JFileChooser chooser = new JFileChooser(ABSORTION_SPECTRUM_PATH); FileNameExtensionFilter filter = new FileNameExtensionFilter("Absortion Spectrum scan definition file", ABSORTION_SPECTRUM_EXT); chooser.setFileFilter(filter); int rVal = chooser.showSaveDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { File f = chooser.getSelectedFile(); if (IO.getExtension(f).isEmpty()) { f = new File(f.getPath() + "." + ABSORTION_SPECTRUM_EXT); } Object[] obj = new Object[]{SwingUtils.getTableData(tableRegions)}; Files.write(f.toPath(), Serializer.encode(obj, Serializer.EncoderType.bin)); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonSaveActionPerformed private void buttonClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonClearActionPerformed try { modelRegions.setNumRows(0); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonClearActionPerformed private void buttonRoiClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRoiClearActionPerformed try { clearRois(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRoiClearActionPerformed private void buttonRoiSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRoiSaveActionPerformed try { JFileChooser chooser = new JFileChooser(ROIS_PATH); FileNameExtensionFilter filter = new FileNameExtensionFilter("ROIs definition file", ROIS_EXT); chooser.setFileFilter(filter); int rVal = chooser.showSaveDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { File f = chooser.getSelectedFile(); if (IO.getExtension(f).isEmpty()) { f = new File(f.getPath() + "." + ROIS_EXT); } Object[] obj = new Object[]{SwingUtils.getTableData(tableRoi)}; Files.write(f.toPath(), Serializer.encode(obj, Serializer.EncoderType.bin)); } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRoiSaveActionPerformed private void buttonRoiOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRoiOpenActionPerformed try { JFileChooser chooser = new JFileChooser(ROIS_PATH); FileNameExtensionFilter filter = new FileNameExtensionFilter("ROIs definition file", ROIS_EXT); chooser.setFileFilter(filter); int rVal = chooser.showOpenDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { Object[] obj = (Object[]) Serializer.decode(Files.readAllBytes(chooser.getSelectedFile().toPath()), Serializer.EncoderType.bin); Object[][] table = (Object[][]) obj[0]; clearRois(); for (Object[] row : table) { Point pos = new Point((Integer)row[1], (Integer)row[2]); Dimension size = new Dimension((Integer)row[3], (Integer)row[4]); Rect roi = new Rect(null, pos, size); addRoi(roi); } } } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRoiOpenActionPerformed private void radioAvDetectorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioAvDetectorActionPerformed try { setSetting("AVERAGING_DETECTOR", true); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_radioAvDetectorActionPerformed private void radioAvPshellActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioAvPshellActionPerformed try { setSetting("AVERAGING_DETECTOR", false); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_radioAvPshellActionPerformed private void buttonImgOTFStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonImgOTFStartActionPerformed try { runImageOTF(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonImgOTFStartActionPerformed private void buttonImgOTFAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonImgOTFAbortActionPerformed try { abort(); } catch (InterruptedException ex) { getLogger().log(Level.SEVERE, null, ex); } }//GEN-LAST:event_buttonImgOTFAbortActionPerformed private void checkImgAutosaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkImgAutosaveActionPerformed // TODO add your handling code here: }//GEN-LAST:event_checkImgAutosaveActionPerformed private void checkSpecWithI0ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkSpecWithI0ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_checkSpecWithI0ActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton buttonAdd; private javax.swing.JButton buttonClear; private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JButton buttonImgAbort; private javax.swing.JButton buttonImgOTFAbort; private javax.swing.JButton buttonImgOTFStart; private javax.swing.JButton buttonImgStart; private javax.swing.JButton buttonOpen; private javax.swing.JButton buttonRemove; private javax.swing.JButton buttonRoiAdd; private javax.swing.JButton buttonRoiClear; private javax.swing.JButton buttonRoiOpen; private javax.swing.JButton buttonRoiRemove; private javax.swing.JButton buttonRoiSave; private javax.swing.JButton buttonSave; private javax.swing.JButton buttonSetNorm; private javax.swing.JToggleButton buttonShowNorm; private javax.swing.JButton buttonSpecAbort; private javax.swing.JButton buttonSpecStart; private javax.swing.JCheckBox checkDriftCorrection; private javax.swing.JCheckBox checkDriftCorrectionSpec; private javax.swing.JCheckBox checkImgAutosave; private javax.swing.JCheckBox checkImgOTFSaveImages; private javax.swing.JCheckBox checkSpecSaveImages; private javax.swing.JCheckBox checkSpecSaveSpectrum; private javax.swing.JCheckBox checkSpecSwitchPol; private javax.swing.JCheckBox checkSpecWithI0; private javax.swing.JCheckBox checkSwitchPol; private javax.swing.JComboBox comboImgMethod; private javax.swing.JComboBox comboSeq; private javax.swing.JComboBox comboSwitch; private ch.psi.pshell.swing.DeviceStatePanel deviceStatePanel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel20; private javax.swing.JLabel jLabel21; private javax.swing.JLabel jLabel23; private javax.swing.JLabel jLabel24; private javax.swing.JLabel jLabel25; private javax.swing.JLabel jLabel26; private javax.swing.JLabel jLabel28; private javax.swing.JLabel jLabel29; private javax.swing.JLabel jLabel30; private javax.swing.JLabel jLabel31; private javax.swing.JLabel jLabel4; 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 jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel labelImgEng1; private javax.swing.JLabel labelImgEng2; private javax.swing.JLabel labelScans; private javax.swing.JLabel labelSwitching; private javax.swing.JLabel labelSwitching1; private javax.swing.JPanel panelImgControls; private javax.swing.JPanel panelNorm; private javax.swing.JPanel panelNorm1; private javax.swing.JPanel panelNorm2; private javax.swing.JPanel panelParameters1; private javax.swing.JPanel panelRoi; private javax.swing.JPanel panelSpectrum; private javax.swing.JRadioButton radioAvDetector; private javax.swing.JRadioButton radioAvPshell; private ch.psi.pshell.imaging.Renderer rendererRoi; private javax.swing.JSpinner spinnerDelay; private javax.swing.JSpinner spinnerE1; private javax.swing.JSpinner spinnerE2; private javax.swing.JSpinner spinnerImgAvg; private javax.swing.JSpinner spinnerImgEng1; private javax.swing.JSpinner spinnerImgEng2; private javax.swing.JSpinner spinnerImgExp; private javax.swing.JSpinner spinnerImgMeasurements; private javax.swing.JSpinner spinnerImgOTFExp; private javax.swing.JSpinner spinnerOutliersThreshold; private javax.swing.JSpinner spinnerScans; private javax.swing.JSpinner spinnerSpecAvg; private javax.swing.JSpinner spinnerSpecExp; private javax.swing.JSpinner spinnerSpecScans; private javax.swing.JSpinner spinnerTime; private javax.swing.JTable tableRegions; private javax.swing.JTable tableRoi; private javax.swing.JButton textClearOutliersMask; private javax.swing.JTextField textFOV; private javax.swing.JTextField textNorm; private javax.swing.JTextField textOutliersMask; private javax.swing.JButton textSelectOutliersMask; // End of variables declaration//GEN-END:variables }