From 968ebe08261f96ae96292b9adb129449169d1f51 Mon Sep 17 00:00:00 2001 From: X11MA Date: Fri, 1 Apr 2016 13:36:19 +0200 Subject: [PATCH] Startup --- config/plugins.properties | 2 +- plugins/EnergyScan_TBT.form | 614 +++++++++++++++++++++++++++++++ plugins/EnergyScan_TBT.java | 701 ++++++++++++++++++++++++++++++++++++ script/EnergyScan.py | 2 +- script/EnergyScan_TBT.py | 349 ++++++++++++++++++ script/local.py | 1 + 6 files changed, 1667 insertions(+), 2 deletions(-) create mode 100644 plugins/EnergyScan_TBT.form create mode 100644 plugins/EnergyScan_TBT.java create mode 100644 script/EnergyScan_TBT.py diff --git a/config/plugins.properties b/config/plugins.properties index f263e8f..474ce8e 100644 --- a/config/plugins.properties +++ b/config/plugins.properties @@ -1,4 +1,4 @@ -NewTest.java=disabled +EnergyScan_TBT.java=enabled DelayScan.java=enabled EnergyScan.java=enabled Test.java=disabled diff --git a/plugins/EnergyScan_TBT.form b/plugins/EnergyScan_TBT.form new file mode 100644 index 0000000..4213377 --- /dev/null +++ b/plugins/EnergyScan_TBT.form @@ -0,0 +1,614 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/EnergyScan_TBT.java b/plugins/EnergyScan_TBT.java new file mode 100644 index 0000000..9cb73ee --- /dev/null +++ b/plugins/EnergyScan_TBT.java @@ -0,0 +1,701 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +import java.awt.Component; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.logging.Level; +import javax.swing.JLabel; +import ch.psi.utils.State; +import ch.psi.utils.swing.Editor.EditorDialog; +import ch.psi.pshell.plot.LinePlotBase; +import ch.psi.pshell.plot.LinePlotSeries; +import ch.psi.pshell.plot.Plot; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.swing.DsvEditor; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; +import java.nio.file.Files; +import javax.swing.DefaultComboBoxModel; + +/** + * + */ +public class EnergyScan_TBT extends Panel { + + public EnergyScan_TBT() { + initComponents(); + } + + double energyCache = 0; + boolean restart; + + @Override + public void onInitialize(int runCount) { + super.onInitialize(runCount); + loadConfig(); + } + + @Override + public void onStateChange(State state, State former) { + setEnabled(state == State.Ready); + } + + @Override + public void onExecutedFile(String fileName, Object result) { + } + + boolean otf; + + void stopScan() { + try { + getLogger().info("Stopping scan"); + evalAsync("caput('START', 'STOP')"); + } catch (Exception ex) { + getLogger().log(Level.WARNING, null, ex); + } + } + + Path getConfigFile() { + return Paths.get(getController().getSetup().getConfigPath(), "energy_scan.properties"); + } + + LinePlotBase scanPlot; + LinePlotSeries scanSeries; + + @Override + public void setEnabled(boolean value) { + super.setEnabled(value); + buttonExecute.setEnabled(value); + //buttonPlot.setEnabled(value); + checkParameterControls(); + } + + void checkParameterControls() { + boolean enabled; + enabled = isEnabled(); + for (Component c : panelParameters.getComponents()) { + if (!(c instanceof JLabel)) { + c.setEnabled(enabled); + } + } + for (Component c : panelSetup.getComponents()) { + if (!(c instanceof JLabel)) { + c.setEnabled(enabled); + } + } + + //spinnerAlpha.setEnabled(enabled && comboMode.getSelectedItem().equals("LINEAR")); + } + + double last = 0; + + void run() throws Exception { + HashMap args = new HashMap(); + Double e1 = (Double) spinnerE1.getValue(); + Double e2 = (Double) spinnerE2.getValue(); + args.put("E1", (Double) spinnerE1.getValue()); + args.put("E2", (Double) spinnerE2.getValue()); + args.put("TIME", (Double) spinnerTime.getValue()); + args.put("DELAY", (Double) spinnerDelay.getValue()); + args.put("OFFSET1", (Double) spinnerOffset1.getValue()); + args.put("OFFSET2", (Double) spinnerOffset2.getValue()); + args.put("MAG", (Double) spinnerMag.getValue()); + args.put("RUNTYPE", comboRunType.getSelectedItem().toString()); + args.put("ROUNDS", (Integer) spinnerRounds.getValue()); + args.put("PLOT_TYPE", radioK1.isSelected() ? 1 : 2); + args.put("SET_OFFSETS", jCheckBox1.isSelected() ? 1 : 2); + args.put("ID1", jRadioButton1.isSelected() ? 1 : 2); + args.put("ID2", jRadioButton2.isSelected() ? 1 : 2); + args.put("MCP_1", jCheckBox2.isSelected() ? 1 : 2); + args.put("MCP_2", jCheckBox3.isSelected() ? 1 : 2); + args.put("Cam_start", jSpinner1.getValue()); + args.put("Cam_end", jSpinner2.getValue()); + args.put("Save_array_data", jCheckBox4.isSelected() ? 1 : 2); + + buttonAbort.setEnabled(true); + + runAsync("EnergyScan", args).handle((ok, ex) -> { + try { + buttonAbort.setEnabled(false); + if (ex != null) { + throw ex; + } else { + } + } catch (Throwable t) { + getLogger().log(Level.WARNING, null, ex); + //showException((Exception)ex); + } + return ok; + }); + + if (scanPlot != null) { + scanPlot.getAxis(Plot.AxisId.X).setRange(Math.min(e1, e2), Math.max(e1, e2)); + } + } + + void loadConfig() { + DefaultComboBoxModel model = (DefaultComboBoxModel) comboSetup.getModel(); + model.removeAllElements(); + try { + for (String line : Files.readAllLines(getConfigFile())) { + if ((line != null) && (!line.trim().isEmpty())) { + String[] tokens = line.split("="); + if (tokens.length > 0) { + model.addElement(tokens[0].trim()); + } + } + } + } catch (Exception ex) { + } + } + + void setElement() throws Exception { + String selection = comboSetup.getSelectedItem().toString(); + for (String line : Files.readAllLines(getConfigFile())) { + if ((line != null) && (!line.trim().isEmpty())) { + String[] tokens = line.split("="); + if (tokens.length < 2) { + throw new Exception("Invalid file format"); + } + if (tokens[0].equals(selection)) { + tokens = tokens[1].trim().split(";"); + if (tokens.length < 6) { + throw new Exception("Invalid file format"); + } + spinnerE1.setValue(Double.valueOf(tokens[0].trim())); + spinnerE2.setValue(Double.valueOf(tokens[1].trim())); + spinnerTime.setValue(Double.valueOf(tokens[2].trim())); + spinnerDelay.setValue(Double.valueOf(tokens[3].trim())); + spinnerOffset1.setValue(Double.valueOf(tokens[4].trim())); + spinnerOffset2.setValue(Double.valueOf(tokens[5].trim())); + break; + } + } + } + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonGroupPlot = new javax.swing.ButtonGroup(); + buttonGroup1 = new javax.swing.ButtonGroup(); + panelParameters = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + spinnerE1 = new javax.swing.JSpinner(); + jLabel2 = new javax.swing.JLabel(); + spinnerE2 = new javax.swing.JSpinner(); + jLabel3 = new javax.swing.JLabel(); + spinnerTime = new javax.swing.JSpinner(); + jLabel4 = new javax.swing.JLabel(); + spinnerDelay = new javax.swing.JSpinner(); + jLabel8 = new javax.swing.JLabel(); + spinnerOffset1 = new javax.swing.JSpinner(); + jLabel13 = new javax.swing.JLabel(); + spinnerOffset2 = new javax.swing.JSpinner(); + jLabel11 = new javax.swing.JLabel(); + comboRunType = new javax.swing.JComboBox(); + jLabel5 = new javax.swing.JLabel(); + spinnerRounds = new javax.swing.JSpinner(); + jLabel12 = new javax.swing.JLabel(); + radioK1 = new javax.swing.JRadioButton(); + radioK3 = new javax.swing.JRadioButton(); + spinnerMag = new javax.swing.JSpinner(); + jLabel16 = new javax.swing.JLabel(); + jPanel3 = new javax.swing.JPanel(); + buttonExecute = new javax.swing.JButton(); + buttonAbort = new javax.swing.JButton(); + jCheckBox1 = new javax.swing.JCheckBox(); + jRadioButton2 = new javax.swing.JRadioButton(); + jRadioButton1 = new javax.swing.JRadioButton(); + jRadioButton3 = new javax.swing.JRadioButton(); + jCheckBox2 = new javax.swing.JCheckBox(); + jCheckBox3 = new javax.swing.JCheckBox(); + jLabel6 = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + jSpinner1 = new javax.swing.JSpinner(); + jSpinner2 = new javax.swing.JSpinner(); + jLabel9 = new javax.swing.JLabel(); + jLabel14 = new javax.swing.JLabel(); + jLabel15 = new javax.swing.JLabel(); + jCheckBox4 = new javax.swing.JCheckBox(); + panelSetup = new javax.swing.JPanel(); + comboSetup = new javax.swing.JComboBox(); + buttonConfigure = new javax.swing.JButton(); + jLabel10 = new javax.swing.JLabel(); + + panelParameters.setBorder(javax.swing.BorderFactory.createTitledBorder("Parameters")); + + jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel1.setText("E start:"); + jLabel1.setToolTipText(""); + + spinnerE1.setModel(new javax.swing.SpinnerNumberModel(680.0d, 0.0d, 9999.0d, 1.0d)); + + jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel2.setText("E end:"); + jLabel2.setToolTipText(""); + + spinnerE2.setModel(new javax.swing.SpinnerNumberModel(750.0d, 0.0d, 9999.0d, 1.0d)); + + jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel3.setText("Time(min):"); + + spinnerTime.setModel(new javax.swing.SpinnerNumberModel(2.0d, 0.0d, 60.0d, 1.0d)); + + jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel4.setText("Delay(s):"); + + spinnerDelay.setModel(new javax.swing.SpinnerNumberModel(10.0d, 0.0d, 600.0d, 1.0d)); + + jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel8.setText("Offset1:"); + + spinnerOffset1.setModel(new javax.swing.SpinnerNumberModel(0.0d, -20.0d, 20.0d, 1.0d)); + + jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel13.setText("Offset2:"); + + spinnerOffset2.setModel(new javax.swing.SpinnerNumberModel(0.0d, -20.0d, 20.0d, 1.0d)); + + jLabel11.setText("Run Type:"); + + comboRunType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "+/-", "+", "-", "LH/LV", "LH", "LV", "+--+/+--+" })); + + jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel5.setText("Nb of repetitions"); + jLabel5.setToolTipText(""); + + spinnerRounds.setModel(new javax.swing.SpinnerNumberModel(1, 1, 10, 1)); + + jLabel12.setText("Plot Type:"); + + buttonGroupPlot.add(radioK1); + radioK1.setText("K2 / K1"); + radioK1.setMinimumSize(new java.awt.Dimension(100, 22)); + radioK1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioK1ActionPerformed(evt); + } + }); + + buttonGroupPlot.add(radioK3); + radioK3.setText("K2 / K3"); + + jLabel16.setText("B(T)"); + + javax.swing.GroupLayout panelParametersLayout = new javax.swing.GroupLayout(panelParameters); + panelParameters.setLayout(panelParametersLayout); + panelParametersLayout.setHorizontalGroup( + panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelParametersLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelParametersLayout.createSequentialGroup() + .addComponent(jLabel12) + .addGap(18, 18, 18) + .addComponent(radioK1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(18, 18, 18) + .addComponent(radioK3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(panelParametersLayout.createSequentialGroup() + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelParametersLayout.createSequentialGroup() + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(panelParametersLayout.createSequentialGroup() + .addComponent(jLabel8) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerOffset1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(panelParametersLayout.createSequentialGroup() + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelParametersLayout.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.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(panelParametersLayout.createSequentialGroup() + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelParametersLayout.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(spinnerOffset2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(panelParametersLayout.createSequentialGroup() + .addComponent(jLabel11) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(comboRunType, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerRounds, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(22, 22, 22) + .addComponent(jLabel16) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerMag, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(39, 39, 39)))) + ); + + panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerE1, spinnerTime}); + + panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel2, jLabel4, jLabel8}); + + panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerDelay, spinnerE2, spinnerOffset1, spinnerOffset2, spinnerRounds}); + + panelParametersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {radioK1, radioK3}); + + panelParametersLayout.setVerticalGroup( + panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelParametersLayout.createSequentialGroup() + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(spinnerE1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel2) + .addComponent(spinnerE2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerMag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel16)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(spinnerTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4) + .addComponent(spinnerDelay, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel8) + .addComponent(spinnerOffset1) + .addComponent(jLabel13) + .addComponent(spinnerOffset2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(35, 35, 35) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(comboRunType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel11) + .addComponent(jLabel5) + .addComponent(spinnerRounds, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(20, 20, 20) + .addGroup(panelParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel12) + .addComponent(radioK1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(radioK3)) + .addContainerGap()) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); + + buttonExecute.setText("Start"); + buttonExecute.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonExecuteActionPerformed(evt); + } + }); + + buttonAbort.setText("Abort"); + buttonAbort.setEnabled(false); + buttonAbort.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonAbortActionPerformed(evt); + } + }); + + jCheckBox1.setText("set offsets"); + jCheckBox1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jCheckBox1ActionPerformed(evt); + } + }); + + buttonGroup1.add(jRadioButton2); + jRadioButton2.setText("ID2"); + + buttonGroup1.add(jRadioButton1); + jRadioButton1.setText("ID1"); + + buttonGroup1.add(jRadioButton3); + jRadioButton3.setSelected(true); + jRadioButton3.setText("ID1+ID2"); + + jCheckBox2.setText("Signal channel 0 p/n"); + jCheckBox2.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jCheckBox2ActionPerformed(evt); + } + }); + + jCheckBox3.setText("I_0 channel 2 p/n"); + jCheckBox3.setToolTipText(""); + + jLabel6.setText("ID mode"); + + jLabel7.setText("Data channels"); + + jSpinner1.setModel(new javax.swing.SpinnerNumberModel(0, 0, 1000, 1)); + + jSpinner2.setModel(new javax.swing.SpinnerNumberModel(0, 0, 1000, 1)); + + jLabel9.setText("Signal pos"); + + jLabel14.setText("I_0 pos"); + + jLabel15.setText("Camshaft position"); + + jCheckBox4.setText("Save array data"); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jRadioButton1) + .addComponent(jRadioButton2) + .addComponent(jLabel6)) + .addGap(74, 74, 74) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel7) + .addComponent(jCheckBox3) + .addComponent(jCheckBox2))) + .addGroup(jPanel3Layout.createSequentialGroup() + .addComponent(jRadioButton3) + .addGap(48, 48, 48) + .addComponent(jCheckBox4))) + .addGap(31, 31, 31) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel9) + .addComponent(jLabel14)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(jSpinner1) + .addComponent(jSpinner2)) + .addGap(18, 18, 18) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(buttonExecute, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(buttonAbort, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(jCheckBox1)) + .addComponent(jLabel15)) + .addContainerGap()) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel6) + .addComponent(jLabel7) + .addComponent(jLabel15)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonExecute) + .addComponent(jCheckBox1) + .addComponent(jRadioButton1) + .addComponent(jCheckBox2)) + .addGap(16, 16, 16) + .addComponent(buttonAbort)) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel9)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jSpinner2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel14))))) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGap(60, 60, 60) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jRadioButton2) + .addComponent(jCheckBox3)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jRadioButton3) + .addComponent(jCheckBox4)))) + .addContainerGap(13, Short.MAX_VALUE)) + ); + + panelSetup.setBorder(javax.swing.BorderFactory.createTitledBorder("Setup")); + + comboSetup.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboSetupActionPerformed(evt); + } + }); + + buttonConfigure.setText("Configure"); + buttonConfigure.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonConfigureActionPerformed(evt); + } + }); + + jLabel10.setText("Element:"); + + javax.swing.GroupLayout panelSetupLayout = new javax.swing.GroupLayout(panelSetup); + panelSetup.setLayout(panelSetupLayout); + panelSetupLayout.setHorizontalGroup( + panelSetupLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSetupLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel10) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(comboSetup, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonConfigure) + .addContainerGap()) + ); + panelSetupLayout.setVerticalGroup( + panelSetupLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSetupLayout.createSequentialGroup() + .addGap(4, 4, 4) + .addGroup(panelSetupLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(comboSetup, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel10) + .addComponent(buttonConfigure)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelParameters, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelSetup, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(16, 16, 16) + .addComponent(panelParameters, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(panelSetup, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + ); + }// //GEN-END:initComponents + + private void radioK1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioK1ActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_radioK1ActionPerformed + + private void comboSetupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboSetupActionPerformed + try { + if (comboSetup.getSelectedItem() != null) { + setElement(); + } + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_comboSetupActionPerformed + + private void buttonConfigureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonConfigureActionPerformed + try { + //Desktop.getDesktop().open(getConfigFile().toFile()); + if ((dlgConfig == null) || (!dlgConfig.isShowing())) { + String[] columns = new String[]{"Element", "E1", "E2", "Time", "Delay", "Offset1", "Offset2"}; + Class[] types = new Class[]{String.class, Double.class, Double.class, Double.class, Double.class, Double.class, Double.class}; + DsvEditor editor = new DsvEditor(columns, types, ";"); + dlgConfig = editor.getDialog(getView(), false); + editor.load(getConfigFile().toString()); + editor.setTitle("Energy Scan Configuration"); + dlgConfig.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { + if (System.currentTimeMillis() - new File(dlgConfig.getEditor().getFileName()).lastModified() < 5000) { + loadConfig(); + } + } + }); + } + dlgConfig.setSize(680, 320); + showWindow(dlgConfig); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonConfigureActionPerformed + + private void jCheckBox2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox2ActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_jCheckBox2ActionPerformed + + private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox1ActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_jCheckBox1ActionPerformed + + private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed + abort(); + }//GEN-LAST:event_buttonAbortActionPerformed + + private void buttonExecuteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonExecuteActionPerformed + try { + run(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonExecuteActionPerformed + + EditorDialog dlgConfig; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonAbort; + private javax.swing.JButton buttonConfigure; + private javax.swing.JButton buttonExecute; + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.ButtonGroup buttonGroupPlot; + private javax.swing.JComboBox comboRunType; + private javax.swing.JComboBox comboSetup; + private javax.swing.JCheckBox jCheckBox1; + private javax.swing.JCheckBox jCheckBox2; + private javax.swing.JCheckBox jCheckBox3; + private javax.swing.JCheckBox jCheckBox4; + 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 jLabel2; + 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 jPanel3; + private javax.swing.JRadioButton jRadioButton1; + private javax.swing.JRadioButton jRadioButton2; + private javax.swing.JRadioButton jRadioButton3; + private javax.swing.JSpinner jSpinner1; + private javax.swing.JSpinner jSpinner2; + private javax.swing.JPanel panelParameters; + private javax.swing.JPanel panelSetup; + private javax.swing.JRadioButton radioK1; + private javax.swing.JRadioButton radioK3; + private javax.swing.JSpinner spinnerDelay; + private javax.swing.JSpinner spinnerE1; + private javax.swing.JSpinner spinnerE2; + private javax.swing.JSpinner spinnerMag; + private javax.swing.JSpinner spinnerOffset1; + private javax.swing.JSpinner spinnerOffset2; + private javax.swing.JSpinner spinnerRounds; + private javax.swing.JSpinner spinnerTime; + // End of variables declaration//GEN-END:variables +} diff --git a/script/EnergyScan.py b/script/EnergyScan.py index da82429..eec05d9 100644 --- a/script/EnergyScan.py +++ b/script/EnergyScan.py @@ -237,7 +237,7 @@ else: caput ("X11PHS-E:OPT","PGM+ID1+ID2") number_of_scans = 1 -if RUNTYPE in ["+/-", "+", "-", "+--+/+--+"]: +if RUNTYPE in ["+/-", "+", "-"]: caput(OTF_MODE1,1) # circ + in ID1 caput(OTF_MODE2,2) # circ - in ID2 wait_channel(OTF_DONE, 1, type = 'i') diff --git a/script/EnergyScan_TBT.py b/script/EnergyScan_TBT.py new file mode 100644 index 0000000..5819aaa --- /dev/null +++ b/script/EnergyScan_TBT.py @@ -0,0 +1,349 @@ +import os +import traceback +import thread + +############################PGM+ID1+ID2################################################### + +if str(SET_OFFSETS) == "1": + print "Setting offsets" + if RUNTYPE in ["+/-", "+" , "-", "+--+/+--+"]: + caput(OTF_MODE1,1) # circ + in ID1 + caput(OTF_MODE2,2) # circ - in ID2 + elif RUNTYPE in ["LH/LV", "LH", "LV"]: + caput(OTF_MODE1,0) + caput(OTF_MODE2,0) + wait_channel(OTF_DONE, 1, type = 'i') + caput(OTF_ALPHA1, 0.0) # LH in ID1 + caput(OTF_ALPHA2, 90.0) # LV in ID2 + wait_channel(OTF_DONE, 1, type = 'i') + else: + raise Exception("Invalid run type: " + RUNTYPE) + + caput(OTF_OFF1,OFFSET1) + caput(OTF_OFF2,OFFSET2-40) #detune ID2 + wait_channel(OTF_DONE, 1, type = 'i') + print "Offsets are set" + import sys + sys.exit(0) +else: + print "Running full script" + +file_prefix = time.strftime("%y%m%d") +input_path = "/sls/X11MA/Data1/public/X11MA/temp/"+file_prefix+"/" +output_path = input_path #+file_prefix+"/" #"/sls/X11MA/Data1/public/e10989/"+file_prefix+"/" + + +#Parameters +""" +E1 = 680 +E2 = 750 +TIME = 2 #min +DELAY = 10.0 #s +OFFSET1 = 1.0 #eV +OFFSET2 = -1.0 #eV +MAG = 1 T +PREFIX = 'Data' +RUNTYPE = "+/-" +ROUNDS = 1 +PLOT_TYPE = 1 +""" +print "\nStarting energy scan - Parameters: ", +print E1,E2,TIME,DELAY,OFFSET1,OFFSET2,RUNTYPE#,ALPHA1,ALPHA2 + + +############################################################################### +# Plotting +############################################################################### + +task = None +running = False +MCP1 = [] +MCP2 = [] + +def _startPlot(type): + global running + sep = "\t" + line_sep = "\r\n" + print "Starting plot: type " + str(type) + running = True + p = plot(None,name="Energy")[0] + s = p.getSeries(0) + cur = 0 + time.sleep(3.0) + while running: + try: + if otf_start.read() == 0: + break + e = energy.read() + if (MCP_1 == 1 or MCP_2 == 1): + aK1=keithley_1a.read() + #aP=FillingPattern.read() + #aPr = [] + #for z in aP: + # aPr.append(z) + aPr = FillingPattern.read().tolist() + SumaP=0 + CamaP=0 + for z in xrange(0,480): + SumaP = SumaP + aPr[z] + for z in xrange(460,470): + CamaP = CamaP + aPr[z] + aK1norm = aK1 * CamaP / SumaP + if MCP_1 == 1: + #a1=MCPArray1.read() + #a1r = [] + #for i in a1: + # a1r.append(i) + a1r = MCPArray1.read().tolist() + Sum1a1 = 0 + Cam1a1 = 0 + Sum2a1 = 0 + Cam2a1 = 0 + MCP1.append(line_sep) + MCP1.append(e) + for i in xrange(0,480): + Sum1a1 = Sum1a1 + a1r[i] + #for i in xrange(Cam_start,Cam_end+1): + # Cam1a1 = Cam1a1 + a1r[i] + Cam1a1 = a1r[Cam_start] + + MCP1.append(Sum1a1) + MCP1.append(Cam1a1) + MCP1.append(aK1norm) + + if NrCounters.read() > 460: + for i in xrange(480,960): + Sum2a1 = Sum2a1 + a1r[i] + #for i in xrange(Cam_start+480,Cam_end+481): + # Cam2a1 = Cam2a1 + a1r[i] + Cam2a1 = a1r[Cam_start+480] + MCP1.append(Sum2a1) + MCP1.append(Cam2a1) + if Save_array_data == 1: + MCP1.append(a1r) + if MCP_2 == 1: + #a2=MCPArray2.read() + #a2r = [] + #for j in a2: + # a2r.append(j) + a2r = MCPArray2.read().tolist() + Sum1a2 = 0 + Cam1a2 = 0 + Sum2a2 = 0 + Cam2a2 = 0 + MCP2.append(line_sep) + MCP2.append(e) + for j in xrange(0,480): + Sum1a2 = Sum1a2 + a2r[j] + #for j in xrange(Cam_start,Cam_end+1): + # Cam1a2 = Cam1a2 + a2r[j] + Cam1a2 = a2r[Cam_end] + + MCP2.append(Sum1a2) + MCP2.append(Cam1a2) + MCP2.append(aK1norm) + if NrCounters.read() > 460: + for j in xrange(480,960): + Sum2a2 = Sum2a2 + a2r[j] + #for j in xrange(Cam_start+480,Cam_end+481): + # Cam2a2 = Cam2a2 + a2r[j] + Cam2a2 = a2r[Cam_end+481] + MCP2.append(Sum2a2) + MCP2.append(Cam2a2) + if Save_array_data == 1: + MCP2.append(a2r) + time.sleep(SamplingTime.read()*0.001) + if (abs(e-cur)) > 0.1: + v = abs((keithley_2a.read() / ((keithley_1a if (type==1) else keithley_3a).read() ))) + s.appendData(e,v) + cur = e + # time.sleep(0.2) + except: + pass + print "Done Plotting" + if MCP_1 == 1: + output_file_MCP1 = output_path+"MCP_1_"+file_prefix+"_" + suffix + ".dat" + MCP1out = open(output_file_MCP1, "a+") + sMCP1 = sep.join(str(x) for x in MCP1) + line_sep # MCP1.write("%s" + sep % i) + sMCP1out = sep + "rbkenergy" + sep + "Sum1" + sep + "Cam1" + sep + "Keithley1_norm" + if NrCounters.read() > 460: + sMCP1out = sMCP1out + sep + "Sum2" + sep + "Cam2" + if Save_array_data == 1: + sMCP1out = sMCP1out + sep + "Array" + sMCP1out = sMCP1out + line_sep + sMCP1 + MCP1out.write(sMCP1out) + MCP1out.close() + print "Saved MCP signal data" + if MCP_2 == 1: + output_file_MCP2 = output_path+"MCP_2_"+file_prefix+"_" + suffix + ".dat" + MCP2out = open(output_file_MCP2, "a+") + sMCP2 = sep.join(str(y) for y in MCP2) + line_sep + sMCP2out = sep + "rbkenergy" + sep + "Sum1" + sep + "Cam1" + sep + "Keithley1_norm" + if NrCounters.read() > 460: + sMCP2out = sMCP2out + sep + "Sum2" + sep + "Cam2" + if Save_array_data == 1: + sMCP2out = sMCP2out + sep + "Array" + sMCP2out = sMCP2out + line_sep + sMCP2 + MCP2out.write(sMCP2out) + MCP2out.close() + print "Saved MCP I_0 data" +def startPlot(type = 1): + global task + task = fork((_startPlot,(type,)),) + +def stopPlot(): + global task, running + running = False + ret = join(task) + + +############################PGM+ID1+ID2################################################### + + +def switchpol(activeID, runtype): + global pol_str + if activeID == 1: + caput(OTF_OFF1,OFFSET1) + caput(OTF_OFF2,OFFSET2-40) #detune ID2 + if runtype in ["+/-", "+", "+--+/+--+"]: + pol_str = "circ +" + elif runtype in ["LH/LV", "LH"]: + pol_str = "Lin. Horizontal" + elif activeID == 2: + caput(OTF_OFF1,OFFSET1-40) #detune ID1 + caput(OTF_OFF2,OFFSET2) + if runtype in ["+/-", "-", "+--+/+--+"]: + pol_str = "circ -" + elif runtype in ["LH/LV", "LV"]: + pol_str = "Lin. Vertical" + else: + raise Exception("Invalid parameter") + + +pol_str = None +polswitch = 1 + +fid = get_next_fid(input_path, "o" + file_prefix) + + + +############################################################################### +#Prepare scan +############################################################################### +if ID1 == 1: + caput ("X11PHS-E:OPT","PGM+ID1") +elif ID2 == 1: + caput ("X11PHS-E:OPT","PGM+ID2") +else: + caput ("X11PHS-E:OPT","PGM+ID1+ID2") + +number_of_scans = 1 +if RUNTYPE in ["+/-", "+", "-", "+--+/+--+"]: + caput(OTF_MODE1,1) # circ + in ID1 + caput(OTF_MODE2,2) # circ - in ID2 + wait_channel(OTF_DONE, 1, type = 'i') + if RUNTYPE == "+/-": + number_of_scans = 2 * ROUNDS + else: + number_of_scans = ROUNDS +elif RUNTYPE in ["LH/LV", "LH", "LV"]: + caput(OTF_MODE1,0) + caput(OTF_MODE2,0) + wait_channel(OTF_DONE, 1, type = 'i') + caput(OTF_ALPHA1, 0.0) # LH in ID1 + caput(OTF_ALPHA2, 90.0) # LV in ID2 + wait_channel(OTF_DONE, 1, type = 'i') + if RUNTYPE == "LH/LV": + number_of_scans = 2 * ROUNDS + else: + number_of_scans = ROUNDS +else: + raise Exception("Invalid run type: " + RUNTYPE) + +if RUNTYPE in ["-", "LV"]: + switchpol(2, RUNTYPE) # tune ID2 --> polarization: C- or LV + polswitch = 0 +elif RUNTYPE in ["+/-", "+", "LH/LV", "LH", "+--+/+--+"]: + switchpol(1, RUNTYPE) # tune ID1 --> polarization: C+ or LH +time.sleep(1.0) + +wait_channel(OTF_DONE, 1, type = 'i') + +open_vg10() +time.sleep(0.5) +open_vg11() +time.sleep(0.5) +open_vg12() +time.sleep(0.5) +open_vg13() + +for scan_no in range(number_of_scans): + suffix = ("%03d" % fid) + input_file = input_path + "o" + file_prefix + "_" + suffix + ".dat" + + caput(OTF_E1, E1) + caput(OTF_E2, E2) + caput(OTF_TIME, TIME) + caput(OTF_FTS,file_prefix) + caput(OTF_FID,fid) + caput(TBT_MAG,MAG) + time.sleep(2.0) + caput(OTF_ESET, E1) + wait_channel(OTF_DONE, 1, type = 'i') + time.sleep(DELAY) + time.sleep(2.0) + + startPlot(PLOT_TYPE) + #Start the OTF scan + #caput(OTF_START, 'GO') + otf_start.write(1) + time.sleep(3.0) + print "Running scan " + str(scan_no+1) + " out of " + str(number_of_scans) + try: + #wait_channel(OTF_START, 'STOP', timeout = int(TIME*60), type = 's') + otf_start.waitValue(0, (15 + int(TIME*60)) *1000) + except: + print "******** OTF STOP TIMEOUT **********" + otf_start.write(0) + finally: + stopPlot() + + time.sleep(5.0) + #TODO: wait for file instead of sleep + #Convert file + output_file = output_path+"os"+file_prefix+"_" + suffix + ".dat" + + print("Converting data file: " + output_file); + convert_file(input_file, output_file, pol_str) + plot_file(output_file, file_prefix+"_" + suffix) #"Scan " + str(scan_no+1)) + print "Finished scan " + str(scan_no+1) + " out of " + str(number_of_scans) + + if RUNTYPE in ["+/-", "LH/LV"]: + if polswitch == 1: + switchpol(2, RUNTYPE) # tune ID2 --> polarization: C- or LV + polswitch = 0 + else: + polswitch = 1 + switchpol(1, RUNTYPE) # tune ID1 --> polarization: C+ or LH + elif RUNTYPE == "+--+/+--+": + step_no = scan_no % 10 + if step_no in [1,6]: + switchpol(2, RUNTYPE) # tune ID2 --> polarization: C- + elif step_no%10 == 4: + caput(TBT_MAG,-1*MAG) + elif step_no%10 in [3,8]: + switchpol(1, RUNTYPE) # tune ID1 --> polarization: C+ + else: + print "running in one polarization mode, no switching" + + time.sleep(3.0) + fid = fid + 1 + +caput(OTF_ESET, E1) +caput(TBT_MAG,MAG) +close_vg13() + +print "Finished Energy scan" + +print("Success") + diff --git a/script/local.py b/script/local.py index 6d4c303..47a9c52 100644 --- a/script/local.py +++ b/script/local.py @@ -34,6 +34,7 @@ TIME_DELAY_SET = "X11MA-ES2:Theta-New.A" TIME_DELAY_VAL = "X11MA-ES2:Theta-Cur.VAL" TIME_DELAY_START = "X11MA-ES2:SCAN-START" TIME_DELAY_COMPLETE = "X11MA-ES2-scan1.SMSG" +TBT_MAG = "X11MA-LSCI632:MFIELD" FST = time.strftime("%y%m%d")