The BTK Core Library
The Biomolecule Toolkit (BTK) is a collection of libraries and tools for use in the computational modeling of biological macromolecules, such as proteins, DNA and RNA. It provides a modern, flexible, standards-based C++ interface for common tasks in molecular modelling.
This is the "core" BTK library, representing a set of classes, interfaces and formal concepts that are generally useful for computational structural biology. In particular, this library contains code for the general representation of atoms (BTK::ATOMS), and molecules (BTK::MOLECULES), as well as some essential algorithms (BTK::ALGORITHMS), common mathematical routines (BTK::MATH), input-output operations (BTK::IO), and generally-useful support classes and functions (BTK::COMMON, BTK::UTILITY).
The BTK libraries rely heavily on template-based C++ design, and use many practices formalized by the Standard Template Library (STL), the boost library, and other modern C++ libraries. In particular, the BTK makes heavy use of iterator-based container classes and algorithms, as well as contract-based, generic programming techniques (here is a good introduction to a few of these ideas). As such, the BTK is as much a collection of programming concepts as a library of C++ code (we're in the process of documenting these concepts.)
There are three main principles guiding the design of the library:
Most current molecular modelling code is application-specific, and difficult or impossible to adapt to new problems. For this reason, the BTK is intended to be a flexible architecture on top of which many different applications and algorithms may be designed. Modern C++ generic programming techniques, such as concept-based design, allow us to achieve a great deal of flexibility, without sacrificing on the second design principle:
Despite decades of improvement in language development and software engineering practices, most current molecular modelling code is still written in FORTRAN. The reason? Efficiency. Of course, FORTRAN's legendary speed has usually come at the cost of readability, flexibility and maintainability. Again, modern C++ techniques allow careful library designers the ability to achieve performance on par with hand-optimized FORTRAN. We are interested in obtaining the maximum performance possible for a flexible C++ library. Thus, whenever a design change can increase code efficiency without sacrificing flexibility, we try to adopt that change.
Whenever possible we adopt designs that are simple, as well as flexible and efficient. The many syntactic features of C++ give us a great deal of power to create simple interfaces that are still very flexible.
Generated on Sun Jul 15 20:46:23 2007 for BTK Core by