Add sub-devices
This commit is contained in:
+41
-7
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user