Skip to content

geekysuavo/camera

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

camera

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.

Introduction

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.

Reconstructing NMR data

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.

Installing and Running

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

Licensing

This project is released under the GNU GPL 3.0.

Have fun with it,

*~ Brad.*