BACKGROUND
developing programs for structural bioinformatics is a difficult and often tedious task.
even if the algorithms have been carefully designed, the programmer has to solve a variety of complex and recurring problems not fundamentally related to the algorithm at hand, but necessary for real-world applications.
not only more advanced tasks like inferring missing atoms or bonds, energy evaluations, or structural minimization require considerable programming effort that can hardly be repeated for every new project, but also the most basic and mundane steps.
for example, many molecular file formats are as hard to parse correctly as they are to write.
to avoid costly and error-prone re-inventing of the wheel for any new structural bioinformatics application, two approaches can be imagined: a collection of loosely coupled tools and utilities for recurring subtasks, or powerful libraries and frameworks for rapid application development .
obviously, the second approach encompasses the first, i.e., creating small, specialized tools for a pipeline concept is trivial when relying on such a library.
in addition, it allows its users simple access to the molecular data structures and algorithms that form building blocks of many algorithmic approaches and that often require complex implementations.
with the biochemical algorithms library   <cit> , we have created a versatile c++ class library for structural bioinformatics that is supplemented with a python interface for scripting functionality and a number of applications like the molecular modeling frontend ballview  <cit> .
ball has been used successfully for a large number of projects, both of our own  and of external researchers .
in recent years, ball has seen a significant increase in functionality and substantial useability improvements.
it has been ported to further operating systems; indeed, it currently supports all major brands.
moreover, ball has evolved from a commercial product into a free-of-charge, open source software licensed under the lesser gnu public license .
several frameworks for structural bioinformatics have been reported in the literature; most of them, however, with a different focus, scope, or intended audience.
hence, comparison with these projects is difficult in general.
among those projects, the most similar in scope and functionality are commercial packages like the suites from schrödinger  <cit>  or the chemical computing group's molecular operating environment   <cit> .
while these packages typically focus on sophisticated graphical user interfaces for concrete modelling tasks, they also provide powerful scripting interfaces aimed at developers.
notable open source projects in the field include biopython  <cit> , pymol  <cit>  , cdk  <cit> , meshi  <cit> , joelib  <cit> , the egad library  <cit> , and strbiolib  <cit> .
to the best of our knowledge, ball offers the widest range of functionality for rapidly and robustly developing applications in structural bioinformatics, it is growing fast and can be easily extended.
it addresses users of the implemented techniques as well as designers of completely new approaches.
an overview of ball's design can be found in figure  <dig>
a full description of ball's functionality would fall well outside of the scope of this note; the current version  contains more than  <dig> classes and more than  <dig>  lines of code .
instead, we want to briefly point out some of ball's most important features, particularly highlighting those that have been added since  <cit> .
in addition, we will show some ways in which the use of such an rad framework can simplify the life of scientists and developers.
implementation
ball has been implemented in c++, with some extensions written in python.
RESULTS
from the start of its development in  <dig>  ball's design principles have been wide functionality, ease of use, openness, and robustness.
wide functionality
to demonstrate ball's rich functionality, we describe a typical application - namely docking - and point out how ball simplifies its implementation.
in this case, a large amount of time and code is devoted to the problem of importing the docking partners into suitable structural representations and preparing them for further use.
typically, this preparation consists in reading the molecules from diverse file formats, checking their content, adding missing information, running the actual docking algorithm, and, finally, analysing its result.
reading the data doubtlessly belongs to the most recurring tasks in molecular software development.
ball supports a rich variety of molecular structure formats.
while the previously published version  <cit>  only supported the molecular file formats pdb and mol <dig>  version  <dig>  additionally reads and writes mol, hin, xyz, kcf, and sd files.
besides molecular files, it also supports a variety of other data sources, like dcd, dsn <dig>  gamess, jcamp, scwrl, and trr.
export to most of these formats is possible as well.
apart from importing molecules from external sources, the new version also offers rich functionality for generating and editing molecules.
for instance, given only the amino acid sequence and the corresponding torsion angles, ball's peptidebuilder creates a 3d structure of that peptide.
more general molecular structures, e.g., of ligands, can be generated from smiles-expressions or programmatically by explicitly inserting atoms and bonds.
the next step - not only in docking but in all applications processing molecular structures - is to validate the structures and to prepare the data for the following tasks.
some atoms, in particular, hydrogens, are often missing, and structural information such as connectivity or bond orders are often incorrect or even missing.
for proteins, dna, and rna, ball can automatically infer much of the missing information from an extensible fragment database.
this can also be used for validating given structures.
a rotamer library allows the user to easily determine a protein's most likely side-chain conformations or to easily switch between several rotameric states.
both, fragment database and rotamer library have been significantly improved since ball's first publication.
other molecules with a more diverse chemistry, such as ligands, require more sophisticated approaches to infer missing structural information.
ball's new bondorderassigner <cit>  heuristically determines all possible bond order assignments for a given ligand sorted by their probability.
favorable 3d conformations can be achieved by employing ball's new quickoptimizer, a randomized mdsimulator/minimizer in combination with several force fields .
also among the new features are a kekulizer and an aromaticity processor.
once the input has been prepared, the two core problems in protein docking are the generation of docking poses and their evaluation.
for both tasks, ball offers rich functionality.
the first is facilitated by the preparation functionality  and ball's transformation processors.
here, ball's selection mechanisms also simplify matters by allowing, for instance, the selection of certain parts of the molecule through easily formulated expressions.
via a selector class, certain predicates like element type can be used as a selection filter.
additionally, ball now provides an expression class which allows selecting subsets of objects by given smiles and smarts strings as well as by ball predicates.
the second task often amounts to energy evaluations and/or the checking of certain criteria.
the former version of ball provided the force field classes charmm  <cit>  and amber  <cit> .
in the current version, an implementation of the merck molecular force field   <cit> , a fully parameterized force field that allows handling of virtually all kinds of organic molecules, has been added as well as some non-differentiable scoring functions.
force fields can not only be used for scoring: ball's minimizer and molecular dynamics classes can be combined with all of the implemented force fields.
minimizers and simulation classes also support selection, allowing the user to freely specify a set of movable atoms from all atoms used for force field computation.
this is useful in a variety of contexts, e.g.
when estimated hydrogen positions have to be reoptimized.
since the last version, we have greatly extended the minimization capabilities  <cit> , now offering standard  and the best currently known methods .
in addition to the features described above, version  <dig>  has been greatly extended with further functionality.
for instance, secondary structure prediction and hydrogen-bond detection  <cit>  are now available.
in summary, ball has developed into a powerful tool for rad covering fundamental functionality as well as complex applications like molecular docking and drug design.
due to its modular architecture, all classes and algorithms can be combined in a building block manner to easily implement even complex methods.
ease of use
one measure of the usefulness of an rad platform is the time it saves compared to developing the functionality from scratch.
hence, ease of use and a shallow learning curve are important goals for any large-scale framework.
on the other hand, after some time of familiarization with the library, users will usually want to fine-tune the methods, choose detailed parameters, or even exchange parts of the algorithms.
supporting these advanced users bears the risk of conflicting with the ease-of-use principle, for instance, by confusing the user with a wide array of tuneable options.
ball has been very carefully designed to address both groups of users, experts and novices alike, simultaneously.
for example, most algorithms implemented in ball accept a wide range of options to fine-tune their behavior, but all of these come with sensible defaults.
in this way, a novice user can just instantiate a class and use it successfully, while experts can adapt the options to their individual needs.
similarly, the versatile python interface offered by ball appeals to both groups of users, albeit in different ways: while novice users and non-programming experts can profit from the easy-to-learn scripting languages, experts can use it to create powerful scripts.
sip is used to automatically create python classes for all relevant c++ classes to allow for the same class interfaces.
the python class has the same name as the c++ class, so porting code that uses ball from c++ to python  is usually a trivial task.
for instance, the following c++ code
// read a pdb file
pdbfile file ;
system s;
file >> s;
file .
close ;
// add missing information
// e .
g .
hydrogens and bonds
fragmentdb fragment_db ;
s .
apply ;
s .
apply ;
s .
apply ;
// check for charges, bond lengths ,
// and missing atoms
residuechecker checker ;
s .
apply ;
// create an amber force field
amberff ff;
s .
deselect ;
ff .
setup ;
selector selector  ");
s .
apply ;
// optimize the hydrogen ' s positions
conjugategradientminimizer minimizer;
minimizer .
setup ;
minimizer .
setenergyoutputfrequency ;
minimizer .
minimize ;
// write a pdb file
file .
open ;
file << s;
file .
close ;
translates to
# read a pdb file
file = pdbfile
system = system
file .
read
file .
close
# add missing information
# e .
g .
hydrogens and bonds
fragment_db = fragmentdb
system .
apply
system .
apply
system .
apply
# check for charges, bond lengths ,
# and missing atoms
checker = residuechecker
system .
apply
# create an amber force field
ff = amberff
system .
deselect
ff .
setup
selector = selector  ")
system .
apply
# optimize the hydrogen ' s positions
minimizer = conjugategradientminimizer
minimizer .
setup
minimizer .
setenergyoutputfrequency
minimizer .
minimize
# write a pdb file
outfile = pdbfile
outfile .
write .
outfile .
close
since the python interface is fully integrated into the molecular viewer and modeling tool ballview  <cit> , the effects of the scripts can be visualized directly.
also, the interface provides a simple way to automatize ballview's behaviour.
finally, a number of tutorials guide inexperienced users through the writing of their first applications.
these tutorials are provided with ball's extensive documentation and have recently been supplemented with a code library for recurring tasks on our wiki http://ball-trac.bioinf.uni-sb.de/wiki.
robustness
apart from substantially simplifying the creation of applications, the use of rad frameworks can also help greatly in ensuring their correctness and improving their robustness, since the code in the library has often been used and tested in a variety of situations by a large number of people.
to improve robustness, ball employs a large number of regression tests that are regularly executed on a number of different platforms.
in this way, it is easy to determine whether a change in some part of the code will lead to a regression in another part, or whether a new compiler release, for instance, will result in different behavior.
CONCLUSIONS
the biochemical algorithms library ball is a comprehensive rapid application development framework for structural bioinformatics.
ball has been carefully designed to address programming experts as well as novices.
users can take advantage of ball's rich functionality being offered an extensive framework of data structures and algorithms through both, c++ and the python scripting interface.
a variety of standard structural bioinformatics algorithms are offered and new algorithms can be easily added.
with the new release  <dig>  ball is complemented with a number of key features, e.g.
additional file formats, molecular edit-functionality, and new molecular mechanics force fields.
fundamental parts of ball's core have been rewritten, and the build system was switched to cmake to increase portability.
availability and requirements
project name: ball - biochemical algorithms library
project home page: http://www.ball-project.org
operating systems: linux, windows, and macos x
programming language: c++, python
license: lesser gnu public license
restrictions to use by non-academics: none
authors' contributions
ah, hpl, and ok are heading the project.
all authors contributed significantly to the project through programming, documenting, and testing.
all authors read and approved the final manuscript.

 developing programs for structural bioinformatics is a difficult and often tedious task. even if the algorithms have been carefully designed, the programmer has to solve a variety of complex and recurring problems not fundamentally related to the algorithm at hand, but necessary for real-world applications. not only more advanced tasks like inferring missing atoms or bonds, energy evaluations, or structural minimization require considerable programming effort that can hardly be repeated for every new project, but also the most basic and mundane steps. for example, many molecular file formats are as hard to parse correctly as they are to write. to avoid costly and error-prone re-inventing of the wheel for any new structural bioinformatics application, two approaches can be imagined: a collection of loosely coupled tools and utilities for recurring subtasks, or powerful libraries and frameworks for rapid application development. obviously, the second approach encompasses the first, i.e., creating small, specialized tools for a pipeline concept is trivial when relying on such a library. in addition, it allows its users simple access to the molecular data structures and algorithms that form building blocks of many algorithmic approaches and that often require complex implementations. with the biochemical algorithms library, we have created a versatile c++ class library for structural bioinformatics that is supplemented with a python interface for scripting functionality and a number of applications like the molecular modeling frontend ballview. ball has been used successfully for a large number of projects, both of our own and of external researchers. in recent years, ball has seen a significant increase in functionality and substantial useability improvements. it has been ported to further operating systems; indeed, it currently supports all major brands. moreover, ball has evolved from a commercial product into a free-of-charge, open source software licensed under the lesser gnu public license. several frameworks for structural bioinformatics have been reported in the literature; most of them, however, with a different focus, scope, or intended audience. hence, comparison with these projects is difficult in general. among those projects, the most similar in scope and functionality are commercial packages like the suites from schrödinger or the chemical computing group's molecular operating environment. while these packages typically focus on sophisticated graphical user interfaces for concrete modelling tasks, they also provide powerful scripting interfaces aimed at developers. notable open source projects in the field include biopython, pymol, cdk, meshi, joelib, the egad library, and strbiolib. to the best of our knowledge, ball offers the widest range of functionality for rapidly and robustly developing applications in structural bioinformatics, it is growing fast and can be easily extended. it addresses users of the implemented techniques as well as designers of completely new approaches. an overview of ball's design can be found in figure a full description of ball's functionality would fall well outside of the scope of this note; the current version contains more than classes and more than lines of code. instead, we want to briefly point out some of ball's most important features, particularly highlighting those that have been added since. in addition, we will show some ways in which the use of such an rad framework can simplify the life of scientists and developers. implementation ball has been implemented in c++, with some extensions written in python.  from the start of its development in ball's design principles have been wide functionality, ease of use, openness, and robustness. wide functionality to demonstrate ball's rich functionality, we describe a typical application - namely docking - and point out how ball simplifies its implementation. in this case, a large amount of time and code is devoted to the problem of importing the docking partners into suitable structural representations and preparing them for further use. typically, this preparation consists in reading the molecules from diverse file formats, checking their content, adding missing information, running the actual docking algorithm, and, finally, analysing its result. reading the data doubtlessly belongs to the most recurring tasks in molecular software development. ball supports a rich variety of molecular structure formats. while the previously published version only supported the molecular file formats pdb and mol version additionally reads and writes mol, hin, xyz, kcf, and sd files. besides molecular files, it also supports a variety of other data sources, like dcd, dsn gamess, jcamp, scwrl, and trr. export to most of these formats is possible as well. apart from importing molecules from external sources, the new version also offers rich functionality for generating and editing molecules. for instance, given only the amino acid sequence and the corresponding torsion angles, ball's peptidebuilder creates a 3d structure of that peptide. more general molecular structures, e.g., of ligands, can be generated from smiles-expressions or programmatically by explicitly inserting atoms and bonds. the next step - not only in docking but in all applications processing molecular structures - is to validate the structures and to prepare the data for the following tasks. some atoms, in particular, hydrogens, are often missing, and structural information such as connectivity or bond orders are often incorrect or even missing. for proteins, dna, and rna, ball can automatically infer much of the missing information from an extensible fragment database. this can also be used for validating given structures. a rotamer library allows the user to easily determine a protein's most likely side-chain conformations or to easily switch between several rotameric states. both, fragment database and rotamer library have been significantly improved since ball's first publication. other molecules with a more diverse chemistry, such as ligands, require more sophisticated approaches to infer missing structural information. ball's new bondorderassigner heuristically determines all possible bond order assignments for a given ligand sorted by their probability. favorable 3d conformations can be achieved by employing ball's new quickoptimizer, a randomized mdsimulator/minimizer in combination with several force fields. also among the new features are a kekulizer and an aromaticity processor. once the input has been prepared, the two core problems in protein docking are the generation of docking poses and their evaluation. for both tasks, ball offers rich functionality. the first is facilitated by the preparation functionality and ball's transformation processors. here, ball's selection mechanisms also simplify matters by allowing, for instance, the selection of certain parts of the molecule through easily formulated expressions. via a selector class, certain predicates like element type can be used as a selection filter. additionally, ball now provides an expression class which allows selecting subsets of objects by given smiles and smarts strings as well as by ball predicates. the second task often amounts to energy evaluations and/or the checking of certain criteria. the former version of ball provided the force field classes charmm and amber. in the current version, an implementation of the merck molecular force field, a fully parameterized force field that allows handling of virtually all kinds of organic molecules, has been added as well as some non-differentiable scoring functions. force fields can not only be used for scoring: ball's minimizer and molecular dynamics classes can be combined with all of the implemented force fields. minimizers and simulation classes also support selection, allowing the user to freely specify a set of movable atoms from all atoms used for force field computation. this is useful in a variety of contexts, e.g. when estimated hydrogen positions have to be reoptimized. since the last version, we have greatly extended the minimization capabilities, now offering standard and the best currently known methods. in addition to the features described above, version has been greatly extended with further functionality. for instance, secondary structure prediction and hydrogen-bond detection are now available. in summary, ball has developed into a powerful tool for rad covering fundamental functionality as well as complex applications like molecular docking and drug design. due to its modular architecture, all classes and algorithms can be combined in a building block manner to easily implement even complex methods. ease of use one measure of the usefulness of an rad platform is the time it saves compared to developing the functionality from scratch. hence, ease of use and a shallow learning curve are important goals for any large-scale framework. on the other hand, after some time of familiarization with the library, users will usually want to fine-tune the methods, choose detailed parameters, or even exchange parts of the algorithms. supporting these advanced users bears the risk of conflicting with the ease-of-use principle, for instance, by confusing the user with a wide array of tuneable options. ball has been very carefully designed to address both groups of users, experts and novices alike, simultaneously. for example, most algorithms implemented in ball accept a wide range of options to fine-tune their behavior, but all of these come with sensible defaults. in this way, a novice user can just instantiate a class and use it successfully, while experts can adapt the options to their individual needs. similarly, the versatile python interface offered by ball appeals to both groups of users, albeit in different ways: while novice users and non-programming experts can profit from the easy-to-learn scripting languages, experts can use it to create powerful scripts. sip is used to automatically create python classes for all relevant c++ classes to allow for the same class interfaces. the python class has the same name as the c++ class, so porting code that uses ball from c++ to python is usually a trivial task. for instance, the following c++ code // read a pdb file pdbfile file; system s; file >> s; file. close; // add missing information // e. g. hydrogens and bonds fragmentdb fragment_db; s. apply; s. apply; s. apply; // check for charges, bond lengths, // and missing atoms residuechecker checker; s. apply; // create an amber force field amberff ff; s. deselect; ff. setup; selector selector "); s. apply; // optimize the hydrogen' s positions conjugategradientminimizer minimizer; minimizer. setup; minimizer. setenergyoutputfrequency; minimizer. minimize; // write a pdb file file. open; file << s; file. close; translates to # read a pdb file file = pdbfile system = system file. read file. close # add missing information # e. g. hydrogens and bonds fragment_db = fragmentdb system. apply system. apply system. apply # check for charges, bond lengths, # and missing atoms checker = residuechecker system. apply # create an amber force field ff = amberff system. deselect ff. setup selector = selector ") system. apply # optimize the hydrogen' s positions minimizer = conjugategradientminimizer minimizer. setup minimizer. setenergyoutputfrequency minimizer. minimize # write a pdb file outfile = pdbfile outfile. write. outfile. close since the python interface is fully integrated into the molecular viewer and modeling tool ballview, the effects of the scripts can be visualized directly. also, the interface provides a simple way to automatize ballview's behaviour. finally, a number of tutorials guide inexperienced users through the writing of their first applications. these tutorials are provided with ball's extensive documentation and have recently been supplemented with a code library for recurring tasks on our wiki http://ball-trac.bioinf.uni-sb.de/wiki. robustness apart from substantially simplifying the creation of applications, the use of rad frameworks can also help greatly in ensuring their correctness and improving their robustness, since the code in the library has often been used and tested in a variety of situations by a large number of people. to improve robustness, ball employs a large number of regression tests that are regularly executed on a number of different platforms. in this way, it is easy to determine whether a change in some part of the code will lead to a regression in another part, or whether a new compiler release, for instance, will result in different behavior.  the biochemical algorithms library ball is a comprehensive rapid application development framework for structural bioinformatics. ball has been carefully designed to address programming experts as well as novices. users can take advantage of ball's rich functionality being offered an extensive framework of data structures and algorithms through both, c++ and the python scripting interface. a variety of standard structural bioinformatics algorithms are offered and new algorithms can be easily added. with the new release ball is complemented with a number of key features, e.g. additional file formats, molecular edit-functionality, and new molecular mechanics force fields. fundamental parts of ball's core have been rewritten, and the build system was switched to cmake to increase portability. availability and requirements project name: ball - biochemical algorithms library project home page: http://www.ball-project.org operating systems: linux, windows, and macos x programming language: c++, python license: lesser gnu public license restrictions to use by non-academics: none authors' contributions ah, hpl, and ok are heading the project. all authors contributed significantly to the project through programming, documenting, and testing. all authors read and approved the final manuscript. 
