Welcome to the MATLAB implementation of GENFIRE v1. GENFIRE, for GENeralized Fourier Iterative REconstruction, is a robust, Fourier-based reconstruction algorithm that is capable of using a limited set of input projections to generate a 3D reconstruction while also partially retrieving missing projection information. It does this by iterating between real and reciprocal space and applying simple constraints in each to find an optimal solution that correlates with the input projections while simultaneously obeying real space conditions such as positivity and support. The result is a more consistent and faithful reconstruction with superior contrast and, in many cases, resolution when compared with more traditional 3D reconstruction algorithms such as Filtered Back-Projection (FBP) or the Algebraic Reconstruction Technique (ART). ******************************************************************************************** Please note that this GENFIRE v1 is the one used for our recent publication Yang et al., ˇ°Deciphering chemical order/disorder and material properties at the single-atom levelˇ±, Nature, in press. This version is only in MATLAB implementation and has some limitation. For example, only cubic volume with even-number pixel dimensions can be reconstructed. A more general and improved version of GENFIRE (GENFIRE v2) will be posted in our group website (http://www.physics.ucla.edu/research/imaging/) within the next few months. It will be available both in MATLAB and Python implementation, and the Phthon verion is being implemented with a more user-friendly graphical user interface. ********************************************************************************************* Reconstructions are run with GENFIRE_Main.m for a cubic array and 3 Euler angles. Simply edit the parameters in the appropriate file and run the script to execute the reconstruction. The parameters that may be adjusted are: filename_Projections ( char ) - filename containing projection images as an N x N x num_projections array (N must be even) filename_Angles ( char ) - filename containing the angles as either a 3 x num_projections array of Euler angle triples (phi, theta, psi) or a num_projections x 1 array indicating a single-axis tilt series (phi will be the single tilt axis in this version). filename_Support ( char ) - filename containing a binary support filename_InitialModel ( char ) - filename containing an NxNxN initial model. Comment out to skip providing one, and an empty array will be used instead nn (int) - number of pixels for each dimension of input projections numIterations ( int ) - number of GENFIRE iterations to run oversamplingRatio ( int ) - controls the amount of zero padding. Formally, the oversampling ratio in a given direction is the total array size (after padding) divided by the size of the input projection. Larger oversampling ratio will make the gridding interpolation more accurate, but it will require more memory and computational time. griddingMethod ( int ) - controls the gridding method. Choose from the following: 1. FFT with c++ mexa function - Fastest, less accurate (for detais about mex function complile, please see "MEXA_fuction_install_notes.txt" included in this package). 2. FFT with matlab function - Slower than c++ mexa function, faster than DFT, less accurate 3. DFT - Slowest, more accurate interpolationCutoffDistance ( double ) - maximum tolerable radial distance to consider measured datapoints for gridding to a given Fourier voxel. For crystalline objects, small interpolationCutoffDistance (typically 0.05-0.3) usually gives better reconstruction. For non-crystalline objects, larger value (0.5-0.7) gives better reconstruction. But the optimal value will depend on # of projections, size of the object, internal structure of the object, oversampling ratio, etc. For fully optimized result, different parameters should be test to see which combination gives the best result. ******************************************************************************************* We included the script for simulating a 2D projection tilt series from a model 3D volume. Please see Simulate_Projections.m for details. ******************************************************************************************* The final 3D reconstruction of our FePt dataset can be obtained by running GENFIRE_main_FePt_FinalReconstruction.m . Most of the input data for this script is either included in this package, but some of them (ex. denoised 2D projections, refined final Euler angles) can be separately downloaded from our group website (http://www.physics.ucla.edu/research/imaging/FePt). Please note that the final 3D reconstruction volume of an FePt nanoparticle is not along the zone axis as is. We rotated the the final 3D volume to make {100} axes of the crystal along the MATLAB array directions for atomic structure analysis. For rotating the final 3D volume to make {100} axes of the crystal along the MATLAB array directions, please see the codes in Rotate.zip included in this package. The method section of our Nature paper (Yang et al., Nature in press (2017)) also describes the Euler angle refinment using the GENFIRE reconstruction. For the Euler angle refinment implementation, please see the codes in AngleRefinement.zip included in this package. ******************************************************************************************* Author: Alan (AJ) Pryor, Jr. and Yongsoo Yang email: apryor6@gmail.com (AJ), yongsoo.ysyang@gmail.com (YY) Jianwei (John) Miao Coherent Imaging Group University of California, Los Angeles Copyright (c) 2015. All Rights Reserved.