diff --git a/plugins/Eiger.form b/plugins/Eiger.form
index e49035c..00c131f 100644
--- a/plugins/Eiger.form
+++ b/plugins/Eiger.form
@@ -185,18 +185,47 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -204,14 +233,28 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -251,6 +294,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/Eiger.java b/plugins/Eiger.java
index 6339bca..6093caf 100644
--- a/plugins/Eiger.java
+++ b/plugins/Eiger.java
@@ -49,11 +49,15 @@ public class Eiger extends Panel {
buttonStart.setEnabled(enabled && ((stddaq!=null) && (stddaq.getState().isReady())));
buttonStop.setEnabled(enabled && ((stddaq!=null) && (stddaq.getState()==State.Busy)));
buttonConfig.setEnabled(enabled && ((stddaq!=null) && (stddaq.getState().isInitialized())));
+ textFile.setEnabled(buttonStart.isEnabled());
+ spinnerImages.setEnabled(buttonStart.isEnabled());
buttonStartDet.setEnabled(enabled && ((detector!=null) && (detector.getState().isReady())));
buttonStopDet.setEnabled(enabled && ((detector!=null) && (detector.getState()==State.Busy)));
buttonConfigDet.setEnabled(enabled && ((detector!=null) && (detector.getState().isInitialized())));
buttonParsDet.setEnabled(enabled && ((detector!=null) && (detector.getState().isInitialized())));
+
+ textReqId
}
@@ -102,6 +106,12 @@ public class Eiger extends Panel {
buttonStop = new javax.swing.JButton();
buttonConfig = new javax.swing.JButton();
deviceStatePanel1 = new ch.psi.pshell.swing.DeviceStatePanel();
+ jLabel1 = new javax.swing.JLabel();
+ spinnerImages = new javax.swing.JSpinner();
+ jLabel2 = new javax.swing.JLabel();
+ textFile = new javax.swing.JTextField();
+ jLabel3 = new javax.swing.JLabel();
+ deviceValuePanel1 = new ch.psi.pshell.swing.DeviceValuePanel();
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder("Detector")));
@@ -213,37 +223,85 @@ public class Eiger extends Panel {
deviceStatePanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("State"));
deviceStatePanel1.setDeviceName("std_daq");
+ jLabel1.setText("Images:");
+
+ spinnerImages.setModel(new javax.swing.SpinnerNumberModel(10, 0, 100000, 1));
+
+ jLabel2.setText("File:");
+
+ textFile.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+ textFile.setText("/tmp/test.h5");
+
+ jLabel3.setText("Req Id:");
+
+ deviceValuePanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+ deviceValuePanel1.setDeviceName("std_daq");
+
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(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(buttonStart)
- .addComponent(buttonStop)
- .addComponent(buttonConfig))
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
- .addComponent(deviceStatePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(25, Short.MAX_VALUE))
+ .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(jPanel3Layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addComponent(buttonConfig)
+ .addGap(0, 0, Short.MAX_VALUE))
+ .addComponent(deviceStatePanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(jPanel3Layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
+ .addComponent(jLabel1)
+ .addGap(6, 6, 6))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
+ .addComponent(jLabel2)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
+ .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(spinnerImages, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(textFile, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addComponent(jLabel3)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(deviceValuePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addComponent(buttonStart))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addComponent(buttonStop)))
+ .addContainerGap())
);
jPanel3Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonConfig, buttonStart, buttonStop});
+ jPanel3Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {deviceValuePanel1, spinnerImages, textFile});
+
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
- .addComponent(buttonStart)
+ .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(jLabel1)
+ .addComponent(spinnerImages, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(jLabel2)
+ .addComponent(textFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(buttonStart)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(deviceValuePanel1, 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)
.addComponent(buttonStop)
.addGap(18, 18, Short.MAX_VALUE)
.addComponent(buttonConfig)
.addGap(18, 18, Short.MAX_VALUE)
- .addComponent(deviceStatePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addComponent(deviceStatePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
@@ -360,7 +418,9 @@ public class Eiger extends Panel {
private void buttonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStartActionPerformed
try{
if (stddaq!=null){
- evalAsync("std_daq.start()");
+ int images = (Integer)spinnerImages.getValue();
+ String file = textFile.getText();
+ evalAsync("std_daq.start(n_images=" + images + ", output_file='" + file + "')");
}
} catch (Exception ex){
showException(ex);
@@ -407,9 +467,15 @@ public class Eiger extends Panel {
private javax.swing.JButton buttonStopDet;
private ch.psi.pshell.swing.DeviceStatePanel deviceStatePanel1;
private ch.psi.pshell.swing.DeviceStatePanel deviceStatePanel2;
+ private ch.psi.pshell.swing.DeviceValuePanel deviceValuePanel1;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel jLabel2;
+ private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private ch.psi.pshell.imaging.Renderer renderer;
+ private javax.swing.JSpinner spinnerImages;
+ private javax.swing.JTextField textFile;
// End of variables declaration//GEN-END:variables
}
diff --git a/script/devices/Detector.py b/script/devices/Detector.py
index 56cc65b..de32cba 100644
--- a/script/devices/Detector.py
+++ b/script/devices/Detector.py
@@ -1,7 +1,8 @@
class Detector(DeviceBase):
def __init__(self, name):
- DeviceBase.__init__(self, name)
- self.setSimulated()
+ DeviceBase.__init__(self, name, simulated=False)
+ if simulated:
+ self.setSimulated()
self.simulated_pars = {}
def doInitialize(self):
diff --git a/script/devices/StdDaq.py b/script/devices/StdDaq.py
index 13b10eb..b27c67a 100644
--- a/script/devices/StdDaq.py
+++ b/script/devices/StdDaq.py
@@ -1,31 +1,46 @@
class StdDaq(DeviceBase):
- def __init__(self, name):
+ def __init__(self, name, url, simulated=False):
DeviceBase.__init__(self, name)
- self.setSimulated()
- self.simulated_config = {
- "detector_name": "eg",
- "detector_type": "eiger",
- "n_modules": 2,
- "bit_depth": 32,
- "image_pixel_height": 514,
- "image_pixel_width": 1030,
- "start_udp_port": 50000
- }
+ self.url=url
+ self.req_id = None
+ if simulated:
+ self.setSimulated()
+ self.simulated_id=1
+ self.simulated_config = {
+ "detector_name": "eg",
+ "detector_type": "eiger",
+ "n_modules": 2,
+ "bit_depth": 32,
+ "image_pixel_height": 514,
+ "image_pixel_width": 1030,
+ "start_udp_port": 50000
+ }
def doInitialize(self):
pass
- def start(self):
+ def start(n_images, output_file):
self.state.assertIs(State.Ready)
if not self.simulated:
- pass
+ data = {"sources":"eiger", "n_images":10, "output_file":"/tmp/test.h5"}
+ headers = {'Content-type': 'application/json'}
+ r = requests.post(url = self.url + "/write_async", json=data, headers=headers)
+ self.req_id = str(r.json()["request_id"])
+
+ else:
+ self.req_id = self.simulated_id
+ self.simulated_id=self.simulated_id+1
+ self.setCache(self.req_id, None)
self.setState(State.Busy)
def stop(self):
self.state.assertIs(State.Busy)
if not self.simulated:
- pass
+ data = {"request_id":self.req_id}
+ headers = {'Content-type': 'application/json'}
+ r = requests.post(url = self.url + "/write_kill", json=data, headers=headers)
+ self.setCache(None, None)
self.setState(State.Ready)
def get_config(self):