5 implicit real*8 (a-h,o-z)
7 include 'DIMENSIONS.ZSCOPT'
8 include 'COMMON.IOUNITS'
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)
21 double precision x(maxvar)
22 character*320 controlcard,ucase
23 dimension itype_pdb(maxres)
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")
34 write (iout,*) "Error: no residues in molecule"
37 if (nres.gt.maxres) then
38 write (iout,*) "Error: too many residues",nres,maxres
40 write(iout,*) 'nres=',nres
41 C Read sequence of the protein
43 read (inp,'(80a1)') (sequence(i)(1:1),i=1,nres)
45 read (inp,'(20(1x,a3))') (sequence(i),i=1,nres)
47 C Convert sequence to numeric code
49 itype(i)=rescode(i,sequence(i),iscode)
51 write (iout,*) "Numeric code:"
52 write (iout,'(20i4)') (itype(i),i=1,nres)
55 if (itype(i).eq.21 .or. itype(i+1).eq.21) then
57 if (itype(i).eq.21) then
61 else if (itype(i+1).ne.20) then
63 else if (itype(i).ne.20) then
72 if (with_dihed_constr) then
74 read (inp,*) ndih_constr
75 if (ndih_constr.gt.0) then
77 write (iout,*) 'FTORS',ftors
78 read (inp,*) (idih_constr(i),phi0(i),drange(i),i=1,ndih_constr)
80 & 'There are',ndih_constr,' constraints on phi angles.'
82 write (iout,'(i5,2f8.3)') idih_constr(i),phi0(i),drange(i)
85 phi0(i)=deg2rad*phi0(i)
86 drange(i)=deg2rad*drange(i)
94 if (itype(1).eq.21) nnt=2
95 if (itype(nres).eq.21) nct=nct-1
96 write(iout,*) 'NNT=',NNT,' NCT=',NCT
97 c Read distance restraints
98 if (constr_dist.gt.0) then
99 if (refstr) call read_ref_structure(*11)
100 call read_dist_constr
107 write (iout,'(/a,i3,a)') 'The chain contains',ns,
108 & ' disulfide-bridging cysteines.'
109 write (iout,'(20i4)') (iss(i),i=1,ns)
110 write (iout,'(/a/)') 'Pre-formed links are:'
116 write (iout,'(2a,i3,3a,i3,a,3f10.3)')
117 & restyp(it1),'(',i1,') -- ',restyp(it2),'(',i2,')',
118 & dhpb(i),ebr,forcon(i)
123 11 stop "Error reading reference structure"
125 c-----------------------------------------------------------------------------
126 logical function seq_comp(itypea,itypeb,length)
128 integer length,itypea(length),itypeb(length)
131 if (itypea(i).ne.itypeb(i)) then
139 c-----------------------------------------------------------------------------
140 subroutine read_bridge
141 C Read information about disulfide bridges.
142 implicit real*8 (a-h,o-z)
144 include 'DIMENSIONS.ZSCOPT'
145 include 'COMMON.IOUNITS'
148 include 'COMMON.INTERACT'
149 include 'COMMON.NAMES'
150 include 'COMMON.CHAIN'
151 include 'COMMON.FFIELD'
152 include 'COMMON.SBRIDGE'
153 C Read bridging residues.
154 read (inp,*) ns,(iss(i),i=1,ns)
156 write (iout,*) 'ns=',ns,' iss:',(iss(i),i=1,ns)
157 C Check whether the specified bridging residues are cystines.
159 if (itype(iss(i)).ne.1) then
160 write (iout,'(2a,i3,a)')
161 & 'Do you REALLY think that the residue ',restyp(iss(i)),i,
162 & ' can form a disulfide bridge?!!!'
163 write (*,'(2a,i3,a)')
164 & 'Do you REALLY think that the residue ',restyp(iss(i)),i,
165 & ' can form a disulfide bridge?!!!'
169 C Read preformed bridges.
171 read (inp,*) nss,(ihpb(i),jhpb(i),i=1,nss)
172 write (iout,*) 'nss=',nss,' ihpb,jhpb: ',(ihpb(i),jhpb(i),i=1,nss)
175 C Check if the residues involved in bridges are in the specified list of
179 if (ihpb(i).eq.ihpb(j).or.ihpb(i).eq.jhpb(j)
180 & .or.jhpb(i).eq.ihpb(j).or.jhpb(i).eq.jhpb(j)) then
181 write (iout,'(a,i3,a)') 'Disulfide pair',i,
182 & ' contains residues present in other pairs.'
183 write (*,'(a,i3,a)') 'Disulfide pair',i,
184 & ' contains residues present in other pairs.'
189 if (ihpb(i).eq.iss(j)) goto 10
191 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
194 if (jhpb(i).eq.iss(j)) goto 20
196 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
207 if (ns.gt.0.and.dyn_ss) then
211 forcon(i-nss)=forcon(i)
218 dyn_ss_mask(iss(i))=.true.
219 c write(iout,*) i,iss(i),dyn_ss_mask(iss(i)),"ATU"
224 c------------------------------------------------------------------------------
225 subroutine read_angles(kanal,iscor,energ,iprot,*)
226 implicit real*8 (a-h,o-z)
228 include 'DIMENSIONS.ZSCOPT'
229 include 'COMMON.INTERACT'
230 include 'COMMON.SBRIDGE'
233 include 'COMMON.CHAIN'
234 include 'COMMON.IOUNITS'
236 read(kanal,'(a80)',end=10,err=10) lineh
237 read(lineh(:5),*,err=8) ic
238 read(lineh(6:),*,err=8) energ
241 print *,'error, assuming e=1d10',lineh
245 read(lineh(18:),*,end=10,err=10) nss
247 read (lineh(20:),*,end=10,err=10)
248 & (IHPB(I),JHPB(I),I=1,NSS),iscor
250 read (lineh(20:),*,end=10,err=10) (IHPB(I),JHPB(I),I=1,8)
251 read (kanal,*,end=10,err=10) (IHPB(I),JHPB(I),
254 c print *,"energy",energ," iscor",iscor
255 read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
256 read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
257 read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
258 read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
260 theta(i)=deg2rad*theta(i)
261 phi(i)=deg2rad*phi(i)
262 alph(i)=deg2rad*alph(i)
263 omeg(i)=deg2rad*omeg(i)
268 c-------------------------------------------------------------------------------
269 subroutine read_dist_constr
270 implicit real*8 (a-h,o-z)
272 include 'COMMON.CONTROL'
273 include 'COMMON.CHAIN'
274 include 'COMMON.IOUNITS'
275 include 'COMMON.SBRIDGE'
276 integer ifrag_(2,100),ipair_(2,100)
277 double precision wfrag_(100),wpair_(100)
278 character*500 controlcard
279 c write (iout,*) "Calling read_dist_constr"
280 c write (iout,*) "nres",nres," nstart_sup",nstart_sup," nsup",nsup
282 call card_concat(controlcard,.true.)
283 call readi(controlcard,"NFRAG",nfrag_,0)
284 call readi(controlcard,"NPAIR",npair_,0)
285 call readi(controlcard,"NDIST",ndist_,0)
286 call reada(controlcard,'DIST_CUT',dist_cut,5.0d0)
287 call multreadi(controlcard,"IFRAG",ifrag_(1,1),2*nfrag_,0)
288 call multreadi(controlcard,"IPAIR",ipair_(1,1),2*npair_,0)
289 call multreada(controlcard,"WFRAG",wfrag_(1),nfrag_,0.0d0)
290 call multreada(controlcard,"WPAIR",wpair_(1),npair_,0.0d0)
291 write (iout,*) "NFRAG",nfrag_," NPAIR",npair_," NDIST",ndist_
292 write (iout,*) "IFRAG"
294 write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
296 write (iout,*) "IPAIR"
298 write (iout,*) i,ipair_(1,i),ipair_(2,i),wpair_(i)
301 if (.not.refstr .and. nfrag_.gt.0) then
303 & "ERROR: no reference structure to compute distance restraints"
305 & "Restraints must be specified explicitly (NDIST=number)"
308 if (nfrag_.lt.2 .and. npair_.gt.0) then
309 write (iout,*) "ERROR: Less than 2 fragments specified",
310 & " but distance restraints between pairs requested"
315 if (ifrag_(1,i).lt.nstart_sup) ifrag_(1,i)=nstart_sup
316 if (ifrag_(2,i).gt.nstart_sup+nsup-1)
317 & ifrag_(2,i)=nstart_sup+nsup-1
318 c write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
320 if (wfrag_(i).gt.0.0d0) then
321 do j=ifrag_(1,i),ifrag_(2,i)-1
323 write (iout,*) "j",j," k",k
325 if (constr_dist.eq.1) then
330 forcon(nhpb)=wfrag_(i)
331 else if (constr_dist.eq.2) then
332 if (ddjk.le.dist_cut) then
337 forcon(nhpb)=wfrag_(i)
344 forcon(nhpb)=wfrag_(i)*dexp(-0.5d0*(ddjk/dist_cut)**2)
346 write (iout,'(a,3i5,f8.2,1pe12.2)') "+dist.constr ",
347 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
353 if (wpair_(i).gt.0.0d0) then
361 do j=ifrag_(1,ii),ifrag_(2,ii)
362 do k=ifrag_(1,jj),ifrag_(2,jj)
366 forcon(nhpb)=wpair_(i)
368 write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
369 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
375 read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),dhpb(i),dhpb1(i),
376 & ibecarb(i),forcon(nhpb+1)
377 if (forcon(nhpb+1).gt.0.0d0) then
379 if (ibecarb(i).gt.0) then
383 if (dhpb(nhpb).eq.0.0d0)
384 & dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
388 write (iout,'(a,3i5,2f8.2,i2,f10.1)') "+dist.constr ",
389 & i,ihpb(i),jhpb(i),dhpb(i),dhpb1(i),ibecarb(i),forcon(i)