PROGRAM near4 c List waters in interface CHARACTER*66 line(8000) INTEGER nres(8000) LOGICAL*1 flag(8000)/8000*.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.interface', status='OLD', readonly) DO n = 1,8000 READ (1, 1000, end=9) line(n) 1000 FORMAT (a, f8.3) READ (line(n)(23:26), 1001) nres(n) 1001 FORMAT (i4) IF (line(n)(18:20) .NE. 'WAT') THEN IF (line(n)(22:22) .EQ. 'A') THEN ja = n ELSE jb = n endIF ELSE IF (line(n)(22:22) .EQ. 'A') THEN jwa = n ELSE jwb = n endIF endIF endDO 9 CLOSE (unit=1) TYPE *, ja, jwa, jb, jwb c Mark residues in interface DO i = 1,ja READ (line(i)(31:54), 1002) x 1002 FORMAT (3f8.3) DO j = jwa+1,jb 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(ja,i+30) IF (nres(ii) .EQ. nres(i)) flag(ii) = .TRUE. endDO DO jj = MAX(jwa+1,j-30),MIN(jb,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 = ja+1,jwa READ (line(i)(31:54), 1002) x DO j = 1,ja 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) THEN flag(i) = .TRUE. GOTO 11 endIF endIF endDO DO j = jwa+1,jb 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) THEN flag(i) = .TRUE. GOTO 11 endIF endIF endDO 11 continue endDO DO i = jb+1,jwb READ (line(i)(31:54), 1002) x DO j = 1,ja 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) THEN flag(i) = .TRUE. GOTO 12 endIF endIF endDO DO j = jwa+1,jb 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) THEN flag(i) = .TRUE. GOTO 12 endIF endIF endDO 12 continue endDO c List residues in interface DO i = 1,ja IF (flag(i) .AND. line(i)(14:15) .EQ. 'CA') WRITE (6, 1000) line(i) endDO DO i = jwa+1,jb IF (flag(i) .AND. line(i)(14:15) .EQ. 'CA') WRITE (6, 1000) line(i) endDO DO i = ja+1,jwa IF (flag(i)) WRITE (6, 1000) line(i) endDO DO i = jb+1,jwb IF (flag(i)) WRITE (6, 1000) line(i) endDO end