CHARACTER*40 INFILE1,INFILE2,FILENAME CHARACTER*70 ASTRING LOGICAL EFLG real*8 M1(3),M2(3),d INTEGER*4 I,J,k character*1 tbstr character*4 at1,at2 character*6 chain1, chain2 tbstr=char(9) 1200 FORMAT(A) write(6,*)'Now ignores non-ATOM records' c read operator into m2 6 WRITE(6,*) 'ENTER NAME OF 1st pdb file:' READ(5,1200) INFILE1 IF (INFILE1(:5).EQ.' ') STOP INQUIRE(FILE=INFILE1, NAME=FILENAME,EXIST=EFLG) IF (.NOT.EFLG) GOTO 6 OPEN (UNIT=2,FILE=INFILE1,STATUS='OLD') 8 WRITE(6,*) 'ENTER NAME OF 2nd pdb file (identical atom order):' READ(5,1200) INFILE2 IF (INFILE2(:5).EQ.' ') STOP INQUIRE(FILE=INFILE2, NAME=FILENAME,EXIST=EFLG) IF (.NOT.EFLG) GOTO 8 OPEN (UNIT=3,FILE=INFILE2,STATUS='OLD') dmax=0. write(6,*)'First and last residues in ',infile1,'?' read (5,*) nfirst1,nlast1 write(6,*)'First residue in ',infile2,'?' read (5,*) nfirst2 write(6,*)'Threshold (only distances greater will be printed)' read(5,*)thresh dmax=-1.0 mres1=-999 mres2=-999 sum=0 n=0 c read coord 50 read(2,1200,end=1160) ASTRING if ((ASTRING(1:6).ne.'ATOM ').and.(ASTRING(1:6).ne.'HETATM')) . goto 50 read (ASTRING,51) AT1, chain1,nres1,(m1(i),I=1,3) c DECODE(70,51,ASTRING) AT1, chain1,nres1,(m1(i),I=1,3) 51 format (12x,A4,A6,I4,4x,3d8.3,2f6.2) c write (6,*) astring c write (6,*)at1,nres1,(m1(i),I=1,3) c write(6,111) AT1,nres1,(m1(i),I=1,3) if (nres1.ne.nfirst1) goto 50 c read coord 60 read(3,1200,end=1160) ASTRING if ((ASTRING(1:6).ne.'ATOM ').and.(ASTRING(1:6).ne.'HETATM')) . goto 60 READ(ASTRING,51) AT2,chain2,nres2,(m2(i),I=1,3) if (nres2.ne.nfirst2) goto 60 c write(6,111) (m2(i,k),I=1,3) goto 80 70 read(2,1200,end=1160) ASTRING if ((ASTRING(1:6).ne.'ATOM ').and.(ASTRING(1:6).ne.'HETATM')) . goto 70 read (ASTRING,51) AT1, chain1,nres1,(m1(i),I=1,3) 75 read(3,1200,end=1160) ASTRING if ((ASTRING(1:6).ne.'ATOM ').and.(ASTRING(1:6).ne.'HETATM')) . goto 75 read (ASTRING,51) AT2, chain2,nres2,(m2(i),I=1,3) C123456789012345678901234567890 CATOM 1 CB THR A 1 118.652 75.582 117.301 1.00 85.64 80 if (nres1.gt.nlast1) goto 1160 x=0. do 90 i=1,3 90 x=x+(m1(i)-m2(i))**2 100 d=sqrt(x) sum=sum+x n=n+1 if (d.gt.dmax) then dmax=d mres1=nres1 mres2=nres2 endif C110 write (6,111) at1,nres1,at2,nres2,d,x,sum C110 if (d.gt.thresh) write (6,111) at1,nres1,char(9),at2,nres2,char(9),d 110 if (d.gt.thresh) write (6,111) at1,chain1,nres1,char(9),at2,chain2,nres2,char(9),d C111 format (' ',2i5,16f5.1) C111 format (' ',2(a4,i3,a1),16f10.4) 111 format (' ',2(a4,a6,i4,a1),16f10.4) goto 70 1160 CLOSE(UNIT=2) write(6,*)'These ',n,' Atoms have RMS diff ',sqrt(sum/n) write (6,*) 'Max diff ',dmax,' between',mres1,mres2 END