Add sub-devices

This commit is contained in:
gac-x09la
2022-06-08 15:23:15 +02:00
parent f62fa8b58e
commit e7f1789605
+41 -7
View File
@@ -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<Double> getChannelRange() throws IOException, InterruptedException {
ArrayList<Double> ret = new ArrayList<>();
try {