X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=source%2Funres%2Fsrc-HCD-5D%2Freadpdb-mult.F;h=e603267745d0147017c8917c72bc39bfa6b6824e;hb=7a9066ef8247b567cb33f4f6f3483e076614c7c4;hp=40bf9ace6a4907fe069ac6b31e92a8d2309928ed;hpb=5aac27f7c6317fa0975184363614b42716034716;p=unres.git diff --git a/source/unres/src-HCD-5D/readpdb-mult.F b/source/unres/src-HCD-5D/readpdb-mult.F index 40bf9ac..e603267 100644 --- a/source/unres/src-HCD-5D/readpdb-mult.F +++ b/source/unres/src-HCD-5D/readpdb-mult.F @@ -20,13 +20,15 @@ C geometry. double precision e1(3),e2(3),e3(3) integer rescode,iterter(maxres),cou logical fail,sccalc - integer i,j,iii,ires,ires_old,ishift,ishift1,ibeg - double precision dcj,efree_temp + integer i,j,iii,ires,ires_old,ishift,ishift1,ibeg,ifree + double precision dcj!,efree_temp + logical zero bfac=0.0d0 do i=1,maxres iterter(i)=0 enddo ibeg=1 + ishift=0 ishift1=0 lsecondary=.false. nhfrag=0 @@ -36,6 +38,7 @@ C geometry. do read (ipdbin,'(a80)',end=10) card c write (iout,'(a)') card +c call flush(iout) if (card(:5).eq.'HELIX') then nhfrag=nhfrag+1 lsecondary=.true. @@ -62,9 +65,9 @@ c write (iout,'(a)') card iterter(ires_old-1)=1 itype(ires_old)=ntyp1 iterter(ires_old)=1 - ishift1=ishift1+1 +c ishift1=ishift1+1 ibeg=2 - write (iout,*) "Chain ended",ires,ishift,ires_old + write (iout,*) "Chain ended",ires,ishift,ires_old,ibeg if (unres_pdb) then do j=1,3 dc(j,ires)=sccor(j,iii) @@ -76,7 +79,11 @@ c write (iout,'(a)') card sccalc=.true. endif ! Read free energy - if (index(card,"FREE ENERGY").gt.0) read(card(35:),*) efree_temp +c if (index(card,"FREE ENERGY").gt.0) then +c ifree=index(card,"FREE ENERGY")+12 +c read(card(ifree:),*,err=1115,end=1115) efree_temp +c 1115 continue +c endif ! Fish out the ATOM cards. if (index(card(1:4),'ATOM').gt.0) then sccalc=.false. @@ -89,16 +96,18 @@ c write (iout,*) "! ",atom," !",ires read (card(18:20),'(a3)') res c write (iout,*) "ires",ires,ires-ishift+ishift1, c & " ires_old",ires_old -c write (iout,*) "ishift",ishift," ishift1",ishift1 -c write (iout,*) "IRES",ires-ishift+ishift1,ires_old +c write (iout,*) "ishift",ishift," ishift1",ishift1 +c write (iout,*) "IRES",ires-ishift+ishift1,ires_old if (ires-ishift+ishift1.ne.ires_old) then ! Calculate the CM of the preceding residue. ! if (ibeg.eq.0) call sccenter(ires,iii,sccor) if (ibeg.eq.0) then c write (iout,*) "Calculating sidechain center iii",iii +c write (iout,*) "ires",ires if (unres_pdb) then +c write (iout,'(i5,3f10.5)') ires,(sccor(j,iii),j=1,3) do j=1,3 - dc(j,ires+nres)=sccor(j,iii) + dc(j,ires_old)=sccor(j,iii) enddo else call sccenter(ires_old,iii,sccor) @@ -107,6 +116,7 @@ c write (iout,*) "Calculating sidechain center iii",iii sccalc=.true. endif ! Start new residue. +c write (iout,*) "ibeg",ibeg if (res.eq.'Cl-' .or. res.eq.'Na+') then ires=ires_old cycle @@ -125,10 +135,13 @@ c write (iout,*) "BEG ires",ires else if (ibeg.eq.2) then ! Start a new chain ishift=-ires_old+ires-1 !!!!! - ishift1=ishift1-1 !!!!! -c write (iout,*) "New chain started",ires,ishift,ishift1,"!" +c ishift1=ishift1-1 !!!!! +c write (iout,*) "New chain started",ires,ires_old,ishift, +c & ishift1 ires=ires-ishift+ishift1 + write (iout,*) "New chain started ires",ires ires_old=ires +c ires=ires_old+1 ibeg=0 else ishift=ishift-(ires-ishift+ishift1-ires_old-1) @@ -151,9 +164,11 @@ c write (2,*) "ires",ires," res ",res!," ity"!,ity if (atom.eq.'CA' .or. atom.eq.'CH3' .or. & res.eq.'NHE'.and.atom(:2).eq.'HN') then read(card(31:54),'(3f8.3)') (c(j,ires),j=1,3) -! write (iout,*) "backbone ",atom + read(card(61:66),*) bfac(ires) +c write (iout,*) "backbone ",atom +c write (iout,*) ires,res,(c(j,ires),j=1,3) #ifdef DEBUG - write (iout,'(2i3,2x,a,3f8.3)') + write (iout,'(i6,i3,2x,a,3f8.3)') & ires,itype(ires),res,(c(j,ires),j=1,3) #endif iii=iii+1 @@ -173,11 +188,15 @@ c write (2,*) "iii",iii endif enddo 10 if(me.eq.king.or..not.out1file) - & write (iout,'(a,i5)') ' Nres: ',ires + & write (iout,'(a,i7)') ' Nres: ',ires c write (iout,*) "iii",iii C Calculate dummy residue coordinates inside the "chain" of a multichain C system nres=ires +c write (iout,*) "dc" +c do i=1,nres +c write (iout,'(i5,3f10.5)') i,(dc(j,i),j=1,3) +c enddo do i=2,nres-1 c write (iout,*) i,itype(i),itype(i+1),ntyp1,iterter(i) if (itype(i).eq.ntyp1.and.iterter(i).eq.1) then @@ -187,14 +206,14 @@ C first is connected prevous chain (itype(i+1).eq.ntyp1)=true C second dummy atom is conected to next chain itype(i+1).eq.ntyp1=false if (unres_pdb) then C 2/15/2013 by Adam: corrected insertion of the last dummy residue - print *,i,'tu dochodze' +c print *,i,'tu dochodze' call refsys(i-3,i-2,i-1,e1,e2,e3,fail) if (fail) then e2(1)=0.0d0 e2(2)=1.0d0 e2(3)=0.0d0 endif !fail - print *,i,'a tu?' +c print *,i,'a tu?' do j=1,3 c(j,i)=c(j,i-1)+1.9d0*(-e1(j)+e2(j))/sqrt(2.0d0) enddo @@ -217,7 +236,7 @@ C 2/15/2013 by Adam: corrected insertion of the first dummy residue e2(3)=0.0d0 endif do j=1,3 - c(j,i)=c(j,i+1)-1.9d0*e2(j) + c(j,i)=c(j,i+1)+1.9d0*(-e1(j)+e2(j))/sqrt(2.0d0) enddo else !unres_pdb do j=1,3 @@ -304,20 +323,33 @@ C Calculate internal coordinates. write (iout,'(/a)') & "Cartesian coordinates of the reference structure" write (iout,'(a,3(3x,a5),5x,3(3x,a5))') - & "Residue ","X(CA)","Y(CA)","Z(CA)","X(SC)","Y(SC)","Z(SC)" + & "Residue ","X(CA)","Y(CA)","Z(CA)","X(SC)","Y(SC)","Z(SC)" do ires=1,nres - write (iout,'(a3,1x,i4,3f8.3,5x,3f8.3)') + write (iout,'(a3,1x,i6,3f8.3,5x,3f8.3)') & restyp(itype(ires)),ires,(c(j,ires),j=1,3), & (c(j,ires+nres),j=1,3) enddo call flush(iout) endif + zero=.false. + do ires=1,nres + zero=zero.or.itype(ires).eq.0 + enddo + if (zero) then + write (iout,'(2a)') "Gaps in PDB coordinates detected;", + & " look for ZERO in the control output above." + write (iout,'(2a)') "Repair the PDB file using MODELLER", + & " or other softwared and resubmit." + call flush(iout) + stop + endif c write(iout,*)"before int_from_cart nres",nres call int_from_cart(.true.,.false.) do i=1,nres thetaref(i)=theta(i) phiref(i)=phi(i) enddo + dc(:,0)=c(:,1) do i=1,nres-1 do j=1,3 dc(j,i)=c(j,i+1)-c(j,i) @@ -387,8 +419,9 @@ C and convert the peptide geometry into virtual-chain geometry. character*3 seq,res character*5 atom character*80 card - double precision sccor(3,20) + double precision sccor(3,50) integer rescode,iterter(maxres) + logical zero do i=1,maxres iterter(i)=0 enddo @@ -439,7 +472,7 @@ C Calculate the CM of the preceding residue. if (ibeg.eq.0) then if (unres_pdb) then do j=1,3 - dc(j,ires)=sccor(j,iii) + dc(j,ires_old)=sccor(j,iii) enddo else call sccenter(ires_old,iii,sccor) @@ -516,7 +549,7 @@ c write (iout,*) "sidechain ",atom endif enddo 10 if(me.eq.king.or..not.out1file) - & write (iout,'(a,i5)') ' Nres: ',ires + & write (iout,'(a,i7)') ' Nres: ',ires C Calculate dummy residue coordinates inside the "chain" of a multichain C system nres=ires @@ -556,7 +589,7 @@ C 2/15/2013 by Adam: corrected insertion of the first dummy residue e2(3)=0.0d0 endif do j=1,3 - c(j,i)=c(j,i+1)-1.9d0*e2(j) + c(j,i)=c(j,i+1)+1.9d0*(-e1(j)+e2(j))/sqrt(2.0d0) enddo else !unres_pdb do j=1,3 @@ -591,7 +624,7 @@ C 2/15/2013 by Adam: corrected insertion of the last dummy residue e2(3)=0.0d0 endif do j=1,3 - c(j,nres)=c(j,nres-1)-1.9d0*e2(j) + c(j,nres)=c(j,nres-1)+1.9d0*(-e1(j)+e2(j))/sqrt(2.0d0) enddo else do j=1,3 @@ -623,7 +656,7 @@ C 2/15/2013 by Adam: corrected insertion of the first dummy residue e2(3)=0.0d0 endif do j=1,3 - c(j,1)=c(j,2)-1.9d0*e2(j) + c(j,1)=c(j,2)+1.9d0*(e1(j)-e2(j))/dsqrt(2.0d0) enddo else do j=1,3 @@ -651,13 +684,26 @@ C Calculate internal coordinates. & (c(j,ires+nres),j=1,3) enddo endif + zero=.false. + do ires=1,nres + zero=zero.or.itype(ires).eq.0 + enddo + if (zero) then + write (iout,'(2a)') "Gaps in PDB coordinates detected;", + & " look for ZERO in the control output above." + write (iout,'(2a)') "Repair the PDB file using MODELLER", + & " or other softwared and resubmit." + call flush(iout) + stop + endif C Calculate internal coordinates. - call int_from_cart(.true.,.true.) + call int_from_cart(.true.,out_template_coord) call sc_loc_geom(.false.) do i=1,nres thetaref(i)=theta(i) phiref(i)=phi(i) enddo + dc(:,0)=c(:,1) do i=1,nres-1 do j=1,3 dc(j,i)=c(j,i+1)-c(j,i)