From e7f17896058e3e35b0c0c4daba9f977b82819591 Mon Sep 17 00:00:00 2001 From: gac-x09la Date: Wed, 8 Jun 2022 15:23:15 +0200 Subject: [PATCH] Add sub-devices --- src/Scienta.java | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/src/Scienta.java b/src/Scienta.java index 1c8415c..9b062c8 100644 --- a/src/Scienta.java +++ b/src/Scienta.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import ch.psi.pshell.epics.*; -import ch.psi.utils.Arr; /** * Implementation of Scienta spectrometer analyser. @@ -24,12 +23,14 @@ public class Scienta extends AreaDetector { final DiscretePositioner lensMode, acquisitionMode, energyMode, detectorMode, elementSet, passEnergy; final ChannelString estTime, detectorState; final ChannelByteArray status; - final ChannelInteger slices, slicesReadback, channels, channelsReadback; + final ChannelInteger slices, slicesReadback, channels, channelsReadback, sweeps; + final ChannelInteger minXReadback, minYReadback, sizeXReadback, sizeYReadback; + final ChannelInteger minY; //TODO: remove when fix bug in AreaDetector final Stats[] stats; final String channelCtrl; final Device[] monitoredChildren; final boolean test; - final ChannelDouble exposureDev; + final ControlledVariable exposureDev; public Scienta(final String name, final String channelPrefix, boolean test) { this(name, channelPrefix + ":cam1", channelPrefix + ":image1", test); @@ -50,7 +51,7 @@ public class Scienta extends AreaDetector { energyWidth.setAccessType(AccessType.Read); energyCount = new ChannelInteger(name + " energy count", channelCtrl + ":COUNT_RBV", false); energyCount.setAccessType(AccessType.Read); - exposureDev = new ChannelDouble(name + " exposure time", channelCtrl + ":AcquireTime", 3, false); + exposureDev = new ControlledVariable(name + " exposure time", channelCtrl + ":AcquireTime", channelCtrl + ":AcquireTime_RBV", false); lowThetaY = new ControlledVariable(name + " low Theta Y", channelCtrl + ":LOW_THETA_Y", channelCtrl + ":LOW_THETA_Y_RBV", false); centerThetaY = new ControlledVariable(name + " center Theta Y", channelCtrl + ":CENTRE_THETA_Y", channelCtrl + ":CENTRE_THETA_Y_RBV", false); @@ -88,7 +89,8 @@ public class Scienta extends AreaDetector { channelsReadback = new ChannelInteger(name + " channels rbv", channelCtrl + ":CHANNELS_RBV", false); channelsReadback.setAccessType(AccessType.Read); excitationEnergy = new ControlledVariable(name + " excitation energy", channelCtrl + ":EXCITATION_ENERGY", channelCtrl + ":EXCITATION_ENERGY_RBV", false); - + sweeps = new ChannelInteger(name + " sweeps", channelCtrl + ":NumExposures", false); + data = new GenericArray(name + " data", channelData + ":ArrayData", SIZE_MAX, false); //If nullable on invalidd value, read blocks on Scienta. data.setAutoResolveType(false); @@ -113,13 +115,21 @@ public class Scienta extends AreaDetector { }; status.setAccessType(AccessType.Read); + minXReadback = new ChannelInteger(name + " min x readback", channelCtrl + ":MinX_RBV", false);//TODO: remove when fix bug in AreaDetector + minYReadback = new ChannelInteger(name + " min y readback", channelCtrl + ":MinY_RBV", false);//TODO: remove when fix bug in AreaDetector + sizeXReadback = new ChannelInteger(name + " size x readback", channelCtrl + ":SizeX_RBV", false);//TODO: remove when fix bug in AreaDetector + sizeYReadback = new ChannelInteger(name + " size y readback", channelCtrl + ":SizeY_RBV", false);//TODO: remove when fix bug in AreaDetector + + minY = new ChannelInteger(name + " min x", channelCtrl + ":MinY", false);//TODO: remove when fix bug in AreaDetector monitoredChildren = new Device[]{acquire, lowEnergy,centerEnergy,highEnergy,energyWidth,energyCount, lowThetaY, centerThetaY, highThetaY, stepSizeThetaY, ThetaYWidth,ThetaYCount, lowThetaX, centerThetaX, highThetaX, stepSizeThetaX, ThetaXWidth,ThetaXCount, stepSize,totalSteps,currentStep, exposuresComplete, passEnergy, lensMode, acquisitionMode, energyMode, detectorMode, elementSet, - slices, slicesReadback, channels, channelsReadback, excitationEnergy, + slices, slicesReadback, channels, channelsReadback, excitationEnergy, sweeps, + minXReadback, minYReadback, sizeXReadback, sizeYReadback, + minY, //TODO: remove when fix bug in AreaDetector exposureDev, estTime, detectorState, status }; addChildren(monitoredChildren); @@ -348,7 +358,7 @@ public class Scienta extends AreaDetector { return energyCount; } - public ChannelDouble getExposureDev() { + public ControlledVariable getExposureDev() { return exposureDev; } @@ -443,8 +453,32 @@ public class Scienta extends AreaDetector { public ControlledVariable getExcitationEnergy() { return excitationEnergy; } + public ChannelInteger getSweeps() { + return sweeps; + } + + //TODO: Remove when fix bug in AreaDetector + public ChannelInteger getMinY() { + return minY; + } + public ChannelInteger getSizeXReadback() { + return sizeXReadback; + } + + public ChannelInteger getMinXReadback() { + return minXReadback; + } + + public ChannelInteger getSizeYReadback() { + return sizeYReadback; + } + + public ChannelInteger getMinYReadback() { + return minYReadback; + } + public List getChannelRange() throws IOException, InterruptedException { ArrayList ret = new ArrayList<>(); try {