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.'
209 c------------------------------------------------------------------------------
210 subroutine read_angles(kanal,iscor,energ,iprot,*)
211 implicit real*8 (a-h,o-z)
213 include 'DIMENSIONS.ZSCOPT'
214 include 'COMMON.INTERACT'
215 include 'COMMON.SBRIDGE'
218 include 'COMMON.CHAIN'
219 include 'COMMON.IOUNITS'
221 read(kanal,'(a80)',end=10,err=10) lineh
222 read(lineh(:5),*,err=8) ic
223 read(lineh(6:),*,err=8) energ
226 print *,'error, assuming e=1d10',lineh
230 read(lineh(18:),*,end=10,err=10) nss
232 read (lineh(20:),*,end=10,err=10)
233 & (IHPB(I),JHPB(I),I=1,NSS),iscor
235 read (lineh(20:),*,end=10,err=10) (IHPB(I),JHPB(I),I=1,8)
236 read (kanal,*,end=10,err=10) (IHPB(I),JHPB(I),
239 c print *,"energy",energ," iscor",iscor
240 read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
241 read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
242 read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
243 read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
245 theta(i)=deg2rad*theta(i)
246 phi(i)=deg2rad*phi(i)
247 alph(i)=deg2rad*alph(i)
248 omeg(i)=deg2rad*omeg(i)
253 c-------------------------------------------------------------------------------
254 subroutine read_dist_constr
255 implicit real*8 (a-h,o-z)
257 include 'COMMON.CONTROL'
258 include 'COMMON.CHAIN'
259 include 'COMMON.IOUNITS'
260 include 'COMMON.SBRIDGE'
261 integer ifrag_(2,100),ipair_(2,100)
262 double precision wfrag_(100),wpair_(100)
263 character*500 controlcard
264 c write (iout,*) "Calling read_dist_constr"
265 c write (iout,*) "nres",nres," nstart_sup",nstart_sup," nsup",nsup
267 call card_concat(controlcard,.true.)
268 call readi(controlcard,"NFRAG",nfrag_,0)
269 call readi(controlcard,"NPAIR",npair_,0)
270 call readi(controlcard,"NDIST",ndist_,0)
271 call reada(controlcard,'DIST_CUT',dist_cut,5.0d0)
272 call multreadi(controlcard,"IFRAG",ifrag_(1,1),2*nfrag_,0)
273 call multreadi(controlcard,"IPAIR",ipair_(1,1),2*npair_,0)
274 call multreada(controlcard,"WFRAG",wfrag_(1),nfrag_,0.0d0)
275 call multreada(controlcard,"WPAIR",wpair_(1),npair_,0.0d0)
276 write (iout,*) "NFRAG",nfrag_," NPAIR",npair_," NDIST",ndist_
277 write (iout,*) "IFRAG"
279 write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
281 write (iout,*) "IPAIR"
283 write (iout,*) i,ipair_(1,i),ipair_(2,i),wpair_(i)
286 if (.not.refstr .and. nfrag_.gt.0) then
288 & "ERROR: no reference structure to compute distance restraints"
290 & "Restraints must be specified explicitly (NDIST=number)"
293 if (nfrag_.lt.2 .and. npair_.gt.0) then
294 write (iout,*) "ERROR: Less than 2 fragments specified",
295 & " but distance restraints between pairs requested"
300 if (ifrag_(1,i).lt.nstart_sup) ifrag_(1,i)=nstart_sup
301 if (ifrag_(2,i).gt.nstart_sup+nsup-1)
302 & ifrag_(2,i)=nstart_sup+nsup-1
303 c write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
305 if (wfrag_(i).gt.0.0d0) then
306 do j=ifrag_(1,i),ifrag_(2,i)-1
308 write (iout,*) "j",j," k",k
310 if (constr_dist.eq.1) then
315 forcon(nhpb)=wfrag_(i)
316 else if (constr_dist.eq.2) then
317 if (ddjk.le.dist_cut) then
322 forcon(nhpb)=wfrag_(i)
329 forcon(nhpb)=wfrag_(i)*dexp(-0.5d0*(ddjk/dist_cut)**2)
331 write (iout,'(a,3i5,f8.2,1pe12.2)') "+dist.constr ",
332 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
338 if (wpair_(i).gt.0.0d0) then
346 do j=ifrag_(1,ii),ifrag_(2,ii)
347 do k=ifrag_(1,jj),ifrag_(2,jj)
351 forcon(nhpb)=wpair_(i)
353 write (iout,'(a,3i5,f8.2,f10.1)') "+dist.constr ",
354 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
360 read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),dhpb(i),dhpb1(i),
361 & ibecarb(i),forcon(nhpb+1)
362 if (forcon(nhpb+1).gt.0.0d0) then
364 if (ibecarb(i).gt.0) then
368 if (dhpb(nhpb).eq.0.0d0)
369 & dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
373 write (iout,'(a,3i5,2f8.2,i2,f10.1)') "+dist.constr ",
374 & i,ihpb(i),jhpb(i),dhpb(i),dhpb1(i),ibecarb(i),forcon(i)