The Chemical Descriptors Library (CDL) is a C++ library that provides functionality in the area of chemical informatics.
Among the functionalities provided by the library are:
The CDL offers specialized functionality to use in chemical database implementations. Functionalities in this area include:
The motivation for the Chemical Descriptors Library is twofold:
First is to provide a generic framework to use when writing algorithms for the calculation of molecular descriptors. Although this might seem compelling, it has been achieved for more general purposes in the C++ STL, which successfully decoupled containers and algorithms with the use of iterators. CDL follows the same paradigm of the STL (now part of the c++ standard,) providing iterators for the mapping of atoms, adjacent_atoms, bonds, incident_bonds, and basically all iterators and functions which are needed to navigate through a molecular graph. CDL's molecule class is parameterized on two basic components: atom and bond properties. The interface between properties (and their respective types) and algorithms is tackled with the use of property accessors. So if you have other atom and bond properties (with other types,) you can still use CDL's algorithms just providing the right property accessors.
Is well known in software design, that the construction of software components on top of libraries rich of functionality yields components rich in functionality. CDL has as main component the Boost Graph Library (BGL,) which provides an interface for how the structure of a graph can be accessed using a generic interface that hides the details of the graph data structure implementation. Using this interface, CDL is able to achieve graph stucture - algorithm interoperability. CDL provides all BGL's interfaces to traverse the underlying graph of a molecule, plus functions that deals particularly with the molecular representation. A standard generic way to traverse molecular graphs, and access its properties, is of paramaunt importance to encourage reuse of chemical descriptors algorithms.
The second and less important objective of the CDL, is to provide a platform and compiler-independent library for the calculation of molecular descriptors; this includes: conversion between different molecular representation formats (read smiles, MDL's mol, etc), fingerprinting, pharmacophoring, substructure searching, calculation of maximal common molecular subgraph, and the calculation of many more molecular descriptors.