3e09be567dfb418fb63a4d530e56b8e7da67f667
[unres.git] / source / wham / src-M / molread_zs.F
1       subroutine molread(*)
2 C
3 C Read molecular data.
4 C
5       implicit real*8 (a-h,o-z)
6       include 'DIMENSIONS'
7       include 'DIMENSIONS.ZSCOPT'
8       include 'COMMON.IOUNITS'
9       include 'COMMON.GEO'
10       include 'COMMON.VAR'
11       include 'COMMON.INTERACT'
12       include 'COMMON.LOCAL'
13       include 'COMMON.NAMES'
14       include 'COMMON.CHAIN'
15       include 'COMMON.FFIELD'
16       include 'COMMON.SBRIDGE'
17       include 'COMMON.TORCNSTR'
18       include 'COMMON.CONTROL'
19       character*4 sequence(maxres)
20       integer rescode
21       double precision x(maxvar)
22       character*320 controlcard,ucase
23       dimension itype_pdb(maxres)
24       logical seq_comp
25       call card_concat(controlcard,.true.)
26       call reada(controlcard,'SCAL14',scal14,0.4d0)
27       call reada(controlcard,'SCALSCP',scalscp,1.0d0)
28       call reada(controlcard,'CUTOFF',cutoff_corr,7.0d0)
29       call reada(controlcard,'DELT_CORR',delt_corr,0.5d0)
30       r0_corr=cutoff_corr-delt_corr
31       call readi(controlcard,"NRES",nres,0)
32       iscode=index(controlcard,"ONE_LETTER")
33       if (nres.le.0) then
34         write (iout,*) "Error: no residues in molecule"
35         return1
36       endif
37       if (nres.gt.maxres) then
38         write (iout,*) "Error: too many residues",nres,maxres
39       endif
40       write(iout,*) 'nres=',nres
41 C Read sequence of the protein
42       if (iscode.gt.0) then
43         read (inp,'(80a1)') (sequence(i)(1:1),i=1,nres)
44       else
45         read (inp,'(20(1x,a3))') (sequence(i),i=1,nres)
46       endif
47 C Convert sequence to numeric code
48       do i=1,nres
49         itype(i)=rescode(i,sequence(i),iscode)
50       enddo
51       write (iout,*) "Numeric code:"
52       write (iout,'(20i4)') (itype(i),i=1,nres)
53       do i=1,nres-1
54 #ifdef PROCOR
55         if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) then
56 #else
57         if (itype(i).eq.ntyp1) then
58 #endif
59           itel(i)=0
60 #ifdef PROCOR
61         else if (iabs(itype(i+1)).ne.20) then
62 #else
63         else if (iabs(itype(i)).ne.20) then
64 #endif
65           itel(i)=1
66         else
67           itel(i)=2
68         endif
69       enddo
70        write (iout,*) "ITEL"
71        do i=1,nres-1
72          write (iout,*) i,itype(i),itel(i)
73        enddo
74       call read_bridge
75
76       if (with_dihed_constr) then
77
78       read (inp,*) ndih_constr
79       if (ndih_constr.gt.0) then
80         read (inp,*) ftors
81         write (iout,*) 'FTORS',ftors
82         read (inp,*) (idih_constr(i),phi0(i),drange(i),i=1,ndih_constr)
83         write (iout,*)
84      &   'There are',ndih_constr,' constraints on phi angles.'
85         do i=1,ndih_constr
86           write (iout,'(i5,2f8.3)') idih_constr(i),phi0(i),drange(i)
87         enddo
88         do i=1,ndih_constr
89           phi0(i)=deg2rad*phi0(i)
90           drange(i)=deg2rad*drange(i)
91         enddo
92       endif
93
94       endif
95
96       nnt=1
97       nct=nres
98       if (itype(1).eq.ntyp1) nnt=2
99       if (itype(nres).eq.ntyp1) nct=nct-1
100       write(iout,*) 'NNT=',NNT,' NCT=',NCT
101       call setup_var
102       call init_int_table
103       if (ns.gt.0) then
104         write (iout,'(/a,i3,a)') 'The chain contains',ns,
105      &  ' disulfide-bridging cysteines.'
106         write (iout,'(20i4)') (iss(i),i=1,ns)
107         write (iout,'(/a/)') 'Pre-formed links are:' 
108         do i=1,nss
109           i1=ihpb(i)-nres
110           i2=jhpb(i)-nres
111           it1=itype(i1)
112           it2=itype(i2)
113          write (iout,'(2a,i3,3a,i3,a,3f10.3)')
114      &    restyp(it1),'(',i1,') -- ',restyp(it2),'(',i2,')',
115      &    dhpb(i),ebr,forcon(i)
116         enddo
117       endif
118       write (iout,'(a)')
119       return
120       end
121 c-----------------------------------------------------------------------------
122       logical function seq_comp(itypea,itypeb,length)
123       implicit none
124       integer length,itypea(length),itypeb(length)
125       integer i
126       do i=1,length
127         if (itypea(i).ne.itypeb(i)) then
128           seq_comp=.false.
129           return
130         endif
131       enddo
132       seq_comp=.true.
133       return
134       end
135 c-----------------------------------------------------------------------------
136       subroutine read_bridge
137 C Read information about disulfide bridges.
138       implicit real*8 (a-h,o-z)
139       include 'DIMENSIONS'
140       include 'DIMENSIONS.ZSCOPT'
141       include 'COMMON.IOUNITS'
142       include 'COMMON.GEO'
143       include 'COMMON.VAR'
144       include 'COMMON.INTERACT'
145       include 'COMMON.NAMES'
146       include 'COMMON.CHAIN'
147       include 'COMMON.FFIELD'
148       include 'COMMON.SBRIDGE'
149 C Read bridging residues.
150       read (inp,*) ns,(iss(i),i=1,ns)
151       print *,'ns=',ns
152       write (iout,*) 'ns=',ns,' iss:',(iss(i),i=1,ns)
153 C Check whether the specified bridging residues are cystines.
154       do i=1,ns
155         if (itype(iss(i)).ne.1) then
156           write (iout,'(2a,i3,a)') 
157      &   'Do you REALLY think that the residue ',restyp(iss(i)),i,
158      &   ' can form a disulfide bridge?!!!'
159           write (*,'(2a,i3,a)') 
160      &   'Do you REALLY think that the residue ',restyp(iss(i)),i,
161      &   ' can form a disulfide bridge?!!!'
162          stop
163         endif
164       enddo
165 C Read preformed bridges.
166       if (ns.gt.0) then
167       read (inp,*) nss,(ihpb(i),jhpb(i),i=1,nss)
168       write (iout,*) 'nss=',nss,' ihpb,jhpb: ',(ihpb(i),jhpb(i),i=1,nss)
169       if (nss.gt.0) then
170         nhpb=nss
171 C Check if the residues involved in bridges are in the specified list of
172 C bridging residues.
173         do i=1,nss
174           do j=1,i-1
175             if (ihpb(i).eq.ihpb(j).or.ihpb(i).eq.jhpb(j)
176      &      .or.jhpb(i).eq.ihpb(j).or.jhpb(i).eq.jhpb(j)) then
177               write (iout,'(a,i3,a)') 'Disulfide pair',i,
178      &      ' contains residues present in other pairs.'
179               write (*,'(a,i3,a)') 'Disulfide pair',i,
180      &      ' contains residues present in other pairs.'
181               stop 
182             endif
183           enddo
184           do j=1,ns
185             if (ihpb(i).eq.iss(j)) goto 10
186           enddo
187           write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
188    10     continue
189           do j=1,ns
190             if (jhpb(i).eq.iss(j)) goto 20
191           enddo
192           write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
193    20     continue
194           dhpb(i)=dbr
195           forcon(i)=fbr
196         enddo
197         do i=1,nss
198           ihpb(i)=ihpb(i)+nres
199           jhpb(i)=jhpb(i)+nres
200         enddo
201       endif
202       endif
203       return
204       end
205 c------------------------------------------------------------------------------
206       subroutine read_angles(kanal,iscor,energ,iprot,*)
207       implicit real*8 (a-h,o-z)
208       include 'DIMENSIONS'
209       include 'DIMENSIONS.ZSCOPT'
210       include 'COMMON.INTERACT'
211       include 'COMMON.SBRIDGE'
212       include 'COMMON.GEO'
213       include 'COMMON.VAR'
214       include 'COMMON.CHAIN'
215       include 'COMMON.IOUNITS'
216       character*80 lineh
217       read(kanal,'(a80)',end=10,err=10) lineh
218       read(lineh(:5),*,err=8) ic
219       read(lineh(6:),*,err=8) energ
220       goto 9
221     8 ic=1
222       print *,'error, assuming e=1d10',lineh
223       energ=1d10
224       nss=0
225     9 continue
226       read(lineh(18:),*,end=10,err=10) nss
227       IF (NSS.LT.9) THEN
228         read (lineh(20:),*,end=10,err=10)
229      &  (IHPB(I),JHPB(I),I=1,NSS),iscor
230       ELSE
231         read (lineh(20:),*,end=10,err=10) (IHPB(I),JHPB(I),I=1,8)
232         read (kanal,*,end=10,err=10) (IHPB(I),JHPB(I),
233      &    I=9,NSS),iscor
234       ENDIF
235 c      print *,"energy",energ," iscor",iscor
236       read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
237       read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
238       read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
239       read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
240       do i=1,nres
241         theta(i)=deg2rad*theta(i)
242         phi(i)=deg2rad*phi(i)
243         alph(i)=deg2rad*alph(i)
244         omeg(i)=deg2rad*omeg(i)
245       enddo
246       return
247    10 return1
248       end