1 subroutine read_control
8 include 'COMMON.IOUNITS'
10 include 'COMMON.SBRIDGE'
11 include 'COMMON.CONTROL'
12 include 'COMMON.CLUSTER'
13 include 'COMMON.CHAIN'
14 include 'COMMON.HEADER'
15 include 'COMMON.FFIELD'
17 include 'COMMON.INTERACT'
18 include "COMMON.SPLITELE"
19 include 'COMMON.SHIELD'
20 character*320 controlcard,ucase
24 integer i,i1,i2,it1,it2
26 read (INP,'(a80)') titel
27 call card_concat(controlcard)
29 energy_dec=(index(controlcard,'ENERGY_DEC').gt.0)
30 call readi(controlcard,'TORMODE',tor_mode,0)
31 call readi(controlcard,'NRES',nres,0)
32 call readi(controlcard,'RESCALE',rescale_mode,2)
33 call reada(controlcard,'DISTCHAINMAX',distchainmax,50.0d0)
34 write (iout,*) "DISTCHAINMAX",distchainmax
35 C Reading the dimensions of box in x,y,z coordinates
36 call reada(controlcard,'BOXX',boxxsize,100.0d0)
37 call reada(controlcard,'BOXY',boxysize,100.0d0)
38 call reada(controlcard,'BOXZ',boxzsize,100.0d0)
39 c Cutoff range for interactions
40 call reada(controlcard,"R_CUT",r_cut,15.0d0)
41 call reada(controlcard,"LAMBDA",rlamb,0.3d0)
42 call reada(controlcard,"LIPTHICK",lipthick,0.0d0)
43 call reada(controlcard,"LIPAQBUF",lipbufthick,0.0d0)
44 if (lipthick.gt.0.0d0) then
45 bordliptop=(boxzsize+lipthick)/2.0
46 bordlipbot=bordliptop-lipthick
48 if ((bordliptop.gt.boxzsize).or.(bordlipbot.lt.0.0))
49 & write(iout,*) "WARNING WRONG SIZE OF LIPIDIC PHASE"
50 buflipbot=bordlipbot+lipbufthick
51 bufliptop=bordliptop-lipbufthick
52 if ((lipbufthick*2.0d0).gt.lipthick)
53 &write(iout,*) "WARNING WRONG SIZE OF LIP AQ BUF"
55 write(iout,*) "bordliptop=",bordliptop
56 write(iout,*) "bordlipbot=",bordlipbot
57 write(iout,*) "bufliptop=",bufliptop
58 write(iout,*) "buflipbot=",buflipbot
60 call readi(controlcard,'SHIELD',shield_mode,0)
61 write (iout,*) "SHIELD MODE",shield_mode
62 if (shield_mode.gt.0) then
64 C VSolvSphere the volume of solving sphere
66 C rpp(1,1) is the energy r0 for peptide group contact and will be used for it
67 C there will be no distinction between proline peptide group and normal peptide
68 C group in case of shielding parameters
69 VSolvSphere=4.0/3.0*pi*rpp(1,1)**3
70 VSolvSphere_div=VSolvSphere-4.0/3.0*pi*(rpp(1,1)/2.0)**3
71 write (iout,*) VSolvSphere,VSolvSphere_div
72 C long axis of side chain
74 long_r_sidechain(i)=vbldsc0(1,i)
75 short_r_sidechain(i)=sigma0(i)
79 call readi(controlcard,'PDBOUT',outpdb,0)
80 call readi(controlcard,'MOL2OUT',outmol2,0)
81 refstr=(index(controlcard,'REFSTR').gt.0)
82 pdbref=(index(controlcard,'PDBREF').gt.0)
83 refstr = refstr .or. pdbref
84 write (iout,*) "REFSTR",refstr," PDBREF",pdbref
85 iscode=index(controlcard,'ONE_LETTER')
86 tree=(index(controlcard,'MAKE_TREE').gt.0)
87 with_dihed_constr = index(controlcard,"WITH_DIHED_CONSTR").gt.0
88 call readi(controlcard,'CONSTR_DIST',constr_dist,0)
89 write (iout,*) "with_dihed_constr ",with_dihed_constr,
90 & " CONSTR_DIST",constr_dist
91 with_theta_constr = index(controlcard,"WITH_THETA_CONSTR").gt.0
92 write (iout,*) "with_theta_constr ",with_theta_constr
94 min_var=(index(controlcard,'MINVAR').gt.0)
95 plot_tree=(index(controlcard,'PLOT_TREE').gt.0)
96 punch_dist=(index(controlcard,'PUNCH_DIST').gt.0)
97 print_fittest=(index(controlcard,'PRINT_FITTEST').gt.0)
98 call readi(controlcard,'NCUT',ncut,0)
100 call multreada(controlcard,'CUTOFF',rcutoff,ncut,-1.0d0)
103 call readi(controlcard,'NCLUST',nclust,5)
105 call readi(controlcard,'SYM',symetr,1)
106 write (iout,*) 'sym', symetr
107 call readi(controlcard,'NSTART',nstart,0)
108 call readi(controlcard,'NEND',nend,0)
109 call reada(controlcard,'ECUT',ecut,10.0d0)
110 call reada(controlcard,'PROB',prob_limit,0.99d0)
111 write (iout,*) "Probability limit",prob_limit
112 lgrp=(index(controlcard,'LGRP').gt.0)
113 caonly=(index(controlcard,'CA_ONLY').gt.0)
114 print_dist=(index(controlcard,'PRINT_DIST').gt.0)
115 call readi(controlcard,'IOPT',iopt,2)
116 lside = index(controlcard,"SIDE").gt.0
117 lefree = index(controlcard,"EFREE").gt.0
118 call readi(controlcard,'NTEMP',nT,1)
119 write (iout,*) "nT",nT
120 call multreada(controlcard,'TEMPER',beta_h,nT,300.0d0)
121 write (iout,*) "nT",nT
122 write (iout,*) 'beta_h',(beta_h(i),i=1,nT)
124 beta_h(i)=1.0d0/(1.987D-3*beta_h(i))
126 write (iout,*) 'beta_h',(beta_h(i),i=1,nT)
127 lprint_cart=index(controlcard,"PRINT_CART") .gt.0
128 lprint_int=index(controlcard,"PRINT_INT") .gt.0
129 call readi(controlcard,'NSAXS',nsaxs,0)
130 call readi(controlcard,'SAXS_MODE',saxs_mode,0)
131 call reada(controlcard,'SCAL_RAD',scal_rad,1.0d0)
132 call reada(controlcard,'SAXS_CUTOFF',saxs_cutoff,1.0d0)
133 write (iout,*) "Number of SAXS restraints",NSAXS," SAXS_MODE",
134 & SAXS_MODE," SCAL_RAD",scal_rad,"SAXS_CUTOFF",saxs_cutoff
138 c--------------------------------------------------------------------------
141 C Read molecular data.
145 include 'COMMON.IOUNITS'
148 include 'COMMON.INTERACT'
149 include 'COMMON.LOCAL'
150 include 'COMMON.NAMES'
151 include 'COMMON.CHAIN'
152 include 'COMMON.FFIELD'
153 include 'COMMON.SBRIDGE'
154 include 'COMMON.HEADER'
155 include 'COMMON.CONTROL'
156 include 'COMMON.CONTACTS'
157 include 'COMMON.TIME1'
158 include 'COMMON.TORCNSTR'
159 include 'COMMON.SHIELD'
161 include 'COMMON.INFO'
163 character*4 sequence(maxres)
164 character*800 weightcard,controlcard
166 double precision x(maxvar)
167 double precision phihel,phibet,sigmahel,sigmabet,sumv,
169 integer itype_pdb(maxres)
171 integer i,j,kkk,i1,i2,it1,it2
175 C Read weights of the subsequent energy terms.
176 call card_concat(weightcard)
177 call reada(weightcard,'WSC',wsc,1.0d0)
178 call reada(weightcard,'WLONG',wsc,wsc)
179 call reada(weightcard,'WSCP',wscp,1.0d0)
180 call reada(weightcard,'WELEC',welec,1.0D0)
181 call reada(weightcard,'WVDWPP',wvdwpp,welec)
182 call reada(weightcard,'WEL_LOC',wel_loc,1.0D0)
183 call reada(weightcard,'WCORR4',wcorr4,0.0D0)
184 call reada(weightcard,'WCORR5',wcorr5,0.0D0)
185 call reada(weightcard,'WCORR6',wcorr6,0.0D0)
186 call reada(weightcard,'WTURN3',wturn3,1.0D0)
187 call reada(weightcard,'WTURN4',wturn4,1.0D0)
188 call reada(weightcard,'WTURN6',wturn6,1.0D0)
189 call reada(weightcard,'WSTRAIN',wstrain,1.0D0)
190 call reada(weightcard,'WSCCOR',wsccor,1.0D0)
191 call reada(weightcard,'WBOND',wbond,1.0D0)
192 call reada(weightcard,'WTOR',wtor,1.0D0)
193 call reada(weightcard,'WTORD',wtor_d,1.0D0)
194 call reada(weightcard,'WANG',wang,1.0D0)
195 call reada(weightcard,'WSCLOC',wscloc,1.0D0)
196 call reada(weightcard,'WSAXS',wsaxs,0.0D0)
197 call reada(weightcard,'SCAL14',scal14,0.4D0)
198 call reada(weightcard,'SCALSCP',scalscp,1.0d0)
199 call reada(weightcard,'CUTOFF',cutoff_corr,7.0d0)
200 call reada(weightcard,'DELT_CORR',delt_corr,0.5d0)
201 if (index(weightcard,'SOFT').gt.0) ipot=6
202 call reada(weightcard,"D0CM",d0cm,3.78d0)
203 call reada(weightcard,"AKCM",akcm,15.1d0)
204 call reada(weightcard,"AKTH",akth,11.0d0)
205 call reada(weightcard,"AKCT",akct,12.0d0)
206 call reada(weightcard,"V1SS",v1ss,-1.08d0)
207 call reada(weightcard,"V2SS",v2ss,7.61d0)
208 call reada(weightcard,"V3SS",v3ss,13.7d0)
209 call reada(weightcard,"EBR",ebr,-5.50D0)
210 call reada(weightcard,'WSHIELD',wshield,1.0d0)
211 write(iout,*) 'WSHIELD',wshield
212 call reada(weightcard,'WLT',wliptran,0.0D0)
213 call reada(weightcard,"ATRISS",atriss,0.301D0)
214 call reada(weightcard,"BTRISS",btriss,0.021D0)
215 call reada(weightcard,"CTRISS",ctriss,1.001D0)
216 call reada(weightcard,"DTRISS",dtriss,1.001D0)
217 write (iout,*) "ATRISS=", atriss
218 write (iout,*) "BTRISS=", btriss
219 write (iout,*) "CTRISS=", ctriss
220 write (iout,*) "DTRISS=", dtriss
221 dyn_ss=(index(weightcard,'DYN_SS').gt.0)
223 dyn_ss_mask(i)=.false.
227 dyn_ssbond_ij(i,j)=1.0d300
230 call reada(weightcard,"HT",Ht,0.0D0)
232 ss_depth=ebr/wsc-0.25*eps(1,1)
233 Ht=Ht/wsc-0.25*eps(1,1)
234 akcm=akcm*wstrain/wsc
235 akth=akth*wstrain/wsc
236 akct=akct*wstrain/wsc
237 v1ss=v1ss*wstrain/wsc
238 v2ss=v2ss*wstrain/wsc
239 v3ss=v3ss*wstrain/wsc
241 ss_depth=ebr/wstrain-0.25*eps(1,1)*wsc/wstrain
243 write (iout,'(/a)') "Disulfide bridge parameters:"
244 write (iout,'(a,f10.2)') 'S-S bridge energy: ',ebr
245 write (iout,'(2(a,f10.2))') 'd0cm:',d0cm,' akcm:',akcm
246 write (iout,'(2(a,f10.2))') 'akth:',akth,' akct:',akct
247 write (iout,'(3(a,f10.2))') 'v1ss:',v1ss,' v2ss:',v2ss,
250 C 12/1/95 Added weight for the multi-body term WCORR
251 call reada(weightcard,'WCORRH',wcorr,1.0D0)
252 if (wcorr4.gt.0.0d0) wcorr=wcorr4
272 write (iout,10) wsc,wscp,welec,wvdwpp,wbond,wang,wscloc,wtor,
273 & wtor_d,wstrain,wel_loc,wcorr,wcorr5,wcorr6,wturn3,
274 & wturn4,wturn6,wsccor
275 10 format (/'Energy-term weights (unscaled):'//
276 & 'WSCC= ',f10.6,' (SC-SC)'/
277 & 'WSCP= ',f10.6,' (SC-p)'/
278 & 'WELEC= ',f10.6,' (p-p electr)'/
279 & 'WVDWPP= ',f10.6,' (p-p VDW)'/
280 & 'WBOND= ',f10.6,' (stretching)'/
281 & 'WANG= ',f10.6,' (bending)'/
282 & 'WSCLOC= ',f10.6,' (SC local)'/
283 & 'WTOR= ',f10.6,' (torsional)'/
284 & 'WTORD= ',f10.6,' (double torsional)'/
285 & 'WSTRAIN=',f10.6,' (SS bridges & dist. cnstr.)'/
286 & 'WEL_LOC=',f10.6,' (multi-body 3-rd order)'/
287 & 'WCORR4= ',f10.6,' (multi-body 4th order)'/
288 & 'WCORR5= ',f10.6,' (multi-body 5th order)'/
289 & 'WCORR6= ',f10.6,' (multi-body 6th order)'/
290 & 'WTURN3= ',f10.6,' (turns, 3rd order)'/
291 & 'WTURN4= ',f10.6,' (turns, 4th order)'/
292 & 'WTURN6= ',f10.6,' (turns, 6th order)'/
293 & 'WSCCOR= ',f10.6,' (SC-backbone torsinal correalations)')
295 if (wcorr4.gt.0.0d0) then
296 write (iout,'(/2a/)') 'Local-electrostatic type correlation ',
297 & 'between contact pairs of peptide groups'
298 write (iout,'(2(a,f5.3/))')
299 & 'Cutoff on 4-6th order correlation terms: ',cutoff_corr,
300 & 'Range of quenching the correlation terms:',2*delt_corr
301 else if (wcorr.gt.0.0d0) then
302 write (iout,'(/2a/)') 'Hydrogen-bonding correlation ',
303 & 'between contact pairs of peptide groups'
305 write (iout,'(a,f8.3)')
306 & 'Scaling factor of 1,4 SC-p interactions:',scal14
307 write (iout,'(a,f8.3)')
308 & 'General scaling factor of SC-p interactions:',scalscp
309 r0_corr=cutoff_corr-delt_corr
311 aad(i,1)=scalscp*aad(i,1)
312 aad(i,2)=scalscp*aad(i,2)
313 bad(i,1)=scalscp*bad(i,1)
314 bad(i,2)=scalscp*bad(i,2)
318 c print *,'indpdb=',indpdb,' pdbref=',pdbref
320 C Read sequence if not taken from the pdb file.
321 if (iscode.gt.0) then
322 read (inp,'(80a1)') (sequence(i)(1:1),i=1,nres)
324 read (inp,'(20(1x,a3))') (sequence(i),i=1,nres)
326 C Convert sequence to numeric code
328 itype(i)=rescode(i,sequence(i),iscode)
331 c print '(20i4)',(itype(i),i=1,nres)
335 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) then
337 if (itype(i).eq.ntyp1) then
341 else if (iabs(itype(i+1)).ne.20) then
343 else if (iabs(itype(i)).ne.20) then
350 write (iout,*) "ITEL"
352 write (iout,*) i,itype(i),itel(i)
355 c print *,'Call Read_Bridge.'
357 C this fragment reads diheadral constrains
360 c print *,'NNT=',NNT,' NCT=',NCT
361 if (itype(1).eq.ntyp1) nnt=2
362 if (itype(nres).eq.ntyp1) nct=nct-1
363 if (nstart.lt.nnt) nstart=nnt
364 if (nend.gt.nct .or. nend.eq.0) nend=nct
365 write (iout,*) "nstart",nstart," nend",nend
367 if (with_dihed_constr) then
369 read (inp,*) ndih_constr
370 if (ndih_constr.gt.0) then
373 C write (iout,*) 'FTORS',ftors
374 C ftors is the force constant for torsional quartic constrains
375 read (inp,*) (idih_constr(i),phi0(i),drange(i),ftors(i),
378 & 'There are',ndih_constr,' constraints on phi angles.'
380 write (iout,'(i5,3f8.3)') idih_constr(i),phi0(i),drange(i),
384 phi0(i)=deg2rad*phi0(i)
385 drange(i)=deg2rad*drange(i)
387 else if (ndih_constr.lt.0) then
389 call card_concat(controlcard)
390 call reada(controlcard,"PHIHEL",phihel,50.0D0)
391 call reada(controlcard,"PHIBET",phibet,180.0D0)
392 call reada(controlcard,"SIGMAHEL",sigmahel,30.0d0)
393 call reada(controlcard,"SIGMABET",sigmabet,40.0d0)
394 call reada(controlcard,"WDIHC",wdihc,0.591d0)
395 write (iout,*) "Weight of the dihedral restraint term",wdihc
396 read(inp,'(9x,3f7.3)')
397 & (secprob(1,i),secprob(2,i),secprob(3,i),i=nnt,nct)
398 write (iout,*) "The secprob array"
400 write (iout,'(i5,3f8.3)') i,(secprob(j,i),j=1,3)
404 if (itype(i-3).ne.ntyp1 .and. itype(i-2).ne.ntyp1
405 & .and. itype(i-1).ne.ntyp1 .and. itype(i).ne.ntyp1) then
406 ndih_constr=ndih_constr+1
407 idih_constr(ndih_constr)=i
410 vpsipred(j,ndih_constr)=secprob(j,i-1)*secprob(j,i-2)
411 sumv=sumv+vpsipred(j,ndih_constr)
414 vpsipred(j,ndih_constr)=vpsipred(j,ndih_constr)/sumv
416 phibound(1,ndih_constr)=phihel*deg2rad
417 phibound(2,ndih_constr)=phibet*deg2rad
418 sdihed(1,ndih_constr)=sigmahel*deg2rad
419 sdihed(2,ndih_constr)=sigmabet*deg2rad
423 & 'There are',ndih_constr,
424 & ' bimodal restraints on gamma angles.'
426 write(iout,'(i5,1x,a4,i5,1h-,a4,i5,4f8.3,3f10.5)') i,
427 & restyp(itype(idih_constr(i)-2)),idih_constr(i)-2,
428 & restyp(itype(idih_constr(i)-1)),idih_constr(i)-1,
429 & phibound(1,i)*rad2deg,sdihed(1,i)*rad2deg,
430 & phibound(2,i)*rad2deg,sdihed(2,i)*rad2deg,
431 & (vpsipred(j,i),j=1,3)
434 endif ! endif ndif_constr.gt.0
435 endif ! with_dihed_constr
436 if (with_theta_constr) then
437 C with_theta_constr is keyword allowing for occurance of theta constrains
438 read (inp,*) ntheta_constr
439 C ntheta_constr is the number of theta constrains
440 if (ntheta_constr.gt.0) then
442 read (inp,*) (itheta_constr(i),theta_constr0(i),
443 & theta_drange(i),for_thet_constr(i),
445 C the above code reads from 1 to ntheta_constr
446 C itheta_constr(i) residue i for which is theta_constr
447 C theta_constr0 the global minimum value
448 C theta_drange is range for which there is no energy penalty
449 C for_thet_constr is the force constant for quartic energy penalty
452 & 'There are',ntheta_constr,' constraints on phi angles.'
454 write (iout,'(i5,3f8.3)') itheta_constr(i),theta_constr0(i),
460 theta_constr0(i)=deg2rad*theta_constr0(i)
461 theta_drange(i)=deg2rad*theta_drange(i)
463 C if(me.eq.king.or..not.out1file)
464 C & write (iout,*) 'FTORS',ftors
465 C do i=1,ntheta_constr
466 C ii = itheta_constr(i)
467 C thetabound(1,ii) = phi0(i)-drange(i)
468 C thetabound(2,ii) = phi0(i)+drange(i)
470 endif ! ntheta_constr.gt.0
471 endif! with_theta_constr
472 write (iout,*) "nstart",nstart," nend",nend
473 write (iout,*) "calling read_saxs_consrtr",nsaxs
474 if (nsaxs.gt.0) call read_saxs_constr
477 c read(inp,'(a)') pdbfile
478 c write (iout,'(2a)') 'PDB data will be read from file ',pdbfile
479 c open(ipdbin,file=pdbfile,status='old',err=33)
481 c 33 write (iout,'(a)') 'Error opening PDB file.'
484 c print *,'Begin reading pdb data'
486 c print *,'Finished reading pdb data'
487 c write (iout,'(a,i3,a,i3)')'nsup=',nsup,' nstart_sup=',nstart_sup
489 c itype_pdb(i)=itype(i)
492 c write (iout,'(a,i3)') 'nsup=',nsup
494 c if (nsup.le.(nct-nnt+1)) then
495 c do i=0,nct-nnt+1-nsup
496 c if (seq_comp(itype(nnt+i),itype_pdb(nstart_sup),nsup)) then
502 c & 'Error - sequences to be superposed do not match.'
505 c do i=0,nsup-(nct-nnt+1)
506 c if (seq_comp(itype(nnt),itype_pdb(nstart_sup+i),nct-nnt+1))
508 c nstart_sup=nstart_sup+i
514 c & 'Error - sequences to be superposed do not match.'
517 c write (iout,*) 'nsup=',nsup,' nstart_sup=',nstart_sup,
518 c & ' nstart_seq=',nstart_seq
522 write (iout,*) "molread: REFSTR",refstr
524 if (.not.pdbref) then
525 call read_angles(inp,*38)
527 38 write (iout,'(a)') 'Error reading reference structure.'
529 call mp_stopall(Error_Msg)
531 stop 'Error reading reference structure'
544 c call contact(.true.,ncont_ref,icont_ref)
547 C write (iout,'(/a,i3,a)')
548 C & 'The chain contains',ns,' disulfide-bridging cysteines.'
549 write (iout,'(20i4)') (iss(i),i=1,ns)
551 write(iout,*)"Running with dynamic disulfide-bond formation"
553 write (iout,'(/a/)') 'Pre-formed links are:'
559 write (iout,'(2a,i3,3a,i3,a,3f10.3)')
560 & restyp(it1),'(',i1,') -- ',restyp(it2),'(',i2,')',dhpb(i),
566 if (ns.gt.0.and.dyn_ss) then
570 forcon(i-nss)=forcon(i)
577 dyn_ss_mask(iss(i))=.true.
580 c Read distance restraints
581 if (constr_dist.gt.0) then
582 call read_dist_constr
587 c-----------------------------------------------------------------------------
588 logical function seq_comp(itypea,itypeb,length)
590 integer length,itypea(length),itypeb(length)
593 if (itypea(i).ne.itypeb(i)) then
601 c-----------------------------------------------------------------------------
602 subroutine read_bridge
603 C Read information about disulfide bridges.
606 include 'COMMON.IOUNITS'
609 include 'COMMON.INTERACT'
610 include 'COMMON.LOCAL'
611 include 'COMMON.NAMES'
612 include 'COMMON.CHAIN'
613 include 'COMMON.FFIELD'
614 include 'COMMON.SBRIDGE'
615 include 'COMMON.HEADER'
616 include 'COMMON.CONTROL'
617 include 'COMMON.TIME1'
619 include 'COMMON.INFO'
622 C Read bridging residues.
623 read (inp,*) ns,(iss(i),i=1,ns)
625 C Check whether the specified bridging residues are cystines.
627 if (itype(iss(i)).ne.1) then
628 write (iout,'(2a,i3,a)')
629 & 'Do you REALLY think that the residue ',
630 & restyp(itype(iss(i))),i,
631 & ' can form a disulfide bridge?!!!'
632 write (*,'(2a,i3,a)')
633 & 'Do you REALLY think that the residue ',
634 & restyp(itype(iss(i))),i,
635 & ' can form a disulfide bridge?!!!'
637 call mp_stopall(error_msg)
643 C Read preformed bridges.
645 read (inp,*) nss,(ihpb(i),jhpb(i),i=1,nss)
648 C Check if the residues involved in bridges are in the specified list of
652 if (ihpb(i).eq.ihpb(j).or.ihpb(i).eq.jhpb(j)
653 & .or.jhpb(i).eq.ihpb(j).or.jhpb(i).eq.jhpb(j)) then
654 write (iout,'(a,i3,a)') 'Disulfide pair',i,
655 & ' contains residues present in other pairs.'
656 write (*,'(a,i3,a)') 'Disulfide pair',i,
657 & ' contains residues present in other pairs.'
659 call mp_stopall(error_msg)
666 if (ihpb(i).eq.iss(j)) goto 10
668 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
671 if (jhpb(i).eq.iss(j)) goto 20
673 write (iout,'(a,i3,a)') 'Pair',i,' contains unknown cystine.'
686 c----------------------------------------------------------------------------
687 subroutine read_angles(kanal,*)
692 include 'COMMON.CHAIN'
693 include 'COMMON.IOUNITS'
695 read (kanal,*,err=10,end=10) (theta(i),i=3,nres)
696 read (kanal,*,err=10,end=10) (phi(i),i=4,nres)
697 read (kanal,*,err=10,end=10) (alph(i),i=2,nres-1)
698 read (kanal,*,err=10,end=10) (omeg(i),i=2,nres-1)
700 theta(i)=deg2rad*theta(i)
701 phi(i)=deg2rad*phi(i)
702 alph(i)=deg2rad*alph(i)
703 omeg(i)=deg2rad*omeg(i)
708 c----------------------------------------------------------------------------
709 subroutine reada(rekord,lancuch,wartosc,default)
711 character*(*) rekord,lancuch
712 double precision wartosc,default
715 iread=index(rekord,lancuch)
720 iread=iread+ilen(lancuch)+1
721 read (rekord(iread:),*) wartosc
724 c----------------------------------------------------------------------------
725 subroutine multreada(rekord,lancuch,tablica,dim,default)
728 double precision tablica(dim),default
729 character*(*) rekord,lancuch
735 iread=index(rekord,lancuch)
736 if (iread.eq.0) return
737 iread=iread+ilen(lancuch)+1
738 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
741 c----------------------------------------------------------------------------
742 subroutine readi(rekord,lancuch,wartosc,default)
744 character*(*) rekord,lancuch
745 integer wartosc,default
748 iread=index(rekord,lancuch)
753 iread=iread+ilen(lancuch)+1
754 read (rekord(iread:),*) wartosc
757 C----------------------------------------------------------------------
758 subroutine multreadi(rekord,lancuch,tablica,dim,default)
761 integer tablica(dim),default
762 character*(*) rekord,lancuch
769 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
770 if (iread.eq.0) return
771 iread=iread+ilen(lancuch)+1
772 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
776 c----------------------------------------------------------------------------
777 subroutine card_concat(card)
779 include 'COMMON.IOUNITS'
781 character*80 karta,ucase
783 read (inp,'(a)') karta
786 do while (karta(80:80).eq.'&')
787 card=card(:ilen(card)+1)//karta(:79)
788 read (inp,'(a)') karta
791 card=card(:ilen(card)+1)//karta
794 c----------------------------------------------------------------------------
803 include 'COMMON.IOUNITS'
804 include 'COMMON.CONTROL'
805 integer lenpre,lenpot,ilen
807 character*16 cformat,cprint
809 integer lenint,lenout
810 call getenv('INPUT',prefix)
811 call getenv('OUTPUT',prefout)
812 call getenv('INTIN',prefintin)
813 call getenv('COORD',cformat)
814 call getenv('PRINTCOOR',cprint)
815 call getenv('SCRATCHDIR',scratchdir)
818 if (index(ucase(cformat),'CX').gt.0) then
825 lenint=ilen(prefintin)
826 C Get the names and open the input files
827 open (inp,file=prefix(:ilen(prefix))//'.inp',status='old')
829 write (liczba,'(bz,i3.3)') me
830 outname=prefout(:lenout)//'_clust.out_'//liczba
832 outname=prefout(:lenout)//'_clust.out'
835 intinname=prefintin(:lenint)//'.bx'
836 else if (from_cx) then
837 intinname=prefintin(:lenint)//'.cx'
839 intinname=prefintin(:lenint)//'.int'
841 rmsname=prefintin(:lenint)//'.rms'
842 open (jplot,file=prefout(:ilen(prefout))//'.tex',
844 open (jrms,file=rmsname,status='unknown')
845 open(iout,file=outname,status='unknown')
846 C Get parameter filenames and open the parameter files.
847 call getenv('BONDPAR',bondname)
848 open (ibond,file=bondname,status='old')
849 call getenv('THETPAR',thetname)
850 open (ithep,file=thetname,status='old')
851 call getenv('ROTPAR',rotname)
852 open (irotam,file=rotname,status='old')
853 call getenv('TORPAR',torname)
854 open (itorp,file=torname,status='old')
856 call getenv('TORDPAR',tordname)
857 open (itordp,file=tordname,status='old')
859 call getenv('FOURIER',fouriername)
860 open (ifourier,file=fouriername,status='old')
861 call getenv('ELEPAR',elename)
862 open (ielep,file=elename,status='old')
863 call getenv('SIDEPAR',sidename)
864 open (isidep,file=sidename,status='old')
865 call getenv('SIDEP',sidepname)
866 open (isidep1,file=sidepname,status="old")
867 call getenv('SCCORPAR',sccorname)
868 open (isccor,file=sccorname,status="old")
869 call getenv('LIPTRANPAR',liptranname)
870 open (iliptranpar,file=liptranname,status='old')
873 C 8/9/01 In the newest version SCp interaction constants are read from a file
874 C Use -DOLDSCP to use hard-coded constants instead.
876 call getenv('SCPPAR',scpname)
877 open (iscpp,file=scpname,status='old')
881 c--------------------------------------------------------------------------
882 subroutine read_dist_constr
883 implicit real*8 (a-h,o-z)
888 include 'COMMON.CONTROL'
889 include 'COMMON.CHAIN'
890 include 'COMMON.IOUNITS'
891 include 'COMMON.SBRIDGE'
892 integer ifrag_(2,100),ipair_(2,100)
893 double precision wfrag_(100),wpair_(100)
894 character*500 controlcard
895 logical lprn /.true./
896 logical normalize,next
898 double precision xlink(4,0:4) /
900 & 0.0d0,0.0d0,0.0d0,0.0d0, ! default, no xlink potential
901 & 0.00305218d0,9.46638d0,4.68901d0,4.74347d0, ! ZL
902 & 0.00214928d0,12.7517d0,0.00375009d0,6.13477d0, ! ADH
903 & 0.00184547d0,11.2678d0,0.00140292d0,7.00868d0, ! PDH
904 & 0.000161786d0,6.29273d0,4.40993d0,7.13956d0 / ! DSS
905 write (iout,*) "Calling read_dist_constr"
906 c write (iout,*) "nres",nres," nstart_sup",nstart_sup," nsup",nsup
912 call card_concat(controlcard)
913 next = index(controlcard,"NEXT").gt.0
914 call readi(controlcard,"RESTR_TYPE",restr_type,constr_dist)
915 write (iout,*) "restr_type",restr_type
916 call readi(controlcard,"NFRAG",nfrag_,0)
917 call readi(controlcard,"NPAIR",npair_,0)
918 call readi(controlcard,"NDIST",ndist_,0)
919 call reada(controlcard,'DIST_CUT',dist_cut,5.0d0)
920 if (restr_type.eq.10)
921 & call reada(controlcard,'WBOLTZD',wboltzd,0.591d0)
922 if (restr_type.eq.12)
923 & call reada(controlcard,'SCAL_PEAK',scal_peak,5.0d0)
924 call multreadi(controlcard,"IFRAG",ifrag_(1,1),2*nfrag_,0)
925 call multreadi(controlcard,"IPAIR",ipair_(1,1),2*npair_,0)
926 call multreada(controlcard,"WFRAG",wfrag_(1),nfrag_,0.0d0)
927 call multreada(controlcard,"WPAIR",wpair_(1),npair_,0.0d0)
928 normalize = index(controlcard,"NORMALIZE").gt.0
929 write (iout,*) "WBOLTZD",wboltzd
930 write (iout,*) "SCAL_PEAK",scal_peak
931 write (iout,*) "NFRAG",nfrag_," NPAIR",npair_," NDIST",ndist_
932 write (iout,*) "IFRAG"
934 write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
936 write (iout,*) "IPAIR"
938 write (iout,*) i,ipair_(1,i),ipair_(2,i),wpair_(i)
940 if (nfrag_.gt.0) then
942 read(inp,'(a)') pdbfile
944 & "Distance restraints will be constructed from structure ",pdbfile
945 open(ipdbin,file=pdbfile,status='old',err=11)
951 if (ifrag_(1,i).lt.nstart_sup) ifrag_(1,i)=nstart_sup
952 if (ifrag_(2,i).gt.nstart_sup+nsup-1)
953 & ifrag_(2,i)=nstart_sup+nsup-1
954 c write (iout,*) i,ifrag_(1,i),ifrag_(2,i),wfrag_(i)
956 if (wfrag_(i).eq.0.0d0) cycle
957 do j=ifrag_(1,i),ifrag_(2,i)-1
959 c write (iout,*) "j",j," k",k
961 if (restr_type.eq.1) then
967 forcon(nhpb)=wfrag_(i)
968 else if (constr_dist.eq.2) then
969 if (ddjk.le.dist_cut) then
975 forcon(nhpb)=wfrag_(i)
977 else if (restr_type.eq.3) then
983 forcon(nhpb)=wfrag_(i)*dexp(-0.5d0*(ddjk/dist_cut)**2)
985 write (iout,'(a,3i5,f8.2,1pe12.2)') "+dist.restr ",
986 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
991 if (wpair_(i).eq.0.0d0) cycle
999 do j=ifrag_(1,ii),ifrag_(2,ii)
1000 do k=ifrag_(1,jj),ifrag_(2,jj)
1002 if (restr_type.eq.1) then
1008 forcon(nhpb)=wpair_(i)
1009 else if (constr_dist.eq.2) then
1010 if (ddjk.le.dist_cut) then
1016 forcon(nhpb)=wpair_(i)
1018 else if (restr_type.eq.3) then
1024 forcon(nhpb)=wpair_(i)*dexp(-0.5d0*(ddjk/dist_cut)**2)
1026 write (iout,'(a,3i5,f8.2,f10.1)') "+dist.restr ",
1027 & nhpb,ihpb(nhpb),jhpb(nhpb),dhpb(nhpb),forcon(nhpb)
1033 write (iout,*) "Distance restraints as read from input"
1035 if (restr_type.eq.12) then
1036 read (inp,*) ihpb_peak(nhpb_peak+1),jhpb_peak(nhpb_peak+1),
1037 & dhpb_peak(nhpb_peak+1),dhpb1_peak(nhpb_peak+1),
1038 & ibecarb_peak(nhpb_peak+1),forcon_peak(nhpb_peak+1),
1039 & fordepth_peak(nhpb_peak+1),npeak
1040 c write(iout,*) ihpb_peak(nhpb_peak+1),jhpb_peak(nhpb_peak+1),
1041 c & dhpb_peak(nhpb_peak+1),dhpb1_peak(nhpb_peak+1),
1042 c & ibecarb_peak(nhpb_peak+1),forcon_peak(nhpb_peak+1),
1043 c & fordepth_peak(nhpb_peak+1),npeak
1044 if (forcon_peak(nhpb_peak+1).le.0.0d0.or.
1045 & fordepth_peak(nhpb_peak+1).le.0.0d0)cycle
1046 nhpb_peak=nhpb_peak+1
1047 irestr_type_peak(nhpb_peak)=12
1048 if (ipeak(1,npeak).eq.0) ipeak(1,npeak)=i
1050 write (iout,'(a,5i5,2f8.2,2f10.5,i5)') "+dist.restr ",
1051 & nhpb_peak,ihpb_peak(nhpb_peak),jhpb_peak(nhpb_peak),
1052 & ibecarb_peak(nhpb_peak),npeak,dhpb_peak(nhpb_peak),
1053 & dhpb1_peak(nhpb_peak),forcon_peak(nhpb_peak),
1054 & fordepth_peak(nhpb_peak),irestr_type_peak(nhpb_peak)
1055 if (ibecarb_peak(nhpb_peak).gt.0) then
1056 ihpb_peak(nhpb_peak)=ihpb_peak(nhpb_peak)+nres
1057 jhpb_peak(nhpb_peak)=jhpb_peak(nhpb_peak)+nres
1059 else if (restr_type.eq.11) then
1060 read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),dhpb(nhpb+1),
1061 & dhpb1(nhpb+1),ibecarb(i),forcon(nhpb+1),fordepth(nhpb+1)
1062 c fordepth(nhpb+1)=fordepth(nhpb+1)/forcon(nhpb+1)
1063 if (forcon(nhpb+1).le.0.0d0.or.fordepth(nhpb+1).le.0.0d0)cycle
1065 irestr_type(nhpb)=11
1066 write (iout,'(a,4i5,2f8.2,2f10.5,i5)') "+dist.restr ",
1067 & nhpb,ihpb(nhpb),jhpb(nhpb),ibecarb(nhpb),dhpb(nhpb),
1068 & dhpb1(nhpb),forcon(nhpb),fordepth(nhpb),irestr_type(nhpb)
1069 if (ibecarb(nhpb).gt.0) then
1070 ihpb(nhpb)=ihpb(nhpb)+nres
1071 jhpb(nhpb)=jhpb(nhpb)+nres
1073 else if (restr_type.eq.10) then
1074 c Cross-lonk Markov-like potential
1075 call card_concat(controlcard)
1076 call readi(controlcard,"ILINK",ihpb(nhpb+1),0)
1077 call readi(controlcard,"JLINK",jhpb(nhpb+1),0)
1079 if (index(controlcard,"BETA").gt.0) ibecarb(nhpb+1)=1
1080 if (ihpb(nhpb+1).eq.0 .or. jhpb(nhpb+1).eq.0) cycle
1081 if (index(controlcard,"ZL").gt.0) then
1083 else if (index(controlcard,"ADH").gt.0) then
1085 else if (index(controlcard,"PDH").gt.0) then
1087 else if (index(controlcard,"DSS").gt.0) then
1092 call reada(controlcard,"AXLINK",dhpb(nhpb+1),
1093 & xlink(1,link_type))
1094 call reada(controlcard,"BXLINK",dhpb1(nhpb+1),
1095 & xlink(2,link_type))
1096 call reada(controlcard,"CXLINK",fordepth(nhpb+1),
1097 & xlink(3,link_type))
1098 call reada(controlcard,"SIGMA",forcon(nhpb+1),
1099 & xlink(4,link_type))
1100 call reada(controlcard,"SCORE",xlscore(nhpb+1),1.0d0)
1101 c read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),ibecarb(nhpb+1),
1102 c & dhpb(nhpb+1),dhpb1(nhpb+1),forcon(nhpb+1),fordepth(nhpb+1)
1103 if (forcon(nhpb+1).le.0.0d0 .or.
1104 & (dhpb(nhpb+1).eq.0 .and. dhpb1(nhpb+1).eq.0)) cycle
1106 irestr_type(nhpb)=10
1107 if (ibecarb(nhpb).gt.0) then
1108 ihpb(nhpb)=ihpb(nhpb)+nres
1109 jhpb(nhpb)=jhpb(nhpb)+nres
1111 write (iout,'(a,4i5,2f8.2,3f10.5,i5)') "+dist.restr ",
1112 & nhpb,ihpb(nhpb),jhpb(nhpb),ibecarb(nhpb),dhpb(nhpb),
1113 & dhpb1(nhpb),forcon(nhpb),fordepth(nhpb),xlscore(nhpb),
1117 read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),dhpb(nhpb+1),
1118 & dhpb1(nhpb+1),ibecarb(nhpb+1),forcon(nhpb+1)
1119 if (forcon(nhpb+1).gt.0.0d0) then
1121 if (dhpb1(nhpb).eq.0.0d0) then
1126 if (ibecarb(nhpb).gt.0) then
1127 ihpb(nhpb)=ihpb(nhpb)+nres
1128 jhpb(nhpb)=jhpb(nhpb)+nres
1130 if (dhpb(nhpb).eq.0.0d0)
1131 & dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
1133 write (iout,'(a,4i5,f8.2,f10.1)') "+dist.restr ",
1134 & nhpb,ihpb(nhpb),jhpb(nhpb),ibecarb(i),dhpb(nhpb),forcon(nhpb)
1136 C read (inp,*) ihpb(nhpb+1),jhpb(nhpb+1),forcon(nhpb+1)
1137 C if (forcon(nhpb+1).gt.0.0d0) then
1139 C dhpb(nhpb)=dist(ihpb(nhpb),jhpb(nhpb))
1147 if (irestr_type(i).eq.11.and.fordepth(i).gt.fordepthmax)
1148 & fordepthmax=fordepth(i)
1151 if (irestr_type(i).eq.11) fordepth(i)=fordepth(i)/fordepthmax
1154 if (nhpb.gt.nss) then
1155 write (iout,'(/a,i5,a/4a5,2a8,3a10,a5)')
1156 & "The following",nhpb-nss,
1157 & " distance restraints have been imposed:",
1158 & " Nr"," res1"," res2"," beta"," d1"," d2"," k"," V",
1161 write (iout,'(4i5,2f8.2,3f10.5,i5)')i-nss,ihpb(i),jhpb(i),
1162 & ibecarb(i),dhpb(i),dhpb1(i),forcon(i),fordepth(i),xlscore(i),
1169 11 write (iout,*)"read_dist_restr: error reading reference structure"
1172 c-------------------------------------------------------------------------------
1173 subroutine read_saxs_constr
1174 implicit real*8 (a-h,o-z)
1175 include 'DIMENSIONS'
1179 include 'COMMON.CONTROL'
1180 include 'COMMON.CHAIN'
1181 include 'COMMON.IOUNITS'
1182 include 'COMMON.SBRIDGE'
1183 double precision cm(3)
1185 write (iout,*) "Calling read_saxs nsaxs",nsaxs
1187 if (saxs_mode.eq.0) then
1188 c SAXS distance distribution
1190 read(inp,*) distsaxs(i),Psaxs(i)
1194 Cnorm = Cnorm + Psaxs(i)
1196 write (iout,*) "Cnorm",Cnorm
1198 Psaxs(i)=Psaxs(i)/Cnorm
1200 write (iout,*) "Normalized distance distribution from SAXS"
1202 write (iout,'(f8.2,e15.5)') distsaxs(i),Psaxs(i)
1206 Wsaxs0=Wsaxs0-Psaxs(i)*dlog(Psaxs(i))
1208 write (iout,*) "Wsaxs0",Wsaxs0
1212 read (inp,'(30x,3f8.3)') (Csaxs(j,i),j=1,3)
1219 cm(j)=cm(j)+Csaxs(j,i)
1227 Csaxs(j,i)=Csaxs(j,i)-cm(j)
1230 write (iout,*) "SAXS sphere coordinates"
1232 write (iout,'(i5,3f10.5)') i,(Csaxs(j,i),j=1,3)