|
|
Analysis LibraryTable of contentsNo headersAll the analysis programs are already compiled into one library, so you can for instance call a function gmx_rmsd(int argc,char *argv[]); Obviously that is almost the same as doing a system call. What I would like to have is distinction between the low level and the high level. such that you can call e.g. the rdf function for a single coordinate set and then get the results back. All the command line parsing and file I/O should be done in the function gmx_rmsd, but data analysis etc. should be done in subroutines. A schematic example could be: gmx_rmsd(int argc,char *argv[])
{
/* Variable declarations */
/* Read command line arguments */
/* Open trajectory and/or other files */
do {
read_trx();
calc_rmsd();
} while (!eof(trx));
/* Write results */
}
The work involved is to separate out the calc_rmsd functionality from the main routine. This may involve creating extra temp. variables (e.g. for results) and removing I/O functionality from the low-level routines. Since this now will be a library, it can not be allowed to crash with a fatal error, which means routines like calc_rmsd should return an status variable, to be checked after running the routine. It would also be great if there could be online visualization (using e.g. a pipe to xmgrace) but that is not crucial for a start. For most analyses we use index files containing atom numbers, e.g. the atoms used for the RDF calculation. Since we want to bring this to a new level of abstraction we'd also need something like "dynamic indices", such that one at each step determines, e.g. which are the oxygen atoms in a protein. This is necessary when the number of atoms is dynamic as well. Maybe this should be a separate project Dynamic_Indices. |