Recommended C++ Libraries
This page lists C++ libraries that either IMP already has a dependency against or could if needed and where to find documentation. Listed under each library are one or more people who are familiar with all or part of the library and who would be good to ask for help. Also see the list of IMP-related code in the wiki.
STL is part of the C++ language spec and is used throughout IMP
- Daniel, Dina
bounds and usage checked STL for GCC.
Boost version 1.33 should be the first place to look before implementing just about anything
- Daniel: various, especially Graph, static asserts, Format, Functional, Integer, Interval, Intrusive, IOStreams, Iterators, Lambda, Math, Random, Program Options, Range, Smart Ptr, String Algo, Timer, Utility
Javi: MultiArray, Unit test
CGAL contains an excellent collection of geometric data structures and algorithms and is an optional dependency of IMP
- Daniel
TNT/JAMA are a simple matrix and linear algebra library. A copy of TNT and JAMA is included in the IMP::algebra::internal namespace for use within IMP.
- Daniel
an open source kd-tree if we want spatial search not tied to CGAL or ANN (but we could just ship ANN with IMP)
L-BFGS local optimizer, MIT licensed. Might be an improvement over CG.
When more robust linear algebra support is needed, this review of C++ linear algebra libraries and the list of freely available linear algebra packages will be a good places to look. A comparison of sparse libraries can be found in this paper.
When looking into doing molecular simulation, we may want to use OpenMM as a backend.
When we need XML I/O from C++, XSD looks like a very nice choice as it creates C++ data structures directly from XML.
A library to use for implementing simulated annealing based optimization is ASA.
Considerations for adding libraries
When proposing to use an external library in IMP there are a few questions to consider:
- usage: Is the library going to be used in a core part of IMP, or simply to provide extra, optional functionality?
- license: What is the license of the library? Will the license make life difficult for users of IMP?
availability: Is the library widely available? Is it widely supported? Ideally, the library should be part of all linux distributions, available on a Mac either precompiled or through MacPorts or Fink and available as a pre-compiled library for Windows.
- support: Is the library actively supported? Is it likely to be updated to work with the compilers that come out in a couple of years?