dbd5852ee309ddd945d72b6fd8ddf7e06efe27bb
[unres.git] / source / xdrfpdb / src / xdrf2ang.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       include 'COMMON.NAMES'
7       include 'COMMON.GEO'
8       real*4 coord(3,2*maxres)
9       real*4 prec,time,potE,uconst,t_bath,qfrag(100)
10       real*8 etot
11       character*80 arg,seqfile,angfile
12       character*3 sequenc(maxres)
13       character*50 tytul
14       character*8 onethree,cfreq
15       character*8 ucase
16       external ucase
17       logical oneletter
18       integer rescode
19       external rescode
20       
21       pi = 4.0d0*datan(1.0d0)
22       deg2rad=pi/180.0d0
23       rad2deg=1.0d0/deg2rad
24
25       ifreq=1
26       is=1
27       ie=1000000000
28       if (iargc().lt.3) then
29         print '(2a)',
30      &    "Usage: xdrf2ang one/three seqfile cxfile [freq]",
31      &    " [start] [end] [angfile]"
32         stop
33       endif
34       call getarg(1,onethree)
35       onethree = ucase(onethree)
36       if (onethree.eq.'ONE') then
37         oneletter = .true.
38       else if (onethree.eq.'THREE') then
39         oneletter = .false.
40       else
41         print *,"ONE or THREE must be specified"
42       endif
43       call getarg(2,seqfile)
44       open (1,file=seqfile,status='old')
45       if (oneletter) then
46         read(1,'(80a1)',end=10,err=10) (sequenc(i)(1:1),i=1,maxres)
47    10   continue
48         nres=i
49         i=0
50 c        do while (.not.iblnk(sequenc(i+1)(1:1)))
51         do while (.not.(iblnk(sequenc(i+1)(1:1)) == 0) )
52           i=i+1
53         enddo 
54         nres=i
55         do i=1,nres
56           itype(i)=rescode(i,sequenc(i),1)
57         enddo
58       else
59         read(1,'(20(a3,1x))',end=11,err=11) (sequenc(i),i=1,maxres)
60    11   continue
61         nres=i
62         i=0
63         do while (.not.(iblnk(sequenc(i+1)(1:1)) == 0) )
64           i=i+1
65         enddo 
66         nres=i
67         do i=1,nres
68           itype(i)=rescode(i,sequenc(i),0)
69         enddo
70       endif
71       call getarg(3,arg)
72       iext = index(arg,'.cx') - 1
73       if (iext.lt.0) then
74         print *,"Error - not a cx file"
75         stop
76       endif
77       if (iargc().gt.3) then
78         call getarg(4,cfreq)
79         read (cfreq,*) ifreq
80       endif
81       if (iargc().gt.4) then
82         call getarg(5,cfreq)
83         read (cfreq,*) is
84       endif
85       if (iargc().gt.5) then
86         call getarg(6,cfreq)
87         read (cfreq,*) ie
88       endif
89       if (iargc().gt.6) then
90         call getarg(7,angfile)
91       else
92         angfile=arg(:iext)//'.ang'
93       endif
94       open(9,file=angfile)
95       nnt = 1
96       if (itype(1).eq.21) nnt = 2
97       nct=nres
98       if (itype(nres).eq.21) nct = nres-1
99       print *,"nnt",nnt," nct",nct
100       print *,"file",arg
101       call xdrfopen(ixdrf,arg, "r", iret)
102       if (iret.eq.0) stop
103       print *,"iret",iret
104       print *,"is",is," ie",ie
105       kk = 0
106       do while(is.eq.0 .or. kk.lt.ie) 
107 c       call xdrfint(ixdrf, ic, iret)
108 c       print *,ic
109        call xdrffloat(ixdrf, time, iret)
110        print *,"time",time," iret",iret
111        if(iret.eq.0) exit
112        kk = kk + 1
113        call xdrffloat(ixdrf, potE, iret)
114        call xdrffloat(ixdrf, uconst, iret)
115        call xdrffloat(ixdrf, uconst_back, iret)
116 c       print *,"potE",potE," uconst",uconst," uconst_back",uconst_back
117        call xdrffloat(ixdrf, t_bath, iret)
118 c       print *,"t_bath",t_bath
119        call xdrfint(ixdrf, nss, iret) 
120 c       print *,"nss",nss
121        do j=1,nss
122         call xdrfint(ixdrf, ihpb(j), iret)
123         call xdrfint(ixdrf, jhpb(j), iret)
124        enddo
125        call xdrfint(ixdrf, nfrag, iret)
126 c       print *,"nfrag",nfrag
127        do i=1,nfrag
128         call xdrffloat(ixdrf, qfrag(i), iret)
129        enddo
130        prec=10000.0
131
132        isize=0
133        call xdrf3dfcoord(ixdrf, coord, isize, prec, iret)
134
135
136 c       write (*,'(i4,$)') nss,(ihpb(j),jhpb(j),j=1,nss)
137 c       write (*,'(i4,20f7.4)') nfrag,(qfrag(i),i=1,nfrag)
138 c       write (*,'(8f10.5)') ((coord(k,j),k=1,3),j=1,isize)
139        if (mod(kk,ifreq).eq.0) then
140          if (isize .ne. nres+nct-nnt+1) then
141            print *,"Error: inconsistent sizes",isize,nres+nct-nnt+1
142          endif
143          write (9,'(i10,e15.8,2e15.5,f12.5)') kk,time,potE,uconst,t_bath
144          do i=1,nres
145            do j=1,3
146              c(j,i)=coord(j,i)
147            enddo
148          enddo
149          ii = 0
150          do i=nnt,nct
151            ii = ii + 1 
152            do j=1,3
153              c(j,i+nres)=coord(j,ii+nres)
154            enddo
155          enddo
156          etot=potE
157          do i=2,nres-2
158            write (9,'(a3,1x,2f10.3)')
159      &       restyp(itype(i)),alpha(i-1,i,i+1)*rad2deg,
160      &       beta(i-1,i,i+1,i+2)*rad2deg
161          enddo
162          write (9,'(a3,1x,f10.3)')
163      &       restyp(itype(nres-1)),alpha(nres-2,nres-1,nres)*rad2deg
164        endif
165       enddo
166      
167       end