PROGRAM splitCNS c Splits PDB file into protein, waters, metals, and ligands for PCD c Separate substrates (551-560) and sulfates (561-569) as well c Makes sure ILE has CD but not CD1 atom labels CHARACTER*76 line, l(6,6,4000) INTEGER n(6,6) DO i = 1,6 DO j = 1,6 n(i,j) = 0 endDO endDO c Handle files WRITE (6, 1000) ' Enter input file name:' 1000 FORMAT (a) READ (5, 1000) line OPEN (unit=1, file=line, form='FORMATTED', status='OLD') DO WHILE (.TRUE.) 5 READ (1, 1000, end=9) line IF (line(1:4) .NE. 'ATOM' .AND. line(1:6) .NE. 'HETATM') goto 5 IF (line(74:75) .EQ. 'C2') GOTO 5 IF (line(14:20) .EQ. 'CD1 ILE') line(16:16) = ' ' READ (line(55:60), 2001) occ 2001 FORMAT (f6.2) READ (line(23:26), 1001) nres 1001 FORMAT (i4) IF (nres .LT. 300) THEN line(74:76) = 'ALP' occ = 1.0 i = 1 ELSE IF (nres .LT. 540) THEN line(74:76) = 'BET' IF (nres .GE. 368 .AND. nres .LE. 370) THEN occ = 0.0 ELSE occ = 1.0 endIF i = 2 ELSE IF (nres .LT. 560) THEN line(74:76) = 'INH' occ = 1.0 i = 3 ELSE IF (nres .LT. 570) THEN line(74:76) = 'SUL' occ = 1.0 i = 4 ELSE IF (nres .LT. 601) THEN line(74:76) = 'FE ' occ = 1.0 i = 5 ELSE line(74:76) = 'WAT' line(14:21) = 'OH2 WAT ' occ = 1.0 i = 6 endIF c WRITE (line(55:60), 2001) occ IF (line(22:22) .EQ. 'A') THEN j = 1 line(73:73) = 'A' ELSE IF (line(22:22) .EQ. 'B') THEN j = 2 line(73:73) = 'B' ELSE IF (line(22:22) .EQ. 'C') THEN j = 3 line(73:73) = 'C' ELSE IF (line(22:22) .EQ. 'D') THEN j = 4 line(73:73) = 'D' ELSE IF (line(22:22) .EQ. 'E') THEN j = 5 line(73:73) = 'E' ELSE IF (line(22:22) .EQ. 'F') THEN j = 6 line(73:73) = 'F' ELSE IF (line(73:73) .EQ. 'A') THEN j = 1 ELSE IF (line(73:73) .EQ. 'B') THEN j = 2 ELSE IF (line(73:73) .EQ. 'C') THEN j = 3 ELSE IF (line(73:73) .EQ. 'D') THEN j = 4 ELSE IF (line(73:73) .EQ. 'E') THEN j = 5 ELSE IF (line(73:73) .EQ. 'F') THEN j = 6 ELSE goto 5 endIF line(22:22) = ' ' n(j,i) = n(j,i) + 1 WRITE (line(7:11), 1002) n(j,i) 1002 FORMAT (i5) l(j,i,n(j,i)) = line endDO 9 CLOSE (unit=1) WRITE (6, 1003) n 1003 FORMAT (6i8) c Write each file OPEN (unit=1, form='FORMATTED', status='UNKNOWN', file='protein.pdb') IF (n(1,1) .NE. 0) THEN !AALP DO m = 1, n(1,1) WRITE (1, 1000) l(1,1,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(1,2) .NE. 0) THEN !ABET DO m = 1, n(1,2) WRITE (1, 1000) l(1,2,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(2,1) .NE. 0) THEN !BALP DO m = 1, n(2,1) WRITE (1, 1000) l(2,1,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(2,2) .NE. 0) THEN !BBET DO m = 1, n(2,2) WRITE (1, 1000) l(2,2,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(3,1) .NE. 0) THEN !CALP DO m = 1, n(3,1) WRITE (1, 1000) l(3,1,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(3,2) .NE. 0) THEN !CBET DO m = 1, n(3,2) WRITE (1, 1000) l(3,2,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(4,1) .NE. 0) THEN !DALP DO m = 1, n(4,1) WRITE (1, 1000) l(4,1,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(4,2) .NE. 0) THEN !DBET DO m = 1, n(4,2) WRITE (1, 1000) l(4,2,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(5,1) .NE. 0) THEN !EALP DO m = 1, n(5,1) WRITE (1, 1000) l(5,1,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(5,2) .NE. 0) THEN !EBET DO m = 1, n(5,2) WRITE (1, 1000) l(5,2,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(6,1) .NE. 0) THEN !FALP DO m = 1, n(6,1) WRITE (1, 1000) l(6,1,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(6,2) .NE. 0) THEN !FBET DO m = 1, n(6,2) WRITE (1, 1000) l(6,2,m) endDO WRITE (1, 1000) 'TER' endIF WRITE (1, 1000) 'END' CLOSE (unit=1) OPEN (unit=1, form='FORMATTED', status='UNKNOWN', file='ligands.pdb') IF (n(1,3) .NE. 0) THEN !AINH DO m = 1, n(1,3) WRITE (1, 1000) l(1,3,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(1,4) .NE. 0) THEN !ASUL DO m = 1, n(1,4) WRITE (1, 1000) l(1,4,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(2,3) .NE. 0) THEN !BINH DO m = 1, n(2,3) WRITE (1, 1000) l(2,3,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(2,4) .NE. 0) THEN !BSUL DO m = 1, n(2,4) WRITE (1, 1000) l(2,4,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(3,3) .NE. 0) THEN !CINH DO m = 1, n(3,3) WRITE (1, 1000) l(3,3,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(3,4) .NE. 0) THEN !CSUL DO m = 1, n(3,4) WRITE (1, 1000) l(3,4,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(4,3) .NE. 0) THEN !DINH DO m = 1, n(4,3) WRITE (1, 1000) l(4,3,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(4,4) .NE. 0) THEN !DSUL DO m = 1, n(4,4) WRITE (1, 1000) l(4,4,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(5,3) .NE. 0) THEN !EINH DO m = 1, n(5,3) WRITE (1, 1000) l(5,3,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(5,4) .NE. 0) THEN !ESUL DO m = 1, n(5,4) WRITE (1, 1000) l(5,4,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(6,3) .NE. 0) THEN !FINH DO m = 1, n(6,3) WRITE (1, 1000) l(6,3,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(6,4) .NE. 0) THEN !FSUL DO m = 1, n(6,4) WRITE (1, 1000) l(6,4,m) endDO WRITE (1, 1000) 'TER' endIF WRITE (1, 1000) 'END' CLOSE (unit=1) OPEN (unit=1, form='FORMATTED', status='UNKNOWN', file='metals.pdb') IF (n(1,5) .NE. 0) THEN !AFE DO m = 1, n(1,5) WRITE (1, 1000) l(1,5,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(2,5) .NE. 0) THEN !BFE DO m = 1, n(2,5) WRITE (1, 1000) l(2,5,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(3,5) .NE. 0) THEN !CFE DO m = 1, n(3,5) WRITE (1, 1000) l(3,5,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(4,5) .NE. 0) THEN !DFE DO m = 1, n(4,5) WRITE (1, 1000) l(4,5,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(5,5) .NE. 0) THEN !EFE DO m = 1, n(5,5) WRITE (1, 1000) l(5,5,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(6,5) .NE. 0) THEN !FFE DO m = 1, n(6,5) WRITE (1, 1000) l(6,5,m) endDO WRITE (1, 1000) 'TER' endIF WRITE (1, 1000) 'END' CLOSE (unit=1) OPEN (unit=1, form='FORMATTED', status='UNKNOWN', file='waters.pdb') IF (n(1,6) .NE. 0) THEN !AWAT DO m = 1, n(1,6) WRITE (1, 1000) l(1,6,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(2,6) .NE. 0) THEN !BWAT DO m = 1, n(2,6) WRITE (1, 1000) l(2,6,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(3,6) .NE. 0) THEN !CWAT DO m = 1, n(3,6) WRITE (1, 1000) l(3,6,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(4,6) .NE. 0) THEN !DWAT DO m = 1, n(4,6) WRITE (1, 1000) l(4,6,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(5,6) .NE. 0) THEN !EWAT DO m = 1, n(5,6) WRITE (1, 1000) l(5,6,m) endDO WRITE (1, 1000) 'TER' endIF IF (n(6,6) .NE. 0) THEN !FWAT DO m = 1, n(6,6) WRITE (1, 1000) l(6,6,m) endDO WRITE (1, 1000) 'TER' endIF WRITE (1, 1000) 'END' CLOSE (unit=1) end