added source code
[unres.git] / source / unres / src_MD-M / xdrf2pdb / xdrf2pdb.f
1       implicit real*8 (a-h,o-z)
2       include 'DIMENSIONS'
3       include 'COMMON.CHAIN'
4       include 'COMMON.INTERACT'
5       include 'COMMON.SBRIDGE'
6       real*4 coord(3,1000)
7       real*4 prec,time,potE,uconst,t_bath,qfrag(100)
8       real*8 etot
9       character*80 arg,seqfile,pdbfile
10       character*3 sequenc(maxres)
11       character*50 tytul
12       character*8 onethree,cfreq
13       character*8 ucase
14       external ucase
15       logical oneletter,iblnk
16       integer rescode
17       external rescode
18       
19       do i=1,maxres
20        sequenc(i)=''
21       enddo
22
23       ifreq=1
24       if (iargc().lt.3) then
25         print '(a)',
26      &    "Usage: xdrf2pdb one/three seqfile cxfile [freq] [pdbfile]"
27         stop
28       endif
29       call getarg(1,onethree)
30       onethree = ucase(onethree)
31       if (onethree.eq.'ONE') then
32         oneletter = .true.
33       else if (onethree.eq.'THREE') then
34         oneletter = .false.
35       else
36         print *,"ONE or THREE must be specified"
37       endif
38       call getarg(2,seqfile)
39       open (1,file=seqfile,status='old')
40       if (oneletter) then
41         read(1,'(80a1)',end=10,err=10) (sequenc(i)(1:1),i=1,maxres)
42    10   continue
43         nres=i
44         i=0
45         do while (.not.iblnk(sequenc(i+1)(1:1)))
46           i=i+1
47         enddo 
48         nres=i
49         do i=1,nres
50           itype(i)=rescode(i,sequenc(i),1)
51         enddo
52       else
53         read(1,'(20(a3,1x))',end=11,err=11) (sequenc(i),i=1,maxres)
54    11   continue
55         nres=i
56         i=0
57         do while (.not.iblnk(sequenc(i+1)(1:1)))
58           print *,sequenc(i+1)
59           i=i+1
60         enddo 
61         nres=i
62         do i=1,nres
63           itype(i)=rescode(i,sequenc(i),0)
64         enddo
65       endif
66       call getarg(3,arg)
67       iext = index(arg,'.cx') - 1
68       if (iext.lt.0) then
69         print *,"Error - not a cx file"
70         stop
71       endif
72       if (iargc().gt.3) then
73         call getarg(4,cfreq)
74         read (cfreq,*) ifreq
75       endif
76       if (iargc().gt.4) then
77         call getarg(5,pdbfile)
78       else
79         pdbfile=arg(:iext)//'.pdb'
80       endif
81       open(9,file=pdbfile)
82       nnt = 1
83       if (itype(1).eq.21) nnt = 2
84       nct=nres
85       if (itype(nres).eq.21) nct = nres-1
86
87       call xdrfopen_(ixdrf,arg, "r", iret)
88        
89       kk = 0
90       do while(.true.) 
91        call xdrffloat_(ixdrf, time, iret)
92        if(iret.eq.0) exit
93        kk = kk + 1
94        call xdrffloat_(ixdrf, potE, iret)
95        call xdrffloat_(ixdrf, uconst, iret)
96        call xdrffloat_(ixdrf, t_bath, iret)
97        call xdrfint_(ixdrf, nss, iret) 
98        do j=1,nss
99         call xdrfint_(ixdrf, ihpb(j), iret)
100         call xdrfint_(ixdrf, jhpb(j), iret)
101        enddo
102        call xdrfint_(ixdrf, nfrag, iret)
103        do i=1,nfrag
104         call xdrffloat_(ixdrf, qfrag(i), iret)
105        enddo
106        prec=10000.0
107
108        isize=0
109        call xdrf3dfcoord_(ixdrf, coord, isize, prec, iret)
110
111
112 c       write (*,'(e15.8,2e15.5,f12.5,$)') time,potE,uconst,t_bath
113 c       write (*,'(i4,$)') nss,(ihpb(j),jhpb(j),j=1,nss)
114 c       write (*,'(i4,20f7.4)') nfrag,(qfrag(i),i=1,nfrag)
115 c       write (*,'(8f10.5)') ((coord(k,j),k=1,3),j=1,isize)
116        if (mod(kk,ifreq).eq.0) then
117          if (isize .ne. nres + nct - nnt + 1) then
118            print *,"Error: inconsistent sizes",isize,nres+nct-nnt+1
119          endif
120          do i=1,nres
121            do j=1,3
122              c(j,i)=coord(j,i)
123            enddo
124          enddo
125          ii = 0
126          do i=nnt,nct
127            ii = ii + 1 
128            do j=1,3
129              c(j,i+nres)=coord(j,ii+nres)
130            enddo
131          enddo
132          etot=potE
133          write (tytul,'(a,i6)') "Structure",kk
134          call pdbout(etot,tytul,9)
135        endif
136       enddo
137      
138       end