PROGRAM nearby c Reads list of peaks (or holes) and tells which atoms are near c Only sees if near potential H-bond partner unless crit<0 PARAMETER NDIM = 30000 REAL x(NDIM), y(NDIM), z(NDIM), cell(6) CHARACTER*15 label(NDIM) CHARACTER*40 filename INTEGER ipoint(NDIM) LOGICAL flag c Read distance criterion WRITE (6, 1000) 'Enter distance criterion:' READ (5, 1001) crit WRITE (6, 1001) crit flag = crit.GT.0 crit = crit*crit c Read coordinates WRITE (6, 1000) 'Enter filename for Diamond file:' 1000 FORMAT (a) READ (5, 1000) filename WRITE (6, 1000) filename OPEN (unit=1, form='FORMATTED', status='OLD', file=filename, 1 readonly) READ (1, 2001) cell 2001 FORMAT (6F10.3) sinb = SIND(cell(5)) cosb = COSD(cell(5)) WRITE (6, 2001) cell READ (1, 1001) READ (1, 1001) num = 1 nn = 1 DO WHILE (.TRUE.) 1 READ (1, 1001, end=99, err=1) x(nn), y(nn), z(nn), b, 1 itype, mres, n, wt, label(nn) 1001 FORMAT (4f10.5, 3i5, f9.5, a) IF (flag) THEN IF (label(nn)(12:13) .EQ. 'FE' .OR. 1 label(nn)(12:12) .EQ. 'O' .OR. 2 label(nn)(12:12) .EQ. 'N') THEN ipoint(num) = nn num = num + 1 endIF ELSE ipoint(num) = nn num = num + 1 endIF c IF (label(nn) .EQ. ' ASN 369A N ') WRITE (6, 6666) nn, label(nn) nn = nn + 1 endDO 99 num = num-1 nn = nn-1 CLOSE (unit=1) c Loop through list and find atoms near by WRITE (6, 1000) 'Enter filename for input list:' READ (5, 1000) filename WRITE (6, 1000) filename OPEN (unit=2, form='FORMATTED', status='OLD', file=filename, 1 readonly) WRITE (6, 1000) 'Enter filename for output list:' READ (5, 1000) filename WRITE (6, 1000) filename OPEN (unit=3, form='FORMATTED', file=filename, status='UNKNOWN') DO WHILE (.TRUE.) READ (2, 1002, end=999) peak, xp, yp, zp 1002 FORMAT (f15.4, 15x, 3f10.3) dmin = 1.e10 DO n = 1, num xx = x(ipoint(n)) - xp yy = y(ipoint(n)) - yp zz = z(ipoint(n)) - zp zz = zz + xx*cosb xx = xx*sinb d = xx*xx + yy*yy + zz*zz IF (d .LT. dmin) THEN dmin = d ijk = ipoint(n) endIF endDO IF (dmin .LT. ABS(crit)) THEN ! have nearest atom c Now check to insure no other atom is nearby if looking for waters IF (flag) THEN DO n = 1, nn xx = x(ipoint(n)) - xp yy = y(ipoint(n)) - yp zz = z(ipoint(n)) - zp zz = zz + xx*cosb xx = xx*sinb d = xx*xx + yy*yy + zz*zz IF (d .LT. 10. .AND. ipoint(n) .NE. ijk) GOTO 444 endDO WRITE (3, 1003) peak, label(ijk), xp, yp, zp, SQRT(dmin) 1003 FORMAT (f15.4, a15, 4f10.3) 444 continue c WRITE (6, 6666) ijk, label(ijk), ipoint(n), label(ipoint(n)) c6666 FORMAT (i6, a, 4x, i6, a) c WRITE (6, 1003) peak, label(ipoint(n)), xp, yp, zp, SQRT(d) ELSE WRITE (3, 1003) peak, label(ijk), xp, yp, zp, SQRT(dmin) endIF endIF endDO 999 CLOSE (unit=2) CLOSE (unit=3) end