Description of problem
There are N different color channels which are imaged through different filters, and need to be mapped together to an accuracy greater than the resolution limit of the instrumentation / detection system (e.g. 10-20 nm for STORM, limited by photon number and small vibrations).
Description of data
Sequential frame case
- separate movie for each channel of the same feducial marker.
- if the same marker is not visible in all color channels, separate markers which can be seen in one overlapping reference channel can be used: (e.g. 550 nm absorbing imaged in 488, 561, and 647 detection channels and 715 nm absorbing beads imaged in 647 and 750 channels).
- ideally many different fields of beads are imaged in each channel to give maximum coverage of bead density over the field of view.
Multiviewing frame case
- 1 – 2 movies, in which the same beads can be seen in multiple channels (not necessarily all channels)
- One channel can be seen in all movies.
Algorithm
Components / terminology
- all movies which image the same field of beads in different channels will be considered a
beadset
(previously called amovie
). - each beadset will be comprised of different
channels
(at least 2). - One channel in each movie is defined by the user to be the
reference channel
, all beads in this movie will be mapped into those coordinates. - each channel contains multiple
fields
of different beads.
Bead Analysis
- first we need to fit all the bead movies with the parameters appropriate to their spectra, which can be decided by inspecting quality of fit through viewer in STORMfinder.
- If we have multi-view movies, we want to split them into separate movies so that each can get analyzed with a different, color specific parameter set.
- Then we analyze all movies (run through RunDotFinder).
- Details of analysis implementation: This can be done in batch with splitting movies, so that as soon as a movie is split, it starts getting analyzed. Instead of controlling number of files running (since we make multiple calls of RunDotFinder, rather than passing it a batch of movies), we simply use the waitforfreecpu command of RunDotFinder to throttle analysis appropriately.
Loading Fits
- All non reference beads are loaded into the
sample
field of a matlab data structure with a different element (equal to the number of samples) - All reference beads are loaded into the
refchn
field of the matching sample data
Matching beads and computing warps
- beads will be matched by a simple nearest neighbor algorithm with a fixed search radius.
- These matched beads are used to compute a simple affine warp (translation) from the sample channel to the reference channel
- beads are then rematched using a much shorter search radius (since now it matters more that we get the pairs right)
- the new matched beads are used to compute new warps. We save as many warps as there are samples.
Plots and output
- we save a collection of xy, xz plots,
- also z-histograms color coded by z height (requires a fixed number of fields per z height and the number of fields per z to be given as a input parameter).
- distance between
sample
andreference
beads before the warp, after the affine transformation, and after the polynomial transformation.
Some results
- For a 400 nm range we can get 20 nm accuracy, 750/647 as good as ~10 nm
- For a 800 nm range we can get all channels within 40 nm.