X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;ds=sidebyside;f=source%2Funres%2Fsrc-HCD-5D%2Freadpdb-mult.F;h=8346c4ad7e4450bc463e63602db07a9c1ffe62d4;hb=1441ec2b7d68b4fd94014649e4bd9574db0bfc36;hp=4c47572081c04129edd1574516ec2e4f18bffc25;hpb=75c81b9dbe2f7e18e73a9d61ee02980790335164;p=unres.git diff --git a/source/unres/src-HCD-5D/readpdb-mult.F b/source/unres/src-HCD-5D/readpdb-mult.F index 4c47572..8346c4a 100644 --- a/source/unres/src-HCD-5D/readpdb-mult.F +++ b/source/unres/src-HCD-5D/readpdb-mult.F @@ -20,8 +20,9 @@ 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 @@ -36,6 +37,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. @@ -76,7 +78,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. @@ -96,9 +102,11 @@ c write (iout,*) "IRES",ires-ishift+ishift1,ires_old ! 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) @@ -153,7 +161,7 @@ c write (2,*) "ires",ires," res ",res!," ity"!,ity read(card(31:54),'(3f8.3)') (c(j,ires),j=1,3) ! write (iout,*) "backbone ",atom #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 @@ -178,6 +186,10 @@ 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 +199,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 @@ -304,14 +316,26 @@ 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,i3,3f8.3,5x,3f8.3)') + write (iout,'(a3,1x,i4,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 @@ -346,9 +370,9 @@ C Copy the coordinates to reference coordinates enddo 100 format (//' alpha-carbon coordinates ', & ' centroid coordinates'/ - 1 ' ', 6X,'X',11X,'Y',11X,'Z', + 1 ' ', 7X,'X',11X,'Y',11X,'Z', & 10X,'X',11X,'Y',11X,'Z') - 110 format (a,'(',i3,')',6f12.5) + 110 format (a,'(',i4,')',6f12.5) cc enddiag do j=1,nbfrag do i=1,4 @@ -439,7 +463,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) @@ -644,15 +668,15 @@ 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,i3,3f8.3,5x,3f8.3)') + write (iout,'(a3,1x,i4,3f8.3,5x,3f8.3)') & restyp(itype(ires)),ires,(c(j,ires),j=1,3), & (c(j,ires+nres),j=1,3) enddo 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)