This repository contains the implementation of two leading software in Cryo-EM - Relion and CryoSPARC in 2-D. We frame the entire problem in a Bayesian framework. In particular, the reconstruction problem is formulated as finding the model that has the highest probability of being the correct one in the light of both the observed data and available prior information. We optimize it using stochastic gradient descent to arrive at an initial estimate followed by an expected maximization algorithm to refine the model.
TO have a look at the derivation of all the formulas, how the SGD is implemented and how the expectation maximation algorithm has been formulated, you may have a look at reports/cryosparc-algorithm for CryoSPARC and reports/math-relion.pdf for RELION.
The CryoSPARC algorithm resides in scripts/cryoSPARC.m which produces an initial estimate for the image by iteratively gradient descending to the right structure.
The RELION algorithm resides in scripts/MAP2D.m which, from the projections of the image, correctly estimates the orientation of each of those projections and then reconstructs the image using the formulae derived in the expectation maximization algorithm.
The back-projection and the projection algorithms algortihms have been implemented in scripts/backproject_fourier_alternate.m and scripts/project_fourier_alternate.m. The probability of each projection having a particular orientation is calculated by scripts/calc_prob_for_each_orientation.m.
For a more detailed overview please refer to this comprehensive review over here.
This work would not have been possible without the guidance of professor Victor Panaretos and the resources provided to me by EPFL. Also, some of the references used in this work are -
- A Bayesian View on Cryo-EM Structure Determination
- RELION: Implementation of a Bayesian approach to cryo-EM structure determination
- For an idea about how to go about the projection and back-projection operation - Direct Fourier Reconstruction of a Tomographic Slice
- For the interpolation-scheme using least-squares approach - inpaint_nans