update new files
[unres.git] / source / maxlik / src-Fmatch_safe / molread_zs.F
1       subroutine molread_zs(molnum)
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.ALLPROT'
18       include 'COMMON.TORCNSTR'
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",molnum
35         stop
36       endif
37       write(iout,*) 'molnum:',molnum,' nres=',nres
38 C Read sequence of the protein
39       if (iscode.gt.0) then
40         read (inp,'(80a1)') (sequence(i)(1:1),i=1,nres)
41       else
42         read (inp,'(20(1x,a3))') (sequence(i),i=1,nres)
43       endif
44 C Convert sequence to numeric code
45       do i=1,nres
46         itype(i)=rescode(i,sequence(i),iscode)
47       enddo
48       write (iout,*) "Numeric code:"
49       write (iout,'(20i4)') (itype(i),i=1,nres)
50       do i=1,nres-1
51 #ifdef PROCOR
52         if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) then
53 #else
54         if (itype(i).eq.ntyp1) then
55 #endif
56           itel(i)=0
57 #ifdef PROCOR
58         else if (itype(i+1).ne.20) then
59 #else
60         else if (itype(i).ne.20) then
61 #endif
62           itel(i)=1
63         else
64           itel(i)=2
65         endif  
66       enddo
67       call read_bridge
68       nnt=1
69       nct=nres
70       write(iout,*) 'NNT=',NNT,' NCT=',NCT
71       if (itype(1).eq.ntyp1) nnt=2
72       if (itype(nres).eq.ntyp1) nct=nct-1
73       call setup_var
74       call init_int_table
75       call store_molinfo(molnum)
76       if (ns_zs(molnum).gt.0) then
77         write (iout,'(/a,i3,a)') 'The chain contains',ns_zs(molnum),
78      &  ' disulfide-bridging cysteines.'
79         write (iout,'(20i4)') (iss_zs(i,molnum),i=1,ns_zs(molnum))
80         write (iout,'(/a/)') 'Pre-formed links are:' 
81         do i=1,nss_zs(1,molnum)
82           i1=ihpb_zs(i,1,molnum)-nres_zs(molnum)
83           i2=jhpb_zs(i,1,molnum)-nres_zs(molnum)
84           it1=itype_zs(i1,molnum)
85           it2=itype_zs(i2,molnum)
86          write (iout,'(2a,i3,3a,i3,a,3f10.3)')
87      &    restyp(it1),'(',i1,') -- ',restyp(it2),'(',i2,')',
88      &    dhpb_zs(i,molnum),ebr,forcon_zs(i,molnum)
89         enddo
90       endif
91       write (iout,*) "Protein:",molnum," leaving MOLREAD_ZS"
92       call flush(iout)
93       return
94       end
95 c-----------------------------------------------------------------------------
96       logical function seq_comp(itypea,itypeb,length)
97       implicit none
98       integer length,itypea(length),itypeb(length)
99       integer i
100       do i=1,length
101         if (itypea(i).ne.itypeb(i)) then
102           seq_comp=.false.
103           return
104         endif
105       enddo
106       seq_comp=.true.
107       return
108       end
109 c-----------------------------------------------------------------------------
110       subroutine read_bridge
111 C Read information about disulfide bridges.
112       implicit real*8 (a-h,o-z)
113       include 'DIMENSIONS'
114       include 'DIMENSIONS.ZSCOPT'
115       include 'COMMON.IOUNITS'
116       include 'COMMON.GEO'
117       include 'COMMON.VAR'
118       include 'COMMON.INTERACT'
119       include 'COMMON.NAMES'
120       include 'COMMON.CHAIN'
121       include 'COMMON.FFIELD'
122       include 'COMMON.SBRIDGE'
123       include 'COMMON.ALLPROT'
124 C Read bridging residues.
125       read (inp,*) ns,(iss(i),i=1,ns)
126 c      print *,'ns=',ns
127       write (iout,*) 'ns=',ns,' iss:',(iss(i),i=1,ns)
128 C Check whether the specified bridging residues are cystines.
129       do i=1,ns
130         if (itype(iss(i)).ne.1) then
131           write (iout,'(2a,i3,a)') 
132      &   'Do you REALLY think that the residue ',restyp(iss(i)),i,
133      &   ' can form a disulfide bridge?!!!'
134           write (*,'(2a,i3,a)') 
135      &   'Do you REALLY think that the residue ',restyp(iss(i)),i,
136      &   ' can form a disulfide bridge?!!!'
137          stop
138         endif
139       enddo
140 C Read preformed bridges.
141       if (ns.gt.0) then
142       read (inp,*) nss,(ihpb(i),jhpb(i),i=1,nss)
143       write (iout,*) 'nss=',nss,' ihpb,jhpb: ',(ihpb(i),jhpb(i),i=1,nss)
144       if (nss.gt.0) then
145         nhpb=nss
146 C Check if the residues involved in bridges are in the specified list of
147 C bridging residues.
148         do i=1,nss
149           do j=1,i-1
150             if (ihpb(i).eq.ihpb(j).or.ihpb(i).eq.jhpb(j)
151      &      .or.jhpb(i).eq.ihpb(j).or.jhpb(i).eq.jhpb(j)) then
152               write (iout,'(a,i3,a)') 'Disulfide pair',i,
153      &      ' contains residues present in other pairs.'
154               write (*,'(a,i3,a)') 'Disulfide pair',i,
155      &      ' contains residues present in other pairs.'
156               stop 
157             endif
158           enddo
159           do j=1,ns
160             if (ihpb(i).eq.iss(j)) goto 10
161           enddo
162           write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
163    10     continue
164           do j=1,ns
165             if (jhpb(i).eq.iss(j)) goto 20
166           enddo
167           write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
168    20     continue
169           dhpb(i)=dbr
170           forcon(i)=fbr
171         enddo
172         do i=1,nss
173           ihpb(i)=ihpb(i)+nres
174           jhpb(i)=jhpb(i)+nres
175         enddo
176       endif
177       endif
178       return
179       end
180 c------------------------------------------------------------------------------
181       subroutine store_molinfo(molnum)
182       implicit real*8 (a-h,o-z)
183       include "DIMENSIONS"
184       include 'DIMENSIONS.ZSCOPT'
185       include "COMMON.ALLPROT"
186       include 'COMMON.CHAIN'
187       include 'COMMON.SBRIDGE'
188       include "COMMON.VAR"
189       include "COMMON.INTERACT"
190       include "COMMON.LOCAL"
191       include "COMMON.IOUNITS"
192       nres_zs(molnum)=nres
193       nnt_zs(molnum)=nnt
194       nct_zs(molnum)=nct
195 c      write (iout,*) "store_molinfo nres",nres_zs(molnum),
196 c     & " nnt",nnt_zs(molnum)," nct",nct_zs(molnum)
197       iatsc_s_zs(molnum)=iatsc_s
198       iatsc_e_zs(molnum)=iatsc_e
199       iatel_s_zs(molnum)=iatel_s
200       iatel_e_zs(molnum)=iatel_e
201       iturn3_start_zs(molnum)=iturn3_start
202       iturn3_end_zs(molnum)=iturn3_end
203       iturn4_start_zs(molnum)=iturn4_start
204       iturn4_end_zs(molnum)=iturn4_end
205       iatscp_s_zs(molnum)=iatscp_s
206       iatscp_e_zs(molnum)=iatscp_e
207       loc_start_zs(molnum)=loc_start
208       loc_end_zs(molnum)=loc_end
209       ithet_start_zs(molnum)=ithet_start
210       ithet_end_zs(molnum)=ithet_end
211       iphi_start_zs(molnum)=iphi_start
212       iphi_end_zs(molnum)=iphi_end
213       itau_start_zs(molnum)=itau_start
214       itau_end_zs(molnum)=itau_end
215       nvar_zs(molnum)=nvar
216       nphi_zs(molnum)=nphi
217       ntheta_zs(molnum)=ntheta
218       nside_zs(molnum)=nside
219       do i=1,nres
220         ialph_zs(i,1,molnum)=ialph(i,1)
221         ialph_zs(i,2,molnum)=ialph(i,2)
222       enddo
223       do i=1,nres
224         nint_gr_zs(i,molnum)=nint_gr(i)
225         nscp_gr_zs(i,molnum)=nscp_gr(i)
226         do j=1,nint_gr(i)
227           istart_zs(i,j,molnum)=istart(i,j)
228           iend_zs(i,j,molnum)=iend(i,j)
229         enddo
230         itype_zs(i,molnum)=itype(i)
231         itel_zs(i,molnum)=itel(i)
232         ielstart_zs(i,molnum)=ielstart(i)
233         ielend_zs(i,molnum)=ielend(i)
234 c        write (iout,*) "i",i," nscp_gr",nscp_gr(i),
235 c     &   " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
236         do j=1,nscp_gr(i)
237           iscpstart_zs(i,j,molnum)=iscpstart(i,j)
238           iscpend_zs(i,j,molnum)=iscpend(i,j)
239         enddo
240       enddo
241       ns_zs(molnum)=ns
242 c      nss_zs(molnum)=nss
243 c      nfree_zs(molnum)=nfree
244 c      do i=1,ns
245 c        iss_zs(i,molnum)=iss(i) 
246 c      enddo
247 c      do i=1,nss
248 c        ihpb_zs(i,molnum)=ihpb(i)
249 c        jhpb_zs(i,molnum)=jhpb(i)
250 c        dhpb_zs(i,molnum)=dhpb(i)
251 c        forcon_zs(i,molnum)=forcon(i)
252 c      enddo
253       link_start_zs(molnum)=link_start
254       link_end_zs(molnum)=link_end
255       return
256       end
257 c------------------------------------------------------------------------------
258       subroutine restore_molinfo(molnum)
259       implicit real*8 (a-h,o-z)
260       include "DIMENSIONS"
261       include 'DIMENSIONS.ZSCOPT'
262       include "COMMON.ALLPROT"
263       include "COMMON.SBRIDGE"
264       include "COMMON.CHAIN"
265       include "COMMON.VAR"
266       include "COMMON.INTERACT"
267       include "COMMON.TORCNSTR"
268       include "COMMON.LOCAL"
269       ndih_constr=0
270       nres=nres_zs(molnum)
271       nnt=nnt_zs(molnum)
272       nct=nct_zs(molnum)
273       iatsc_s=iatsc_s_zs(molnum)
274       iatsc_e=iatsc_e_zs(molnum)
275       iatel_s=iatel_s_zs(molnum)
276       iatel_e=iatel_e_zs(molnum)
277       iturn3_start=iturn3_start_zs(molnum)
278       iturn3_end=iturn3_end_zs(molnum)
279       iturn4_start=iturn4_start_zs(molnum)
280       iturn4_end=iturn4_end_zs(molnum)
281       iatscp_s=iatscp_s_zs(molnum)
282       iatscp_e=iatscp_e_zs(molnum)
283       ithet_start=ithet_start_zs(molnum)
284       ithet_end=ithet_end_zs(molnum)
285       iphi_start=iphi_start_zs(molnum)
286       iphi_end=iphi_end_zs(molnum)
287       itau_start=itau_start_zs(molnum)
288       itau_end=itau_end_zs(molnum)
289       loc_start=loc_start_zs(molnum)
290       loc_end=loc_end_zs(molnum)
291       nvar=nvar_zs(molnum)
292       nphi=nphi_zs(molnum)
293       ntheta=ntheta_zs(molnum)
294       nside=nside_zs(molnum)
295       do i=1,nres
296         ialph(i,1)=ialph_zs(i,1,molnum)
297         ialph(i,2)=ialph_zs(i,2,molnum)
298       enddo
299       do i=1,nres
300         nint_gr(i)=nint_gr_zs(i,molnum)
301         nscp_gr(i)=nscp_gr_zs(i,molnum)
302         do j=1,nint_gr(i)
303           istart(i,j)=istart_zs(i,j,molnum)
304           iend(i,j)=iend_zs(i,j,molnum)
305         enddo
306         itype(i)=itype_zs(i,molnum)
307         itel(i)=itel_zs(i,molnum)
308         ielstart(i)=ielstart_zs(i,molnum)
309         ielend(i)=ielend_zs(i,molnum)
310         do j=1,nscp_gr(i)
311           iscpstart(i,j)=iscpstart_zs(i,j,molnum)
312           iscpend(i,j)=iscpend_zs(i,j,molnum)
313         enddo
314       enddo
315       ns=ns_zs(molnum)
316 c      nss=nss_zs(molnum)
317 c      nfree=nfree_zs(molnum)
318 c      do i=1,ns
319 c        iss(i)=iss_zs(i,molnum)
320 c      enddo
321 c      do i=1,nss
322 c        ihpb(i)=ihpb_zs(i,molnum)
323 c        jhpb(i)=jhpb_zs(i,molnum)
324 c        dhpb(i)=dhpb_zs(i,molnum)
325 c        forcon(i)=forcon_zs(i,molnum)
326 c      enddo
327       link_start=link_start_zs(molnum)
328       link_end=link_end_zs(molnum)
329       return
330       end
331 c------------------------------------------------------------------------------
332       subroutine read_angles(kanal,iscor,energ,iprot,*)
333       implicit real*8 (a-h,o-z)
334       include 'DIMENSIONS'
335       include 'DIMENSIONS.ZSCOPT'
336       include 'COMMON.INTERACT'
337       include 'COMMON.SBRIDGE'
338       include 'COMMON.GEO'
339       include 'COMMON.VAR'
340       include 'COMMON.CHAIN'
341       include 'COMMON.IOUNITS'
342       character*80 lineh
343       read(kanal,'(a80)',end=10,err=10) lineh
344       read(lineh(:5),*,err=8) ic
345       read(lineh(6:),*,err=8) energ
346       goto 9
347     8 ic=1
348       print *,'error, assuming e=1d10',lineh
349       energ=1d10
350       nss=0
351     9 continue
352       read(lineh(18:),*,end=10,err=10) nss
353       IF (NSS.LT.9) THEN
354         read (lineh(20:),*,end=10,err=10)
355      &  (IHPB(I),JHPB(I),I=1,NSS),iscor
356       ELSE
357         read (lineh(20:),*,end=10,err=10) (IHPB(I),JHPB(I),I=1,8)
358         read (kanal,*,end=10,err=10) (IHPB(I),JHPB(I),
359      &    I=9,NSS),iscor
360       ENDIF
361 c      print *,"energy",energ," iscor",iscor
362       read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
363       read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
364       read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
365       read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
366       do i=1,nres
367         theta(i)=deg2rad*theta(i)
368         phi(i)=deg2rad*phi(i)
369         alph(i)=deg2rad*alph(i)
370         omeg(i)=deg2rad*omeg(i)
371       enddo
372       return
373    10 return1
374       end