C PROTEIN DATA BANK SOURCE CODE PHIPSI PHIPSI41 C AUTHOR. L.ANDREWS,G.WILLIAMS,F.BERNSTEIN PHIPSI42 C ENTRY DATE. 5/78 SUPPORTED PHIPSI43 C LAST REVISION. 9/79 PHIPSI44 C PURPOSE. MAIN-CHAIN TORSION ANGLES PHIPSI45 C LANGUAGE. FORTRAN IV PHIPSI46 C PHIPSI47 C PHIPSI48 C PHIPSI49 C PHIPSI10 PROGRAM PHIPSI(INPUT,OUTPUT,TAPE1,TAPE2,TAPE3,TAPE5=INPUT,TAPE6=OUPHIPSI 3 1TPUT) PHIPSI 4 C PHIPSI 5 C PHIPSI 6 C PROTEIN DATA BANK PROGRAM PHIPSI, TO CALCULATE THE MAIN-CHAIN PHIPSI 7 C TORSION ANGLES PHI,PSI AND OMEGA FROM A PROTEIN DATA BANK ENTRY. PHIPSI 8 C PHIPSI 9 C ORIGINALLY PROGRAMMED BY LAWRENCE C. ANDREWS PHIPSI10 C IN THE LABORATORY OF WARNER E.LOVE PHIPSI11 C THOMAS C. JENKINS DEPT. OF BIOPHYSICS PHIPSI12 C THE JOHNS HOPKINS UNIVERSITY PHIPSI13 C HOMEWOOD PHIPSI14 C BALTIMORE, MD 21218 PHIPSI15 C WORK FUNDED BY NATIONAL INSTITUTES OF HEALTH GRANTS-- PHIPSI16 C AM02528 AND AM16446 PHIPSI17 C PHIPSI18 C MODIFIED BY GRAHEME J. B. WILLIAMS AND FRANCES C. BERNSTEIN PHIPSI19 C DEPT. OF CHEMISTRY, BROOKHAVEN NATIONAL LABORATORY, PHIPSI20 C UPTON, NEW YORK 11973. PHIPSI21 C WORK FUNDED BY THE NATIONAL SCIENCE FOUNDATION UNDER PHIPSI22 C GRANT PCM77-16811 PHIPSI23 C PHIPSI24 C PHIPSI25 C A. PURPOSE PHIPSI26 C PHIPSI27 C THIS PROGRAM IS DESIGNED TO PRODUCE A TABLE OF THE MAIN-CHAIN PHIPSI28 C TORSION ANGLES OF A PROTEIN. THE DESIGNATION FOLLOWS IUPAC-IUB PHIPSI29 C RULES (J.MOL.BIOL.,52,1-17(1970)). THE ANGLES TABULATED ARE PHI, PHIPSI30 C PSI AND OMEGA. PHIPSI31 C PHIPSI32 C PHIPSI33 C + + + PHIPSI34 C + + + PHIPSI35 C RESIDUE 1 + RESIDUE 2 + RESIDUE 3 + PHIPSI36 C + + + PHIPSI37 C + + + PHIPSI38 C N-----CA-----C-----N-----CA-----C-----N-----CA-----C-----N-----CA-PHIPSI39 C P P O P P O P P O P PHIPSI40 C H S M H S M H S M H PHIPSI41 C I I E I I 5 I I E I PHIPSI42 C 1 1 G 2 2 G 3 3 G 4 PHIPSI43 C A A A PHIPSI44 C 1-2 2-3 3-4 PHIPSI45 C PHIPSI46 C PHIPSI47 C THE PROGRAM WILL PROCESS SUCCESSIVE DATA ENTRIES WHETHER OR NOT PHIPSI48 C THEY ARE SEPARATED BY ENDS-OF-FILE. FOR EACH DATA ENTRY THREE PHIPSI49 C INPUT PARAMETER CARDS MUST BE SUPPLIED (SEE BELOW). THE PROGRAM PHIPSI50 C WILL STOP AT A DOUBLE END-OF-FILE ON THE DATA ENTRY MEDIUM OR WHENPHIPSI51 C THERE ARE NO MORE INPUT PARAMETER CARDS. PHIPSI52 C PHIPSI53 C PHIPSI54 C B. INPUT/OUTPUT FILES PHIPSI55 C PHIPSI56 C 1 COORDINATE INPUT FILE PHIPSI57 C 2 TEMPORARY FILE FOR RE-READING RECORDS PHIPSI58 C 3 FILE WITH PHI, PSI, OMEGA FOR INPUT TO OTHER PROGRAMS PHIPSI59 C 5 CARD READER PHIPSI60 C 6 PRINTER PHIPSI61 C PHIPSI62 C C. INPUT PARAMETERS PHIPSI63 C PHIPSI64 C (1) READ FROM CARDS PHIPSI65 C CARD 1 COLS 1-80 TITLE USED AS A HEADER PHIPSI66 C CARD 2 COLS 1- 5 IPPRNG(1) TORSION ANGLES ARE CALCULATED PHIPSI67 C COLS 6-10 IPPRNG(2) FOR RESIDUES WITH SEQUENCE PHIPSI68 C NUMBERS LIMITED BY IPPRNG(1) PHIPSI69 C AND IPPRNG(2) PHIPSI70 C IF IPPRNG(1) IS NOT SPECIFIED PHIPSI71 C (I.E. BLANK) A VALUE OF ZERO PHIPSI72 C WILL BE USED. IF IPPRNG(2) IS PHIPSI73 C NOT SPECIFIED (I.E. BLANK OR PHIPSI74 C ZERO) 2000 WILL BE USED. PHIPSI75 C CARD 3 COLS 1-80 FMT1 FORMAT SPECIFICATION USED TO READ PHIPSI76 C THE ATOMIC COORDINATE RECORDS. IFPHIPSI77 C FIRST FOUR CHARACTERS ARE BLANK PHIPSI78 C THE DEFAULT SPECIFICATION IS USED PHIPSI79 C (12X,A4,1X,A3,1X,A1,F4.0,A1,3X,3F8.3)PHIPSI80 C PHIPSI81 C (2) READ FROM COORDINATE FILE PHIPSI82 C PHIPSI83 C A STANDARD PROTEIN DATA BANK ENTRY FILE IS ASSUMED. EIGHT ITEMS PHIPSI84 C ARE EXPECTED FOR EACH ATOMIC COORDINATE RECORD. THESE ARE- PHIPSI85 C ATOM NAME, RESIDUE NAME, CHAIN INDICATOR, RESIDUE NUMBER, PHIPSI86 C INSERTION CODE AND X,Y,Z IN ORTHOGONAL ANGSTROMS. OTHER STYLE PHIPSI87 C INPUT FILES MAY BE ACCOMODATED BY JUDICIOUS CHANGE OF THE FORMAT PHIPSI88 C STATEMENT USED TO READ THE ATOMIC COORDINATES. THE ORDER OF ATOMSPHIPSI89 C ON THE INPUT FILE IS CRUCIAL. ALL N, CA AND C ATOMS MUST OCCUR PHIPSI90 C IN THAT ORDER. PHIPSI91 C PHIPSI92 C D. OUTPUT PHIPSI93 C PHIPSI94 C ON FILE NUMBER 6 A TABULAR LISTING OF THE PHI,PSI AND OMEGA PHIPSI95 C ANGLES IS PRODUCED. THIS TABULATION LISTS 50 RESIDUES PER PAGE INPHIPSI96 C TWO COLUMNS. THIS FILE IS TERMINATED WITH AN END-OF-FILE. PHIPSI97 C IF A TORSION ANGLE IS UNDEFINED (E.G. AT A CHAIN TERMINUS) OR PHIPSI98 C IF THE BOND DISTANCES ARE TOO POOR TO ALLOW REASONABLE PHIPSI99 C CONNECTIVITY (LESS THAN 0.7 ANGSTROMS OR GREATER THAN 3.0 PHIPS100 C ANGSTROMS) A VALUE OF 999 IS PRINTED FOR THE TORSION ANGLE. PHIPS101 C PHIPS102 C ON FILE NUMBER 3 THE PHI, PSI AND OMEGA ANGLES ARE LISTED WITH PHIPS103 C IDENTIFICATION INFORMATION. FOR A STANDARD DATA BANK ENTRY PHIPS104 C (I.E. WITH A *HEADER* RECORD) THERE ARE THREE LINES OF PHIPS105 C IDENTIFYING INFORMATION AT THE BEGINNING OF THIS FILE. IF A PHIPS106 C *HEADER* RECORD IS NOT PRESENT THERE WILL BE TWO SUCH LINES. PHIPS107 C THIS FILE IS SUITABLE TO USE AS INPUT TO OTHER PROGRAMS WHICH PHIPS108 C WILL BE MADE AVAILABLE BY THE DATA BANK IN THE FUTURE. PHIPS109 C THE QUANTITIES WRITTEN ARE PHIPS110 C RESIDUE NAME, CHAIN INDICATOR, RESIDUE NUMBER, INSERTION CODE, PHIPS111 C PHI, PSI, OMEGA PHIPS112 C THE FORMAT IS PHIPS113 C (1X,A3,1X,A1,1X,I4,A1,1X,3I5) PHIPS114 C FOLLOWING THE LAST RESIDUE A RECORD IS WRITTEN WITH RESIDUE NAME PHIPS115 C END PHIPS116 C THIS FILE IS TERMINATED WITH AN END-OF-FILE. PHIPS117 C PHIPS118 C E. FUTURE IMPROVEMENTS PHIPS119 C PHIPS120 C IF MAJOR CHANGES ARE MADE IT WOULD BE WISE TO ADD A ROUTINE TO PHIPS121 C OBTAIN A RESIDUE IN ONE UNIT. EACH ATOM COULD THEN BE PHIPS122 C RETURNED TO THE MAINLINE AS NEEDED. THIS WOULD ALLOW THE PHIPS123 C POSSIBILITY OF HANDLING NON-STANDARD ATOM ORDERING AND WOULD PHIPS124 C SIMPLIFY THE CODE. THE PROGRAM CURRENTLY SEARCHES FOR PHIPS125 C N,CA,C,N,CA,C,... IN THIS ORDER. IF AN ATOM IS MISSING, A FAKE PHIPS126 C ATOM IS GENERATED WITH BAD COORDINATES. THE CODE WILL THEN PHIPS127 C PRODUCE 999 FOR ANY TORSION ANGLES INVOLVING THAT ATOM. THUS FOR PHIPS128 C A CA-STRUCTURE ALL TORSION ANGLES WILL BE 999. IF A MAIN-CHAIN PHIPS129 C ATOM IS DISORDERED (I.E. THE *ALTERNATE LOCATION INDICATOR* IS PHIPS130 C SET AND THE ATOM OCCURS MORE THAN ONCE IN THE COORDINATE LIST) PHIPS131 C THE PROGRAM WILL FIND SUCCESSIVE ATOMS OF THE SAME NAME AND PHIPS132 C GENERATE FAKE ATOMS INBETWEEN. IN THIS CASE THE RESIDUE(S) PHIPS133 C INVOLVED WILL BE LISTED MORE THAN ONCE AND TORSION ANGLES OF 999 PHIPS134 C WILL BE PRODUCED. IF ONE DISCARDS SELECTED DUPLICATE ATOMS, IT PHIPS135 C IS POSSIBLE TO GENERATE VALID TORSION ANGLES. AS OF APRIL 1978 PHIPS136 C ONLY TWO ENTRIES (1CAB,1CAC) HAVE DISORDERED MAIN-CHAIN ATOMS. PHIPS137 C PHIPS138 C F. MACHINE DEPENDENCIES PHIPSI11 C PHIPSI12 C DATE AND TIME ARE CDC ROUTINES TO RETURN 10 CHARACTERS IN ONE WORDPHIPSI13 C WHICH CAN THEN BE PRINTED. PHIPSI14 C PHIPSI15 C THIS PROGRAM MUST HANDLE CHARACTERS STORED IN WORDS. AN PHIPSI16 C ATTEMPT WAS MADE TO HAVE A LIMIT OF FOUR CHARACTERS PER WORD. PHIPSI17 C TYPICALLY A RECORD IS READ IN 20A4 FORMAT AND IDENTIFIED. THEN PHIPSI18 C IT IS ENCODED INTO A LINE OF 8A10 FORMAT THAT CAN THEN BE PHIPSI19 C DECODED USING THE APPROPRIATE FORMAT. THE ARRAY *LINE* IS ALWAYS PHIPSI10 C USED FOR THIS PURPOSE. FOR COMPUTERS WITH ENCODE/DECODE PHIPSI11 C CAPABILITIES ONLY THE DIMENSION OF *LINE* AND A FORMAT STATEMENT PHIPSI12 C NEED BE CHANGED. FOR A COMPUTER WITHOUT ENCODE/DECODE IT IS PHIPSI13 C NECESSARY TO REMOVE THE USE OF THIS FEATURE. IN THAT CASE PHIPSI14 C THE LINE CAN BE WRITTEN ON A SCRATCH FILE (TAPE2) AND REREAD. PHIPSI15 C THE CODE TO DO THIS HAS BEEN TESTED AND IS ALWAYS PRESENT AS PHIPSI16 C COMMENT CARDS ALONG WITH THE ENCODE/DECODE. PHIPSI17 C PHIPSI18 C PHIPS139 C THE PROTEIN DATA BANK PHIPS140 C DEPT. OF CHEMISTRY PHIPS141 C BROOKHAVEN NATIONAL LABORATORY PHIPS142 C UPTON, N.Y. 11973 PHIPS143 C PHIPS144 C PHIPSI19 C CORRECTION. REPLACE USE OF DECODE BY ENCODE AND SUBSEQUENT DECODE.PHIPSI20 C MAKE ENCODE/DECODE THE DEFAULT PROCEDURE RATHER THAN WRITE/READ PHIPSI21 C OF TAPE2. 8-SEP-78. PHIPSI22 C PHIPSI23 C PHIPSI21 C CORRECTION. MAKE SURE THAT AN ANGLE OF -180 IS NEVER PRODUCED. PHIPSI22 C CHANGE IT TO 180. ALSO ACCEPT HETATM RECORDS AS WELL AS ATOM PHIPSI23 C RECORDS. 10-NOV-78. PHIPSI24 C PHIPSI31 C CORRECTION. INSERT MISSING WRITE STATEMENT THAT WAS DELETED PHIPSI32 C BY MISTAKE. COMPND, AUTHOR AND JRNL RECORDS SHOULD BE WRITTEN PHIPSI33 C ON OUTPUT FILE. 15-FEB-79. PHIPSI34 C PHIPSI11 C CORRECTION. INSERT COMMENT CARDS AT BEGINNING FOR USE BY PHIPSI12 C DIRECTORY PROGRAM. 20-SEP-79. PHIPSI13 C PHIPSI14 DIMENSION ATOM(8,4), PHPS(3), IPPRNG(2), TITLE(20) PHIPS145 DIMENSION FMT(20), FMT1(20) PHIPS146 COMMON /IODEV/ INDAT,IOUT,IREAD,ITEMP,IANGS PHIPS147 DATA FMT/4H(12X,4H,A4,,4H1X,A,4H3,1X,4H,A1,,4HF4.0,4H,A1,,4H3X,3,4PHIPS148 1HF8.3,4H) ,10*4H / PHIPS149 DATA BLANK/4H /,IFIN/0/ PHIPS150 DATA IZERO/0/,IENDF/0/ PHIPS151 C PHIPS152 C ASSOCIATE UNIT 1 WITH THE ATOM-COORDINATE INPUT FILE PHIPS153 C PHIPS154 C ASSOCIATE UNIT 6 WITH THE PHI/PSI/OMEGA LISTING FILE PHIPS155 C PHIPS156 C ASSOCIATE UNIT 5 WITH THE INSTRUCTION INPUT FILE PHIPS157 C PHIPS158 C USE UNIT 2 AS A RE-READ DEVICE - BECAUSE WE CANNOT DEPEND ON THEREPHIPS159 C BEING A DECODE FACILITY AVAILABLE ON ALL SYSTEMS. PHIPS160 C PHIPS161 C UNIT 3 WILL HAVE PHI, PSI, AND OMEGA FOR USE AS INPUT TO PHIPS162 C OTHER PROGRAMS. PHIPS163 C PHIPS164 DATA INDAT/1/,IOUT/6/,IREAD/5/,ITEMP/2/,IANGS/3/ PHIPS165 10 WRITE (IOUT,160) PHIPS166 READ (IREAD,170) TITLE PHIPS167 C PHIPS168 C THE STATEMENT BELOW WILL TRANSFER CONTROL TO STATEMENT 150 IF AN PHIPS169 C END-OF-FILE WAS ENCOUNTERED ON THE INPUT DEVICE. IF NO END-OF- PHIPS170 C FILE IS SENSED CONTROL IS ASSUMED BY STATEMENT 20. PHIPS171 C TESTING FOR AN END-OF-FILE CLEARS THE END-OF-FILE INDICATOR IF PHIPS172 C IT IS SET. PHIPS173 C PHIPS174 IF (EOF(IREAD)) 150,20 PHIPS175 C PHIPS176 20 WRITE (IOUT,180) TITLE PHIPS177 WRITE (IANGS,180) TITLE PHIPS178 READ (IREAD,190) IPPRNG(1),IPPRNG(2) PHIPS179 C PHIPS180 C ZERO IS ADDED TO IPPRNG(1) AND IPPRNG(2) TO FORCE A NEGATIVE ZERO PHIPS181 C TO BE A POSITIVE ZERO. THIS IS NECESSARY FOR CDC EQUIPMENT AND PHIPS182 C (PRESUMABLY) HARMLESS ON OTHER COMPUTERS. PHIPS183 C PHIPS184 IPPRNG(1)=IPPRNG(1)+IZERO PHIPS185 IPPRNG(2)=IPPRNG(2)+IZERO PHIPS186 IF (IPPRNG(2).EQ.0) IPPRNG(2)=2000 PHIPS187 WRITE (IOUT,200) IPPRNG(1),IPPRNG(2) PHIPS188 WRITE (IANGS,200) IPPRNG(1),IPPRNG(2) PHIPS189 READ (IREAD,170) FMT1 PHIPS190 IF (IDEN(BLANK,FMT1,1).EQ.0) GO TO 30 PHIPS191 CALL SHIFT (FMT1,FMT,20) PHIPS192 C PHIPS193 C GET TIME AND DATE. NOTE THAT THIS IS MACHINE SPECIFIC AND PHIPS194 C ASSUMES 10 CHARACTERS STORED AS THE RESULT. PHIPS195 C PHIPS196 30 CALL TIME (ITIM) PHIPS197 CALL DATE (IDAT) PHIPS198 WRITE (IOUT,210) ITIM,IDAT PHIPS199 C PHIPS200 C PRIME THE ROTATING ATOM ARRAY WITH THE FIRST THREE ATOMS. PHIPS201 C PHIPS202 40 CALL NXTATM (ATOM(1,1),FMT,JCODE) PHIPS203 IF (JCODE.EQ.0) GO TO 50 PHIPS204 IF (JCODE.NE.3) GO TO 110 PHIPS205 IF (IENDF.EQ.0) GO TO 150 PHIPS206 IENDF=0 PHIPS207 GO TO 40 PHIPS208 50 CALL NXTATM (ATOM(1,2),FMT,JCODE) PHIPS209 IF (JCODE.NE.0) GO TO 110 PHIPS210 CALL NXTATM (ATOM(1,3),FMT,JCODE) PHIPS211 IF (JCODE.NE.0) GO TO 110 PHIPS212 C PHIPS213 C INITIALISE THE ANGLE ARRAY AND THE POINTERS FOR THE FIRST PHIPS214 C CALCULATION. PHIPS215 C PHIPS216 DO 60 I=1,3 PHIPS217 60 PHPS(I)=999.0 PHIPS218 IPH1=2 PHIPS219 IPH2=3 PHIPS220 IPH3=1 PHIPS221 IAT1=1 PHIPS222 IAT2=2 PHIPS223 IAT3=3 PHIPS224 IAT4=4 PHIPS225 C PHIPS226 C .....THIS IS THE START OF THE MAIN LOOP PHIPS227 C PHIPS228 C BEGIN BY GETTING THE NEXT ATOM AND PLACING IT INTO THE EMPTY PHIPS229 C LOCATION (FIRST TIME ONLY) OR OVERWRITING THE VALUES FOR THE ATOM PHIPS230 C WE JUST PASSED AS WE MOVED DOWN THE CHAIN. PHIPS231 C PHIPS232 70 CALL NXTATM (ATOM(1,IAT4),FMT,JCODE) PHIPS233 IF (JCODE.NE.0) GO TO 100 PHIPS234 C PHIPS235 C THIS IS THE CALL TO THE TORSION ANGLE CALCULATING ROUTINE. PHIPS236 C PHIPS237 PHPS(IPH1)=TORSIN(ATOM(6,IAT1),ATOM(6,IAT2),ATOM(6,IAT3),ATOM(6,IAPHIPS238 1T4)) PHIPS239 C PHIPS240 C IPH1 EQUALS 3 IF BOTH PHI AND PSI FOR RESIDUE I AS WELL AS OMEGA PHIPS241 C FOR THE PEPTIDE BOND BETWEEN I AND I+1 HAVE BEEN CALCULATED. PHIPS242 C PHIPS243 IF (IPH1.LT.3) GO TO 90 PHIPS244 C PHIPS245 C IF THIS RESIDUE IS IN THE REQUESTED SERIAL NUMBER RANGE COLLECT PHIPS246 C THE CALCULATED ANGLES AND SET DUMMY VALUES FOR THE NEXT SET. PHIPS247 C PHIPS248 IF (IFIX(.1+ATOM(4,IAT1)).GT.IPPRNG(2)) GO TO 100 PHIPS249 IF (IFIX(.1+ATOM(4,IAT1)).LT.IPPRNG(1)) GO TO 90 PHIPS250 CALL COLLPP (PHPS,IFIN,ATOM(1,IAT1)) PHIPS251 DO 80 I=1,3 PHIPS252 80 PHPS(I)=999.0 PHIPS253 C PHIPS254 C ROTATE THE POINTERS FOR USE IN THE NEXT CALCULATION PHIPS255 C PHIPS256 90 ITMP=IPH1 PHIPS257 IPH1=IPH2 PHIPS258 IPH2=IPH3 PHIPS259 IPH3=ITMP PHIPS260 ITMP=IAT1 PHIPS261 IAT1=IAT2 PHIPS262 IAT2=IAT3 PHIPS263 IAT3=IAT4 PHIPS264 IAT4=ITMP PHIPS265 GO TO 70 PHIPS266 C PHIPS267 C .....END OF THE MAIN LOOP PHIPS268 C PHIPS269 C PRINT WHAT WE HAVE TO THIS TIME IF A TER OR END RECORD WAS MET. PHIPS270 C PHIPS271 100 IFIN=1 PHIPS272 CALL COLLPP (PHPS,IFIN,ATOM(1,3)) PHIPS273 IFIN=0 PHIPS274 GO TO 120 PHIPS275 110 WRITE (IOUT,220) PHIPS276 C PHIPS277 C IF IT WAS A TER RECORD KEEP LOOKING FOR AN END-OF-ENTRY FLAG PHIPS278 C PHIPS279 120 IF (JCODE.EQ.2) GO TO 130 PHIPS280 IF (JCODE.EQ.3) GO TO 140 PHIPS281 WRITE (IOUT,230) PHIPS282 IFIN=0 PHIPS283 GO TO 40 PHIPS284 130 WRITE (IOUT,240) PHIPS285 IENDF=1 PHIPS286 140 WRITE (IANGS,250) PHIPS287 END FILE IANGS PHIPS288 END FILE IOUT PHIPS289 GO TO 10 PHIPS290 150 WRITE (IOUT,260) PHIPS291 STOP 777 PHIPS292 C PHIPS293 C PHIPS294 160 FORMAT (43H1OUTPUT OF PROTEIN DATA BANK PROGRAM PHIPSI/) PHIPS295 170 FORMAT (20A4) PHIPS296 180 FORMAT (1X,20A4) PHIPS297 190 FORMAT (16I5) PHIPS298 200 FORMAT (28H TORSION ANGLES FOR RESIDUES,I5,8H THROUGH,I5) PHIPS299 210 FORMAT (1X,8H RUN AT ,A10,4H ON ,A10) PHIPS300 220 FORMAT (////25H LESS THAN 4 USABLE ATOMS) PHIPS301 230 FORMAT (////34H $$ A TER RECORD HAS BEEN FOUND $$) PHIPS302 240 FORMAT (27H0 END-OF-ENTRY RECORD FOUND) PHIPS303 250 FORMAT (4H END) PHIPS304 260 FORMAT (40H0END OF PROTEIN DATA BANK PROGRAM PHIPSI) PHIPS305 END PHIPS306 SUBROUTINE NXTATM (ATLST,FMT,JCODE) PHIPS307 C PHIPS308 C NXTATM WILL RETURN THE NEXT ACCEPTABLE ATOM TO THE CALLING ROUTINEPHIPS309 C .... JCODE = 0 FOR GOOD ATOM OR FAKE PHIPS310 C . = 1 FOR TER CODE PHIPS311 C . = 2 FOR END CODE PHIPS312 C . = 3 FOR END-OF-FILE SENSED PHIPS313 C PHIPS314 C .....THE EIGHT ELEMENTS OF ATLST WILL BE-- PHIPS315 C . ATOM NAME (LITERAL) PHIPS316 C . RESIDUE NAME (LITERAL) PHIPS317 C . CHAIN INDICATOR (LITERAL) PHIPS318 C . RESIDUE NUMBER ( FLOATING POINT ) PHIPS319 C . RESIDUE INSERTION CODE (LITERAL) PHIPS320 C . X,Y,Z (FLOATING POINT) PHIPS321 C PHIPS322 DIMENSION ATLST(8), FMT(20), ATNAM(3) PHIPS323 DIMENSION REC(20), ADATE(3) PHIPS324 DIMENSION SAVAT(8), PREV(8) PHIPS325 DIMENSION LINE (8) PHIPSI24 COMMON /IODEV/ INDAT,IOUT,IREAD,ITEMP,IANGS PHIPS326 DATA ATNAM/4H N ,4H CA ,4H C / PHIPS327 DATA NATNAM/1/ PHIPS328 DATA ATOM/4HATOM/,HEAD/4HHEAD/,COMP/4HCOMP/,TER/4HTER / PHIPS329 DATA HETA/4HHETA/ PHIPSI25 DATA END/4HEND /,AUTH/4HAUTH/,AJRNL/4HJRNL/ PHIPS330 DATA IHAVAT/0/ PHIPS331 JCODE=0 PHIPS332 C PHIPS333 C DO WE HAVE A GOOD ATOM LEFT OVER FROM LAST TIME PHIPS334 C IF SO, PRETEND WE READ IT THIS TIME ELSE READ LINE PHIPS335 C PHIPS336 IF (IHAVAT.EQ.0) GO TO 10 PHIPS337 CALL SHIFT (SAVAT,ATLST,8) PHIPS338 IHAVAT=0 PHIPS339 GO TO 40 PHIPS340 10 READ (INDAT,130) REC PHIPS341 C PHIPS342 C THE STATEMENT BELOW WILL TRANSFER CONTROL TO STATEMENT 120 IF AN PHIPS343 C END-OF-FILE WAS ENCOUNTERED ON THE INPUT DEVICE. IF NO END-OF- PHIPS344 C FILE IS SENSED CONTROL IS ASSUMED BY STATEMENT 20. PHIPS345 C TESTING FOR AN END-OF-FILE CLEARS THE END-OF-FILE INDICATOR IF PHIPS346 C IT IS SET. PHIPS347 C PHIPS348 IF (EOF(INDAT)) 120,20 PHIPS349 C PHIPS350 20 IF (IDEN(REC(1),ATOM,1).EQ.0) GO TO 30 PHIPS351 IF (IDEN(REC(1),HETA,1).EQ.0) GO TO 30 PHIPSI26 IF (IDEN(REC(1),HEAD,1).EQ.0) GO TO 90 PHIPS352 IF (IDEN(REC(1),COMP,1).EQ.0) GO TO 100 PHIPS353 IF (IDEN(REC(1),TER,1).EQ.0) GO TO 110 PHIPS354 IF (IDEN(REC(1),AUTH,1).EQ.0) GO TO 100 PHIPS355 IF (IDEN(REC(1),END,1).EQ.0) GO TO 80 PHIPS356 IF (IDEN(REC(1),AJRNL,1).EQ.0) GO TO 100 PHIPS357 GO TO 10 PHIPS358 30 CONTINUE PHIPSI25 C REWIND ITEMP PHIPSI26 C WRITE (ITEMP,130) REC PHIPSI27 C REWIND ITEMP PHIPSI28 C READ (ITEMP,FMT) ATLST PHIPSI29 ENCODE (80,130,LINE(1)) REC PHIPSI30 DECODE (80,FMT,LINE(1)) ATLST PHIPSI31 C PHIPS375 C IF THIS ATOM WAS WHAT WE WANTED SAVE IT JUST IN CASE AND RETURN PHIPS376 C PHIPS377 40 IF (IDEN(ATLST(1),ATNAM(NATNAM),1).EQ.0) GO TO 70 PHIPS378 C PHIPS379 C IF IT ISN,T WHAT WE WANTED BUT IS ONE USED IN CALCULATING ANGLES PHIPS380 C THEN WE SAVE IT FOR FUTURE USE AND HAVE TO RETURN A FAKE ATOM THATPHIPS381 C WILL GENERATE A BAD TORSION ANGLE. PHIPS382 C PHIPS383 DO 50 I=1,3 PHIPS384 IF (IDEN(ATLST(1),ATNAM(I),1).EQ.0) GO TO 60 PHIPS385 50 CONTINUE PHIPS386 GO TO 10 PHIPS387 60 CALL SHIFT (ATLST,SAVAT,8) PHIPS388 IHAVAT=1 PHIPS389 ATLST(1)=ATNAM(NATNAM) PHIPS390 ATLST(6)=-10000. PHIPS391 ATLST(7)=-10000. PHIPS392 ATLST(8)=-10000. PHIPS393 C IF MISSING ATOM IS N USE RESIDUE IDENTIFICATION INFORMATION OF PHIPS394 C NEXT ATOM ELSE USE THAT OF PREVIOUS. PHIPS395 IF (IDEN(ATLST(1),ATNAM(1),1).EQ.0) GO TO 70 PHIPS396 CALL SHIFT (PREV(2),ATLST(2),4) PHIPS397 70 NATNAM=NATNAM+1 PHIPS398 IF (NATNAM.GT.3) NATNAM=1 PHIPS399 CALL SHIFT (ATLST,PREV,8) PHIPS400 RETURN PHIPS401 80 JCODE=2 PHIPS402 NATNAM=1 PHIPS403 RETURN PHIPS404 90 CONTINUE PHIPSI32 C REWIND ITEMP PHIPSI33 C WRITE (ITEMP,130) REC PHIPSI34 C REWIND ITEMP PHIPSI35 C READ (ITEMP,140) ADATE,ENTRY PHIPSI36 ENCODE (80,130,LINE(1)) REC PHIPSI37 DECODE (80,140,LINE(1)) ADATE,ENTRY PHIPSI38 C PHIPS413 WRITE (IOUT,150) ENTRY,ADATE PHIPS414 WRITE (IANGS,160) ENTRY,ADATE PHIPS415 GO TO 10 PHIPS416 C PHIPS417 C SHIFT THE *COMPND*, *AUTH* OR *JRNL* INFORMATION IN REC LEFT BY 10PHIPS418 C CHARACTERS AND PRINT THE STRING. PHIPS419 C PHIPS420 100 CONTINUE PHIPSI39 C REWIND ITEMP PHIPSI40 C WRITE (ITEMP,130) REC PHIPSI41 C REWIND ITEMP PHIPSI42 C READ (ITEMP,170) (REC(I),I=1,15) PHIPSI43 ENCODE (80,130,LINE(1)) REC PHIPSI44 DECODE (80,170,LINE(1)) (REC(I),I=1,15) PHIPSI45 WRITE(IOUT,180) (REC(I),I=1,15) PHIPSI35 GO TO 10 PHIPS426 110 JCODE=1 PHIPS427 NATNAM=1 PHIPS428 RETURN PHIPS429 120 JCODE=3 PHIPS430 RETURN PHIPS431 C PHIPS432 C PHIPS433 130 FORMAT (20A4) PHIPS434 140 FORMAT (50X,2A4,A2,2X,A4) PHIPS435 150 FORMAT (25H0PROTEIN DATA BANK ENTRY ,A4,9H DATED ,2A4,A2,4H FOR)PHIPS436 160 FORMAT (1X,A4,2X,2A4,A2) PHIPS437 170 FORMAT (10X,15A4) PHIPS438 180 FORMAT (1X,15A4) PHIPS439 END PHIPS440 SUBROUTINE COLLPP (PHPS,IFIN,ATOM) PHIPS441 C PHIPS442 C COLLECT THE PHI/PSI/OMEGA ANGLES FOR TABULAR OUTPUT PHIPS443 C PHIPS444 DIMENSION PHPS(3), ATOM(8), NAM(50), NSEQ(50), INSERT(50), NCHAIN(PHIPS445 150) PHIPS446 DIMENSION IPHI(50), IPSI(50), IOMEGA(50) PHIPS447 COMMON /IODEV/ INDAT,IOUT,IREAD,ITEMP,IANGS PHIPS448 DATA IENTER/0/ PHIPS449 IENTER=IENTER+1 PHIPS450 CALL SHIFT (ATOM(2),NAM(IENTER),1) PHIPS451 CALL SHIFT (ATOM(3),NCHAIN(IENTER),1) PHIPS452 NSEQ(IENTER)=IFIX(ATOM(4)+0.01) PHIPS453 CALL SHIFT (ATOM(5),INSERT(IENTER),1) PHIPS454 IPHI(IENTER)=IFIX(PHPS(1)+SIGN(0.5,PHPS(1))) PHIPS455 IPSI(IENTER)=IFIX(PHPS(2)+SIGN(0.5,PHPS(2))) PHIPS456 IOMEGA(IENTER)=IFIX(PHPS(3)+SIGN(0.5,PHPS(3))) PHIPS457 IF (IPHI(IENTER).EQ.-180) IPHI(IENTER)=180 PHIPSI27 IF (IPSI(IENTER).EQ.-180) IPSI(IENTER)=180 PHIPSI28 IF (IOMEGA(IENTER).EQ.-180) IOMEGA(IENTER)=180 PHIPSI29 WRITE (IANGS,20) NAM(IENTER),NCHAIN(IENTER),NSEQ(IENTER),INSERT(IEPHIPS458 1NTER),IPHI(IENTER),IPSI(IENTER),IOMEGA(IENTER) PHIPS459 IF (IFIN.GT.0) GO TO 10 PHIPS460 IF (IENTER.LT.50) RETURN PHIPS461 10 CALL PRNTPP (IENTER,NAM,NCHAIN,NSEQ,INSERT,IPHI,IPSI,IOMEGA) PHIPS462 IENTER=0 PHIPS463 RETURN PHIPS464 C PHIPS465 C PHIPS466 20 FORMAT (1X,A3,1X,A1,1X,I4,A1,1X,3I5) PHIPS467 END PHIPS468 SUBROUTINE PRNTPP (IENTER,NAM,NCHAIN,NSEQ,INSERT,IPHI,IPSI,IOMEGA)PHIPS469 C PHIPS470 C TO PRINT THE PHI/PSI/OMEGA RESULTS IN TABULAR FORM PHIPS471 C PHIPS472 DIMENSION NAM(50), NSEQ(50), INSERT(50), IPHI(50), IPSI(50), IOMEGPHIPS473 1A(50) PHIPS474 DIMENSION NCHAIN(50) PHIPS475 COMMON /IODEV/ INDAT,IOUT,IREAD,ITEMP,IANGS PHIPS476 WRITE (IOUT,30) PHIPS477 IF (IENTER.EQ.0) RETURN PHIPS478 NDO=IENTER/2 PHIPS479 IODD=IENTER-NDO-NDO PHIPS480 IF (NDO.EQ.0) GO TO 20 PHIPS481 DO 10 I=1,NDO PHIPS482 J=I+NDO+IODD PHIPS483 WRITE (IOUT,40) NAM(I),NCHAIN(I),NSEQ(I),INSERT(I),IPHI(I),IPSI(I)PHIPS484 1,NAM(J),NCHAIN(J),NSEQ(J),INSERT(J),IPHI(J),IPSI(J),IOMEGA(I),IOMEPHIPS485 2GA(J) PHIPS486 10 CONTINUE PHIPS487 20 IF (IODD.EQ.0) RETURN PHIPS488 J=NDO+IODD PHIPS489 WRITE (IOUT,50) NAM(J),NCHAIN(J),NSEQ(J),INSERT(J),IPHI(J),IPSI(J)PHIPS490 1,IOMEGA(J) PHIPS491 RETURN PHIPS492 C PHIPS493 C PHIPS494 30 FORMAT (61H1 RESIDUE PHI PSI OMEGA * RESIDUE PHI PSIPHIPS495 1 OMEGA) PHIPS496 40 FORMAT (1X,A3,1X,A1,1X,I4,A1,2I5,8X,1H*,3X,A3,1X,A1,1X,I4,A1,2I5/2PHIPS497 12X,I5,3X,1H*,24X,I5) PHIPS498 50 FORMAT (1X,A3,1X,A1,1X,I4,A1,2I5,8X,1H*/22X,I5,3X,1H*) PHIPS499 END PHIPS500 FUNCTION IDEN (I,J,N) PHIPS501 C PHIPS502 C TO TEST THE IDENTITY OF TWO CHARACTER STRINGS PHIPS503 C PHIPS504 C IDEN = 0 IF THE STRINGS ARE IDENTICAL PHIPS505 C = 1 IF THE STRINGS ARE DIFFERENT PHIPS506 C PHIPS507 C THIS FUNCTION ORIGINALLY WAS WRITTEN TO DO A CHARACTER BY PHIPS508 C CHARACTER COMPARISON OF LITERAL STRINGS EVEN IF THE CHARACTERS PHIPS509 C WERE PACKED MORE THAN ONE TO A WORD. BECAUSE SOME COMPUTERS WILL PHIPS510 C NOT ALLOW THE ADDRESSING OF LESS THAN A FULL WORD THIS BYTE PHIPS511 C COMPARISON HAS BEEN SUBVERTED. TO REINSTATE THIS FEATURE, THE PHIPS512 C *C* SHOULD BE REMOVED FROM THE (CURRENTLY) INACTIVE BYTE PHIPS513 C STATEMENT BELOW AND N SHOULD BE REDEFINED TO BE THE NUMBER OF PHIPS514 C CHARACTERS TO COMPARE. THIS ROUTINE ALLOWS A LEFT-JUSTIFIED PHIPS515 C (BLANK FILLED) ASTERISK TO MATCH ANY OTHER WORD. PHIPS516 C BYTE I,J,ISTAR PHIPS517 DIMENSION I(N), J(N) PHIPS518 DATA ISTAR/1H*/ PHIPS519 DO 10 IJ=1,N PHIPS520 IF (I(IJ).EQ.ISTAR) GO TO 10 PHIPS521 IF (J(IJ).EQ.ISTAR) GO TO 10 PHIPS522 IF (I(IJ).NE.J(IJ)) GO TO 20 PHIPS523 10 CONTINUE PHIPS524 IDEN=0 PHIPS525 RETURN PHIPS526 20 IDEN=1 PHIPS527 RETURN PHIPS528 END PHIPS529 SUBROUTINE SHIFT (J,K,N) PHIPS530 C PHIPS531 C TO MOVE A CHARACTER STRING FROM ONE LOCATION TO ANOTHER PHIPS532 C PHIPS533 C FOR MACHINES WHICH FORCE NORMALISATION ON TRANSFER OF REAL PHIPS534 C VARIABLES OR WHICH HAVE DIFFERENT WORD SIZES FOR REAL AND INTEGER PHIPS535 C VARIABLES THE USER WILL HAVE NEED FOR GREAT CAUTION HERE. PHIPS536 DIMENSION J(1), K(1) PHIPS537 DO 10 I=1,N PHIPS538 10 K(I)=J(I) PHIPS539 RETURN PHIPS540 END PHIPS541 FUNCTION TORSIN (A,B,C,D) PHIPS542 C PHIPS543 C CALCULATE THE TORSION ANGLE FOR FOUR ATOMS PHIPS544 C PHIPS545 C THE FOUR THREE-ELEMENT VECTORS A,B,C,D ARE THE COORDINATES (IN A PHIPS546 C CARTESIAN REFERENCE FRAME) OF THE FOUR ATOMS. PHIPS547 C PHIPS548 COMMON /VECCOM/ X(12) PHIPS549 DIMENSION Y(3), P(3), Q(3) PHIPS550 EQUIVALENCE (X(4),Y(1)), (X(7),P(1)), (X(10),Q(1)) PHIPS551 DIMENSION A(3), B(3), C(3), D(3) PHIPS552 DIMENSION ZERO(3) PHIPS553 DATA (ZERO(I),I=1,3)/0.0,0.0,0.0/ PHIPS554 CALL VECDIF (A,B,P) PHIPS555 CALL DISCHK (P,ICHK) PHIPS556 IF (ICHK.GT.0) GO TO 10 PHIPS557 CALL VECDIF (C,B,Q) PHIPS558 CALL DISCHK (Q,ICHK) PHIPS559 IF (ICHK.GT.0) GO TO 10 PHIPS560 CALL CROSS (P,Q,X) PHIPS561 CALL VECDIF (B,C,P) PHIPS562 CALL VECDIF (D,C,Q) PHIPS563 CALL DISCHK (Q,ICHK) PHIPS564 IF (ICHK.GT.0) GO TO 10 PHIPS565 CALL CROSS (P,Q,Y) PHIPS566 TORSIN=ANGLE(X,ZERO,Y) PHIPS567 CALL CROSS (X,Y,Q) PHIPS568 X(1)=DOT(P,Q) PHIPS569 IF (X(1).GT.0.0) TORSIN=-TORSIN PHIPS570 RETURN PHIPS571 10 TORSIN=999.0 PHIPS572 RETURN PHIPS573 END PHIPS574 SUBROUTINE DISCHK (X,ICHK) PHIPS575 DIMENSION X(3) PHIPS576 ICHK=0 PHIPS577 DSSQ=DOT(X,X) PHIPS578 IF ((DSSQ.LT.0.50).OR.(DSSQ.GT.9.00)) ICHK=1 PHIPS579 RETURN PHIPS580 END PHIPS581 FUNCTION AMAG (X) PHIPS582 C GET AND RETURN THE MAGNITUDE OF A VECTOR X PHIPS583 DIMENSION X(3) PHIPS584 AMAG=DOT(X,X) PHIPS585 AMAG=SQRT(AMAG) PHIPS586 RETURN PHIPS587 END PHIPS588 FUNCTION DOT (X,Y) PHIPS589 C COMPUTE AND RETURN THE DOT PRODUCT OF X AND Y PHIPS590 DIMENSION X(3), Y(3) PHIPS591 DOT=0.0 PHIPS592 DO 10 I=1,3 PHIPS593 DOT=DOT+X(I)*Y(I) PHIPS594 10 CONTINUE PHIPS595 RETURN PHIPS596 END PHIPS597 SUBROUTINE CROSS (X,Y,Z) PHIPS598 C COMPUTE Z = X CROSS Y PHIPS599 DIMENSION X(3), Y(3), Z(3) PHIPS600 Z(1)=X(2)*Y(3)-Y(2)*X(3) PHIPS601 Z(2)=-X(1)*Y(3)+Y(1)*X(3) PHIPS602 Z(3)=X(1)*Y(2)-Y(1)*X(2) PHIPS603 RETURN PHIPS604 END PHIPS605 SUBROUTINE VECDIF (X,Y,Z) PHIPS606 C SUBTRACT TWO VECTORS AND RETURN THE RESULT IN Z PHIPS607 DIMENSION X(3), Y(3), Z(3) PHIPS608 DO 10 I=1,3 PHIPS609 Z(I)=X(I)-Y(I) PHIPS610 10 CONTINUE PHIPS611 RETURN PHIPS612 END PHIPS613 FUNCTION ANGLE (A,B,C) PHIPS614 C GET THE ANGLE BETWEEN TWO VECTORS DEFINED BY THE ENDS PHIPS615 C OF THREE VECTORS PHIPS616 COMMON /VECCOM/ X(12) PHIPS617 DIMENSION Y(3) PHIPS618 EQUIVALENCE (X(4),Y(1)) PHIPS619 DIMENSION A(3), B(3), C(3) PHIPS620 CALL VECDIF (A,B,X) PHIPS621 CALL VECDIF (C,B,Y) PHIPS622 Q=AMAG(X)*AMAG(Y) PHIPS623 IF (Q.LT.1.0E-7) Q=1.0E-7 PHIPS624 ANG=DOT(X,Y)/Q PHIPS625 C PHIPS626 C ACOS IS AN ASSUMED SYSTEM FUNCTION WHICH WILL RETURN A VALUE PHIPS627 C BETWEEN 0.0 AND 3.14159(APPROX) IF ITS ARGUMENT IS IN THE RANGE PHIPS628 C +1.0 TO -1.0 . *** NOTE *** IBM USERS SHOULD CHANGE THE NAME IN PHIPS629 C THIS CALL FROM ACOS TO ARCOS. PHIPS630 IF (ANG.GT.1.0) ANG=1.0 PHIPS631 IF (ANG.LT.-1.0) ANG=-1.0 PHIPS632 ANGLE=57.29577951*ACOS(ANG) PHIPS633 RETURN PHIPS634 END PHIPS635