| BALL software | |
|---|---|
| Genere | Bioinformatica |
| Sviluppatore | BALL project team |
| Ultima versione | 1.4.2 (28 gennaio 2013) |
| Ultima beta | 1.4.79 (7 agosto 2014) |
| Sistema operativo | Unix-like macOS Microsoft Windows |
| Linguaggio | C++ Python |
| Toolkit | Qt |
| Licenza | GNU Lesser General Public License (licenza libera) |
| Sito web | www.ball-project.org/ |
BALL (Biochemical Algorithms Library) è un progetto open source consistente in un insieme di classi C++, una libreria di algoritmi e strutture dati per la modellistica molecolare e la bioinformatica computazionale, un'interfaccia python alla libreria stessa ed al visualizzatore BALLView (anch'esso open source); accanto all'interfaccia in python BALL offre un'interfaccia da riga di comando.
Esistono versioni per Linux, Solaris, Microsoft Windows and macOS. BALL utilizza Qt così come OpenGL. BALL si è evoluto da un prodotto commerciale in un progetto gratuito, open source sotto licenza GNU Lesser General Public License (LGPL).
Il progetto viene sviluppato e mantenuto da gruppi di ricerca dell'Università della Saarland, dell'università di Magonza, dell'università di Tubinga. Sia le librerie che BALLView sono utilizzati per insegnamento universitario e ricerca. Pacchetti per Debian sono stati resi disponibili il 04/2010.
Il seguente programma legge un file PDB, aggiunge informazioni mancanti quali legami ed atomi di idrogeno, ottimizza le posizioni degli atomi di idrogeno utilizzando AMBER e scrive il risultato in un secondo file PDB.
using namespace std;
using namespace BALL;
int main()
{
// legge un file PDB
PDBFile file("test.pdb");
System S;
file >> S;
file.close();
// Aggiunge informazioni mancanti
// ovvero idrogeni e legami
FragmentDB fragment_db("");
S.apply(fragment_db.normalize_names);
S.apply(fragment_db.add_hydrogens);
S.apply(fragment_db.build_bonds);
// Controllo per cariche, lunghezza di legame,
// atomi mancanti
ResidueChecker checker(fragment_db);
S.apply(checker);
// Crea un campo di forze AMBER
AmberFF FF;
S.deselect();
FF.setup(S);
Selector selector("element(H)");
S.apply(selector);
// Ottimizza le posizioni degli atomi di
// idrogeno
ConjugateGradientMinimizer minimizer;
minimizer.setup(FF);
minimizer.setEnergyOutputFrequency(1);
minimizer.minimize(50);
// Scrive un file PDB
file.open("test_out.pdb", ios::out);
file << S;
file.close();
}
Si utilizza SIP per creare classi python per tutte le classi C++ esistenti nella libreria BALL per avere la medesima interfaccia. I nomi delle classi in C++ e python sono identici così da aumentare la portabilità. Il codice python corrispondente al precedente è il seguente:
# Example
file = PDBFile("test.pdb")
system = System()
file.read(system)
file.close()
// Aggiunge informazioni mancanti
// ovvero idrogeni e legami
fragment_db = FragmentDB("")
system.apply(fragment_db.normalize_names)
system.apply(fragment_db.add_hydrogens)
system.apply(fragment_db.build_bonds)
// Controllo per cariche, lunghezza di legame,
// atomi mancanti
checker = ResidueChecker(fragment_db)
system.apply(checker)
// Crea un campo di forze AMBER
FF = AmberFF()
system.deselect()
FF.setup(system)
selector = Selector("element(H)")
system.apply(selector)
// Ottimizza le posizioni degli atomi di
// idrogeno
minimizer = ConjugateGradientMinimizer()
minimizer.setup(FF)
minimizer.setEnergyOutputFrequency(1)
minimizer.minimize(50)
// Scrive un file PDB
outfile = PDBFile("test_out.pdb", File.MODE_OUT)
outfile.write(system)
outfile.close()
L'interfaccia python è pienamente integrata con BALLView e permette quindi la visualizzazione di risultati ottenuti tramite script in python.