Closed henrypinkard closed 1 year ago
Here is my take, @bls337 may have clarifications or completely different ideas ;-)
AcquisitionSettings
object is passed to the function prepareControllerForAquisition
, which converts these into commands accepted by the Tiger. The acquisition code does not use the sequencing API in the MMCore to, for example, pre-load a sequence of Z-positions. Is that right? Correct.core_.loadStageSequence
(i.e. the core's sequencing API) is called in the preparePlanarCorrectionForAcquisition
function. What is planar correction? And how important is it to implement in this first pass? This feature is an advanced one that can be omitted at first.Thanks! This is really helpful and I think I should able to put together a skeleton of how this should work in AcqEngJ which we can build on from there.
- Is there a (software) trigger for each channel always, or sometimes? It depends on the channel mode. In "interleave" mode all the channels are done with one software trigger.
Can you set a bit more about interleave mode? What exactly is interleaved? Is it performing successive scans of the same volume in different channels, or something different?
- Is there a (software) trigger for each channel always, or sometimes? It depends on the channel mode. In "interleave" mode all the channels are done with one software trigger.
Can you set a bit more about interleave mode? What exactly is interleaved? Is it performing successive scans of the same volume in different channels, or something different
Interleaved rotates through the channels within the same timepoint/position. In essence this does change the acquisition order contrary to my former claim.
For example if you acquiring a single volume of 5 images with 2 channels with interleaved, there would only be one motion but the lasers A and B would fire ABABABABAB instead of one motion with AAAAA and then another with BBBBB. The enum is MultiChannelMode
which becomes field channelMode
of the acqusitionSettings
structure. Triggering different lasers sequentially is handled by the Tiger controller; in the above example the Tiger would have been told to acquire 10 images in the volume and the Tiger would have changed the lasers as configured by setupHardwareChannelSwitching()
in the ControllerUtils
class.
Thanks! I just completed the first steps of this integration in #9
This adds in the high performance saving in NDTiff with optional display in NDViewer, and it does the beginnings of translating the LSM AcquisitionSettings
into AcquisitionEvent
s and AcquisitonHook
s that interact with AcqEngJ. This is using the same system as pycro-manager, so the pycro-manager documentation gives an idea of how the system works. The basic idea is shown in the figure below.
The code is full of TODO
s. I think it will be helpful to go through it together at our next meeting
@jondaniels @bls337 Working on a PR for an initial version of this right now. The immediate goal would be to recreate the most important features for diSPIM control, but with the more performant/reliable/debuggable backend provided by AcqEngJ.
I've gone through the main function that performs acquisition in the diSPIM plugin, and I want to make sure I understand what its doing correctly:
AcquisitionSettings
object is passed to the functionprepareControllerForAquisition
, which converts these into commands accepted by the Tiger. The acquisition code does not use the sequencing API in the MMCore to, for example, pre-load a sequence of Z-positions. Is that right?core_.loadStageSequence
(i.e. the core's sequencing API) is called in thepreparePlanarCorrectionForAcquisition
function. What is planar correction? And how important is it to implement in this first pass?