corrections
[unres.git] / source / unres / src-HCD-5D / readpdb-mult.F
index 40bf9ac..8346c4a 100644 (file)
@@ -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
@@ -312,6 +324,18 @@ C Calculate internal coordinates.
       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
@@ -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)
@@ -652,7 +676,7 @@ C Calculate internal coordinates.
       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)