PROGRAM near3 c List waters in interface CHARACTER*66 line(4000) INTEGER nres(4000) LOGICAL*1 flag(4000)/4000*.FALSE./ REAL x(3), z(3) WRITE (6, 1000) 'Enter distance criterion:' READ (5, 999) crit 999 FORMAT (4f10.4) crit = crit*crit OPEN (unit=1, file='PCD.pdb.A', status='OLD', readonly) DO n = 1,4000 READ (1, 1000, end=9) line(n) 1000 FORMAT (a, f8.3) READ (line(n)(23:26), 1001) nres(n) 1001 FORMAT (i4) IF (nres(n) .LE. 200) j200 = n IF (nres(n) .LE. 600) j600 = n endDO 9 CLOSE (unit=1) num = n-1 c Mark residues in interface DO i = 1,j200 READ (line(i)(31:54), 1002) x 1002 FORMAT (3f8.3) DO j = j200+1,j600 READ (line(j)(31:54), 1002) z dd = (x(1)-z(1))**2 + (x(2)-z(2))**2 + (x(3)-z(3))**2 IF (dd .LE. crit) THEN DO ii = MAX(1,i-30),MIN(j200,i+30) IF (nres(ii) .EQ. nres(i)) flag(ii) = .TRUE. endDO DO jj = MAX(j200+1,j-30),MIN(j600,j+30) IF (nres(jj) .EQ. nres(j)) flag(jj) = .TRUE. endDO endIF endDO endDO c Mark waters that H bond to residues in interface crit = 3.6**2 DO i = j600+1,num READ (line(i)(31:54), 1002) x DO j = 1,j600 IF (flag(j)) THEN READ (line(j)(31:54), 1002) z dd = (x(1)-z(1))**2 + (x(2)-z(2))**2 + (x(3)-z(3))**2 IF (dd .LE. crit) flag(i) = .TRUE. endIF endDO endDO c List residues in interface DO i = 1,j600 IF (flag(i) .AND. line(i)(14:15) .EQ. 'CA') WRITE (6, 1000) line(i) endDO DO i = j600+1,num IF (flag(i)) WRITE (6, 1000) line(i) endDO end