Description
Make a TriggerLogic that will do a Trajectory scan with the following restrictions:
- No gaps
- Fill the buffers up front
- GPIOs are always start of row trigger
- ScanSpec only includes trajectory scannable axes
Make the matching IO class with the PV interface.
Make a epics.pmac.PmacMotor(epics.motor.Motor)
that tells it what CS and CS Axis it is in (like Malcolm). There might be a PmacCSMotor and PmacRawMotor, or possibly one that is told at init what sort of thing it is. Either way we want a single method async def get_cs_number_and_axis()
attached to the motor so we can use it in prepare.
prepare
Take a List[scanspec.Frames[PmacMotor]]
, calculate the entire trajectory (this will later be only the first 4000 points), calculate where the start position of the motors is based on first point of the trajectory (as per #376), then move the motors to the start position and send down the trajectory
kickoff
Hit start
complete
Observe points scanned and yield WatcherStatusUpdate
to say how far we have got (like in StandardDetector). When it's done check it did the right number of points and didn't get an error