Draft: analysis development branch (do not merge)
This implements computation of an auto correlation function. This analysis is requested by Kartik to compute beam properties from short pulses of fluorescence scattering on the cooper disk.
The design:
- correction addon computes per frame auto-correlation functions and stores them in shared memory buffer (the same size as image data)
- the arbiter identifies frames with scattering from cooper disk but nor from stiffening ribs and generates the selection
- the group matchers computes the sum of images and auto-correlation functions according the selection from arbiter
- the group matchers sends downstream sums but do not send per frame auto-correlation functions
Interventions to the pipeline:
-
ShmemTrainMatchercomputes reduction operation on per-frame data according to instruction in thereduce.classesandreduce.opkeys from the arbiter source:
-
reduce.classes- is an boolean array[nclasses, nframes], where each row is a selection mask -
reduce.op- is a list of strings, each element has format:<reduction operation>:<data key>:<index in classes array>:<result key>. Result key is appended withaggtregate.prefix
-
ShmemTrainMatcherdeletes the keys from output hash which is listen in thedeleteThesekey (vector of strings) from the same sources (correction devices source, each correction device contains its owndeleteThesekey) -
AgipdCorrectionaccumulates thecalngShmemPathsanddeteleTheselist from addons. It appends theimage.datapaths to thecalngShmemPathslist instead to redefine it. -
The method
_initialization(self)is added to theBaseCorrectionAddon. It's called by the hostBaseCorrectionafter it sets the_deviceproperty of the addon class instance. This needed to have an access to the host device properties during the addon initialization. -
Refactor
FrameSelectionArbiterto
- run multiple kernels and get partial selection
- calculate frame selection with expression using partial selections
- configure reduction operations and build reduction masks