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