[gmx-users] C++ xtc interface
David van der Spoel
spoel at xray.bmc.uu.se
Wed Oct 4 09:02:14 CEST 2017
On 02/10/17 23:16, Adriaan Riet wrote:
> Hello,
>
> I would like to do some work with xtc output files, but I'm having trouble.
> The documentation <http://manual.gromacs.org/online/xtc.html> has the
> following functions:
>
> /* All functions return 1 if successful, 0 otherwise */
>
> extern int open_xtc(XDR *xd,char *filename,char *mode);
> /* Open a file for xdr I/O */
>
> extern void close_xtc(XDR *xd);
> /* Close the file for xdr I/O */
>
> extern int read_first_xtc(XDR *xd,char *filename,
> int *natoms,int *step,real *time,
> matrix box,rvec **x,real *prec);
>
>
> while the header file exposes the following signatures:
>
> struct t_fileio *open_xtc(const char *filename, const char *mode);
> /* Open a file for xdr I/O */
>
> void close_xtc(struct t_fileio *fio);
> /* Close the file for xdr I/O */
>
> int read_first_xtc(struct t_fileio *fio,
> int *natoms, gmx_int64_t *step, real *time,
> matrix box, rvec **x, real *prec, gmx_bool *bOK);
> /* Open xtc file, read xtc file first time, allocate memory for x */
>
> Further, the documentation mentions that you should link to -lgmx, but the
> only library I see for gromacs >=5.1 is -lgromacs (or -lgromacs_d). I
> assumed the function signature of the header file was correct, and made a
> small test case:
>
> #include<iostream>
> #include "gromacs/fileio/xtcio.h"
> int main(int argc, char* argv[]){
> const char
> filename[]={"$HOME/Documents/Research/gromacs/oakley/june2017Test/2017/09-21/10-06_angle0.42impConc0T1873.xtc"};
> const char mode[]={'r'};
> t_fileio *xdrFile = open_xtc(filename,mode);
> int *natoms;
> gmx_int64_t *step;
> real *time;
> matrix box;
> rvec **x;
> real *prec;
> gmx_bool *bOK;
> int answer=read_first_xtc(xdrFile,natoms,step,time,box,x,prec,bOK);
> std::cout<<filename<<'\t'<<natoms<<std::endl;
> if(answer){
> std::cout<<"I'm having a good day "<<std::endl;
> }
>
> return 0;
> }
>
> I'm compiling and linking fine, and make it through the "open_xtc"
> function, but I'm segfaulting at the "read_first_xtc" function (i.e. not
> having a good day). My xtc file probably doesn't fit in memory. Has anyone
> had success using this interface? Is there a defined structure for the
> t_file_io struct?
natoms should not be an uninitialized pointer, just an int that you
pass with &natoms.
same with coordinates x, declare as
rvec *x
and pass as &x
Checkhow it is done in simple analysis tools in src/gromacs/gmxana
>
> Thanks,
> Adriaan Riet
>
--
David van der Spoel, Ph.D., Professor of Biology
Head of Department, Cell & Molecular Biology, Uppsala University.
Box 596, SE-75124 Uppsala, Sweden. Phone: +46184714205.
http://www.icm.uu.se
More information about the gromacs.org_gmx-users
mailing list