Cleanup OTF scan

This commit is contained in:
2013-10-14 16:10:54 +02:00
parent cb6ec74859
commit 2cba6e7991
11 changed files with 98 additions and 326 deletions
@@ -52,16 +52,15 @@ import ch.psi.fda.core.actors.ChannelAccessLinearActuator;
import ch.psi.fda.core.actors.ChannelAccessTableActuator;
import ch.psi.fda.core.actors.ComplexActuator;
import ch.psi.fda.core.actors.JythonFunction;
import ch.psi.fda.core.actors.OTFActuator;
import ch.psi.fda.core.actors.PseudoActuatorSensor;
import ch.psi.fda.core.guard.ChannelAccessGuard;
import ch.psi.fda.core.guard.ChannelAccessGuardCondition;
import ch.psi.fda.core.loops.ActorSensorLoop;
import ch.psi.fda.core.loops.TemplateOTF;
import ch.psi.fda.core.loops.OTFLoop;
import ch.psi.fda.core.loops.cr.CrlogicLoop;
import ch.psi.fda.core.loops.cr.ParallelCrlogic;
import ch.psi.fda.core.loops.cr.ScrlogicLoop;
import ch.psi.fda.core.loops.otf.OTFLoop;
import ch.psi.fda.core.loops.otf.TemplateOTF;
import ch.psi.fda.core.manipulator.JythonManipulation;
import ch.psi.fda.core.messages.DataMessageMetadata;
import ch.psi.fda.core.scripting.JythonGlobalVariable;
@@ -73,7 +72,6 @@ import ch.psi.fda.core.scripting.JythonParameterMappingID;
import ch.psi.fda.core.sensors.ChannelAccessSensor;
import ch.psi.fda.core.sensors.MillisecondTimestampSensor;
import ch.psi.fda.core.sensors.OTFNamedChannelSensor;
import ch.psi.fda.core.sensors.OTFReadbackSensor;
import ch.psi.fda.core.sensors.OTFScalerChannelSensor;
import ch.psi.fda.model.ModelManager;
import ch.psi.fda.model.v1.Action;
@@ -1031,10 +1029,7 @@ public class Acquisition {
if(p.getAdditionalBacklash()!=null){
backlash = p.getAdditionalBacklash();
}
OTFActuator actor = new OTFActuator(p.getId(), p.getName(), p.getReadback(), p.getStart(), p.getEnd(), p.getStepSize(), p.getIntegrationTime(), backlash);
actionLoop.setActor(actor);
actionLoop.getSensors().add(new OTFReadbackSensor(p.getId()));
actionLoop.setActuator(p.getId(), p.getName(), p.getReadback(), p.getStart(), p.getEnd(), p.getStepSize(), p.getIntegrationTime(), backlash);
// Map sensors
// ATTENTION: the sequence of the mapping depends on the sequence in the schema file !
@@ -1091,8 +1086,7 @@ public class Acquisition {
if(p.getAdditionalBacklash()!=null){
backlash = p.getAdditionalBacklash();
}
OTFActuator actor = new OTFActuator(p.getId(), p.getName(), p.getReadback(), p.getStart(), p.getEnd(), p.getStepSize(), p.getIntegrationTime(), backlash);
actionLoop.setActor(actor);
actionLoop.setActuator(p.getId(), p.getName(), p.getReadback(), p.getStart(), p.getEnd(), p.getStepSize(), p.getIntegrationTime(), backlash);
// Map sensors
// ATTENTION: the sequence of the mapping depends on the sequence in the schema file !
@@ -1,99 +0,0 @@
/**
*
* Copyright 2010 Paul Scherrer Institute. All rights reserved.
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This code is distributed in the hope that it will be useful,
* but without any warranty; without even the implied warranty of
* merchantability or fitness for a particular purpose. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this code. If not, see <http://www.gnu.org/licenses/>.
*
*/
package ch.psi.fda.core.actors;
import ch.psi.fda.core.Actor;
/**
* Special actuator for the OTFLoop. This type of actor must not be used in any other
* type of loop than OTFLoop. If it is used it will, depending on the loop, immediately stop the loop
* as it no single step.
*/
public class OTFActuator implements Actor {
private final String id;
private final String name; // name of the motor channel
private final String readback; // name of the encoder channel
private double start;
private double end;
private final double stepSize;
private final double integrationTime;
private final double additionalBacklash;
public OTFActuator(String id, String name, String readback, double start, double end, double stepSize, double integrationTime, double additionalBacklash){
this.id = id;
this.name = name;
this.readback = readback;
this.start = start;
this.end = end;
this.stepSize = stepSize;
this.integrationTime = integrationTime;
this.additionalBacklash = additionalBacklash;
}
@Override
public void set() {
}
@Override
public boolean hasNext() {
return false;
}
@Override
public void init() {
}
@Override
public void reverse() {
double aend = end;
end=start;
start=aend;
}
@Override
public void reset() {
}
public String getName() {
return name;
}
public String getReadback() {
return readback;
}
public double getStart() {
return start;
}
public double getEnd() {
return end;
}
public double getStepSize() {
return stepSize;
}
public double getIntegrationTime() {
return integrationTime;
}
public double getAdditionalBacklash() {
return additionalBacklash;
}
public String getId() {
return id;
}
}
@@ -49,7 +49,6 @@ import ch.psi.fda.core.messages.Message;
*/
public class ActorSensorLoop implements ActionLoop {
// Get Logger
private static Logger logger = Logger.getLogger(ActorSensorLoop.class.getName());
/**
@@ -120,16 +119,10 @@ public class ActorSensorLoop implements ActionLoop {
private List<ActorSetCallable> pactors;
/**
* Default constructor
*/
public ActorSensorLoop(){
this(false);
}
/**
* Create instance of the
*/
public ActorSensorLoop(boolean zigZag){
this.zigZag = zigZag;
this.actionLoops = new ArrayList<ActionLoop>();
@@ -148,9 +141,6 @@ public class ActorSensorLoop implements ActionLoop {
}
/* (non-Javadoc)
* @see ch.psi.fda.engine.ActionLoop#execute()
*/
/**
* Executes the actor sensor loop. The actor sensor loop is build up as follows:
* preActions
@@ -353,9 +343,6 @@ public class ActorSensorLoop implements ActionLoop {
}
/* (non-Javadoc)
* @see ch.psi.fda.engine.ActionLoop#abort()
*/
@Override
public void abort(){
abort = true;
@@ -372,9 +359,6 @@ public class ActorSensorLoop implements ActionLoop {
}
}
/* (non-Javadoc)
* @see ch.psi.fda.core.ActionLoop#prepare()
*/
@Override
public void prepare() {
// Put in prepare code here
@@ -396,10 +380,6 @@ public class ActorSensorLoop implements ActionLoop {
}
}
/* (non-Javadoc)
* @see ch.psi.fda.core.ActionLoop#cleanup()
*/
@Override
public void cleanup() {
// Put in cleanup code here
@@ -436,89 +416,38 @@ public class ActorSensorLoop implements ActionLoop {
return new DataQueue(dataQueue, m);
}
// Getter functions for variable parts
/**
* @return the actionLoops
*/
public List<ActionLoop> getActionLoops() {
return actionLoops;
}
/**
* @return the preActorActions
*/
public List<Action> getPreActorActions() {
return preActorActions;
}
/**
* @return the postActorActions
*/
public List<Action> getPostActorActions() {
return postActorActions;
}
/**
* @return the preSensorActions
*/
public List<Action> getPreSensorActions() {
return preSensorActions;
}
/**
* @return the postSensorActions
*/
public List<Action> getPostSensorActions() {
return postSensorActions;
}
/**
* @return the actors
*/
public List<Actor> getActors() {
return actors;
}
/**
* @return the sensors
*/
public List<Sensor> getSensors() {
return sensors;
}
/**
* @return the guard
*/
public Guard getGuard() {
return guard;
}
/**
* @param guard the guard to set
*/
public void setGuard(Guard guard) {
this.guard = guard;
}
/**
* @return the dataGroup
*/
public boolean isDataGroup() {
return dataGroup;
}
/**
* @param dataGroup the dataGroup to set
*/
public void setDataGroup(boolean dataGroup) {
this.dataGroup = dataGroup;
}
}
@@ -38,7 +38,6 @@ import jcifs.smb.SmbFile;
import ch.psi.fda.core.Action;
import ch.psi.fda.core.ActionLoop;
import ch.psi.fda.core.Sensor;
import ch.psi.fda.core.actors.OTFActuator;
import ch.psi.fda.core.messages.ComponentMetadata;
import ch.psi.fda.core.messages.DataMessage;
import ch.psi.fda.core.messages.DataMessageMetadata;
@@ -126,11 +125,6 @@ public class CrlogicLoop implements ActionLoop {
*/
private Semaphore semaphore = new Semaphore(1);
/**
* Special OTF Actuator
*/
private OTFActuator actuator = null;
/**
* List of sensors of this loop
*/
@@ -156,6 +150,15 @@ public class CrlogicLoop implements ActionLoop {
private final ChannelService cservice;
private String id;
private String name; // name of the motor channel
private String readback; // name of the encoder channel
private double start;
private double end;
private double stepSize;
private double integrationTime;
private double additionalBacklash;
public CrlogicLoop(ChannelService cservice, String prefix, String server, String share, String smbShare, boolean zigZag){
this.cservice = cservice;
this.prefix = prefix;
@@ -175,7 +178,18 @@ public class CrlogicLoop implements ActionLoop {
this.dataQueue = new LinkedBlockingQueue<Message>(2000);
}
public void setActuator(String id, String name, String readback, double start, double end, double stepSize, double integrationTime, double additionalBacklash){
this.id = id;
this.name = name;
this.readback = readback;
this.start = start;
this.end = end;
this.stepSize = stepSize;
this.integrationTime = integrationTime;
this.additionalBacklash = additionalBacklash;
}
/**
* Collect data from share
* @param tmpFileName Name of the temporary file
@@ -323,15 +337,9 @@ public class CrlogicLoop implements ActionLoop {
public void execute() throws InterruptedException {
try{
double stepSize = actuator.getStepSize();
double start = actuator.getStart();
double end = actuator.getEnd();
double integrationTime = actuator.getIntegrationTime();
double ubacklash = actuator.getAdditionalBacklash();
// Set values for the datafilter
crlogicDataFilter.setStart(actuator.getStart());
crlogicDataFilter.setEnd(actuator.getEnd());
crlogicDataFilter.setStart(start);
crlogicDataFilter.setEnd(end);
// Reset data filter
for(Integer k: scalerIndices.keySet()){
@@ -461,7 +469,7 @@ public class CrlogicLoop implements ActionLoop {
// TODO Calculate and set motor speed, backlash, etc.
double motorSpeed = stepSize/integrationTime;
double backlash = (0.5*motorSpeed*motortemplate.getAccelerationTime().getValue())+motorBacklash+ubacklash;
double backlash = (0.5*motorSpeed*motortemplate.getAccelerationTime().getValue())+motorBacklash+additionalBacklash;
double realEnd = end+(backlash*direction);
double realStart = start-(backlash*direction);
@@ -569,7 +577,10 @@ public class CrlogicLoop implements ActionLoop {
readQueue.put(tmpFileName);
if(zigZag){
actuator.reverse();
// reverse start/end
double aend = end;
end=start;
start=aend;
}
synchronized(this){
@@ -638,7 +649,7 @@ public class CrlogicLoop implements ActionLoop {
// Connect motor channels
motortemplate = new TemplateMotor();
map = new HashMap<>();
map.put("PREFIX", actuator.getName());
map.put("PREFIX", this.name);
cservice.createAnnotatedChannels(motortemplate, map);
useReadback = motortemplate.getUseReadback().getValue();
@@ -655,20 +666,20 @@ public class CrlogicLoop implements ActionLoop {
// Determine mode of motor
if((!useReadback) && (!useEncoder)){
// Open loop
if(actuator.getReadback()!=null){
if(this.readback!=null){
throw new IllegalArgumentException("Readback not supported if motor is configured in open loop");
}
else{
readoutResources.add(actuator.getName());
readoutResources.add(this.name);
}
}
else if(useReadback && (!useEncoder)){
String readback;
// use readback link
if(actuator.getReadback()!=null){
if(this.readback!=null){
// Use specified readback
readback = (actuator.getReadback());
readback = this.readback;
}
else{
// Set resouce to readback link
@@ -701,12 +712,12 @@ public class CrlogicLoop implements ActionLoop {
}
else if (useEncoder && (!useReadback)){
// use readback link
if(actuator.getReadback()!=null){
if(this.readback!=null){
throw new IllegalArgumentException("Readback not supported if motor is configured to use encoder");
}
else{
// Set resouce to readback link
readoutResources.add(actuator.getName()+"_ENC");
readoutResources.add(this.name+"_ENC");
}
}
else{
@@ -799,14 +810,6 @@ public class CrlogicLoop implements ActionLoop {
return sensors;
}
public OTFActuator getActor() {
return actuator;
}
public void setActor(OTFActuator actor) {
this.actuator = actor;
}
/**
* The structure of the data message depends on the sensors registered at this loop
* at the time this method is called.
@@ -816,7 +819,7 @@ public class CrlogicLoop implements ActionLoop {
DataMessageMetadata m = new DataMessageMetadata();
// Build up data message metadata based on the sensors currently registered.
m.getComponents().add(new ComponentMetadata(actuator.getId()));
m.getComponents().add(new ComponentMetadata(this.id));
for(Sensor s: sensors){
m.getComponents().add(new ComponentMetadata(s.getId()));
}
@@ -16,7 +16,7 @@
* along with this code. If not, see <http://www.gnu.org/licenses/>.
*
*/
package ch.psi.fda.core.loops;
package ch.psi.fda.core.loops.otf;
import java.io.File;
import java.io.FileReader;
@@ -26,10 +26,6 @@ import java.net.MalformedURLException;
import jcifs.smb.SmbFile;
/**
* @author ebner
*
*/
public class DistributedFile {
private SmbFile smbfile = null;
@@ -17,7 +17,7 @@
*
*/
package ch.psi.fda.core.loops;
package ch.psi.fda.core.loops.otf;
import java.io.BufferedReader;
import java.io.IOException;
@@ -32,7 +32,6 @@ import java.util.logging.Logger;
import ch.psi.fda.core.Action;
import ch.psi.fda.core.ActionLoop;
import ch.psi.fda.core.Sensor;
import ch.psi.fda.core.actors.OTFActuator;
import ch.psi.fda.core.messages.ComponentMetadata;
import ch.psi.fda.core.messages.DataMessage;
import ch.psi.fda.core.messages.DataMessageMetadata;
@@ -41,18 +40,14 @@ import ch.psi.fda.core.messages.EndOfStreamMessage;
import ch.psi.fda.core.messages.Message;
import ch.psi.fda.core.sensors.MillisecondTimestampSensor;
import ch.psi.fda.core.sensors.OTFNamedChannelSensor;
import ch.psi.fda.core.sensors.OTFReadbackSensor;
import ch.psi.fda.core.sensors.OTFScalerChannelSensor;
/**
* ActionLoop that is implementing the OTF Scan logic.
* While executing the loop a full OTF scan procedure is executed.
* @author ebner
*
*/
public class OTFLoop implements ActionLoop {
// Get Logger
private static Logger logger = Logger.getLogger(OTFLoop.class.getName());
/**
@@ -61,7 +56,6 @@ public class OTFLoop implements ActionLoop {
*/
private boolean dataGroup = false;
// Constants
/**
* Maximum number of monitored channels
*/
@@ -108,11 +102,6 @@ public class OTFLoop implements ActionLoop {
*/
private List<Action> postActions;
/**
* Special OTF Actuator
*/
private OTFActuator actor = null;
/**
* List of sensors of this loop
*/
@@ -138,8 +127,18 @@ public class OTFLoop implements ActionLoop {
*/
private volatile boolean abort = false;
private String id;
private String name; // name of the motor channel
private String readback; // name of the encoder channel
private double start;
private double end;
private double stepSize;
private double integrationTime;
private double additionalBacklash;
/**
* Constructor
* @param channelPrefix Prefix of the OTF related records, e.g. MTEST-HW3-OTF
* @param server NFS server the OTF C Logic should put its data to
* @param share Share on NFS server to put the OTF C Logic data
@@ -164,6 +163,18 @@ public class OTFLoop implements ActionLoop {
this.dataQueue = new LinkedBlockingQueue<Message>(2000);
}
public void setActuator(String id, String name, String readback, double start, double end, double stepSize, double integrationTime, double additionalBacklash){
this.id = id;
this.name = name;
this.readback = readback;
this.start = start;
this.end = end;
this.stepSize = stepSize;
this.integrationTime = integrationTime;
this.additionalBacklash = additionalBacklash;
}
/* (non-Javadoc)
* @see ch.psi.fda.core.Action#execute()
*/
@@ -218,14 +229,10 @@ public class OTFLoop implements ActionLoop {
// Set abort flag to false
abort=false;
// Check whether actor is set for the loop
if(actor == null){
throw new IllegalStateException("No actor specified for this loop");
}
// list with all monitored channels
List<String> monitoredChannels = new ArrayList<String>();
dataIndexes = new ArrayList<Integer>();
dataIndexes.add(1); // The first one is always the readback of the motor
int channelCount =0;
for(Sensor s: sensors){
if(s instanceof OTFNamedChannelSensor){
@@ -251,9 +258,9 @@ public class OTFLoop implements ActionLoop {
else if (s instanceof MillisecondTimestampSensor){
dataIndexes.add(2+numberOfScalerChannels+numberOfMonitoredChannels);
}
else if (s instanceof OTFReadbackSensor){
dataIndexes.add(1);
}
// else if (s instanceof OTFReadbackSensor){
// dataIndexes.add(1);
// }
else{
throw new IllegalArgumentException("Sensor type "+s.getClass()+" is not supported by this loop");
}
@@ -264,23 +271,23 @@ public class OTFLoop implements ActionLoop {
obean.resetToDefaults();
// Set actor properties
obean.setMotor(actor.getName());
obean.setMotor(this.name);
obean.waitUntilMotorOk(timeout);
obean.setBegin(actor.getStart());
obean.setEnd(actor.getEnd());
obean.setStepSize(actor.getStepSize());
obean.setIntegrationTime(actor.getIntegrationTime());
obean.setBegin(this.start);
obean.setEnd(this.end);
obean.setStepSize(this.stepSize);
obean.setIntegrationTime(this.integrationTime);
// Override encoder if specified
if(actor.getReadback()!=null){
if(this.readback!=null){
obean.setUseEncoder(true);
obean.setEncoder(actor.getReadback());
obean.setEncoder(this.readback);
obean.waitUntilEncoderOk(timeout);
}
// Set user backlash
obean.setUserBacklash(actor.getAdditionalBacklash());
obean.setUserBacklash(this.additionalBacklash);
// NFS settings
@@ -348,6 +355,7 @@ public class OTFLoop implements ActionLoop {
*/
public DataQueue getDataQueue() {
DataMessageMetadata m = new DataMessageMetadata();
m.getComponents().add(new ComponentMetadata(id)); // Id of the readback of the motor
// Build up data message metadata based on the sensors currently registered.
for(Sensor s: sensors){
@@ -441,12 +449,6 @@ public class OTFLoop implements ActionLoop {
public List<Sensor> getSensors() {
return sensors;
}
public OTFActuator getActor() {
return actor;
}
public void setActor(OTFActuator actor) {
this.actor = actor;
}
public boolean isDataGroup() {
return dataGroup;
}
@@ -17,7 +17,7 @@
*
*/
package ch.psi.fda.core.loops;
package ch.psi.fda.core.loops.otf;
import java.util.List;
import java.util.concurrent.ExecutionException;
@@ -1,48 +0,0 @@
/**
*
* Copyright 2010 Paul Scherrer Institute. All rights reserved.
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This code is distributed in the hope that it will be useful,
* but without any warranty; without even the implied warranty of
* merchantability or fitness for a particular purpose. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this code. If not, see <http://www.gnu.org/licenses/>.
*
*/
package ch.psi.fda.core.sensors;
import ch.psi.fda.core.Sensor;
/**
* Sensor to read actuator readback. This sensor must only be used within the
* OTFLoop. If it is used in other loops, the read value will always be 0.
* @author ebner
*
*/
public class OTFReadbackSensor implements Sensor {
private final String id;
public OTFReadbackSensor(String id){
this.id = id;
}
@Override
public Object read() {
// Always return 0 if read() method is called.
return 0d;
}
@Override
public String getId() {
return id;
}
}
@@ -28,6 +28,7 @@ import org.junit.Before;
import org.junit.Test;
import ch.psi.fda.TestConfiguration;
import ch.psi.fda.core.loops.otf.DistributedFile;
/**
* @author ebner
@@ -58,7 +59,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#getCanonicalPath()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#getCanonicalPath()}.
* @throws IOException
*/
@Test
@@ -68,7 +69,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#exists()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#exists()}.
* @throws IOException
*/
@Test
@@ -82,7 +83,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#isDirectory()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#isDirectory()}.
* @throws IOException
*/
@Test
@@ -96,7 +97,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#listFiles()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#listFiles()}.
*/
@Test
public void testListFiles() {
@@ -104,7 +105,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#getName()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#getName()}.
*/
@Test
public void testGetName() {
@@ -113,7 +114,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#isFile()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#isFile()}.
* @throws IOException
*/
@Test
@@ -127,7 +128,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#delete()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#delete()}.
*/
@Test
public void testDelete() {
@@ -135,7 +136,7 @@ public class DistributedFileTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.DistributedFile#getInputStream()}.
* Test method for {@link ch.psi.fda.core.loops.otf.DistributedFile#getInputStream()}.
*/
@Test
public void testGetInputStream() {
@@ -34,15 +34,14 @@ import org.junit.Before;
import org.junit.Test;
import ch.psi.fda.TestConfiguration;
import ch.psi.fda.core.actors.OTFActuator;
import ch.psi.fda.core.loops.OTFLoop;
import ch.psi.fda.core.loops.otf.OTFLoop;
import ch.psi.fda.core.loops.otf.TemplateOTF;
import ch.psi.fda.core.messages.ControlMessage;
import ch.psi.fda.core.messages.DataMessage;
import ch.psi.fda.core.messages.DataMessageMetadata;
import ch.psi.fda.core.messages.Message;
import ch.psi.fda.core.sensors.MillisecondTimestampSensor;
import ch.psi.fda.core.sensors.OTFNamedChannelSensor;
import ch.psi.fda.core.sensors.OTFReadbackSensor;
import ch.psi.fda.core.sensors.OTFScalerChannelSensor;
import ch.psi.jcae.Channel;
import ch.psi.jcae.ChannelDescriptor;
@@ -70,8 +69,6 @@ public class OTFLoopTest {
cservice = new DefaultChannelService();
statusChannel = cservice.createChannel(new ChannelDescriptor<>(Integer.class, configuration.getOtfPrefix()+":USTAT"));
OTFActuator actor = new OTFActuator("id", configuration.getMotor1(), null, 0, 8, 0.5, 0.5, 0);
OTFReadbackSensor s1 = new OTFReadbackSensor("id0");
OTFScalerChannelSensor s2 = new OTFScalerChannelSensor("id1", 0);
OTFScalerChannelSensor s3 = new OTFScalerChannelSensor("id2", 1);
MillisecondTimestampSensor s4 = new MillisecondTimestampSensor("id3");
@@ -85,8 +82,7 @@ public class OTFLoopTest {
// ZigZag loop
loopZigZag = new OTFLoop(template, configuration.getServer(), configuration.getShare(), configuration.getSmbShare(), true);
loopZigZag.setActor(actor);
loopZigZag.getSensors().add(s1);
loopZigZag.setActuator("id0", configuration.getMotor1(), null, 0, 8, 0.5, 0.5, 0);
loopZigZag.getSensors().add(s2);
loopZigZag.getSensors().add(s3);
loopZigZag.getSensors().add(s4);
@@ -95,8 +91,7 @@ public class OTFLoopTest {
// Normal loop
loop = new OTFLoop(template, configuration.getServer(), configuration.getShare(), configuration.getSmbShare(), false);
loop.setActor(actor);
loop.getSensors().add(s1);
loop.setActuator("id0", configuration.getMotor1(), null, 0, 8, 0.5, 0.5, 0);
loop.getSensors().add(s2);
loop.getSensors().add(s3);
loop.getSensors().add(s4);
@@ -109,7 +104,7 @@ public class OTFLoopTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.OTFLoop#execute()}.
* Test method for {@link ch.psi.fda.core.loops.otf.OTFLoop#execute()}.
* Test ordinary 1D OTF scan
* @throws ExecutionException
* @throws ChannelException
@@ -134,7 +129,7 @@ public class OTFLoopTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.OTFLoop#execute()}.
* Test method for {@link ch.psi.fda.core.loops.otf.OTFLoop#execute()}.
* Test OTF ZigZag mode
* @throws ExecutionException
* @throws ChannelException
@@ -160,7 +155,7 @@ public class OTFLoopTest {
}
/**
* Test method for {@link ch.psi.fda.core.loops.OTFLoop#execute()}.
* Test method for {@link ch.psi.fda.core.loops.otf.OTFLoop#execute()}.
* Test abort functionality while executing an OTF scan
* @throws ExecutionException
* @throws ChannelException
@@ -240,10 +235,10 @@ public class OTFLoopTest {
Message m = queue.take();
if(m instanceof DataMessage){
DataMessage x = (DataMessage) m;
logger.fine( x.toString() );
logger.info( x.toString() );
}
else if(m instanceof ControlMessage){
logger.fine("---- "+m.toString()+" ----");
logger.info("---- "+m.toString()+" ----");
}
}
} catch (InterruptedException e) {
@@ -33,7 +33,6 @@ import org.junit.Before;
import org.junit.Test;
import ch.psi.fda.TestConfiguration;
import ch.psi.fda.core.actors.OTFActuator;
import ch.psi.fda.core.messages.EndOfStreamMessage;
import ch.psi.fda.core.messages.Message;
import ch.psi.fda.core.sensors.MillisecondTimestampSensor;
@@ -92,7 +91,7 @@ public class ParallelCrlogicTest {
CrlogicLoop crlogic = new CrlogicLoop(cservice, c.getCrlogicPrefix(), c.getServer(), c.getShare(), c.getSmbShare(), zigZag);
crlogic.setActor(new OTFActuator("cmot", c.getMotor1(), readback, start, end, stepSize, integrationTime, additionalBacklash));
crlogic.setActuator("cmot", c.getMotor1(), readback, start, end, stepSize, integrationTime, additionalBacklash);
crlogic.getSensors().add(new OTFNamedChannelSensor("trigger", "TRIGGER0"));
crlogic.getSensors().add(new OTFScalerChannelSensor("scaler0", 0));
crlogic.getSensors().add(new OTFScalerChannelSensor("scaler1", 1));