Merge branch 'devel' of mmka.chem.univ.gda.pl:unres into devel
[unres.git] / source / xdrfpdb / src / xdrf2pdb-m.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,5000)
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,cntraj,citraj
13       character*3 licz
14       character*8 ucase
15       external ucase
16 <<<<<<< HEAD
17       logical oneletter,iblnk
18 =======
19       logical oneletter, iblnk
20 >>>>>>> aebadf9023e437f497f92dfcf2303c16f60917c1
21       integer rescode
22       external rescode
23       
24       ifreq=1
25       if (iargc().lt.5) then
26         print '(2a)',
27      &   "Usage: xdrf2pdb-m one/three seqfile cxfile ntraj itraj",
28      &   " [pdbfile] [freq]"
29         stop
30       endif
31       call getarg(1,onethree)
32       onethree = ucase(onethree)
33       if (onethree.eq.'ONE') then
34         oneletter = .true.
35       else if (onethree.eq.'THREE') then
36         oneletter = .false.
37       else
38         print *,"ONE or THREE must be specified"
39       endif
40       call getarg(2,seqfile)
41       open (1,file=seqfile,status='old')
42       if (oneletter) then
43         read(1,'(80a1)',end=10,err=10) (sequenc(i)(1:1),i=1,maxres)
44    10   continue
45         nres=i
46         i=0
47         do while (.not.iblnk(sequenc(i+1)(1:1)))
48 c        do while (.not.(iblnk(sequenc(i+1)(1:1)) == 0))
49           i=i+1
50         enddo 
51         nres=i
52         do i=1,nres
53           itype(i)=rescode(i,sequenc(i),1)
54         enddo
55       else
56         read(1,'(20(a3,1x))',end=11,err=11) (sequenc(i),i=1,maxres)
57    11   continue
58         nres=i
59         i=0
60         do while (.not.iblnk(sequenc(i+1)(1:1)))
61 c        do while (.not.(iblnk(sequenc(i+1)(1:1)) == 0))
62           i=i+1
63         enddo 
64         nres=i
65         do i=1,nres
66           itype(i)=rescode(i,sequenc(i),0)
67         enddo
68         print *,nres
69         print '(20(a3,1x))',(sequenc(i),i=1,nres)
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       call getarg(4,cntraj)
78       read (cntraj,*) ntraj
79       call getarg(5,citraj)
80       read (citraj,*) itraj
81       if (iargc().gt.5) then
82         call getarg(6,pdbfile)
83       else
84         write(licz,'(bz,i3.3)') itraj
85         pdbfile=arg(:iext)//'_'//licz//'.pdb'
86       endif
87       if (iargc().gt.6) then
88         call getarg(7,cfreq)
89         read (cfreq,*) ifreq
90       endif
91 c      print *,"ifreq",ifreq," ntraj",ntraj," itraj",itraj
92       open(9,file=pdbfile)
93       nnt = 1
94       if (itype(1).eq.21) nnt = 2
95       nct=nres
96       if (itype(nres).eq.21) nct = nres-1
97       print *,"nnt",nnt," nct",nct
98       call xdrfopen(ixdrf,arg, "r", iret)
99       kk = 0
100       do while(.true.) 
101        call xdrffloat(ixdrf, time, iret)
102        if(iret.eq.0) exit
103        kk = kk + 1
104        call xdrffloat(ixdrf, potE, iret)
105        call xdrffloat(ixdrf, uconst, iret)
106        call xdrffloat(ixdrf, t_bath, iret)
107        print *,"potE",potE," uconst",uconst," t_bath",t_bath
108 #ifdef NEWUNRES
109        call xdrffloat(ixdrf, uconst_back, iret)
110 #endif
111        print *,"uconst_back",uconst_back
112        call xdrfint(ixdrf, nss, iret) 
113        do j=1,nss
114         call xdrfint(ixdrf, ihpb(j), iret)
115         call xdrfint(ixdrf, jhpb(j), iret)
116        enddo
117        call xdrfint(ixdrf, nfrag, iret)
118        do i=1,nfrag
119         call xdrffloat(ixdrf, qfrag(i), iret)
120        enddo
121        prec=10000.0
122
123        isize=0
124        print *," call xdrf3coord"
125        call xdrf3dfcoord(ixdrf, coord, isize, prec, iret)
126
127
128 c       write (*,'(e15.8,2e15.5,f12.5,$)') time,potE,uconst,t_bath
129 c       write (*,'(i4,$)') nss,(ihpb(j),jhpb(j),j=1,nss)
130 c       write (*,'(i4,20f7.4)') nfrag,(qfrag(i),i=1,nfrag)
131 c       write (*,'(8f10.5)') ((coord(k,j),k=1,3),j=1,isize)
132        if (mod(kk/ntraj,ifreq).eq.0 .and. mod(kk,ntraj).eq.itraj) then
133          if (isize .ne. nres+nct-nnt+1) then
134            print *,"Error: inconsistent sizes",isize,nres+nct-nnt+1
135          endif
136          do i=1,nres
137            do j=1,3
138              c(j,i)=coord(j,i)
139            enddo
140          enddo
141          ii = 0
142          do i=nnt,nct
143            ii = ii + 1 
144            do j=1,3
145              c(j,i+nres)=coord(j,ii+nres)
146            enddo
147          enddo
148          etot=potE
149          write (tytul,'(a,i6)') "Structure",kk
150          call pdbout(etot,tytul,9)
151        endif
152       enddo
153      
154       end