Interface IRunnableDevice<T>

All Superinterfaces:
IConfigurable<T>, IDeviceRoleActor, ILevel, IModelProvider<T>, INameable, IResettableDevice, IValidator<T>
All Known Subinterfaces:
IMalcolmDevice, IPausableDevice<T>, IRunnableEventDevice<T>, IScanDevice, IWritableDetector<T>
All Known Implementing Classes:
AbstractAreaDetectorRunnableDevice, AbstractMalcolmDevice, AbstractRunnableDevice, AreaDetectorRunnableDevice, AreaDetectorRunnableDeviceProxy, AreaDetectorRunnableDeviceWaitForArray, AreaDetectorWritingFilesRunnableDevice, ConstantVelocityDevice, DarkImageDetector, DummyMalcolmDevice, DummyMalcolmTriggeredDetector, ElectronAnalyserRunnableDevice, MalcolmDevice, MalcolmDeviceProxy, MandelbrotDetector, PosDetector, ProcessingMalcolmDevice, RandomIntDetector, RandomLineDevice, RunnableDeviceProxy, XmapRunnableDevice, XmapRunnableDeviceBase, XmapWritingFilesRunnableDevice, ZebraRunnableDevice

public interface IRunnableDevice<T> extends IDeviceRoleActor, ILevel, IConfigurable<T>, IResettableDevice, IValidator<T>, IModelProvider<T>
An IDevice is the runner for the whole scan but also for individual detectors. Detectors, for instance an IMalcolmDevice can be run in the system as if it were an IDetector. Anatomy of a CPU scan (non-malcolm)
 _________
_|           |________ collectData() Tell detector to collect
             _________
_________|           |_ readout() Tell detector to readout
             _______
_________|         |___ moveTo() Scannables move motors to new position


A MalcolmDevice is also an IDetector which may operate with an arbitrary model, usually driving hardware.

IParserService pservice = ...// OSGi

// Parse the scan command, throws an exception
IParserResult parser = pservice.createParser(...)
// e.g. "scan x 0 5 0.1 analyser"

// Now use the parser to create a generator
IPointGeneratorService gservice = ...// OSGi
StepModel model = parser.getModel("x");
IPointGeneratorinvalid input: '<'?> gen = gservice.createGenerator(model)

// Now scan the point iterator
IDeviceService sservice = ...// OSGi
IRunnableDevice scanner = sservice.createScanner(...);
scanner.configure(model);
scanner.run();