Particle Identification and Tracking
|
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) |
The code is also being tracked on github. There is currently no 'stable' version of the code as I am still actively developing it.
Currently,
are written and fully tested and
are partially written or tested.
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.
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