Particle Identification and Tracking
Particle Identification and Tracking
Authors
Thomas A Caswell

This is an implementation in c++ of the particle tracking algorithms developed by Croker and Grier (http://dx.doi.org/10.1006/jcis.1996.0217). This algorithm has been implemented a number of times (see table). The primary advantage of the C++ implementation over IDL or MATLAB implementations is that C++ is significantly faster. On identical data the C++ code is at least ~20x than Dan Blair's MATLAB code.

Crocker and Grier http://physics.nyu.edu/grierlab/software.html

IDL

Crocker and Weeks http://www.physics.emory.edu/~weeks/idl/

IDL

Blair and Dufresne http://physics.georgetown.edu/matlab/

MATLAB

Maria Kilfoil http://people.umass.edu/kilfoil/downloads.html

MATLAB

Graham Milne http://zone.ni.com/devzone/cda/epd/p/id/948

LabVIEW

Ryan Smith and Gabe Spalding http://titan.iwu.edu/~gspaldin/rytrack.html

stand alone/IDL GUI

Thomas A Caswell https://github.com/tacaswell/trackpy

Pure Python

Nathan Kiem https://github.com/nkeim/trackpy

Impure Python (numba accelerated)

Peter J Lu https://github.com/peterlu/PLuTARC_centerfind2D

c++ (identification only)

Getting Source

The code is also being tracked on github. There is currently no 'stable' version of the code as I am still actively developing it.

Functionality

Currently,

are written and fully tested and

are partially written or tested.

Code Features

The code for particle location and further processing of the locations are almost completely separate. The identification code is a modified version of Peter Lu's particle identification code. The most current version of PLuTARC, as well as a MATLAB wrapper for it, is available at https://github.com/peterlu/PLuTARC_centerfind2D . The analysis code is newly developed.

Parameters are passed into the analysis programs via XML files. There is python code included to generate appropriate XML files.

The code can easily be extended for N-dimensions, but only 2 and 3 are currently implemented.

Input and output is done through a family of wrapper classes. With minimal new code basically any input/output format can be dealt with. There are wrappers written for HDF5 files and interacting with MATLAB.

The code is very modular and for the most part adding new computations to the framework only requires writing a single new subclass.

This code should be reasonably portable to *nix systems, but the library paths will need to be fixed, see INSTALL for directions and a list of required libraries. The some of the MATLAB related code will not work on a windows machine (there are lots of couts in the code which matlab in linux can cope with, but matlab on windows apparently can't (according to matlab documentation)), but I expect that the rest of the code (if it will compile) will work fine. To my knowledge this has not been tested.

License

The following is the license for code written by me and supersedes what individual files may say at the top with regards to the Additional Permissions. Files not copyright Thomas A Caswell have their copyright/license at the top.

© 2008-2012 Thomas A Caswell

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, see http://www.gnu.org/licenses.

Additional permission under GNU GPL version 3 section 7

If you modify this Program, or any covered work, by linking or combining it with MATLAB (or a modified version of that library), containing parts covered by the terms of MATLAB User License, the licensors of this Program grant you additional permission to convey the resulting work.

If you modify this Program, or any covered work, by linking or combining it with IPP (or a modified version of that library), containing parts covered by the terms of End User License Agreement for the Intel(R) Software Development Products, the licensors of this Program grant you additional permission to convey the resulting work.

If you modify this Program, or any covered work, by linking or combining it with FreeImage (or a modified version of that library), containing parts covered by the terms of End User License Agreement for FreeImage Public License, the licensors of this Program grant you additional permission to convey the resulting