Files
saresb/plugins/Pointing.java
gac-bernina ee2df1c489 Sep.2025
2025-09-04 11:36:29 +02:00

560 lines
29 KiB
Java

import ch.psi.pshell.bs.Stream;
import ch.psi.pshell.bs.StreamValue;
import ch.psi.pshell.imaging.RendererMode;
import ch.psi.pshell.plot.Plot;
import ch.psi.pshell.plot.TimePlotSeries;
import ch.psi.pshell.ui.CamServerViewer;
import ch.psi.pshell.ui.Panel;
import ch.psi.utils.State;
import ch.psi.utils.Str;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
*/
public class Pointing extends Panel {
TimePlotSeries offx = new TimePlotSeries("offx",1);
TimePlotSeries offy = new TimePlotSeries("offy",2);
TimePlotSeries slopex = new TimePlotSeries("slopex",1);
TimePlotSeries slopey = new TimePlotSeries("slopey",2);
public Pointing() {
initComponents();
try {
viewer.initialize(CamServerViewer.SourceSelecionMode.Single);
viewer.setCameraServerUrl("sf-daqsync-01:8888");
viewer.setPipelineServerUrl("sf-daqsync-01:8889");
viewer.setStartupStream(TOOL_TIP_TEXT_KEY);
viewer.setToolbarVisible(false);
//viewer.setZoom(2.0);
viewer.getRenderer().setMode(RendererMode.Fit);
timePlotOffset.setDurationMillis(1000*60);
timePlotOffset.addSeries(offx);
timePlotOffset.addSeries(offy);
timePlotOffset.setLegendVisible(true);
timePlotOffset.getAxis(Plot.AxisId.X).setLabel(null);
timePlotOffset.getAxis(Plot.AxisId.Y).setLabel("Offset x [mm]");
timePlotOffset.getAxis(Plot.AxisId.Y2).setLabel("Offset y [mm]");
timePlotSlope.setDurationMillis(1000*60);
timePlotSlope.addSeries(slopex);
timePlotSlope.addSeries(slopey);
timePlotSlope.setLegendVisible(true);
timePlotSlope.getAxis(Plot.AxisId.X).setLabel(null);
timePlotSlope.getAxis(Plot.AxisId.Y).setLabel("Slope x [mm]");
timePlotSlope.getAxis(Plot.AxisId.Y2).setLabel("Slope y [mm]");
} catch (Exception ex) {
showException(ex);
}
}
//Overridable callbacks
@Override
public void onInitialize(int runCount) {
try {
viewer.setStream("SAROP21-PPRM094_pointing");
} catch (Exception ex) {
showException(ex);
}
try {
offx.clear();
offy.clear();
slopex.clear();
slopey.clear();
} catch (Exception ex) {
showException(ex);
}
this.startTimer(1000, 1000);
}
@Override
public void onStateChange(State state, State former) {
buttonStart.setEnabled(state.isReady());
}
@Override
public void onExecutedFile(String fileName, Object result) {
}
@Override
protected void onTimer() {
try{
StreamValue value = viewer.getStreamDevice().take();
if (value==null){
textSaturated.setText("");
} else {
Object img = value.getValue("image");
//Setting a global to be used as a paramemeter in the followinf funciton call
this.setGlobalVar("plugin_img", img);
//Running a function in the interpreter IN THE BACKGROUND
//It is synchronous - should not block!
Object ret = eval("get_saturated_pixels(plugin_img)", true);
textSaturated.setText((ret==null) ? "" : ret.toString());
//Example reading any variable from the interpreter
//Object obj = this.getGlobalVar("xxx");
//System.out.println(Str.toString(obj));
}
} catch (Exception ex){
textSaturated.setText("");
this.getLogger().severe(ex.getMessage());
}
if (ckOffsetCheck.isSelected()){
try{
Object ret = this.run("pointing/check_offset", null, true);
List offset = (List) ret;
Double offX = (Double) offset.get(0);
Double offY = (Double) offset.get(1);
Double slopeX = (Double) offset.get(2);
Double slopeY = (Double) offset.get(3);
textOffX.setText(String.format("%1.3f",offX));
textOffY.setText(String.format("%1.3f",offY));
textSlopeX.setText(String.format("%1.3f",slopeX));
textSlopeY.setText(String.format("%1.3f",slopeY));
offx.appendData(offX);
offy.appendData(offY);
slopex.appendData(slopeX);
slopey.appendData(slopeY);
} catch (Exception ex){
textOffX.setText("");
textOffY.setText("");
textSlopeX.setText("");
textSlopeY.setText("");
//showException(ex);
}
}
}
@Override
protected void onLoaded() {
}
@Override
protected void onUnloaded() {
}
//Invoked by 'update()' to update components in the event thread
@Override
protected void doUpdate() {
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
viewer = new ch.psi.pshell.ui.CamServerViewer();
processVariablePanel1 = new ch.psi.pshell.swing.ProcessVariablePanel();
jLabel1 = new javax.swing.JLabel();
textSaturated = new javax.swing.JTextField();
buttonStart = new javax.swing.JButton();
buttonRefOffAp = new javax.swing.JButton();
buttonEnd = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
textOffX = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
textOffY = new javax.swing.JTextField();
ckOffsetCheck = new javax.swing.JCheckBox();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
buttonRefSlopeAp = new javax.swing.JButton();
jLabel14 = new javax.swing.JLabel();
timePlotOffset = new ch.psi.pshell.plot.TimePlotJFree();
jLabel15 = new javax.swing.JLabel();
textSlopeX = new javax.swing.JTextField();
jLabel16 = new javax.swing.JLabel();
textSlopeY = new javax.swing.JTextField();
timePlotSlope = new ch.psi.pshell.plot.TimePlotJFree();
jLabel17 = new javax.swing.JLabel();
jLabel18 = new javax.swing.JLabel();
jLabel19 = new javax.swing.JLabel();
jLabel20 = new javax.swing.JLabel();
processVariablePanel1.setDeviceName("attenuator");
processVariablePanel1.setShowLimitButtons(false);
processVariablePanel1.setShowSlider(false);
processVariablePanel1.setShowStop(false);
processVariablePanel1.setStepIncrement(0.01);
processVariablePanel1.setStepSize(0.01);
jLabel1.setText("1.");
textSaturated.setEditable(false);
textSaturated.setHorizontalAlignment(javax.swing.JTextField.CENTER);
buttonStart.setText("Start");
buttonStart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonStartActionPerformed(evt);
}
});
buttonRefOffAp.setText("Reference Offset Aperture");
buttonRefOffAp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonRefOffApActionPerformed(evt);
}
});
buttonEnd.setText("End");
buttonEnd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonEndActionPerformed(evt);
}
});
jLabel2.setText("Off X:");
textOffX.setEditable(false);
textOffX.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel3.setText("Off Y:");
textOffY.setEditable(false);
textOffY.setHorizontalAlignment(javax.swing.JTextField.CENTER);
ckOffsetCheck.setText("Enable Offset Check");
ckOffsetCheck.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ckOffsetCheckActionPerformed(evt);
}
});
jLabel4.setText("Saturated Pixels:");
jLabel5.setText("2.");
jLabel6.setText("3.");
jLabel7.setText("5.");
jLabel8.setText("7.");
jLabel9.setText("Reference the position of the offset apeature (takes around 10 seconds):");
jLabel10.setFont(new java.awt.Font("Cantarell", 1, 18)); // NOI18N
jLabel10.setText("To check the pointing of Aramis, follow the steps:");
jLabel11.setText("Measure beam position relative to target position of aperature:");
jLabel12.setText("If pixels are saturated, tweak attenuation:");
jLabel13.setText("Reference the position of the slope aperture (takes around 10 seconds):");
buttonRefSlopeAp.setText("Reference Slope Aperture");
buttonRefSlopeAp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonRefSlopeApActionPerformed(evt);
}
});
jLabel14.setText("4.");
jLabel15.setText("Slope X:");
textSlopeX.setEditable(false);
textSlopeX.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel16.setText("Slope Y:");
textSlopeY.setEditable(false);
textSlopeY.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel17.setText("Current beam position from slope reference (mm):");
jLabel18.setText("Current beam position from offset reference (mm):");
jLabel19.setText("6.");
jLabel20.setText("Align undulators - iterate steps 3 and 4 as beam is aligned - this may take several rounds");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(viewer, javax.swing.GroupLayout.PREFERRED_SIZE, 471, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(99, 99, 99)
.addComponent(jLabel10))
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(9, 9, 9)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel5)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel4)
.addGap(35, 35, 35)
.addComponent(textSaturated, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(buttonStart)))
.addComponent(jLabel12)))
.addComponent(jLabel9)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel11)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel6)
.addGap(18, 18, 18)
.addComponent(buttonRefOffAp, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel14)
.addGap(18, 18, 18)
.addComponent(buttonRefSlopeAp))))
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(processVariablePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 330, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel13)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel7)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ckOffsetCheck)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textOffY))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textOffX, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel16)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textSlopeY))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel15)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textSlopeX, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE))))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel19))
.addGap(23, 23, 23)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel20)
.addComponent(buttonEnd, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))))))
.addGroup(layout.createSequentialGroup()
.addGap(57, 57, 57)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(timePlotOffset, javax.swing.GroupLayout.PREFERRED_SIZE, 989, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(timePlotSlope, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 989, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel17)
.addComponent(jLabel18))))
.addContainerGap(19, Short.MAX_VALUE))
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonEnd, buttonRefOffAp, buttonStart});
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {textOffX, textOffY, textSaturated});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(viewer, javax.swing.GroupLayout.PREFERRED_SIZE, 441, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(150, 150, 150)
.addComponent(jLabel17))
.addGroup(layout.createSequentialGroup()
.addGap(17, 17, 17)
.addComponent(jLabel10)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonStart)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(textSaturated, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel5)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel12)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(processVariablePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel9)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(buttonRefOffAp))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel13)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel14)
.addComponent(buttonRefSlopeAp))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel11)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel7)
.addComponent(ckOffsetCheck))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(textOffX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(textOffY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel15)
.addComponent(textSlopeX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel16)
.addComponent(textSlopeY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel19)
.addComponent(jLabel20))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(buttonEnd))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(timePlotSlope, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel18)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(timePlotOffset, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(20, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void buttonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStartActionPerformed
try{
runAsync("pointing/start").handle((ret,ex)->{
return ret;
});
} catch (Exception ex){
showException(ex);
}
}//GEN-LAST:event_buttonStartActionPerformed
private void buttonRefOffApActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRefOffApActionPerformed
try{
runAsync("pointing/reference_offset").handle((ret,ex)->{
if (ex!=null){
showException((Exception)ex);
} else {
showMessage("Reference offset aperture", Str.toString(ret));
}
return ret;
});
} catch (Exception ex){
showException(ex);
}
}//GEN-LAST:event_buttonRefOffApActionPerformed
private void buttonEndActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonEndActionPerformed
try{
runAsync("pointing/end").handle((ret,ex)->{
return ret;
});
} catch (Exception ex){
showException(ex);
}
}//GEN-LAST:event_buttonEndActionPerformed
private void buttonRefSlopeApActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRefSlopeApActionPerformed
try{
runAsync("pointing/reference_slope").handle((ret,ex)->{
if (ex!=null){
showException((Exception)ex);
} else {
showMessage("Reference slope aperture", Str.toString(ret));
}
return ret;
});
} catch (Exception ex){
showException(ex);
}
}//GEN-LAST:event_buttonRefSlopeApActionPerformed
private void ckOffsetCheckActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ckOffsetCheckActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_ckOffsetCheckActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton buttonEnd;
private javax.swing.JButton buttonRefOffAp;
private javax.swing.JButton buttonRefSlopeAp;
private javax.swing.JButton buttonStart;
private javax.swing.JCheckBox ckOffsetCheck;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel17;
private javax.swing.JLabel jLabel18;
private javax.swing.JLabel jLabel19;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel 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 ch.psi.pshell.swing.ProcessVariablePanel processVariablePanel1;
private javax.swing.JTextField textOffX;
private javax.swing.JTextField textOffY;
private javax.swing.JTextField textSaturated;
private javax.swing.JTextField textSlopeX;
private javax.swing.JTextField textSlopeY;
private ch.psi.pshell.plot.TimePlotJFree timePlotOffset;
private ch.psi.pshell.plot.TimePlotJFree timePlotSlope;
private ch.psi.pshell.ui.CamServerViewer viewer;
// End of variables declaration//GEN-END:variables
}