update new files
[unres.git] / source / maxlik / src_MD_T_maxlik-NEWCORR / 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       iatsc_s_zs(molnum)=iatsc_s
196       iatsc_e_zs(molnum)=iatsc_e
197       iatel_s_zs(molnum)=iatel_s
198       iatel_e_zs(molnum)=iatel_e
199       iturn3_start_zs(molnum)=iturn3_start
200       iturn3_end_zs(molnum)=iturn3_end
201       iturn4_start_zs(molnum)=iturn4_start
202       iturn4_end_zs(molnum)=iturn4_end
203       iatscp_s_zs(molnum)=iatscp_s
204       iatscp_e_zs(molnum)=iatscp_e
205       loc_start_zs(molnum)=loc_start
206       loc_end_zs(molnum)=loc_end
207       ithet_start_zs(molnum)=ithet_start
208       ithet_end_zs(molnum)=ithet_end
209       iphi_start_zs(molnum)=iphi_start
210       iphi_end_zs(molnum)=iphi_end
211       itau_start_zs(molnum)=itau_start
212       itau_end_zs(molnum)=itau_end
213       nvar_zs(molnum)=nvar
214       nphi_zs(molnum)=nphi
215       ntheta_zs(molnum)=ntheta
216       nside_zs(molnum)=nside
217       do i=1,nres
218         ialph_zs(i,1,molnum)=ialph(i,1)
219         ialph_zs(i,2,molnum)=ialph(i,2)
220       enddo
221       do i=1,nres
222         nint_gr_zs(i,molnum)=nint_gr(i)
223         nscp_gr_zs(i,molnum)=nscp_gr(i)
224         do j=1,nint_gr(i)
225           istart_zs(i,j,molnum)=istart(i,j)
226           iend_zs(i,j,molnum)=iend(i,j)
227         enddo
228         itype_zs(i,molnum)=itype(i)
229         itel_zs(i,molnum)=itel(i)
230         ielstart_zs(i,molnum)=ielstart(i)
231         ielend_zs(i,molnum)=ielend(i)
232 c        write (iout,*) "i",i," nscp_gr",nscp_gr(i),
233 c     &   " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
234         do j=1,nscp_gr(i)
235           iscpstart_zs(i,j,molnum)=iscpstart(i,j)
236           iscpend_zs(i,j,molnum)=iscpend(i,j)
237         enddo
238       enddo
239       ns_zs(molnum)=ns
240 c      nss_zs(molnum)=nss
241 c      nfree_zs(molnum)=nfree
242 c      do i=1,ns
243 c        iss_zs(i,molnum)=iss(i) 
244 c      enddo
245 c      do i=1,nss
246 c        ihpb_zs(i,molnum)=ihpb(i)
247 c        jhpb_zs(i,molnum)=jhpb(i)
248 c        dhpb_zs(i,molnum)=dhpb(i)
249 c        forcon_zs(i,molnum)=forcon(i)
250 c      enddo
251       link_start_zs(molnum)=link_start
252       link_end_zs(molnum)=link_end
253       return
254       end
255 c------------------------------------------------------------------------------
256       subroutine restore_molinfo(molnum)
257       implicit real*8 (a-h,o-z)
258       include "DIMENSIONS"
259       include 'DIMENSIONS.ZSCOPT'
260       include "COMMON.ALLPROT"
261       include "COMMON.SBRIDGE"
262       include "COMMON.CHAIN"
263       include "COMMON.VAR"
264       include "COMMON.INTERACT"
265       include "COMMON.TORCNSTR"
266       include "COMMON.LOCAL"
267       ndih_constr=0
268       nres=nres_zs(molnum)
269       nnt=nnt_zs(molnum)
270       nct=nct_zs(molnum)
271       iatsc_s=iatsc_s_zs(molnum)
272       iatsc_e=iatsc_e_zs(molnum)
273       iatel_s=iatel_s_zs(molnum)
274       iatel_e=iatel_e_zs(molnum)
275       iturn3_start=iturn3_start_zs(molnum)
276       iturn3_end=iturn3_end_zs(molnum)
277       iturn4_start=iturn4_start_zs(molnum)
278       iturn4_end=iturn4_end_zs(molnum)
279       iatscp_s=iatscp_s_zs(molnum)
280       iatscp_e=iatscp_e_zs(molnum)
281       ithet_start=ithet_start_zs(molnum)
282       ithet_end=ithet_end_zs(molnum)
283       iphi_start=iphi_start_zs(molnum)
284       iphi_end=iphi_end_zs(molnum)
285       itau_start=itau_start_zs(molnum)
286       itau_end=itau_end_zs(molnum)
287       loc_start=loc_start_zs(molnum)
288       loc_end=loc_end_zs(molnum)
289       nvar=nvar_zs(molnum)
290       nphi=nphi_zs(molnum)
291       ntheta=ntheta_zs(molnum)
292       nside=nside_zs(molnum)
293       do i=1,nres
294         ialph(i,1)=ialph_zs(i,1,molnum)
295         ialph(i,2)=ialph_zs(i,2,molnum)
296       enddo
297       do i=1,nres
298         nint_gr(i)=nint_gr_zs(i,molnum)
299         nscp_gr(i)=nscp_gr_zs(i,molnum)
300         do j=1,nint_gr(i)
301           istart(i,j)=istart_zs(i,j,molnum)
302           iend(i,j)=iend_zs(i,j,molnum)
303         enddo
304         itype(i)=itype_zs(i,molnum)
305         itel(i)=itel_zs(i,molnum)
306         ielstart(i)=ielstart_zs(i,molnum)
307         ielend(i)=ielend_zs(i,molnum)
308         do j=1,nscp_gr(i)
309           iscpstart(i,j)=iscpstart_zs(i,j,molnum)
310           iscpend(i,j)=iscpend_zs(i,j,molnum)
311         enddo
312       enddo
313       ns=ns_zs(molnum)
314 c      nss=nss_zs(molnum)
315 c      nfree=nfree_zs(molnum)
316 c      do i=1,ns
317 c        iss(i)=iss_zs(i,molnum)
318 c      enddo
319 c      do i=1,nss
320 c        ihpb(i)=ihpb_zs(i,molnum)
321 c        jhpb(i)=jhpb_zs(i,molnum)
322 c        dhpb(i)=dhpb_zs(i,molnum)
323 c        forcon(i)=forcon_zs(i,molnum)
324 c      enddo
325       link_start=link_start_zs(molnum)
326       link_end=link_end_zs(molnum)
327       return
328       end
329 c------------------------------------------------------------------------------
330       subroutine read_angles(kanal,iscor,energ,iprot,*)
331       implicit real*8 (a-h,o-z)
332       include 'DIMENSIONS'
333       include 'DIMENSIONS.ZSCOPT'
334       include 'COMMON.INTERACT'
335       include 'COMMON.SBRIDGE'
336       include 'COMMON.GEO'
337       include 'COMMON.VAR'
338       include 'COMMON.CHAIN'
339       include 'COMMON.IOUNITS'
340       character*80 lineh
341       read(kanal,'(a80)',end=10,err=10) lineh
342       read(lineh(:5),*,err=8) ic
343       read(lineh(6:),*,err=8) energ
344       goto 9
345     8 ic=1
346       print *,'error, assuming e=1d10',lineh
347       energ=1d10
348       nss=0
349     9 continue
350       read(lineh(18:),*,end=10,err=10) nss
351       IF (NSS.LT.9) THEN
352         read (lineh(20:),*,end=10,err=10)
353      &  (IHPB(I),JHPB(I),I=1,NSS),iscor
354       ELSE
355         read (lineh(20:),*,end=10,err=10) (IHPB(I),JHPB(I),I=1,8)
356         read (kanal,*,end=10,err=10) (IHPB(I),JHPB(I),
357      &    I=9,NSS),iscor
358       ENDIF
359 c      print *,"energy",energ," iscor",iscor
360       read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
361       read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
362       read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
363       read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
364       do i=1,nres
365         theta(i)=deg2rad*theta(i)
366         phi(i)=deg2rad*phi(i)
367         alph(i)=deg2rad*alph(i)
368         omeg(i)=deg2rad*omeg(i)
369       enddo
370       return
371    10 return1
372       end