Scienta test mode

This commit is contained in:
gac-x09la
2022-03-09 10:59:42 +01:00
parent 534ad153cf
commit a9b0bd10cf
2 changed files with 81 additions and 34 deletions

View File

@@ -31,20 +31,22 @@ public class Scienta extends AreaDetector {
final ControlledVariable lowEnergy, centerEnergy, highEnergy, stepSize, lowThetaY, centerThetaY, highThetaY, stepSizeThetaY, centerThetaX;
final ControlledVariable excitationEnergy;
final GenericArray data;
final ChannelInteger totalSteps, currentStep, exposuresComplete;
final ChannelString lensMode, acquisitionMode, passEnergy, estTime, detectorState;
final ChannelInteger totalSteps, currentStep, exposuresComplete, acquisitionMode;
final ChannelString lensMode, passEnergy, estTime, detectorState;
final ChannelByteArray status;
final ChannelInteger slices, slicesReadback, channels, channelsReadback;
final Stats[] stats;
final String channelCtrl;
final Device[] monitoredChildren;
final boolean test;
public Scienta(final String name, final String channelPrefix) {
this(name, channelPrefix + ":cam1", channelPrefix + ":image1");
public Scienta(final String name, final String channelPrefix, boolean test) {
this(name, channelPrefix + ":cam1", channelPrefix + ":image1", test);
}
public Scienta(String name, String channelCtrl, String channelData) {
public Scienta(String name, String channelCtrl, String channelData, boolean test) {
super(name, channelCtrl, channelData);
this.test=test;
this.channelCtrl = channelCtrl;
acquire = new ChannelInteger(name + " aquire", channelCtrl + ":Acquire", false);
@@ -81,7 +83,7 @@ public class Scienta extends AreaDetector {
passEnergy = new ChannelString(name + " pass energy", channelCtrl + ":PASS_ENERGY", false);
lensMode = new ChannelString(name + " lens mode", channelCtrl + ":LENS_MODE", false);
acquisitionMode = new ChannelString(name + " lens mode", channelCtrl + ":ACQ_MODE", false);
acquisitionMode = new ChannelInteger(name + " acquisition mode", channelCtrl + ":ACQ_MODE", false);
slices = new ChannelInteger(name + " slices", channelCtrl + ":SLICES", false);
slicesReadback = new ChannelInteger(name + " slices rbv", channelCtrl + ":SLICES_RBV", false);
@@ -141,7 +143,7 @@ public class Scienta extends AreaDetector {
super.doSetSimulated();
setCache(passEnergy, String.valueOf(PASS_ENERGY_VALUES[0]));
setCache(lensMode, LensMode.Transmission.toString());
setCache(acquisitionMode, ch.psi.pshell.epics.Scienta.AcquisitionMode.Fixed.toString());
setCache(acquisitionMode, 0);
setSimulatedValue("ENERGY_MODE", EnergyMode.Binding.toString());
setSimulatedValue("DETECTOR_MODE", DetectorMode.ADC.toString());
@@ -206,12 +208,19 @@ public class Scienta extends AreaDetector {
}
public void setAcquisitionMode(AcquisitionMode mode) throws IOException, InterruptedException {
acquisitionMode.write(String.valueOf(mode).replaceAll("_", " "));
//acquisitionMode.write(String.valueOf(mode).replaceAll("_", " "));
acquisitionMode.write(Arr.getIndex(AcquisitionMode.values(), (mode==null) ? 0 : mode));
}
public AcquisitionMode getAcquisitionMode() throws IOException, InterruptedException {
String val = acquisitionMode.getValue();
return (AcquisitionMode) convertCtrlEnum(val, AcquisitionMode.class);
//String val = acquisitionMode.getValue();
//return (AcquisitionMode) convertCtrlEnum(val, AcquisitionMode.class);
try{
int val = acquisitionMode.getValue();
return AcquisitionMode.values()[val];
} catch (Exception ex){
return null;
}
}
public enum EnergyMode {
@@ -228,6 +237,19 @@ public class Scienta extends AreaDetector {
}
public enum LensMode {
A14L_01,
A14L_08,
A30L_01,
A30L_08,
DA14L_01,
DA14L_08,
DA30L_01,
DA30L_08,
Transmission,
Transmission_XPS
}
public enum LensModeTest {
A14_01,
A14_08,
A30_01,
@@ -240,15 +262,19 @@ public class Scienta extends AreaDetector {
DA7_08,
Transmission,
Transmission_XPS
}
public Class getLensModeClass(){
return test ? LensModeTest.class : LensMode.class;
}
public void setLensMode(LensMode mode) throws IOException, InterruptedException {
public void setLensMode(Object mode) throws IOException, InterruptedException {
//writeCtrlEnum("LENS_MODE", String.valueOf(mode));
lensMode.write(mode.equals(LensMode.Transmission_XPS) ? "Transmission XPS" : String.valueOf(mode));
String m = mode.toString();
lensMode.write(m.equals("Transmission_XPS") ? "Transmission XPS" : m);
}
public LensMode getLensMode() throws IOException, InterruptedException {
public Object getLensMode() throws IOException, InterruptedException {
//return (LensMode) readCtrlEnum("LENS_MODE", LensMode.class);
String val = lensMode.getValue();
return convertCtrlEnum(val, LensMode.class);
@@ -323,7 +349,7 @@ public class Scienta extends AreaDetector {
public Writable getLensModeDev(){
return (Writable) (Object value) -> {
setLensMode(LensMode.valueOf(String.valueOf(value)));
setLensMode(String.valueOf(value));
};
}
@@ -501,8 +527,8 @@ public class Scienta extends AreaDetector {
ret.add(100.0);
ret.add(200.0);
} else {
ret.add(lowEnergy.getValue());
ret.add(highEnergy.getValue());
ret.add(lowEnergy.getReadback().getValue());
ret.add(highEnergy.getReadback().getValue());
}
} catch (Exception ex) {
ret.add(Double.NaN);
@@ -517,18 +543,14 @@ public class Scienta extends AreaDetector {
if (isSimulated()){
ret.add(200.0);
ret.add(400.0);
} else {
switch (getLensMode()) {
case DA30_01:
case DA30_08:
ret.add(lowThetaY.getValue());
ret.add(highThetaY.getValue());
break;
default:
} else {
String lens=getLensMode().toString();
if (lens.startsWith("D")){
ret.add(lowThetaY.getReadback().getValue());
ret.add(highThetaY.getReadback().getValue());
} else {
ret.add(lowThetaX.getValue());
ret.add(highThetaX.getValue());
break;
}
}
} catch (Exception ex) {