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") // //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)) ); }// //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 }