here, we discuss ball's current functionality and highlight the key additions and improvements: support for additional file formats, molecular edit-functionality, new molecular mechanics force fields, novel energy minimization techniques, docking algorithms, and support for cheminformatics. the biochemical algorithms library is a comprehensive rapid application development framework for structural bioinformatics. ball is available for all major operating systems, including linux, windows, and macos x. it is available free of charge under the lesser gnu public license. parts of the code are distributed under the gnu public license. it provides an extensive c++ class library of data structures and algorithms for molecular modeling and structural bioinformatics. using ball as a programming toolbox does not only allow to greatly reduce application development times but also helps in ensuring stability and correctness by avoiding the error-prone reimplementation of complex algorithms and replacing them with calls into the library that has been well-tested by a large number of developers.
 the biochemical algorithms library is a comprehensive rapid application development framework for structural bioinformatics. it provides an extensive c++ class library of data structures and algorithms for molecular modeling and structural bioinformatics. using ball as a programming toolbox does not only allow to greatly reduce application development times but also helps in ensuring stability and correctness by avoiding the error-prone reimplementation of complex algorithms and replacing them with calls into the library that has been well-tested by a large number of developers. in the ten years since its original publication, ball has seen a substantial increase in functionality and numerous other improvements.  here, we discuss ball's current functionality and highlight the key additions and improvements: support for additional file formats, molecular edit-functionality, new molecular mechanics force fields, novel energy minimization techniques, docking algorithms, and support for cheminformatics.  ball is available for all major operating systems, including linux, windows, and macos x. it is available free of charge under the lesser gnu public license. parts of the code are distributed under the gnu public license. ball is available as source code and binary packages from the project web site at http://www.ball-project.org. recently, it has been accepted into the debian project; integration into further distributions is currently pursued. 