pdb2ms.f
来自「最经典的分子对结软件」· F 代码 · 共 145 行
F
145 行
PROGRAM PDB2MS************************************************ converts pdb files into ms format files (ACG)************************************************ reads unit 1 receptor pdb file* reads unit 2 receptor exclude pdb file (what should not be surfaced)* writes unit 3 ms input format INTEGER MSTYPE ! atom type for ms file INTEGER RESNUM(2) ! residue number data REAL * 8 COORD(3), TYPE CHARACTER * 80 CRAP, CRAP2, CRAP3, CRAP4 ! hold redundant data CHARACTER * 6 DATA !determines start of atom data CHARACTER * 80 MOLFILE, MSFILE ! filenames CHARACTER * 3 MOLTYPE(2) ! atom type data CHARACTER * 3 RESNAME(2) ! residue name data************************************************************* open pdb files and new ms file - units assigned by * controlling script ms.************************************************************ OPEN (UNIT=1,STATUS='OLD',FORM='FORMATTED') OPEN (UNIT=2,STATUS='OLD',FORM='FORMATTED') OPEN (UNIT=3,STATUS='UNKNOWN',FORM='FORMATTED')**************************************************** read in atom data until terminal data reached ** full pdb file first****************************************************2000 READ(1,'(A6)', END=3000) DATA IF (DATA(1:4) .EQ. 'ATOM' .OR. DATA .EQ. 'HETATM') THEN BACKSPACE(UNIT=1) READ (1,'(A13,A3,A1,A3,A2,I4,A4,3F8.3)') & CRAP, MOLTYPE(1), CRAP2, RESNAME(1), CRAP3, RESNUM(1), & CRAP4, COORD(1), COORD(2), COORD(3) ***************************************** determine ms type from mol type**************************************** IF (MOLTYPE(1)(1:1) .EQ. 'H') MSTYPE = 1 IF (MOLTYPE(1)(1:1) .EQ. 'C') MSTYPE = 2 IF (MOLTYPE(1)(1:1) .EQ. 'N') MSTYPE = 3 IF (MOLTYPE(1)(1:1) .EQ. 'O') MSTYPE = 4 IF (MOLTYPE(1)(1:1) .EQ. 'F') MSTYPE = 5 IF (MOLTYPE(1)(1:1) .EQ. 'P') MSTYPE = 6 IF (MOLTYPE(1)(1:1) .EQ. 'S') MSTYPE = 7 IF (MOLTYPE(1)(1:2) .EQ. 'Cl') MSTYPE = 8 IF (MOLTYPE(1)(1:2) .EQ. 'Br') MSTYPE = 9 IF (MOLTYPE(1)(1:1) .EQ. 'I') MSTYPE = 10 ELSE ***************************************** read next line if no atom data found**************************************** GOTO 2000 END IF***************************** read exclusion data****************************4000 READ(2,'(A6)',END=5000) DATA IF (DATA(1:4) .EQ. 'ATOM' .OR. DATA .EQ. 'HETATM') THEN BACKSPACE(UNIT=2) READ (2,'(A13,A3,A1,A3,A2,I4)',END=3000) & CRAP, MOLTYPE(2), CRAP2, RESNAME(2), CRAP3, RESNUM(2) ELSE GOTO 4000 END IF********************************************************* write data to ms file in the required format****************************************************************************************************************** exclude from surface but include in collision check*********************************************************5000 IF ( MOLTYPE(1) .EQ. MOLTYPE(2) .AND. RESNUM(1) .EQ. & RESNUM(2) .AND. RESNAME(1) .EQ. RESNAME(2)) THEN WRITE(3,'(3F10.5,3I5)') COORD(1), COORD(2), COORD(3), & MSTYPE, 1, 1********************************************************** include in calculation and rewind exclusion file** rewind requires until match made********************************************************* ELSE BACKSPACE(UNIT=2) WRITE(3,'(3F10.5,3I5)') COORD(1), COORD(2), COORD(3), & MSTYPE, 2, 1 END IF GOTO 2000 3000 CLOSE (UNIT=1) CLOSE (UNIT=2) CLOSE (UNIT=3) END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?