[gmx-users] for help about reading xtc file
Xu, Yechuan
y.xu at neu.edu
Fri Aug 16 18:25:30 CEST 2013
Yes, I realized that it is a opaque structure.
I just want to read a certain frame from the
xtc file. For example, last time I read the xtc
file to a certain frame, I want to recorde the
position and next time I can read the xtc file
from there, not from beginning.
Did anybody do that?
Thanks,
YC
On Aug 16, 2013, at 4:39 AM, Mark Abraham wrote:
> On Thu, Aug 15, 2013 at 11:33 PM, Xu, Yechuan <y.xu at neu.edu> wrote:
>> Thank you for your reply. after I read the xdrfile.c,
>>
>> I changed the sentence as
>> pos=xdr_getpos((XDR*) (xtc->xdr));
>>
>> like that in the file of xdrfile.c. I also copy the definition
>> for XDR and xdr_op to my own code.
>
> You can see those functions, but the fact that there's an opaque
> struct is a clue you're not supposed to want to use them. Your code
> has already read the frame using the public interface in
> xdrfile_xtc.h. What else are you trying to achieve?
>
> Mark
>
>> But I still got the errors:
>> seekxtc.c:61:33: error: dereferencing pointer to incomplete type
>> pos=xdr_getpos((XDR *)(xtc->xdr));
>> ^
>>
>> here are my code:
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <math.h>
>> #include <xdrfile_xtc.h>
>>
>> enum xdr_op
>> {
>> XDR_ENCODE = 0,
>> XDR_DECODE = 1,
>> XDR_FREE = 2
>> };
>>
>> typedef struct XDR XDR;
>>
>> struct XDR
>> {
>> enum xdr_op x_op;
>> struct xdr_ops
>> {
>> int (*x_getlong) (XDR *__xdrs, int32_t *__lp);
>> int (*x_putlong) (XDR *__xdrs, int32_t *__lp);
>> int (*x_getbytes) (XDR *__xdrs, char *__addr, unsigned int __len);
>> int (*x_putbytes) (XDR *__xdrs, char *__addr, unsigned int __len);
>> /* two next routines are not 64-bit IO safe - don't use! */
>> unsigned int (*x_getpostn) (XDR *__xdrs);
>> int (*x_setpostn) (XDR *__xdrs, unsigned int __pos);
>> void (*x_destroy) (XDR *__xdrs);
>> }
>> *x_ops;
>> char *x_private;
>> };
>>
>>
>> int main(int argc, char *argv[])
>> {
>> int i;
>> int step, read_return, result;
>> int natoms;
>> float time,prec=1000.;
>> matrix box;
>> rvec *x;
>> XDRFILE *xtc;
>> char *fname;
>> unsigned int pos;
>>
>> printf("begin, argc=%d\n",argc);
>> if(argc==2){
>> fname=argv[1];
>> }
>>
>> xtc=xdrfile_open (fname,"r");
>> read_xtc_natoms (fname,&natoms);
>> printf("number of atoms: %d\n",natoms);
>>
>> x = calloc(natoms, sizeof (x[0]));
>>
>> while(1){
>> read_return=read_xtc(xtc,natoms,&step,&time,box,x,&prec);
>> if (read_return!=0) break;
>>
>> pos=xdr_getpos((XDR *)(xtc->xdr));
>> printf("%d\n",pos);
>>
>> }
>>
>> xdrfile_close (xtc);
>> }
>> Thanks,
>> YC
>>
>>
>> On Aug 15, 2013, at 3:09 PM, Mark Abraham wrote:
>>
>>> Right, because a pointer to an XDRFILE is neither a struct nor a union
>>> :-) Look at how these routines are used, and consult the header files
>>> for the right types to give them.
>>>
>>> Mark
>>>
>>> On Thu, Aug 15, 2013 at 7:29 PM, Xu, Yechuan <y.xu at neu.edu> wrote:
>>>> Hi Everyone,
>>>>
>>>> I want to read a certain frame in a xtc file. How can I do that?
>>>> I see there are xdr_getpos() and xdr_setpos(). How should I use
>>>> these functions?
>>>>
>>>> I tried:
>>>>
>>>> XDRFILE *xtc;
>>>> unsigned int pos;
>>>>
>>>> pos=xdr_getpos(xtc.xdr);
>>>>
>>>> but I got:
>>>> error: request for member ‘xdr’ in something not a structure or union
>>>>
>>>> Thanks in advance.
>>>> YC--
>>>> gmx-users mailing list gmx-users at gromacs.org
>>>> http://lists.gromacs.org/mailman/listinfo/gmx-users
>>>> * Please search the archive at http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
>>>> * Please don't post (un)subscribe requests to the list. Use the
>>>> www interface or send it to gmx-users-request at gromacs.org.
>>>> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>>> --
>>> gmx-users mailing list gmx-users at gromacs.org
>>> http://lists.gromacs.org/mailman/listinfo/gmx-users
>>> * Please search the archive at http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
>>> * Please don't post (un)subscribe requests to the list. Use the
>>> www interface or send it to gmx-users-request at gromacs.org.
>>> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>>
>> --
>> gmx-users mailing list gmx-users at gromacs.org
>> http://lists.gromacs.org/mailman/listinfo/gmx-users
>> * Please search the archive at http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
>> * Please don't post (un)subscribe requests to the list. Use the
>> www interface or send it to gmx-users-request at gromacs.org.
>> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> --
> gmx-users mailing list gmx-users at gromacs.org
> http://lists.gromacs.org/mailman/listinfo/gmx-users
> * Please search the archive at http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
> * Please don't post (un)subscribe requests to the list. Use the
> www interface or send it to gmx-users-request at gromacs.org.
> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
More information about the gromacs.org_gmx-users
mailing list