diff --git a/config/devices.properties b/config/devices.properties index 8fcd56a..a6a48a3 100755 --- a/config/devices.properties +++ b/config/devices.properties @@ -1,3 +1,4 @@ +psss_fwhm_avg=ch.psi.pshell.epics.ChannelDouble|SARFE10-PSSS059:REL-E-SPREAD|||true dispatcher=ch.psi.pshell.bs.Dispatcher|https://dispatcher-api.psi.ch/sf||| cam_server=ch.psi.pshell.bs.PipelineServer|sf-daqsync-01:8889||| cam_n=ch.psi.pshell.imaging.MjpegSource|http://bernina-cam-n/axis-cgi/mjpg/video.cgi reopen||-200|false @@ -14,3 +15,6 @@ psss_roi_min=ch.psi.pshell.epics.ChannelInteger|SARFE10-PSSS059:SPC_ROI_YMIN|||t psss_roi_max=ch.psi.pshell.epics.ChannelInteger|SARFE10-PSSS059:SPC_ROI_YMAX|||true histo_center=ch.psi.pshell.device.HistogramGenerator|psss_center|||true histo_fwhm=ch.psi.pshell.device.HistogramGenerator|psss_fwhm|||true +psss_spectrum_y_average=ch.psi.pshell.device.ArrayAverager|psss_spectrum_y|||true +psss_center_average=ch.psi.pshell.device.Averager|psss_center|||true +psss_fwhm_average=ch.psi.pshell.device.Averager|psss_fwhm|||true diff --git a/config/variables.properties b/config/variables.properties index 21b6b8e..80e1aad 100755 --- a/config/variables.properties +++ b/config/variables.properties @@ -1,4 +1,4 @@ -#Tue Apr 27 16:17:59 CEST 2021 -LastRunDate=210415 -FileSequentialNumber=81 -DaySequentialNumber=0 +#Thu Apr 29 13:47:57 CEST 2021 +LastRunDate=210429 +FileSequentialNumber=86 +DaySequentialNumber=5 diff --git a/devices/CurrentCamera.properties b/devices/CurrentCamera.properties index 7f74a53..2677799 100755 --- a/devices/CurrentCamera.properties +++ b/devices/CurrentCamera.properties @@ -1,21 +1,21 @@ -#Mon Apr 26 11:55:34 CEST 2021 +#Sun May 02 17:34:36 CEST 2021 \u0000\u0000\u0000\u0000= =0 -spatialCalOffsetY=-211.42799182512672 -spatialCalOffsetX=-274.41641995560866 +spatialCalOffsetY=-92.49729632739741 +spatialCalOffsetX=-96.48730927109395 colormapLogarithmic=false scale=1.0 grayscale=false -spatialCalScaleX=-2.0325203289739266 -spatialCalScaleY=-2.024291558875032 -colormapMax=220.0 +spatialCalScaleX=-13.33686325150698 +spatialCalScaleY=-11.627907252956081 +colormapMax=81.0 Y=0 rescaleOffset=0.0 roiWidth=-1 colormap=Temperature imageWidth=1280 invert=false -colormapMin=6.0 +colormapMin=0.0 rotation=0.0 rotationCrop=false rescaleFactor=1.0 diff --git a/devices/cam_server.properties b/devices/cam_server.properties index 8773076..bcbfd43 100755 --- a/devices/cam_server.properties +++ b/devices/cam_server.properties @@ -1,25 +1,25 @@ -#Thu Feb 25 15:32:21 CET 2021 +#Sun May 02 17:05:06 CEST 2021 +spatialCalOffsetY=-50.02315886984715 +spatialCalOffsetX=-50.01953888237593 colormapLogarithmic=false +scale=1.0 +grayscale=false spatialCalScaleX=-1.0 spatialCalScaleY=-1.0 +colormapMax=255.0 rescaleOffset=0.0 roiWidth=-1 -colormap=Grayscale +colormap=Temperature invert=false colormapMin=0.0 rotationCrop=false -roiHeight=-1 -colormapAutomatic=false -roiY=0 -roiX=0 -spatialCalOffsetY=-50.02315886984715 -spatialCalOffsetX=-50.01953888237593 -scale=1.0 -grayscale=false -colormapMax=255.0 rotation=0.0 rescaleFactor=1.0 spatialCalUnits=mm flipVertically=false +roiHeight=-1 flipHorizontally=false +colormapAutomatic=false +roiY=0 +roiX=0 transpose=false diff --git a/devices/histo_center.properties b/devices/histo_center.properties index 99d6128..e0a9c8d 100755 --- a/devices/histo_center.properties +++ b/devices/histo_center.properties @@ -1,6 +1,6 @@ -#Tue Apr 27 16:40:07 CEST 2021 -bins=100 -min=11340.0 -max=11260.0 +#Fri Apr 30 14:09:41 CEST 2021 +bins=1000 +min=11240.0 +max=11160.0 precision=-1 -numberOfSamples=100 +numberOfSamples=10000 diff --git a/devices/histo_fwhm.properties b/devices/histo_fwhm.properties index 54c238d..da35091 100755 --- a/devices/histo_fwhm.properties +++ b/devices/histo_fwhm.properties @@ -1,6 +1,6 @@ -#Fri Feb 26 14:09:58 CET 2021 -bins=100 +#Fri Apr 30 07:45:13 CEST 2021 +bins=1000 min=0.0 -max=200.0 +max=40.0 precision=-1 -numberOfSamples=100 +numberOfSamples=10000 diff --git a/devices/psss_center_average.properties b/devices/psss_center_average.properties new file mode 100644 index 0000000..6a20991 --- /dev/null +++ b/devices/psss_center_average.properties @@ -0,0 +1,4 @@ +#Mon May 03 09:21:35 CEST 2021 +measures=10 +precision=-1 +interval=-1 diff --git a/devices/psss_fwhm_average.properties b/devices/psss_fwhm_average.properties new file mode 100644 index 0000000..6aeec64 --- /dev/null +++ b/devices/psss_fwhm_average.properties @@ -0,0 +1,4 @@ +#Mon May 03 09:21:52 CEST 2021 +measures=10 +precision=-1 +interval=-1 diff --git a/devices/psss_spectrum_y_average.properties b/devices/psss_spectrum_y_average.properties new file mode 100644 index 0000000..2c2e72a --- /dev/null +++ b/devices/psss_spectrum_y_average.properties @@ -0,0 +1,5 @@ +#Mon May 03 09:15:04 CEST 2021 +measures=10 +precision=-1 +interval=-1 +integrate=false diff --git a/plugins/Chris.form b/plugins/Chris.form index 156c715..54b8129 100755 --- a/plugins/Chris.form +++ b/plugins/Chris.form @@ -19,7 +19,9 @@ - + + + @@ -28,7 +30,12 @@ - + + + + + + @@ -39,5 +46,7 @@ + + diff --git a/plugins/Chris.java b/plugins/Chris.java index e076892..a85819d 100755 --- a/plugins/Chris.java +++ b/plugins/Chris.java @@ -36,6 +36,7 @@ public class Chris extends Panel { private void initComponents() { jRadioButton1 = new javax.swing.JRadioButton(); + cameraPanel1 = new ch.psi.pshell.swing.CameraPanel(); jRadioButton1.setText("jRadioButton1"); @@ -46,18 +47,25 @@ public class Chris extends Panel { .addGroup(layout.createSequentialGroup() .addGap(111, 111, 111) .addComponent(jRadioButton1) - .addContainerGap(213, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cameraPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(49, 49, 49) .addComponent(jRadioButton1) - .addContainerGap(65, Short.MAX_VALUE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cameraPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) ); }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables + private ch.psi.pshell.swing.CameraPanel cameraPanel1; private javax.swing.JRadioButton jRadioButton1; // End of variables declaration//GEN-END:variables } diff --git a/plugins/PSSS.form b/plugins/PSSS.form index 6ffd0ee..cab1b86 100755 --- a/plugins/PSSS.form +++ b/plugins/PSSS.form @@ -113,6 +113,9 @@ + + + diff --git a/plugins/PSSS.java b/plugins/PSSS.java index d9b5482..a6f074d 100755 --- a/plugins/PSSS.java +++ b/plugins/PSSS.java @@ -22,7 +22,7 @@ public class PSSS extends Panel { final String CAMERA_NAME = "SARFE10-PSSS059"; PipelineServer pipelineServer; volatile boolean updatingPlot; - volatile boolean updatingImage; + volatile boolean updatingImage; public PSSS() { initComponents(); @@ -39,7 +39,7 @@ public class PSSS extends Panel { try { setGlobalVar("PSSS_PLOT", plot); setGlobalVar("HISTORY_PLOT", history); - setGlobalVar("PSSS_RENDERER", renderer); + setGlobalVar("PSSS_RENDERER", renderer); pipelineServer = (PipelineServer) getDevice("cam_server"); ((LinePlotJFree)histogramGeneratorPanelCenter.getPlot()).setLegendVisible(true); @@ -48,6 +48,8 @@ public class PSSS extends Panel { histogramGeneratorFwhm.getPlot().getAxis(Plot.AxisId.Y).setRange(0, 100); //setImageEnabled(true); tabStateChanged(null); + + spinnerAverage.setValue(( (Number) eval("get_psss_averaging()", true)).intValue()); } catch (Exception ex) { getLogger().log(Level.WARNING, null, ex); @@ -74,7 +76,8 @@ public class PSSS extends Panel { try { if (!updatingPlot){ updatingPlot = true; - evalAsync("plot_psss(PSSS_PLOT, HISTORY_PLOT, " + spinnerAverage.getValue() + ")", true).handle((ret,ex)->{ + //evalAsync("plot_psss(PSSS_PLOT, HISTORY_PLOT, " + spinnerAverage.getValue() + ")", true).handle((ret,ex)->{ + evalAsync("plot_psss(PSSS_PLOT, HISTORY_PLOT)", true).handle((ret,ex)->{ updatingPlot = false; return ret; }); @@ -195,6 +198,11 @@ public class PSSS extends Panel { jLabel1.setText("Average:"); spinnerAverage.setModel(new javax.swing.SpinnerNumberModel(1, 1, 100, 1)); + spinnerAverage.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + spinnerAverageStateChanged(evt); + } + }); histogramGeneratorPanelCenter.setDeviceName("histo_center"); @@ -632,7 +640,7 @@ public class PSSS extends Panel { private void btAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAbortActionPerformed try { abort(); - } catch (InterruptedException ex) { + } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_btAbortActionPerformed @@ -677,6 +685,14 @@ public class PSSS extends Panel { ((CardLayout)panelScan.getLayout()).show(panelScan, "crystal"); }//GEN-LAST:event_radioCrystalScanActionPerformed + private void spinnerAverageStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerAverageStateChanged + try { + eval("set_psss_averaging(" + spinnerAverage.getValue() + ")", true); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_spinnerAverageStateChanged + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btAbort; private javax.swing.JButton btStartCam; diff --git a/script/beam_jitter_measurements/prof_mono_histogram.py b/script/beam_jitter_measurements/prof_mono_histogram.py index 64da2d4..7423da6 100755 --- a/script/beam_jitter_measurements/prof_mono_histogram.py +++ b/script/beam_jitter_measurements/prof_mono_histogram.py @@ -1,7 +1,7 @@ import ch.psi.pshell.device.HistogramGenerator as HistogramGenerator -#CAMERA_NAME = "SAROP21-PPRM102" -CAMERA_NAME = "SAROP21-PPRM138" +CAMERA_NAME = "SAROP21-PPRM102" +#CAMERA_NAME = "SAROP21-PPRM138" cam_server.start(CAMERA_NAME + "_sp", CAMERA_NAME + "_sp1") #Start or connect to ScreenPanel pipeline cam_server.stream.waitCacheChange(2000) diff --git a/script/cpython/psss.py b/script/cpython/psss.py index f92aa4d..a169a49 100755 --- a/script/cpython/psss.py +++ b/script/cpython/psss.py @@ -24,10 +24,11 @@ def fit_energy(e_from, e_to, steps, num_shots, data): def fit_crystal_height(xstal_from, xstal_to, steps, data): xstal_range = np.linspace(xstal_from, xstal_to, steps) projection = data.mean(axis=1).mean(axis=1) + offset = np.mean(projection[0:100]) signal_centre = xstal_range[np.argmax(projection)] xstal_range_fit = np.linspace(xstal_range[0], xstal_range[-1], len(xstal_range)*10) try: - popt,pcov = curve_fit(gaus,xstal_range,projection,p0=[100,signal_centre,-0.2,100]) + popt,pcov = curve_fit(gaus,xstal_range,projection,p0=[100,signal_centre,-0.2,offset]) except: raise Exception('Fit failed: spectrum might not be near scan range center \n' + str(sys.exc_info()[1])) #print('Fit failed: spectrum might not be near scan range center') diff --git a/script/psss/CrystalHeightScan.py b/script/psss/CrystalHeightScan.py index 6c3ac73..a50e12c 100755 --- a/script/psss/CrystalHeightScan.py +++ b/script/psss/CrystalHeightScan.py @@ -20,7 +20,7 @@ run("cpython/wrapper") #Setup and functions setup¶ if not is_dry_run(): - xstal_height=Channel("ARFE10-PSSS059:MOTOR_Y3.VAL", name="xstal_height") + xstal_height=Channel("SARFE10-PSSS059:MOTOR_Y3.VAL", name="xstal_height") else: xstal_height=DummyRegister("xstal_height") @@ -36,7 +36,7 @@ average, samples, xstal_range = r.getReadable(0), r.getReadable(1), r.getPositi #return maxium position [amp, mean_val, sigma, offset], projection = fit_crystal_height(RANGE_FROM, RANGE_TO, STEPS+1, samples) - +print(mean_val) if not (RANGE_FROM < mean_val < RANGE_TO or RANGE_TO < mean_val < RANGE_FROM): raise Exception ("Invalid fit mean: " + str(mean_val)) diff --git a/script/psss/psss.py b/script/psss/psss.py index eb80ff9..c82f729 100755 --- a/script/psss/psss.py +++ b/script/psss/psss.py @@ -2,7 +2,7 @@ import org.jfree.ui.RectangleAnchor as RectangleAnchor import org.jfree.ui.TextAnchor as TextAnchor import ch.psi.pshell.imaging.Overlay as Overlay import ch.psi.pshell.plot.RangeSelectionPlot as RangeSelectionPlot - +from collections import deque PSSS_CAMERA_NAME = "SARFE10-PSSS059"; @@ -21,6 +21,7 @@ def average_arrays(arrays): ret = [x/s for x in ret] return ret + def get_psss_data(average=1): ax,ay,ac,af=[],[],[],[] x = psss_spectrum_x.take() @@ -37,13 +38,13 @@ def get_psss_data(average=1): psss_spectrum_y.waitCacheChange(2000) #psss_center.waitCacheChange(1) #psss_fwhm.waitCacheChange(1) - #x=average_arrays(ax) +#x=average_arrays(ax) y=average_arrays(ay) center=mean(ac) fwhm=mean(af) return x,y,center,fwhm -def plot_psss(p, h=None, average = 1): +def plot_psss(p, h=None, average = None): """ if len(p.getMarkers())==0: m1=p.addMarker(0,None,"",Color.WHITE) @@ -56,11 +57,20 @@ def plot_psss(p, h=None, average = 1): #Manipulate axis (use PSSS_PLOT for the global object): #p.getAxis(LinePlot.AxisId.X). + # Setup queues + if p.getNumberOfSeries()==0: + center_queue = deque(maxlen=100) + fwhm_queue = deque(maxlen=100) + + # Setup figures if p.getNumberOfSeries()==0: p.addSeries(LinePlotSeries("spectrum")) p.addSeries(LinePlotSeries("average")) p.setLegendVisible(True) + p.getAxis(LinePlot.AxisId.X) + p.getAxis(LinePlot.AxisId.X).setLabel("Energy [eV]") + p.getAxis(LinePlot.AxisId.Y).setLabel("Sum counts") if len(p.getMarkers())==0: paint = RangeSelectionPlot().getSelectionColor() #p.chart.getBackgroundPaint() m=p.addIntervalMarker(0,0, None,"", paint) @@ -69,31 +79,52 @@ def plot_psss(p, h=None, average = 1): m.setLabelPaint(Color.WHITE) else: m = p.getMarkers()[0] - - x,y, center,fwhm = get_psss_data(average) + + + x,y, = psss_spectrum_x.take(), psss_spectrum_y.take() + # update spectral plot + if (x is None) or (y is None): + p.getSeries(0).clear() + else: + p.getSeries(0).setData(x,y) + if (x is None) or (y is None): + p.getSeries(0).clear() + else: + p.getSeries(0).setData(x,y) + + if average is not None: + print "Average: ", average + x,y, center,fwhm = get_psss_data(average) + else: + y = psss_spectrum_y_average.take() + center = psss_center_average.take() + fwhm = psss_fwhm_average.take() + if (x is None) or (y is None): p.getSeries(1).clear() else: p.getSeries(1).setData(x,y) - x,y, _,_ = get_psss_data(1) - if (x is None) or (y is None): - p.getSeries(0).clear() - else: - p.getSeries(0).setData(x,y) - + if (center!= None) and (fwhm!=None): - m.startValue, m.endValue = center - fwhm, center + fwhm + center=center.doubleValue() + fwhm=fwhm.doubleValue() + m.startValue, m.endValue = center - fwhm/2, center + fwhm/2 m.label = str(center) - + if h: if h.getNumberOfSeries()==0: - h.addSeries(TimePlotSeries("center")) - h.addSeries(TimePlotSeries("fwhm",2)) + h.addSeries(TimePlotSeries("centre")) + h.addSeries(TimePlotSeries("Energy spread SS",2)) + h.addSeries(TimePlotSeries("Energy spread cum avg",2)) h.setLegendVisible(True) h.setTimeAxisLabel("") + h.getAxis(Timeplot.AxisId.Y1).setLabel("Central energy [eV]") + per_mil = (fwhm/center)*1e3 + per_mil_avg = psss_fwhm_avg.take() h.getSeries(0).appendData(center) - h.getSeries(1).appendData(fwhm) + h.getSeries(1).appendData(per_mil) + h.getSeries(2).appendData(per_mil_avg) return center,fwhm ovmin, ovmax, ovavg = None, None, None @@ -146,4 +177,12 @@ def enable_psss_image(enabled, renderer): cam_server.stop() except: log(sys.exc_info()[1]) - \ No newline at end of file + + +def get_psss_averaging(): + return psss_spectrum_y_average.config.measures + +def set_psss_averaging(measures): + psss_spectrum_y_average.config.measures=measures + psss_center_average.config.measures=measures + psss_fwhm_average.config.measures=measures \ No newline at end of file