Added correlation

This commit is contained in:
2022-11-28 11:16:40 +01:00
parent 057b1c0d7b
commit 738b121749
13 changed files with 336 additions and 118 deletions

View File

@@ -17,7 +17,6 @@ case $i in
esac
done
/opt/gfa/pshell/pshell \
-version=v1_17 -last \
-z \

View File

@@ -1,7 +1,7 @@
#Tue Sep 27 11:58:29 CEST 2022
#Mon Nov 28 11:10:36 CET 2022
bins=1000
min=11480.451953125
max=11580.451953125
min=12345.1192578125
max=12445.1192578125
precision=-1
description=null
numberOfSamples=10000

View File

@@ -35,13 +35,13 @@ dist.jlink.dir=${dist.dir}/jlink
dist.jlink.output=${dist.jlink.dir}/PSSS
endorsed.classpath=
excludes=
file.reference.latest.jar=/opt/gfa/pshell/latest
file.reference.psss_panel-plugins=../../plugins
file.reference.psss_panel-script=../../script
file.reference.v1_18=/opt/gfa/pshell/v1_18
includes=**/*.java
jar.compress=false
javac.classpath=\
${file.reference.latest.jar}
${file.reference.v1_18}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false

View File

@@ -936,7 +936,7 @@
<EmptySpace max="-2" attributes="0"/>
<Component id="jPanel10" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="plotCorrelation" pref="461" max="32767" attributes="0"/>
<Component id="plotCorrelation" pref="450" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@@ -972,29 +972,27 @@
<Component id="jLabel26" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel25" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel24" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel22" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel21" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel20" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel23" alignment="1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel27" alignment="1" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="comboTypeY" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="comboTypeX" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="textCorrelation" alignment="0" pref="250" max="32767" attributes="0"/>
<Component id="spinnerInterval" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="spinnerWindow" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="spinnerWindow" linkSize="13" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="textLinear" alignment="0" pref="250" max="32767" attributes="0"/>
<Component id="textQuadratic" alignment="0" pref="250" max="32767" attributes="0"/>
<Component id="checkLinear" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="checkQuadratic" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="spinnerOffset" linkSize="13" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="26" max="32767" attributes="0"/>
</Group>
<Component id="textDevX" alignment="0" max="32767" attributes="0"/>
<Component id="textDevY" alignment="0" max="32767" attributes="0"/>
<Component id="comboDevY" alignment="0" max="32767" attributes="0"/>
</Group>
</Group>
</Group>
@@ -1007,30 +1005,26 @@
<Component id="jLabel20" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="textDevX" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Component id="comboTypeX" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="39" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jLabel21" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="textDevY" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="comboDevY" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
<Component id="comboTypeY" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jLabel22" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="spinnerInterval" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace min="-2" pref="40" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jLabel23" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="spinnerWindow" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jLabel27" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="spinnerOffset" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="checkLinear" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="checkQuadratic" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="19" max="32767" attributes="0"/>
<EmptySpace pref="21" max="32767" attributes="0"/>
<Group type="103" groupAlignment="2" attributes="0">
<Component id="textCorrelation" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="jLabel24" alignment="2" min="-2" max="-2" attributes="0"/>
@@ -1045,7 +1039,7 @@
<Component id="jLabel26" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="textQuadratic" alignment="2" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="21" max="32767" attributes="0"/>
<EmptySpace pref="22" max="32767" attributes="0"/>
<Component id="buttonStart" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="45" max="-2" attributes="0"/>
</Group>
@@ -1064,30 +1058,12 @@
<Property name="text" type="java.lang.String" value="SARFE10-PSSS059:SPECTRUM_Y_SUM"/>
</Properties>
</Component>
<Component class="javax.swing.JTextField" name="textDevY">
<Properties>
<Property name="text" type="java.lang.String" value="SARFE10-PBPS053:INTENSITY"/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel21">
<Properties>
<Property name="horizontalAlignment" type="int" value="11"/>
<Property name="text" type="java.lang.String" value="Y device:"/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel22">
<Properties>
<Property name="horizontalAlignment" type="int" value="11"/>
<Property name="text" type="java.lang.String" value="Interval (s):"/>
</Properties>
</Component>
<Component class="javax.swing.JSpinner" name="spinnerInterval">
<Properties>
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
<SpinnerModel initial="0.1" minimum="0.001" numberType="java.lang.Double" stepSize="1.0" type="number"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="jLabel23">
<Properties>
<Property name="horizontalAlignment" type="int" value="11"/>
@@ -1156,29 +1132,36 @@
<Property name="text" type="java.lang.String" value="Quadratic fit"/>
</Properties>
</Component>
<Component class="javax.swing.JComboBox" name="comboTypeX">
<Component class="javax.swing.JLabel" name="jLabel27">
<Properties>
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
<StringArray count="3">
<StringItem index="0" value="Channel"/>
<StringItem index="1" value="Stream"/>
<StringItem index="2" value="Camera"/>
</StringArray>
</Property>
<Property name="selectedIndex" type="int" value="1"/>
<Property name="horizontalAlignment" type="int" value="11"/>
<Property name="text" type="java.lang.String" value="Pulse ID Offset:"/>
</Properties>
</Component>
<Component class="javax.swing.JComboBox" name="comboTypeY">
<Component class="javax.swing.JSpinner" name="spinnerOffset">
<Properties>
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
<SpinnerModel initial="0" maximum="50" minimum="-50" numberType="java.lang.Integer" stepSize="1" type="number"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JComboBox" name="comboDevY">
<Properties>
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
<StringArray count="3">
<StringItem index="0" value="Channel"/>
<StringItem index="1" value="Stream"/>
<StringItem index="2" value="Camera"/>
<StringArray count="7">
<StringItem index="0" value="SARFE10-PBPS053:INTENSITY"/>
<StringItem index="1" value="SAROP21-PBPS103:INTENSITY"/>
<StringItem index="2" value="SAROP11-PBPS110:INTENSITY"/>
<StringItem index="3" value="SAROP31-PBPS113:INTENSITY"/>
<StringItem index="4" value="SAROP11-PBPS122:INTENSITY"/>
<StringItem index="5" value="SAROP21-PBPS133:INTENSITY"/>
<StringItem index="6" value="SAROP31-PBPS149:INTENSITY"/>
</StringArray>
</Property>
<Property name="selectedIndex" type="int" value="1"/>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
</AuxValues>
</Component>
</SubComponents>
</Container>

View File

@@ -129,11 +129,9 @@ public class PSSS extends Panel {
}
}
textDevX.setEnabled(state==State.Ready);
textDevY.setEnabled(state==State.Ready);
spinnerInterval.setEnabled(state==State.Ready);
comboDevY.setEnabled(state==State.Ready);
spinnerWindow.setEnabled(state==State.Ready);
comboTypeX.setEnabled(state==State.Ready);
comboTypeY.setEnabled(state==State.Ready);
spinnerOffset.setEnabled(state==State.Ready);
checkLinear.setEnabled(state==State.Ready);
checkQuadratic.setEnabled(state==State.Ready);
@@ -324,10 +322,7 @@ public class PSSS extends Panel {
jPanel10 = new javax.swing.JPanel();
jLabel20 = new javax.swing.JLabel();
textDevX = new javax.swing.JTextField();
textDevY = new javax.swing.JTextField();
jLabel21 = new javax.swing.JLabel();
jLabel22 = new javax.swing.JLabel();
spinnerInterval = new javax.swing.JSpinner();
jLabel23 = new javax.swing.JLabel();
spinnerWindow = new javax.swing.JSpinner();
buttonStart = new javax.swing.JButton();
@@ -339,8 +334,9 @@ public class PSSS extends Panel {
textQuadratic = new javax.swing.JTextField();
checkLinear = new javax.swing.JCheckBox();
checkQuadratic = new javax.swing.JCheckBox();
comboTypeX = new javax.swing.JComboBox();
comboTypeY = new javax.swing.JComboBox();
jLabel27 = new javax.swing.JLabel();
spinnerOffset = new javax.swing.JSpinner();
comboDevY = new javax.swing.JComboBox<>();
plotCorrelation = new ch.psi.pshell.plot.LinePlotJFree();
tab.addChangeListener(new javax.swing.event.ChangeListener() {
@@ -918,16 +914,9 @@ public class PSSS extends Panel {
textDevX.setText("SARFE10-PSSS059:SPECTRUM_Y_SUM");
textDevY.setText("SARFE10-PBPS053:INTENSITY");
jLabel21.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel21.setText("Y device:");
jLabel22.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel22.setText("Interval (s):");
spinnerInterval.setModel(new javax.swing.SpinnerNumberModel(0.1d, 0.001d, null, 1.0d));
jLabel23.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel23.setText("Window size:");
@@ -963,11 +952,12 @@ public class PSSS extends Panel {
checkQuadratic.setText("Quadratic fit");
comboTypeX.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Channel", "Stream", "Camera" }));
comboTypeX.setSelectedIndex(1);
jLabel27.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel27.setText("Pulse ID Offset:");
comboTypeY.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Channel", "Stream", "Camera" }));
comboTypeY.setSelectedIndex(1);
spinnerOffset.setModel(new javax.swing.SpinnerNumberModel(0, -50, 50, 1));
comboDevY.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "SARFE10-PBPS053:INTENSITY", "SAROP21-PBPS103:INTENSITY", "SAROP11-PBPS110:INTENSITY", "SAROP31-PBPS113:INTENSITY", "SAROP11-PBPS122:INTENSITY", "SAROP21-PBPS133:INTENSITY", "SAROP31-PBPS149:INTENSITY" }));
javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
jPanel10.setLayout(jPanel10Layout);
@@ -983,27 +973,28 @@ public class PSSS extends Panel {
.addComponent(jLabel26, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel25, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel24, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel22, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel21, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel20, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel23, javax.swing.GroupLayout.Alignment.TRAILING))
.addComponent(jLabel23, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel27, javax.swing.GroupLayout.Alignment.TRAILING))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel10Layout.createSequentialGroup()
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(comboTypeY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(comboTypeX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(textCorrelation, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
.addComponent(spinnerInterval, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(spinnerWindow, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(textLinear, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
.addComponent(textQuadratic, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
.addComponent(checkLinear)
.addComponent(checkQuadratic))
.addComponent(checkQuadratic)
.addComponent(spinnerOffset, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
.addComponent(textDevX)
.addComponent(textDevY)))
.addComponent(comboDevY, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
);
jPanel10Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerOffset, spinnerWindow});
jPanel10Layout.setVerticalGroup(
jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel10Layout.createSequentialGroup()
@@ -1011,27 +1002,23 @@ public class PSSS extends Panel {
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel20)
.addComponent(textDevX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comboTypeX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGap(39, 39, 39)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel21)
.addComponent(textDevY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3)
.addComponent(comboTypeY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel22)
.addComponent(spinnerInterval, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comboDevY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(40, 40, 40)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel23)
.addComponent(spinnerWindow, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel27)
.addComponent(spinnerOffset, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(checkLinear)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(checkQuadratic)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 19, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(textCorrelation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel24))
@@ -1043,7 +1030,7 @@ public class PSSS extends Panel {
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel26)
.addComponent(textQuadratic, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 22, Short.MAX_VALUE)
.addComponent(buttonStart)
.addGap(45, 45, 45))
);
@@ -1058,7 +1045,7 @@ public class PSSS extends Panel {
.addContainerGap()
.addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(plotCorrelation, javax.swing.GroupLayout.DEFAULT_SIZE, 461, Short.MAX_VALUE))
.addComponent(plotCorrelation, javax.swing.GroupLayout.DEFAULT_SIZE, 450, Short.MAX_VALUE))
);
jPanel9Layout.setVerticalGroup(
jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -1170,11 +1157,9 @@ public class PSSS extends Panel {
textQuadratic.setText("");
HashMap args = new HashMap();
args.put("dx", textDevX.getText());
args.put("dy", textDevY.getText());
args.put("interval", spinnerInterval.getValue());
args.put("dy", comboDevY.getSelectedItem());
args.put("window", spinnerWindow.getValue());
args.put("dxtype", comboTypeX.getSelectedIndex());
args.put("dytype", comboTypeY.getSelectedIndex());
args.put("offset", spinnerOffset.getValue());
args.put("linear_fit", checkLinear.isSelected());
args.put("quadratic_fit", checkQuadratic.isSelected());
@@ -1202,8 +1187,7 @@ public class PSSS extends Panel {
private javax.swing.JButton buttonStart;
private javax.swing.JCheckBox checkLinear;
private javax.swing.JCheckBox checkQuadratic;
private javax.swing.JComboBox comboTypeX;
private javax.swing.JComboBox comboTypeY;
private javax.swing.JComboBox<String> comboDevY;
private ch.psi.pshell.swing.DiscretePositionerSelector discretePositionerSelector1;
private ch.psi.pshell.swing.DiscretePositionerSelector discretePositionerSelector2;
private ch.psi.pshell.swing.HistogramGeneratorPanel histogramGeneratorFwhm;
@@ -1223,11 +1207,11 @@ public class PSSS extends Panel {
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel jLabel21;
private javax.swing.JLabel jLabel22;
private javax.swing.JLabel jLabel23;
private javax.swing.JLabel jLabel24;
private javax.swing.JLabel jLabel25;
private javax.swing.JLabel jLabel26;
private javax.swing.JLabel jLabel27;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
@@ -1273,12 +1257,11 @@ public class PSSS extends Panel {
private javax.swing.JSpinner spToEn;
private javax.swing.JSpinner spinnerAverage;
private javax.swing.JSpinner spinnerEnergy;
private javax.swing.JSpinner spinnerInterval;
private javax.swing.JSpinner spinnerOffset;
private javax.swing.JSpinner spinnerWindow;
private javax.swing.JTabbedPane tab;
private javax.swing.JTextField textCorrelation;
private javax.swing.JTextField textDevX;
private javax.swing.JTextField textDevY;
private javax.swing.JTextField textLinear;
private javax.swing.JTextField textQuadratic;
// End of variables declaration//GEN-END:variables

View File

@@ -35,6 +35,7 @@ import ch.psi.pshell.core.ContextAdapter as ContextListener
import ch.psi.pshell.core.Context
import ch.psi.pshell.core.InlineDevice as InlineDevice
import ch.psi.pshell.data.DataManager as DataManager
import ch.psi.pshell.data.DataSlice as DataSlice
import ch.psi.pshell.data.PlotDescriptor as PlotDescriptor
import ch.psi.pshell.data.Table as Table
@@ -45,11 +46,11 @@ import ch.psi.pshell.data.ProviderCSV as ProviderCSV
import ch.psi.pshell.data.ProviderFDA as ProviderFDA
import ch.psi.pshell.data.Converter as DataConverter
import ch.psi.pshell.data.Layout as Layout
import ch.psi.pshell.data.LayoutBase as LayoutBase
import ch.psi.pshell.data.LayoutDefault as LayoutDefault
import ch.psi.pshell.data.LayoutTable as LayoutTable
import ch.psi.pshell.data.LayoutFDA as LayoutFDA
import ch.psi.pshell.data.LayoutSF as LayoutSF
import ch.psi.pshell.data.LayoutBase as LayoutBase
import ch.psi.pshell.data.LayoutDefault as LayoutDefault
import ch.psi.pshell.data.LayoutTable as LayoutTable
import ch.psi.pshell.data.LayoutFDA as LayoutFDA
import ch.psi.pshell.data.LayoutSF as LayoutSF
import ch.psi.pshell.device.Camera as Camera
import ch.psi.pshell.device.CameraBase as CameraBase
@@ -78,6 +79,7 @@ import ch.psi.pshell.device.Register as Register
import ch.psi.pshell.device.Register.RegisterArray as RegisterArray
import ch.psi.pshell.device.Register.RegisterNumber as RegisterNumber
import ch.psi.pshell.device.Register.RegisterBoolean as RegisterBoolean
import ch.psi.pshell.device.Register.RegisterString as RegisterString
import ch.psi.pshell.device.RegisterCache as RegisterCache
import ch.psi.pshell.device.ReadonlyRegister.ReadonlyRegisterArray as ReadonlyRegisterArray
import ch.psi.pshell.device.ReadonlyRegister.ReadonlyRegisterMatrix as ReadonlyRegisterMatrix
@@ -179,6 +181,9 @@ import ch.psi.pshell.imaging.RegisterMatrixSource as RegisterMatrixSource
import ch.psi.pshell.imaging.ImageListener as ImageListener
import ch.psi.pshell.imaging.ImageMeasurement as ImageMeasurement
import ch.psi.pshell.imaging.CameraSource as CameraSource
import ch.psi.pshell.imaging.DeviceSource as DeviceSource
import ch.psi.pshell.imaging.ColormapSource as ColormapSource
import ch.psi.pshell.imaging.StreamSource as StreamSource
import ch.psi.pshell.imaging.ColormapAdapter as ColormapAdapter
import ch.psi.pshell.imaging.FileSource as FileSource
import ch.psi.pshell.imaging.MjpegSource as MjpegSource
@@ -240,6 +245,7 @@ import ch.psi.pshell.bs.Stream as Stream
import ch.psi.pshell.bs.Provider as Provider
import ch.psi.pshell.bs.ProviderConfig.SocketType as SocketType
import ch.psi.pshell.bs.Dispatcher as Dispatcher
import ch.psi.pshell.bs.StreamChannel as StreamChannel
import ch.psi.pshell.bs.Scalar as Scalar
import ch.psi.pshell.bs.Waveform as Waveform
import ch.psi.pshell.bs.Matrix as Matrix
@@ -248,10 +254,19 @@ import ch.psi.pshell.bs.CameraServer as CameraServer
import ch.psi.pshell.bs.PipelineServer as PipelineServer
import ch.psi.pshell.bs.ProviderConfig as ProviderConfig
import ch.psi.pshell.bs.StreamConfig as StreamConfig
import ch.psi.pshell.bs.ScalarConfig as ScalarConfig
import ch.psi.pshell.bs.StreamChannelConfig as StreamChannelConfig
import ch.psi.pshell.bs.WaveformConfig as WaveformConfig
import ch.psi.pshell.bs.MatrixConfig as MatrixConfig
import ch.psi.pshell.camserver.PipelineClient as PipelineClient
import ch.psi.pshell.camserver.CameraClient as CameraClient
import ch.psi.pshell.camserver.ProxyClient as ProxyClient
import ch.psi.pshell.camserver.PipelineStream as PipelineStream
import ch.psi.pshell.camserver.PipelineSource as PipelineSource
import ch.psi.pshell.camserver.CameraStream as CameraStream
import ch.psi.pshell.camserver.CameraSource as CameraSource
import ch.psi.pshell.camserver.CamServerService as CamServerService
import ch.psi.pshell.detector.DetectorConfig as DetectorConfig
import ch.psi.pshell.ui.App as App

View File

@@ -764,6 +764,23 @@ def create_table(path, names, types=None, lengths=None, features=None):
type_classes.append(ScriptUtils.getType(types[i]))
get_context().dataManager.createDataset(path, names, type_classes, lengths, features)
def create_link(path, target_path, target_root=None):
"""Create a internal or external link.
Args:
path(str): Path to link relative to the current persistence context root.
target_path(str): Path to data on the target
target_root(str, optional): If defined creates an external link to the target root.
Otherwise creates an internal link in the current persistence context.
Returns:
None
"""
if target_root:
get_context().dataManager.createLink(path,target_root, target_path)
else:
get_context().dataManager.createLink(path, target_path)
def append_dataset(path, data, index=None, type='d', shape=None):
"""Append data to dataset.

View File

@@ -22,6 +22,7 @@ import java.awt.Point as Point
import java.awt.Dimension as Dimension
import java.awt.Rectangle as Rectangle
import java.awt.Font as Font
import java.io.File as File
import org.python.core.PyArray as PyArray
import org.python.core.PyFunction as PyFunction
import org.python.core.PyMethod as PyMethod

76
script/Lib/data_utils.py Normal file
View File

@@ -0,0 +1,76 @@
###################################################################################################
# Data utilities
###################################################################################################
from startup import *
from ijutils import load_array, save_image
def save_as_tiff(data, filename, parallel=True, metadata={}):
"""
Save data as tiff file
Args:
data(array, Data or ImageProcessor): Data to be saved
filename(str): File Name
parallel(bool, optiona): if True image is saved in separated thread.
metadata(dict, optional): written to tiff info property.
"""
def _save_as_tiff(data, filename, metadata={}):
try:
if isinstance(data,PyArray):
ip = load_array(data)
elif type(data) == Data:
ip = load_array(data.matrix)
else:
ip = data
#Metadata
info = "Timestamp: " + time.strftime("%y/%m/%d %H:%M:%S",time.localtime())
for key,val in metadata.items():
info = info + "\n" + str(key) + ": " + str(val)
ip.setProperty("Info", info)
if not os.path.exists(os.path.dirname(filename)):
os.makedirs(os.path.dirname(filename))
save_image(ip, filename,"tiff")
except:
print sys.exc_info()
if parallel:
return fork((_save_as_tiff,(data, filename, metadata)),)
else:
_save_as_tiff(data, filename, metadata)
def save_as_hdf5(data, filename=None, dm=None, path="/data", parallel=True, metadata={}):
"""
Save data as hdf5 file
Args:
data(array, Data): Data to be saved
filename(str, optional): File to save to (if equals None then dm must be set )
dm(str, optional): DataManager to save to
parallel(bool, optional): if True image is saved in separated thread.
metadata(dict, optional): written to tiff info property.
"""
def _save_as_hdf5(data, filename, dm, path, metadata={}):
try:
if type(data) == Data:
data = data.matrix
if filename is not None:
if not os.path.exists(os.path.dirname(filename)):
os.makedirs(os.path.dirname(filename))
dm = DataManager(filename, "h5")
try:
dm.setDataset(path, data)
for key,val in metadata.items():
dm.setAttribute(path, key, val)
finally:
if filename is not None:
dm.close()
except:
print sys.exc_info()
if parallel:
return fork((_save_as_hdf5,(data, filename, dm, path, metadata)),)
else:
_save_as_hdf5(data, filename, dm, path, metadata)

View File

@@ -407,6 +407,9 @@ ReadableMatrixSource=RegisterMatrixSource.ReadableMatrixSource
from ch.psi.pshell.imaging import ImageListener as ImageListener
from ch.psi.pshell.imaging import ImageMeasurement as ImageMeasurement
from ch.psi.pshell.imaging import CameraSource as CameraSource
from ch.psi.pshell.imaging import DeviceSource as DeviceSource
from ch.psi.pshell.imaging import ColormapSource as ColormapSource
from ch.psi.pshell.imaging import StreamSource as StreamSource
from ch.psi.pshell.imaging import ColormapAdapter as ColormapAdapter
from ch.psi.pshell.imaging import FileSource as FileSource
from ch.psi.pshell.imaging import MjpegSource as MjpegSource
@@ -454,6 +457,7 @@ from ch.psi.pshell.bs import Stream as Stream
from ch.psi.pshell.bs import Provider as Provider
from ch.psi.pshell.bs import Dispatcher as Dispatcher
from ch.psi.pshell.bs import Scalar as Scalar
from ch.psi.pshell.bs import StreamChannel as StreamChannel
from ch.psi.pshell.bs import Waveform as Waveform
from ch.psi.pshell.bs import Matrix as Matrix
from ch.psi.pshell.bs import StreamCamera as StreamCamera
@@ -461,10 +465,19 @@ from ch.psi.pshell.bs import CameraServer as CameraServer
from ch.psi.pshell.bs import PipelineServer as PipelineServer
from ch.psi.pshell.bs import ProviderConfig as ProviderConfig
from ch.psi.pshell.bs import StreamConfig as StreamConfig
from ch.psi.pshell.bs import ScalarConfig as ScalarConfig
from ch.psi.pshell.bs import StreamChannelConfig as StreamChannelConfig
from ch.psi.pshell.bs import WaveformConfig as WaveformConfig
from ch.psi.pshell.bs import MatrixConfig as MatrixConfig
from ch.psi.pshell.camserver import PipelineClient as PipelineClient
from ch.psi.pshell.camserver import CameraClient as CameraClient
from ch.psi.pshell.camserver import ProxyClient as ProxyClient
from ch.psi.pshell.camserver import CameraSource as CameraSource
from ch.psi.pshell.camserver import CameraStream as CameraStream
from ch.psi.pshell.camserver import PipelineSource as PipelineSource
from ch.psi.pshell.camserver import PipelineStream as PipelineStream
from ch.psi.pshell.camserver import CamServerService as CamServerService
from ch.psi.pshell.detector import DetectorConfig as DetectorConfig
from ch.psi.pshell.ui import App as App

View File

@@ -230,4 +230,22 @@ def elog(title, message, attachments = [], author = None, category = "Info", dom
try:
return int(out[out.find("ID=") +3 : ])
except:
print out
print out
from collections import OrderedDict
class LimitedSizeDict(OrderedDict):
def __init__(self, *args, **kwds):
self.size_limit = kwds.pop("size_limit", None)
OrderedDict.__init__(self, *args, **kwds)
self._check_size_limit()
def __setitem__(self, key, value):
OrderedDict.__setitem__(self, key, value)
self._check_size_limit()
def _check_size_limit(self):
if self.size_limit is not None:
while len(self) > self.size_limit:
self.popitem(last=False)

108
script/psss/Correlation.py Normal file
View File

@@ -0,0 +1,108 @@
import math
import sys, traceback
from mathutils import fit_polynomial, PolynomialFunction
from plotutils import plot_line, plot_function
import org.apache.commons.math3.stat.correlation.PearsonsCorrelation as PearsonsCorrelation
import ch.psi.pshell.bs.PipelineServer as PipelineServer
TYPE_CHANNEL = 0
TYPE_STREAM = 1
TYPE_CAMERA= 2
if get_exec_pars().source == CommandSource.ui:
dx = "SARFE10-PSSS059:SPECTRUM_Y_SUM"
dy = "SARFE10-PBPS053:INTENSITY"
window = 40
offset=-2
p = plot(None)[0]
linear_fit = True
quadratic_fit = True
corr = None
pars_lin = None
pars_quad = None
for s in p.getAllSeries():
p.removeSeries(s)
stream = Stream("correlation_stream", dispatcher)
def add_point(x,y):
global marker
sd.appendData(x, y)
if len(sd.x) > window:
#Remove First Element
sd.token.remove(0)
ax = sd.x
ay = sd.y
if len(ax)>2:
x1, x2 = min(ax), max(ax)
res = (x2-x1)/100
if x1!=x2:
#Display correlation
corr= PearsonsCorrelation().correlation(to_array(ax,'d'), to_array(ay,'d'))
s = "Correlation=" + str(round(corr,4))
#print s
if get_exec_pars().source == CommandSource.ui:
if marker is not None:
p.removeMarker(marker)
marker = p.addMarker(x2+res, p.AxisId.X, s, p.getBackground())
marker.setLabelPaint(Color.WHITE)
if linear_fit:
#Calculate, print and plot linear fit
pars_lin = (a0,a1) = fit_polynomial(ay, ax, 1)
#print "Fit lin a1:" , a1, " a0:",a0
y1 = poly(x1, pars_lin)
y2 = poly(x2, pars_lin)
plot_line(p, x1, y1, x2, y2, width = 2, color = Color.BLUE, name = "Fit Linear")
if quadratic_fit:
#Calculate, print and plot quadratic fit
pars_quad = (a0,a1,a2) = fit_polynomial(ay, ax, 2)
#print "Fit quad a2:" , a2, "a1:" , a1, " a0:",a0
fitted_quad_function = PolynomialFunction(pars_quad)
ax = frange(x1, x2, res, True)
plot_function(p, fitted_quad_function, "Fit Quadratic", ax, color=Color.GREEN)
try:
stream.addScalar(dx, dx, 1, 0)
stream.addScalar(dy, dy, 1, 0)
stream.initialize()
stream.start(True)
p.addSeries(LinePlotSeries("Data"))
sd=p.getSeries(0)
sd.setLinesVisible(False)
sd.setPointSize(4)
stream_buffer = LimitedSizeDict(size_limit=51)
if get_exec_pars().source == CommandSource.ui:
if globals().has_key("marker"):
p.removeMarker(marker)
marker=None
while(True):
#Sample and plot data
stream.waitValueNot(stream.take(), 10000)
cache = stream.take()
pid = cache.getPulseId()
x=cache.getValue(dx)
y=cache.getValue(dy)
if offset==0:
add_point(x,y)
else:
stream_buffer[pid] = (x,y)
if offset<0:
if stream_buffer.has_key(pid+offset):
add_point(x,stream_buffer[pid+offset][1])
else:
if stream_buffer.has_key(pid-offset):
add_point(stream_buffer[pid-offset][0], y)
finally:
stream.close()

5
script/test/test_corr.py Normal file
View File

@@ -0,0 +1,5 @@
s1 = Stream("s1", dispatcher)
s1.addScalar("SARFE10-PSSS059:SPECTRUM_Y_SUM", "SARFE10-PSSS059:SPECTRUM_Y_SUM", 1, 0)
s1.addScalar("SARFE10-PBPS053:INTENSITY" , "SARFE10-PBPS053:INTENSITY", 1, 0)
s1.initialize()
bscan(s1, 10, 3.0)