A command-line utility to reconstruct nonuniformly sampled (NUS) nuclear magnetic resonance (NMR) data using an accelerated first-order convex solver for the maximum entropy (MaxEnt) objective function. The fundamental principles of the camera utility are published in:
Worley, B., Convex Accelerated Maximum Entropy Reconstruction, Journal of Magnetic Resonance, 2016, 265: 90-98.
The camera utility is a purpose-built implementation of Nesterov's accelerated first-order convex optimization algorithm applied to the MaxEnt reconstruction problem in NUS NMR. As it turns out, the Hoch-Hore spin-half entropy functional is perfectly suited to this accelerated algorithm, because it is smooth, convex, and Lipschitz continuous with easily tunable curvature.
To fully exploit the rapid first-order convergence of Nesterov's method, camera was written from scratch with the goal of fast execution on modern multi-core workstations and compute servers. Whenever supported by the system, camera uses hardware-accelerated single-instruction multiple-data scalar types to store and manipulate hypercomplex numbers, as well as the OpenMP API to execute independent reconstructions in parallel. Running camera requires only trivial changes to standard nmrPipe processing workflows, and execution times rival those of RNMRTK MaxEnt and NESTA-NMR.
As of 26 Jan 2016, camera utilizes the FFTW library for all its fast Fourier transforms. This means:
- Data are no longer limited to power-of-two sizes.
- Reconstructions will be up to 3x faster.
The camera algorithm and software supports all the trimmings of MEM, including interpolation, extrapolation, linewdith deconvolution and J-coupling deconvolution. Example scripts for converting, processing and reconstructing 2D, 3D and 4D Bruker NMR data are provided in the data subdirectory.
The camera utility is written in C99-compliant source code, and requires a compiler with OpenMP support. Use of the GNU Compiler Collection version 4.9 or later is recommended.
You can compile and install camera as follows:
git clone git://github.com/geekysuavo/camera.git
cd camera
make
sudo make install
When compiling camera from source, the FFTW development headers and libraries must be installed. A recent processor that supports SSE, SSE2, and SSE3 is required to run camera, and support for AVX is highly recommended for reconstructing 3D and 4D datasets. If you have a processor that supports AVX, you will need to set USE_AVX to y in the Makefile prior to running make and make install above. Or, you can run this to build AVX support in:
sed -e 's,^\(USE_AVX\)=.*,\1=y,' -i Makefile
make again
sudo make install
By default, running make install will install camera and its manual page into the /usr/local prefix. To change this, modify the PREFIX variable in the Makefile prior to running make install above. Or:
sed -e 's,^\(PREFIX\)=.*,\1=/opt/camera,' -i Makefile
sudo make install
This project is released under the GNU GPL 3.0.
Have fun with it,
*~ Brad.*