Things I've Forgotten

Oh why oh why are there so many things …

In my professional life I’m always learning new things. Regrettably, I’m also constantly forgetting things. It seems as though my brain only has enough space for a given number of facts and figures, and that number is constantly changing. I figured, if I’ve had to learn something more than once, I may as well make a centralized and permanent note of it. Moreover, if I do it in a public forum (👋) someone else may benefit from my mistakes.

This list has been roughly divided into three sections: Optics, Lasers, and Code.


  • Aperature stops are pupil conjugate
  • Field stops are sample conjugate
  • Pupil diameter $=2 NA f$, where the objective’s numerical aperture is NA and its effective focal length is $f$. The focal length can be calculated from the magnification and standard tube lens. For example, for a 60X Nikon objective where the tube lens has a nominal focal length of 200 mm the effective focal length of the objective is 200 mm/60 = 3.33 mm.
  • Fourier transform property of lens: for a Gaussian beam propagating through a lens the beam sizes at each conjugate plane can be related to one another by the following equation: $$ \sigma’ \sigma = \frac{\lambda f}{\pi} $$ Where $\sigma'$ and $\sigma$ are the beam sizes at each conjugate plane and $\lambda$ is the wavelength of the light and $f$ is the focal length of the lens.
  • The relationship between angle and position at the sample and angle and position at the back pupil of a microscope objective.
  • Herschel’s and Abbe’s Sine conditions
    • Herschel’s Condition invariance of axial magnification
    • Abbe’s Sine Condition invariance of lateral magnification (and no coma or spherical aberration)
    • Impossible to satisfy both conditions simultaneously, thus perfect volumetric imaging is impossible (this is different from collecting separate 2D planes like in normal microscopy).
  • If one approximates a diffraction limited PSF by a Gaussian profile the standard deviation of the profile is approximately equal to $0.45 \lambda / 2 NA$ assuming that the f-number is approximately equal to $1/2 NA$ (As a consequence: $FWHM \approx \lambda / 2 NA$)
  • $f = \left(1 - \sqrt{1 - (\text{NA} / n)^2}\right) / 2$ where $f$ is the fraction of light collected by the objective as a function of numerical aperture (NA) and medium index ($n$). When NA is small this can be approximated as $(NA/n)^2/4$. Derived from this.
  • Depth of field is $\Delta z = \lambda / \left(n_{sample} - \sqrt{n^2_{sample} - \text{NA}^2}\right)$1. If you take the first order term of the Maclaurin series expansion you get the more familiar form of $\Delta z = 2 n \lambda / \text{NA}^2$
  • An Airy unit (au) is defined as $1.22 \lambda / \text{NA}$.
  • A subtle detail in Gustafsson et al.:2 for confocal microscopy you can model the total PSF as $PSF_\text{total} = PSF_\text{excitation} \times PSF_\text{detection}$ but this isn’t true for SIM or LLSM. The key is in the transformation from equation (4) to equation (5). Here Gustafsson makes the argument that if you keep the axial excitation pattern constant relative to the objective you now multiply the PSF by the axial component of the excitation before the convolution, thus the effective PSF is now $PSF_\text{total} = PSF_\text{axial excitation} \times PSF_\text{detection}$. For confocal, the excitation spot is also scanned so all components of the excitation have the same coordinate frame as the detection and therefore their PSFs can be multiplied. In light-sheet microscopy the light-sheet is (hopefully) kept aligned with focal plane of the detection objective and thus the situation is the same as for SIM, i.e. the effective axial PSF is the multiplication of the axial excitation profile and the axial detection PSF but the lateral PSF is just the lateral detection PSF.



  • Loctite EA 608 can be removed by applying heat as it’s strength decreases with increasing temperature. Using a heat gun at 500+ °F for ~1 min seems to work for me.


  • (╯°□°)╯︵ ┻━┻
  • Assuming that in1.shape == in2.shape then fftconvolve(in1, in2, "same") != irfftn(rfftn(in1), rfftn(in2)). The left hand side calculates the convolution with explicit zero padding while the right hand side calculates the convolution with implicit reflection.
  • def get_max(xdata, ydata, axis=0):
        """Get the x value that corresponds to the max y value"""
        idx_max = ydata.argmax(axis)
        max_x = np.take_along_axis(xdata, np.expand_dims(idx_max, axis), axis).squeeze()
        return max_x

  1. If $\text{NA} > n_{sample}$ indicating that the objective is being used in a medium that is of a lower index than for which it was designed then $\Delta z = \lambda / n_{sample}$ ↩︎

  2. M. G. L. Gustafsson, L. Shao, P. M. Carlton, C. J. R. Wang, I. N. Golubovskaya, W. Z. Cande, D. A. Agard, J. W. Sedat, Three-Dimensional Resolution Doubling in Wide-Field Fluorescence Microscopy by Structured Illumination. Biophysical Journal. 94, 4957–4970 (2008). ↩︎

David P. Hoffman
Staff Optical Engineer @ 10x Genomics

I’m a scientist/engineer who builds robust, high-performance optical systems and loves data and python. Views are my own (whose else’s would they be?)