C PROTEIN DATA BANK SOURCE CODE DIHDRL DIHDRL 3 C AUTHOR. E.ABOLA DIHDRL 4 C ENTRY DATE. 3/80 SUPPORTED DIHDRL 5 C LAST REVISION. 3/80 DIHDRL 6 C PURPOSE. COMPLETE TORSION ANGLES DIHDRL 7 C LANGUAGE. FORTRAN IV DIHDRL 8 C DIHDRL 9 C DIHDRL10 C DIHDRL11 C DIHDRL12 PROGRAM DIHDRL(INPUT,OUTPUT,TAPE1,TAPE2,TAPE3,TAPE5=INPUT,TAPE6=OUDIHDRL13 1TPUT) DIHDRL14 C DIHDRL15 C DIHDRL16 C WRITTEN BY - DIHDRL17 C ENRIQUE E. ABOLA DIHDRL18 C CHEMISTRY DEPARTMENT DIHDRL19 C BROOKHAVEN NATIONAL LABORATORY DIHDRL20 C UPTON,N.Y. 11973 U.S.A. DIHDRL21 C DIHDRL22 C THE PROTEIN DATA BANK IS FUNDED BY THE NATIONAL SCIENCE FOUNDATIONDIHDRL23 C UNDER GRANT PCM 77-16811. DIHDRL24 C DIHDRL25 C THE USE OF A LIBRARY OF VECTOR MANIPULATION ROUTINES WRITTEN BY DIHDRL26 C LAWRENCE C. ANDREWS IS GRATEFULLY ACKNOWLEDGED. DIHDRL27 C DIHDRL28 C THE PROCEDURE USED TO SET UP THE REQUIRED POINTERS FOLLOWS THAT DIHDRL29 C USED BY GEORGE REEKE IN HIS PROGRAM TORSIN. DIHDRL30 C DIHDRL31 C PLEASE NOTIFY THE PROTEIN DATA BANK OF ANY DIFFICULTIES DIHDRL32 C ENCOUNTERED IN USING THIS PROGRAM. DIHDRL33 C DIHDRL34 C PURPOSE - DIHDRL35 C DIHDRL36 C DIHDRL(DIHEDRAL) CALCULATES THE FOLLOWING TORSION ANGLES ON DIHDRL37 C PROTEIN DATA BANK ENTRIES. DIHDRL38 C DIHDRL39 C 1.PSI N(I) -CA(I)-C(I) -N(I+1) DIHDRL40 C 2.PHI C(I-1)-N(I) -CA(I) -C(I) DIHDRL41 C 3.OMEGA CA(I) -C(I) -N(I+1) -CA(I+1) DIHDRL42 C 4.CHI1 N(I) -CA(I)-CB(I) -(CG,SG,OG1,CG1,OG) DIHDRL43 C 5.CHI2 CA(I) -CB(I)-(CG,CG1)-(OD1,AD1,ND1,CD,CD1,SD) DIHDRL44 C 6.CHI3 CB(I) -CG(I)-(CD,SD) -(OE1,AE1,CE,NE) DIHDRL45 C 7.CHI4 CG(I) -CD(I)-(NE,CE) -(CZ,NZ) DIHDRL46 C DIHDRL47 C ANGLES ARE NOT CALCULATED AND NOT PRINTED FOR THOSE SETS WHERE DIHDRL48 C ATOMS ARE MISSING OR THOSE FOR WHICH DISTANCES BETWEEN BONDED DIHDRL49 C ATOMS ARE LESS THAN 0.7 ANG. OR GREATER THAN 2.5 ANG. DIHDRL50 C DIHDRL51 C I/O FILES DIHDRL52 C DIHDRL53 C SYMBOLIC LOGICAL DESCRIPTION DIHDRL54 C DESIGNATION UNIT DIHDRL55 C DIHDRL56 C IPDB TAPE1 PROTEIN DATA BANK ENTRIES DIHDRL57 C IOUT TAPE2 FORMATTED FILE CONTAINING ANGLES DIHDRL58 C ISCR TAPE3 SCRATCH FILE FOR ENCODE/DECODE DIHDRL59 C INPT TAPE5 INPUT FILE FROM CARD READER DIHDRL60 C LPTR TAPE6 OUTPUT FILE TO BE PRINTED DIHDRL61 C DIHDRL62 C INPUT PARAMETERS ON FILE INPT DIHDRL63 C DIHDRL64 C INPUT PARAMETER 1 FORMAT(3I5,A4) DIHDRL65 C DIHDRL66 C COL. NO. NAME DESCRIPTION DIHDRL67 C DIHDRL68 C 1-5 ITOTFL TOTAL NUMBER OF DATA PARTITIONS IN DIHDRL69 C IPDB TO BE PROCESSED (BLANK OR ZERO DIHDRL70 C DEFAULTS TO ONE) DIHDRL71 C DIHDRL72 C 6-10 NFILE NUMBER OF PARTITIONS TO SKIP BEFORE DIHDRL73 C PROCESSING DIHDRL74 C .LT. 0 POSITION THE FILE IPDB IN THE DIHDRL75 C PARTITION WITH THE HEADER NAME GIVEN DIHDRL76 C IN IFLNAM DIHDRL77 C .EQ. 0 START PROCESSING FROM CURRENT FILE DIHDRL78 C POSITION DIHDRL79 C .GT. 0 SKIP NFILE FILE MARKS BEFORE DIHDRL80 C PROCESSING DIHDRL81 C DIHDRL82 C 11-15 IOUT = 0 NO TAPE OUTPUT DIHDRL83 C = 2 CREATE A FORMATTED OUTPUT FILE DIHDRL84 C EACH RECORD WILL CONTAIN THE DIHDRL85 C FOLLOWING. DIHDRL86 C LABL1,LABL2,NRES,NCHN,INSC,NALT1, DIHDRL87 C NALT2,NALT3,(ANGLE(I),I=1,7),IDSET DIHDRL88 C FORMAT(A4,A2,1X,A3,A1,I4,4A1,7(F7.2), DIHDRL89 C 2X,A4) DIHDRL90 C AN ANGLE FOR WHICH A VALUE CANNOT BE DIHDRL91 C DEFINED IS GIVEN THE VALUE OF -999. DIHDRL92 C DIHDRL93 C 16-19 IFLNAM FOUR CHARACTER CODE FOUND IN THE DIHDRL94 C HEADER RECORD OF THE PARTITION FROM DIHDRL95 C WHICH PROCESSING IS TO BEGIN DIHDRL96 C DIHDRL97 C THE PROGRAM WILL STOP IF ITOTFL IS LESS THAN ZERO OR WHEN THERE DIHDRL98 C ARE NO MORE ENTRIES IN THE PROTEIN DATA BANK FILE IPDB. DIHDRL99 C DIHDR100 C OUTPUT DIHDR101 C DIHDR102 C FOR EACH PROTEIN DATA BANK ENTRY PROCESSED THE IDENTIFYING INFOR- DIHDR103 C MATION IS PRINTED AND IS FOLLWED BY A TABLE OF TORSION ANGLES FOR DIHDR104 C EACH DISTINCT CHAIN FOUND IN THE ENTRY. DIHDR105 C AN ALTERNATE LOCATION INDICATOR IS PRINTED FOR THOSE CASES IN DIHDR106 C WHICH MORE THAN ONE LOCATION IS PROVIDED FOR THE SAME ATOM WITHIN DIHDR107 C A RESIDUE. THE FORM USED TO INDICATE MULTIPLE LOCATIONS IS DIHDR108 C (A,B,C) DIHDR109 C WHERE A REFERS TO ALTERNATE LOCATION A OF C(I-1) DIHDR110 C B REFERS TO ALTERNATE LOCATION B OF RESIDUE I DIHDR111 C C REFERS TO ALTERNATE LOCATION C OF CA(I+1) AND N(I+1) DIHDR112 C DIHDR113 C A FORMATTED OUTPUT FILE IS CREATED WHEN IOUT IS SET TO 2. DIHDR114 C THE OUTPUT FILE CONSISTS OF RECORDS CONTAINING THE FOLLOWING. DIHDR115 C LABL1,LABL2,NRES,NCHN,NSEQ,INSC,NALT1,NALT2,NALT3,ANGLE,IDSET DIHDR116 C DIHDR117 C LABL1 AND DIHDR118 C LABL2 CONTAINS THE RECORD IDENTIFIER TORANG DIHDR119 C NRES RESIDUE NAME DIHDR120 C NCHN CHAIN NAME DIHDR121 C NSEQ SEQUENCE NUMBER DIHDR122 C INSC INSERT CODE DIHDR123 C NALT1 ALTERNATE LOCATION CODE FOR (I-1) RESIDUE DIHDR124 C NALT2 ALTERNATE LOCATION CODE FOR (I) RESIDUE DIHDR125 C NALT3 ALTERNATE LOCATION CODE FOR (I+1) RESIDUE DIHDR126 C ANGLE TORSION ANGLES IN THE ORDER DIHDR127 C 1. PHI DIHDR128 C 2. PSI DIHDR129 C 3. OMEGA DIHDR130 C 4. CHI1 DIHDR131 C 5. CHI2 DIHDR132 C 6. CHI3 DIHDR133 C 7. CHI4 DIHDR134 C IDSET ENTRY IDENTIFICATION CODE FOR THE PROTEIN DIHDR135 C DIHDR136 C THIS IS WRITTEN USING THE FORMAT, DIHDR137 C (A4,A2,1X,A3,A1,I4,4A1,7(F7.2),2X,A4) DIHDR138 C DIHDR139 C AN ANGLE FOR WHICH A VALUE CANNOT BE DEFINED IS GIVEN THE VALUE DIHDR140 C OF -999. DIHDR141 C DIHDR142 C MACHINE DEPENDENCIES DIHDR143 C DIHDR144 C THIS PROGRAM MUST HANDLE CHARACTERS STORED IN A WORD. AN ATTEMPT DIHDR145 C WAS MADE TO HAVE A LIMIT OF FOUR CHARACTERS PER WORD. TYPICALLY ADIHDR146 C RECORD IS READ IN 20A4 FORMAT AND IDENTIFIED. SUBSEQUENTLY DIHDR147 C IT IS ENCODED INTO A LINE IN 8A10 FORMAT THAT CAN BE DECODED USINGDIHDR148 C THE APPROPRIATE FORMAT. THE ARRAY *LINE* IS ALWAYS USED FOR THIS DIHDR149 C PURPOSE. DIHDR150 C FOR COMPUTERS WITH ENCODE/DECODE CAPABILITY ONLY THE DIMENSION OF DIHDR151 C *LINE* AND A FORMAT STATEMENT NEED BE CHANGED. FOR THOSE WITHOUT DIHDR152 C THIS CAPABILITY, THE LINE CAN BE WRITTEN ON A SCRATCH FILE AND DIHDR153 C REREAD. DIHDR154 C THE FOLLOWING SUBROUTINES USE THE ENCODE/DECODE FACILITY OF THE DIHDR155 C CDC MACHINE DIHDR156 C 1. ANGOUT DIHDR157 C 2. NTRPRT DIHDR158 C 3. PRNTXT DIHDR159 C DIHDR160 C EVERY READ STATEMENT IN THIS PROGRAM IS FOLLOWED BY THE TEST DIHDR161 C IF ( EOF(IPDB)) S1, S2 DIHDR162 C THE PROGRAM JUMPS TO STATEMENT S1 IF AN END OF FILE HAS BEEN DIHDR163 C ENCOUNTERED AFTER A READ ON FILE IPDB AND TO STATEMENT S2 DIHDR164 C OTHERWISE. DIHDR165 C THE EOF TESTING PERFORMED IS UNIQUE FOR CDC MACHINES AND MAY NEED DIHDR166 C REVISION TO THE MORE COMMON FORM OF DIHDR167 C READ(INPT,1000,END=500) IBUF DIHDR168 C DIHDR169 C THIS EOF TESTING IS USED IN THE FOLLOWING ROUTINES DIHDR170 C 1. MAIN PROGRAM DIHDR171 C 2. GETREC DIHDR172 C DIHDR173 C ALL VARIABLES THAT ARE USED TO STORE CHARACTERS ARE DEFAULTED DIHDR174 C TO BE OF INTEGER TYPE. EACH ROUTINE WILL CONTAIN A LIST OF THESE DIHDR175 C VARIABLES AS PART OF THE HEADER INFORMATION. DIHDR176 C DIHDR177 C THE ARITHMETIC STATEMENT FUNCTION IDEN(I,J) IS USED TO COMPARE DIHDR178 C ALPHANUMERIC VARIABLES. DIHDR179 C DIHDR180 C ALGORITHM DIHDR181 C DIHDR182 C THE PROCEDURE USED TO SET UP THE REQUIRED POINTERS FOLLOWS THAT DIHDR183 C USED BY GEORGE REEKE IN HIS PROGRAM TORSIN. DIHDR184 C DIHDR185 C ARRAYS USED DIHDR186 C DIHDR187 C 1. XYZ(I,J) CONTAINS ATOMIC COORDINATES TO BE USED IN DIHDR188 C CALCULATING TORSION ANGLES DIHDR189 C 2. INLOC(J) SET TO 0 WHEN AN ATOM IS MISSING DIHDR190 C SET TO 1 WHEN XYZ(I,J) CONTAINS THE COORDINATES DIHDR191 C OF AN ATOM DIHDR192 C 3. IATMNM ARRAY OF ATOM NAMES OCCURRING IN PROTEINS DIHDR193 C ARRANGED IN A SPECIAL ORDER DIHDR194 C 4. INDIC(N) FOR AN ATOM NAME FOUND IN THE NTH POSITION IN DIHDR195 C THE ARRAY IATMNM, INDIC(N) CONTAINS THE LOCATIONDIHDR196 C IN THE ARRAY XYZ IN WHICH THE ATOM SHOULD BE DIHDR197 C STORED DIHDR198 C N.B. DIHDR199 C LOC(1) IS RESERVED FOR C(I-1) DIHDR200 C LOC(10) IS RESERVED FOR N(I+1) DIHDR201 C LOC(11) IS RESERVED FOR CA(I+1) DIHDR202 C DIHDR203 C 5. IPTR2(M) NUMBER OF ANGLES TO BE CALCULATED FOR THE DIHDR204 C RESIDUE OF TYPE M, M IS RETURNED BY THE ROUTINE DIHDR205 C ISRSAA DIHDR206 C 6. IPTR1(M) POINTS TO THE STARTING ADDRESS IN THE ARRAY DIHDR207 C IBONDS WHERE THE ANGLE CODE FOR THE RESIDUE OF DIHDR208 C TYPE M BEGINS DIHDR209 C 7. IBONDS ARRAY CONTAINING THE ANGLE CODES TO BE USED FOR DIHDR210 C THE RESIDUES OCCURRING IN PROTEINS DIHDR211 C 8. KODE(I,L) CONTAINS THE LOCATION IN THE ARRAY XYZ OF THE DIHDR212 C ATOMS TO BE USED FOR A SPECIFIC ANGLE. THERE DIHDR213 C ARE SEVEN ANGLE TYPES CONSIDERED, GIVEN THE DIHDR214 C CODES 1-7 IN THE ORDER AS THEY ARE PRESENTED IN DIHDR215 C THE PURPOSE SECTION ABOVE. DIHDR216 C E.G. DIHDR217 C ANGLE PHI IS GIVEN L=1 DIHDR218 C KODE WILL POINT TO LOCATIONS 1,2,3 AND 4 IN XYZ DIHDR219 C AS CONTAINING THE NECESSARY ATOMIC COORDINATES DIHDR220 C DIHDR221 C THIS ROUTINE IS THE MAIN CONTROLLER FOR THE PROGRAM DIHDRL. DIHDR222 C ITS MAIN PURPOSE IS TO COMMUNCIATE WITH THE USER VIA FILE INPT, DIHDR223 C AND TO POSITION THE FILE IPDB PROPERLY. DIHDR224 C DIHDR225 C VARIABLES USED TO STORE CHARACTERS DIHDR226 C IFLNAM,IBUF,IDSET DIHDR227 C DIHDR228 DIMENSION IBUF(20) DIHDR229 C DIHDR230 COMMON /HEADER/ IDSET DIHDR231 C DIHDR232 DATA INPT/5/,LPTR/6/ DIHDR233 C DIHDR234 10 READ (INPT,80) ITOTFL,NFILE,IOUT,IFLNAM DIHDR235 IF (EOF(INPT)) 60,20 DIHDR236 C DIHDR237 20 IF (ITOTFL.EQ.0) ITOTFL=1 DIHDR238 IF (ITOTFL.LT.0) GO TO 60 DIHDR239 C DIHDR240 C POSITION TAPE TO BEGINNING OF FILE RUN DIHDR241 C DIHDR242 IF (NFILE.LT.0) GO TO 30 DIHDR243 IF (NFILE.EQ.0) GO TO 40 DIHDR244 C DIHDR245 C POSITION TAPE AFTER SKIPPING NFILES DIHDR246 C DIHDR247 CALL SKIPFL (NFILE,IER) DIHDR248 IF (IER.NE.0) GO TO 60 DIHDR249 GO TO 40 DIHDR250 C DIHDR251 C POSITION TAPE BY FINDING IFLNAM DIHDR252 C DIHDR253 30 CALL POSNAM (IFLNAM,IER,IBUF,JCODE) DIHDR254 IF (IER.NE.0) GO TO 60 DIHDR255 C DIHDR256 C PRINT THE HEADER INFORMATION FOR THE ENTRY DIHDR257 C DIHDR258 CALL PRNTXT (IBUF,JCODE) DIHDR259 GO TO 40 DIHDR260 C DIHDR261 C DIHDR262 40 DO 50 I=1,ITOTFL DIHDR263 CALL WRKTRS (IOUT,IER) DIHDR264 IF (IER.NE.0) GO TO 60 DIHDR265 50 CONTINUE DIHDR266 C DIHDR267 GO TO 10 DIHDR268 C DIHDR269 60 WRITE (LPTR,70) DIHDR270 STOP DIHDR271 C DIHDR272 70 FORMAT (1H1,22H----- END OF JOB -----) DIHDR273 80 FORMAT (3I5,A4) DIHDR274 END DIHDR275 SUBROUTINE WRKTRS (IOUT,IER) DIHDR276 C DIHDR277 C THIS SUBROUTINE CONTAINS THE MAIN WORK LOOP OF THE PROGRAM DIHDRL DIHDR278 C IT IS CALLED BY THE MAIN CONTROLLER ONCE FOR EACH PROTEIN DATA DIHDR279 C BANK ENTRY. DIHDR280 C DIHDR281 C IOUT = 0 NO FORMATTED OUTPUT FILE IOUT DIHDR282 C = 2 FILE IOUT IS TO BE GENERATED DIHDR283 C IER IS AN ERROR FLAG WHICH IS SET TO A NON-ZERO VALUE FOR ERROR DIHDR284 C CONDITIONS. DIHDR285 C DIHDR286 C THE SUBROUTINE GETRES IS CALLED TO READ THE PROTEIN DATA BANK FILEDIHDR287 C AND TO GATHER THE ATOMS INTO DISCRETE RESIDUE UNITS. THE COLLECTEDDIHDR288 C ATOMS ARE STORED IN THE COMMON AREA CURRES. THE SUBROUTINE LOADRSDIHDR289 C IS THEN CALLED TO CALCULATE AND PRINT THE TORSION ANGLES. DIHDR290 C SUBROUTINE CLNUP IS CALLED TO INSURE THAT THERE ARE NO OUTSTANDINGDIHDR291 C RESIDUES FOR WHICH ANGLES HAVE NOT BEEN CALCULATED AFTER A TER, DIHDR292 C END OR END OF DATA BASE RECORD TYPE. DIHDR293 C DIHDR294 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR295 C IBUF,IDSET,INCATM,IFIN,IBLANK DIHDR296 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHDR297 C NRES27,NCHN27,INSC27,NAME27,NALT27 DIHDR298 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHDR299 C DIHDR300 DIMENSION IBUF(20) DIHDR301 DIMENSION INCATM(20) DIHDR302 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHDR303 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHDR304 DIMENSION XYZ(3,60), INLOC(60) DIHDR305 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHDR306 C DIHDR307 COMMON /ATOM/ NSER27,NAME27,NALT27,NRES27,NCHN27,NSEQ27,INSC27,ATMDIHDR308 1X27,ATMY27,ATMZ27,OCPN27,TEMP27 DIHDR309 C DIHDR310 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHDR311 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHDR312 C DIHDR313 COMMON /RES1/ XYZ,INLOC DIHDR314 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHDR315 COMMON /HEADER/ IDSET DIHDR316 C DIHDR317 DATA IBEGIN/0/,IHEAD/1/,ITER/28/,IENDD/31/,IENDB/-50/,IAUTHR/4/,IDDIHDR318 1ONE/2/,JHET/1/,IFIN/4HFINI/ DIHDR319 DATA IBLANK/1H / DIHDR320 C DIHDR321 C INITIALIZE PARAMETERS DIHDR322 C DIHDR323 IALT=1 DIHDR324 ICAN=1 DIHDR325 ISTATE=IBEGIN DIHDR326 IRC=IBEGIN DIHDR327 INRES=1 DIHDR328 NINC=0 DIHDR329 IALRES=0 DIHDR330 DO 10 J=1,60 DIHDR331 10 INLOC(J)=0 DIHDR332 DO 20 J=1,5 DIHDR333 NALT1(J)=IBLANK DIHDR334 NALT2(J)=IBLANK DIHDR335 20 NALT3(J)=IBLANK DIHDR336 C DIHDR337 30 CALL GETRES (ISTATE,NINC,INCATM,IBUF,JCODE,JHET) DIHDR338 C DIHDR339 C SEE IF WE HAVE A RESIDUE DIHDR340 C DIHDR341 IF (ISTATE.NE.IDONE) GO TO 40 DIHDR342 C DIHDR343 C WE HAVE A RESIDUE,CALCULATE ITS ANGLES DIHDR344 C DIHDR345 CALL LOADRS (INRES,IALRES,IOUT) DIHDR346 NSEROL=NSERCR(NALLCR) DIHDR347 GO TO 110 DIHDR348 C DIHDR349 40 IF (JCODE.NE.IHEAD) GO TO 50 DIHDR350 CALL NTRPRT (IBUF,JCODE) DIHDR351 C DIHDR352 C CHECK FOR END OF DATA BANK DIHDR353 C DIHDR354 IF (IDSET.NE.IFIN) GO TO 50 DIHDR355 IER=1 DIHDR356 CALL CLNUP (IALRES,NSEROL,IOUT,INRES) DIHDR357 IRC=1 DIHDR358 GO TO 110 DIHDR359 C DIHDR360 C SEE IF WE HAVE TO PRINT THE RECORD DIHDR361 C DIHDR362 50 IF (IABS(JCODE).GT.IAUTHR) GO TO 60 DIHDR363 CALL PRNTXT (IBUF,JCODE) DIHDR364 GO TO 110 DIHDR365 C DIHDR366 C CHECK FOR TER RECORDS DIHDR367 C DIHDR368 60 IF (JCODE.NE.ITER) GO TO 90 DIHDR369 CALL CLNUP (IALRES,NSEROL,IOUT,INRES) DIHDR370 C DIHDR371 C RESET PARAMETERS TO INITIAL VALUE DIHDR372 C DIHDR373 ICAN=1 DIHDR374 ISTATE=IBEGIN DIHDR375 IRC=IBEGIN DIHDR376 INRES=1 DIHDR377 IALRES=0 DIHDR378 DO 70 J=1,60 DIHDR379 70 INLOC(J)=0 DIHDR380 DO 80 J=1,5 DIHDR381 NALT1(J)=IBLANK DIHDR382 NALT2(J)=IBLANK DIHDR383 80 NALT3(J)=IBLANK DIHDR384 GO TO 110 DIHDR385 C DIHDR386 C CHECK FOR END OF PROTEIN DATA BANK ENTRY DIHDR387 C DIHDR388 90 IF (JCODE.NE.IENDD) GO TO 100 DIHDR389 CALL CLNUP (IALRES,NSEROL,IOUT,INRES) DIHDR390 IER=0 DIHDR391 IRC=1 DIHDR392 GO TO 110 DIHDR393 C DIHDR394 C CHECK FOR END OF DATA BANK DIHDR395 C DIHDR396 100 IF (JCODE.NE.IENDB) GO TO 110 DIHDR397 CALL CLNUP (IALRES,NSEROL,IOUT,INRES) DIHDR398 IER=1 DIHDR399 IRC=1 DIHDR400 GO TO 110 DIHDR401 C DIHDR402 C DIHDR403 110 IF (IRC.EQ.0) GO TO 30 DIHDR404 C DIHDR405 C WRITE AN EOF ON FILE TAPE2 IF IT HAD BEEN GENERATED DIHDR406 C DIHDR407 IF (IOUT.EQ.2) END FILE IOUT DIHDR408 RETURN DIHDR409 END DIHDR410 SUBROUTINE CLNUP (IALRES,NSEROL,IOUT,INRES) DIHDR411 C DIHDR412 C THIS SUBROUTINE IS CALLED TO INSURE THAT ALL THE ANGLES HAVE BEEN DIHDR413 C CALCULATED FOR THE CURRENT PROTEIN DATA BANK ENTRY. DIHDR414 C DIHDR415 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR416 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHDR417 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHDR418 C DIHDR419 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHDR420 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHDR421 DIMENSION XYZ(3,60), INLOC(60) DIHDR422 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHDR423 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHDR424 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHDR425 COMMON /RES1/ XYZ,INLOC DIHDR426 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHDR427 C DIHDR428 DATA ITIMES/1/ DIHDR429 C DIHDR430 C SEE IF WE HAVE ANY RESIDUES TO WORRY ABOUT DIHDR431 C DIHDR432 IF (IALRES.EQ.0) GO TO 30 DIHDR433 C DIHDR434 C SEE IF THE CURRENT RESIDUE HAS ALREADY BEEN ANALYZED DIHDR435 C DIHDR436 IF (NSEROL.EQ.NSERCR(NALLCR)) GO TO 10 DIHDR437 CALL LOADRS (INRES,IALRES,IOUT) DIHDR438 C DIHDR439 10 CONTINUE DIHDR440 C DIHDR441 C CALCULATE THE ANGLES FOR THE LAST RESIDUE IF NEEDED DIHDR442 C DIHDR443 DO 20 I=1,IALT DIHDR444 DO 20 J=1,ICAN DIHDR445 20 CALL OMEGA (I,ITIMES,J,IOUT) DIHDR446 C DIHDR447 GO TO 30 DIHDR448 30 RETURN DIHDR449 END DIHDR450 SUBROUTINE LOADRS (INRES,IALRES,IOUT) DIHDR451 C DIHDR452 C THIS SUBROUTINE CALLS THE VARIOUS ROUTINES REQUIRED TO LOAD ATOMICDIHDR453 C COORDINATES INTO THE COMMON AREA RES1 AND RES2 (THE ARRAYS XYZ ANDDIHDR454 C INLOC) AND ALSO THE ROUTINES REQUIRED TO CALCULATE AND PRINT THE DIHDR455 C ANGLES. DIHDR456 C LDIPL1 LOADS N(I+1) AND CA(I+1) INTO XYZ DIHDR457 C LDMNS1 LOADS C(I-1) AND ZEROS INLOC DIHDR458 C LDCRR1 LOADS CURRES INTO XYZ DIHDR459 C OMEGA CALCULATES AND PRINTS THE ANGLES DIHDR460 C THESE ROUTINES HANDLE THE CASE OF UP TO 5 DIFFERENT ALTERNATE DIHDR461 C LOCATIONS IN THE (I-1),(I) AND (I+1) RESIDUE. DIHDR462 C DIHDR463 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR464 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHDR465 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHDR466 C IDSET DIHDR467 C DIHDR468 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHDR469 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHDR470 DIMENSION XYZ(3,60), INLOC(60) DIHDR471 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHDR472 C DIHDR473 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHDR474 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHDR475 C DIHDR476 COMMON /RES1/ XYZ,INLOC DIHDR477 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHDR478 COMMON /HEADER/ IDSET DIHDR479 C DIHDR480 COMMON /LDRLCL/ LINENO,IPAGE DIHDR481 C DIHDR482 C DIHDR483 DATA MAXLIN/60/ DIHDR484 DATA LPTR/6/ DIHDR485 C DIHDR486 C MAKE SURE WE HAVE AN AMINO ACID DIHDR487 C DIHDR488 CALL ISRSAA (NRESCR,IRES) DIHDR489 IF (IRES.EQ.0) GO TO 50 DIHDR490 IF (INRES.NE.1) GO TO 10 DIHDR491 C DIHDR492 C FOR INITIAL ENTRY WE CANNOT CALCULATE PHI DIHDR493 C FORCE A NEW PAGE AND WRITE OUT A HEADER DIHDR494 C DIHDR495 IPAGE=0 DIHDR496 LINENO=MAXLIN+1 DIHDR497 CALL NEWLIN (IDSET,LINENO,IPAGE) DIHDR498 WRITE (LPTR,60) DIHDR499 INRES=2 DIHDR500 GO TO 40 DIHDR501 C DIHDR502 C LOAD C-ALPH(I+1) AND N (I+1) DIHDR503 C DIHDR504 10 CALL LDIPL1 (ITIMES) DIHDR505 IALRES=IALRES+1 DIHDR506 C DIHDR507 C DIHDR508 C IALT=NUMBER OF DIFFERENT ALTERNATE CODES IN RES(I) DIHDR509 C ITIMES= NUMBER OF DIFFERENT ALTERNATE CODES IN RES(I+1) DIHDR510 C ICAN= NUMBER OF DIFFERENT ALTERNATE CODES IN RES(I-1) DIHDR511 C DIHDR512 DO 30 I=1,IALT DIHDR513 DO 30 J=1,ITIMES DIHDR514 DO 30 K=1,ICAN DIHDR515 C DIHDR516 C MAKE SURE WE STILL HAVE ENOUGH LINES FOR A RESIDUE DIHDR517 C DIHDR518 IF ((LINENO+2).LE.MAXLIN) GO TO 20 DIHDR519 LINENO=MAXLIN+1 DIHDR520 CALL NEWLIN (IDSET,LINENO,IPAGE) DIHDR521 WRITE (LPTR,60) DIHDR522 GO TO 20 DIHDR523 C DIHDR524 20 CONTINUE DIHDR525 C DIHDR526 C CALCULATE AND PRINT ANGLES DIHDR527 C DIHDR528 CALL OMEGA (I,J,K,IOUT) DIHDR529 CALL NEWLIN (IDSET,LINENO,IPAGE) DIHDR530 CALL NEWLIN (IDSET,LINENO,IPAGE) DIHDR531 IF (LINENO.LE.6) WRITE (LPTR,60) DIHDR532 30 CONTINUE DIHDR533 C DIHDR534 C LOAD C(I-1) AND RESET INLOC DIHDR535 C DIHDR536 CALL LDMNS1 DIHDR537 C DIHDR538 C LOAD CURRES INTO XYZ DIHDR539 C DIHDR540 40 CALL LDCRR1 DIHDR541 GO TO 50 DIHDR542 C DIHDR543 50 RETURN DIHDR544 C DIHDR545 60 FORMAT (1H0,22X,3HPHI,5X,3HPSI,3X,5HOMEGA,4X,4HCHI1,4X,4HCHI2,4X,4DIHDR546 1HCHI3,4X,4HCHI4,/) DIHDR547 END DIHDR548 SUBROUTINE LDIPL1 (ILT) DIHDR549 C DIHDR550 C THIS ROUTINE LOADS C-ALPHA (I+1) AND N (I+1) INTO RES1 DIHDR551 C N(I+1) IS LOADED INTO LOC(10) OF XYZ DIHDR552 C C-ALPHA(I+1) IS LOADED INTO LOC(11) OF XYZ DIHDR553 C ILT IS THE NUMBER OF ALTERNATE LOCATIONS WHICH OCCUR FOR THESE DIHDR554 C TWO ATOMS DIHDR555 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR556 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHDR557 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHDR558 C NRESTM,NCHNTM,INSCTM,NAMETM,NALTTM DIHDR559 C ICALPH,NITR,IBLANK DIHDR560 C DIHDR561 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHDR562 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHDR563 DIMENSION NSERTM(100), NAMETM(100), NALTTM(100) DIHDR564 DIMENSION ATMXTM(100), ATMYTM(100), ATMZTM(100) DIHDR565 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHDR566 DIMENSION XYZ(3,60), INLOC(60) DIHDR567 C DIHDR568 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHDR569 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHDR570 C DIHDR571 COMMON /RES1/ XYZ,INLOC DIHDR572 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHDR573 C DIHDR574 COMMON /TMPRES/ NALLTM,NRESTM,NCHNTM,NSEQTM,INSCTM,NSERTM,NAMETM,NDIHDR575 1ALTTM,ATMXTM,ATMYTM,ATMZTM DIHDR576 C DIHDR577 DATA INTOTM/1/,INTOCR/2/,ICALPH/4H CA /,NITR/4H N / DIHDR578 DATA IBLANK/1H / DIHDR579 C DIHDR580 IDEN(I,J)=I-J DIHDR581 C DIHDR582 C LOAD CURRES INTO TMPRES SO THAT CURRES IS AVAILABLE FOR LOCAL TASKDIHDR583 C THIS IS DONE TO BE ABLE TO COUNT ILT DIHDR584 C DIHDR585 IDIR=INTOTM DIHDR586 CALL PUSHRS (IDIR) DIHDR587 NALLCR=0 DIHDR588 C DIHDR589 C LOAD CURRES WITH CALPHA AND N DIHDR590 C DIHDR591 DO 10 J=1,NALLTM DIHDR592 IF (.NOT.((IDEN(NAMETM(J),ICALPH).EQ.0).OR.(IDEN(NAMETM(J),NITR).EDIHDR593 1Q.0))) GO TO 10 DIHDR594 NALLCR=NALLCR+1 DIHDR595 NAMECR(NALLCR)=NAMETM(J) DIHDR596 NALTCR(NALLCR)=NALTTM(J) DIHDR597 ATMXCR(NALLCR)=ATMXTM(J) DIHDR598 ATMYCR(NALLCR)=ATMYTM(J) DIHDR599 ATMZCR(NALLCR)=ATMZTM(J) DIHDR600 10 CONTINUE DIHDR601 C DIHDR602 C NOW COUNT HOW MANY ALTERNATE LOCATIONS EXIST DIHDR603 C DIHDR604 CALL CNTALT (ILT,NALT3) DIHDR605 C DIHDR606 C LOAD RES1 WITH ALL OCCURENCES OF C-ALPHA(I+1) AND N(I+1) DIHDR607 C DIHDR608 DO 30 I=1,ILT DIHDR609 DO 30 J=1,NALLCR DIHDR610 C DIHDR611 IF (.NOT.(IDEN(NAMECR(J),ICALPH).EQ.0)) GO TO 20 DIHDR612 IF (.NOT.((IDEN(NALTCR(J),IBLANK).EQ.0).OR.(IDEN(NALTCR(J),NALT3(IDIHDR613 1)).EQ.0))) GO TO 30 DIHDR614 C DIHDR615 C C-ALPHA(I+1) IS IN LOC(11) DIHDR616 C DIHDR617 J1=(I-1)*11+11 DIHDR618 INLOC(J1)=1 DIHDR619 XYZ(1,J1)=ATMXCR(J) DIHDR620 XYZ(2,J1)=ATMYCR(J) DIHDR621 XYZ(3,J1)=ATMZCR(J) DIHDR622 GO TO 30 DIHDR623 C DIHDR624 20 IF (.NOT.(IDEN(NAMECR(J),NITR).EQ.0)) GO TO 30 DIHDR625 IF (.NOT.((IDEN(NALTCR(J),IBLANK).EQ.0).OR.(IDEN(NALTCR(J),NALT3(IDIHDR626 1)).EQ.0))) GO TO 30 DIHDR627 C DIHDR628 C N(I+1) IS IN LOC(10) DIHDR629 C DIHDR630 J1=(I-1)*11+10 DIHDR631 INLOC(J1)=1 DIHDR632 XYZ(1,J1)=ATMXCR(J) DIHDR633 XYZ(2,J1)=ATMYCR(J) DIHDR634 XYZ(3,J1)=ATMZCR(J) DIHDR635 GO TO 30 DIHDR636 C DIHDR637 30 CONTINUE DIHDR638 C DIHDR639 C LOAD CURRES FROM TMPRES DIHDR640 C DIHDR641 IDIR=INTOCR DIHDR642 CALL PUSHRS (IDIR) DIHDR643 RETURN DIHDR644 END DIHDR645 SUBROUTINE PUSHRS (IDIR) DIHDR646 C DIHDR647 C THIS SUBROUTINE IS CALLED TO LOAD/UNLOAD BETWEEN CURRES AND TMPRESDIHDR648 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR649 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHDR650 C NRESTM,NCHNTM,INSCTM,NAMETM,NALTTM DIHDR651 C DIHDR652 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHDR653 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHDR654 DIMENSION NSERTM(100), NAMETM(100), NALTTM(100) DIHDR655 DIMENSION ATMXTM(100), ATMYTM(100), ATMZTM(100) DIHDR656 C DIHDR657 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHDR658 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHDR659 COMMON /TMPRES/ NALLTM,NRESTM,NCHNTM,NSEQTM,INSCTM,NSERTM,NAMETM,NDIHDR660 1ALTTM,ATMXTM,ATMYTM,ATMZTM DIHDR661 C DIHDR662 DATA INTOCR/2/,INTOTM/1/ DIHDR663 C DIHDR664 IF (IDIR.NE.INTOTM) GO TO 20 DIHDR665 C DIHDR666 C LOAD FROM TMPRES TO CURRES DIHDR667 C DIHDR668 NALLTM=NALLCR DIHDR669 NRESTM=NRESCR DIHDR670 NCHNTM=NCHNCR DIHDR671 NSEQTM=NSEQCR DIHDR672 INSCTM=INSCCR DIHDR673 DO 10 J=1,NALLCR DIHDR674 NSERTM(J)=NSERCR(J) DIHDR675 NAMETM(J)=NAMECR(J) DIHDR676 NALTTM(J)=NALTCR(J) DIHDR677 ATMXTM(J)=ATMXCR(J) DIHDR678 ATMYTM(J)=ATMYCR(J) DIHDR679 ATMZTM(J)=ATMZCR(J) DIHDR680 10 CONTINUE DIHDR681 GO TO 40 DIHDR682 C DIHDR683 C LOAD FROM CURRES TO TMPRES DIHDR684 C DIHDR685 20 IF (IDIR.NE.INTOCR) GO TO 40 DIHDR686 NALLCR=NALLTM DIHDR687 NRESCR=NRESTM DIHDR688 NCHNCR=NCHNTM DIHDR689 NSEQCR=NSEQTM DIHDR690 INSCCR=INSCTM DIHDR691 DO 30 J=1,NALLTM DIHDR692 NSERTM(J)=NSERCR(J) DIHDR693 NAMECR(J)=NAMETM(J) DIHDR694 NALTCR(J)=NALTTM(J) DIHDR695 ATMXCR(J)=ATMXTM(J) DIHDR696 ATMYCR(J)=ATMYTM(J) DIHDR697 ATMZCR(J)=ATMZTM(J) DIHDR698 30 CONTINUE DIHDR699 GO TO 40 DIHDR700 C DIHDR701 40 RETURN DIHDR702 END DIHDR703 SUBROUTINE LDMNS1 DIHDR704 C DIHDR705 C LOADS C(I-1) INTO RES1 AND ZEROES OUT INLOC DIHDR706 C C(I-1) IS LOADED FROM CURRENT CONTENTS OF LOC(4) IN XYZ TO LOC(1) DIHDR707 C ICAN IS THE NUMBER OF UNIQUE ALTERNATE LOCATIONS IN C(I-1) DIHDR708 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR709 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHDR710 C IBLANK DIHDR711 C DIHDR712 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHDR713 DIMENSION XYZ(3,60), INLOC(60) DIHDR714 C DIHDR715 C DIHDR716 COMMON /RES1/ XYZ,INLOC DIHDR717 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHDR718 DATA IBLANK/1H / DIHDR719 C DIHDR720 ICAN=1 DIHDR721 C DIHDR722 C ZERO OUT LOCATION INDICATOR FOR C(I-1) DIHDR723 C DIHDR724 DO 10 I=1,5 DIHDR725 I1=(I-1)*11+1 DIHDR726 10 INLOC(I1)=0 DIHDR727 C DIHDR728 C DIHDR729 C LOOK FOR OCCURENCES OF C(I-1) AND LOAD IT INTO LOC(1) DIHDR730 C DIHDR731 DO 20 I=1,IALT DIHDR732 I1=(I-1)*11+4 DIHDR733 IF (INLOC(I1).NE.0) GO TO 30 DIHDR734 20 CONTINUE DIHDR735 C DIHDR736 C THERE ARE NO C(I) SO NONE CAN BE LOADED DIHDR737 C DIHDR738 GO TO 90 DIHDR739 C DIHDR740 30 CONTINUE DIHDR741 XYZ(1,1)=XYZ(1,I1) DIHDR742 XYZ(2,1)=XYZ(2,I1) DIHDR743 XYZ(3,1)=XYZ(3,I1) DIHDR744 INLOC(1)=1 DIHDR745 IST=2 DIHDR746 NALT1(1)=NALT2(I) DIHDR747 IF (IST.GT.IALT) GO TO 90 DIHDR748 C DIHDR749 C NOW WE SEE IF THERE ARE ANY MORE UNIQUE C(I) TO LOAD DIHDR750 C DIHDR751 DO 80 I=IST,IALT DIHDR752 I2=(I-1)*11+4 DIHDR753 IF (INLOC(I2).EQ.0) GO TO 80 DIHDR754 C DIHDR755 C WE HAVE ANOTHER C(I) SEE IF WE ALREADY HAVE IT STORED DIHDR756 C DIHDR757 DO 50 J=1,ICAN DIHDR758 J2=(J-1)*11+1 DIHDR759 DO 40 K=1,3 DIHDR760 IF (ABS(XYZ(K,I2)-XYZ(K,J2)).GT.1.0E-5) GO TO 60 DIHDR761 40 CONTINUE DIHDR762 50 CONTINUE DIHDR763 GO TO 80 DIHDR764 C DIHDR765 C UPDATE NUMBER OF ALTERNATE CODES FOR C(I-1) DIHDR766 C DIHDR767 60 ICAN=ICAN+1 DIHDR768 I1=(ICAN-1)*11+1 DIHDR769 DO 70 K=1,3 DIHDR770 70 XYZ(K,I1)=XYZ(K,I2) DIHDR771 INLOC(I1)=1 DIHDR772 NALT1(ICAN)=NALT2(I) DIHDR773 GO TO 80 DIHDR774 C DIHDR775 80 CONTINUE DIHDR776 C DIHDR777 C RESET INLOC DIHDR778 C DIHDR779 90 DO 100 K=2,11 DIHDR780 DO 100 I=1,5 DIHDR781 I1=(I-1)*11+K DIHDR782 INLOC(I1)=0 DIHDR783 100 CONTINUE DIHDR784 C DIHDR785 C FOR ONE ALTERNATE CODE, JUST USE A BLANK DIHDR786 C DIHDR787 IF (ICAN.LE.1) NALT1(ICAN)=IBLANK DIHDR788 RETURN DIHDR789 END DIHDR790 SUBROUTINE LDCRR1 DIHDR791 C DIHDR792 C LOADS RES1 AND RES2 FROM CURRES DIHDR793 C IALT DEFINES THE NUMBER OF UNIQUE ALTERNATE LOCATIONS IN RES(I) DIHDR794 C ATOMS ARE LOADED INTO LOCATIONS IN XYZ DEPENDING ON THE ATOM NAME DIHDR795 C DIHDR796 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR797 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHDR798 C NRESTM,NCHNTM,INSCTM,NAMETM,NALTTM DIHDR799 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHDR800 C IATMNM,NALTUQ,IBLANK DIHDR801 C DIHDR802 DIMENSION NSERTM(100), NAMETM(100), NALTTM(100) DIHDR803 DIMENSION ATMXTM(100), ATMYTM(100), ATMZTM(100) DIHDR804 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHDR805 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHDR806 DIMENSION XYZ(3,60), INLOC(60), INDIC(42) DIHDR807 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHDR808 DIMENSION IATMNM(42) DIHDR809 C DIHDR810 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHDR811 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHDR812 COMMON /TMPRES/ NALLTM,NRESTM,NCHNTM,NSEQTM,INSCTM,NSERTM,NAMETM,NDIHDR813 1ALTTM,ATMXTM,ATMYTM,ATMZTM DIHDR814 COMMON /RES1/ XYZ,INLOC DIHDR815 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHDR816 C DIHDR817 DATA (INDIC(I),I=1,42)/2,3,4,5,5*6,6*7,5*8,2*9,20*0/ DIHDR818 DATA (IATMNM(I),I=1,42)/4H N ,4H CA ,4H C ,4H CB ,4H CG ,4H CG1,DIHDR819 14H OG ,4H OG1,4H SG ,4H CD ,4H CD1,4H ND1,4H OD1,4H AD1,4H SD ,4H DIHDR820 2CE ,4H CE1,4H NE ,4H OE1,4H AE1,4H CZ ,4H NZ ,4H O ,4H CG2,4H CD2DIHDR821 3,4H ND2,4H OD2,4H AD2,4H CE2,4H CE3,4H NE1,4H NE2,4H OE2,4H AE2,4HDIHDR822 4 CZ2,4H CZ3,4H CH2,4H NH1,4H NH2,4H OH ,4H OXT,4H OE / DIHDR823 DATA INTOTM/1/ DIHDR824 DATA IBLANK/1H / DIHDR825 C DIHDR826 IDEN(I,J)=I-J DIHDR827 C DIHDR828 IDIR=INTOTM DIHDR829 CALL PUSHRS (IDIR) DIHDR830 NALLCR=0 DIHDR831 DO 10 I=1,NALLTM DIHDR832 DO 10 J=1,22 DIHDR833 IF (IDEN(NAMETM(I),IATMNM(J)).NE.0) GO TO 10 DIHDR834 C DIHDR835 C THIS IS AN ATOM THAT IS NEEDED FOR CALCULATION DIHDR836 C DIHDR837 NALLCR=NALLCR+1 DIHDR838 NSERCR(NALLCR)=NSERTM(I) DIHDR839 NAMECR(NALLCR)=NAMETM(I) DIHDR840 NALTCR(NALLCR)=NALTTM(I) DIHDR841 ATMXCR(NALLCR)=ATMXTM(I) DIHDR842 ATMYCR(NALLCR)=ATMYTM(I) DIHDR843 ATMZCR(NALLCR)=ATMZTM(I) DIHDR844 10 CONTINUE DIHDR845 C DIHDR846 C COUNT HOW MANY ALTERNATE LOCATIONS OCCUR IN CURRES DIHDR847 C DIHDR848 CALL CNTALT (IALT,NALT2) DIHDR849 C DIHDR850 DO 50 J=1,IALT DIHDR851 DO 50 I=1,NALLCR DIHDR852 K=1 DIHDR853 20 IF (IDEN(NAMECR(I),IATMNM(K)).EQ.0) GO TO 30 DIHDR854 K=K+1 DIHDR855 C DIHDR856 C ATOM IS NOT IN THE LIST ,DO NOT LOAD IT DIHDR857 C DIHDR858 IF (K.LE.22) GO TO 20 DIHDR859 I1=0 DIHDR860 GO TO 40 DIHDR861 C DIHDR862 C CALCULATE FOR THE ATOMS POSITION IN RES1 DIHDR863 C DIHDR864 30 IF (.NOT.((IDEN(NALTCR(I),IBLANK).EQ.0).OR.(IDEN(NALTCR(I),NALT2(JDIHDR865 1)).EQ.0))) GO TO 50 DIHDR866 I1=INDIC(K) DIHDR867 I1=(J-1)*11+I1 DIHDR868 GO TO 40 DIHDR869 C DIHDR870 40 IF (I1.EQ.0) GO TO 50 DIHDR871 XYZ(1,I1)=ATMXCR(I) DIHDR872 XYZ(2,I1)=ATMYCR(I) DIHDR873 XYZ(3,I1)=ATMZCR(I) DIHDR874 INLOC(I1)=1 DIHDR875 GO TO 50 DIHDR876 C DIHDR877 50 CONTINUE DIHDR878 C DIHDR879 C PUSH CONTENTS INTO RES2 DIHDR880 C DIHDR881 NRES=NRESCR DIHDR882 NCHN=NCHNCR DIHDR883 NSEQ=NSEQCR DIHDR884 INSC=INSCCR DIHDR885 GO TO 60 DIHDR886 C DIHDR887 60 RETURN DIHDR888 END DIHDR889 SUBROUTINE OMEGA (IL,IN,IC,IOUT) DIHDR890 C DIHDR891 C THIS ROUTINE DOES THE ACTUAL TORSION ANGLE CALCULATION DIHDR892 C DIHDR893 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHDR894 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHDR895 C LABL1,LABL2,IDSET DIHDR896 C DIHDR897 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHDR898 DIMENSION XYZ(3,60), INLOC(60) DIHDR899 DIMENSION ANGLE(7) DIHDR900 DIMENSION IPTR1(24), IPTR2(24), IBONDS(114) DIHDR901 DIMENSION KODE(4,7) DIHDR902 C DIHDR903 COMMON /RES1/ XYZ,INLOC DIHDR904 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHDR905 COMMON /HEADER/ IDSET DIHDR906 C DIHDR907 C DIHDR908 DATA LABL1/4HTORA/,LABL2/2HNG/ DIHDR909 DATA ((KODE(I,J),I=1,4),J=1,7)/1,2,3,4,2,3,4,10,3,4,10,11,2,3,5,6,DIHDR910 13,5,6,7,5,6,7,8,6,7,8,9/ DIHDR911 DATA (IPTR1(I),I=1,24)/1,4,9,13,18,24,29,32,37,42,49,54,60,65,68,7DIHDR912 14,81,85,89,93,98,103,109,112/ DIHDR913 DATA (IPTR2(I),I=1,24)/3,5,4,5,6,5,3,5,5,7,5,6,5,3,6,7,4,4,4,5,5,6DIHDR914 1,3,3/ DIHDR915 DATA (IBONDS(I),I=1,114)/1,2,3,1,2,3,4,5,1,2,3,4,1,2,3,4,5,1,2,3,4DIHDR916 1,5,6,1,2,3,4,5,1,2,3,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,6,7,1,2,3,4,5,1DIHDR917 2,2,3,4,5,6,1,2,3,4,5,1,2,3,1,2,3,4,5,6,1,2,3,4,5,6,7,1,2,3,4,1,2,3DIHDR918 3,4,1,2,3,4,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,6,1,2,3,1,2,3/ DIHDR919 C DIHDR920 C GET THE RESIDUE TYPE CODE DIHDR921 C DIHDR922 CALL ISRSAA (NRES,IRES) DIHDR923 C DIHDR924 C GET THE NUMBER OF BONDS IN THIS RESIDUE AND ITS LOCATION IN BOND DIHDR925 C DIHDR926 NB=IPTR2(IRES) DIHDR927 IST=IPTR1(IRES) DIHDR928 C DIHDR929 DO 10 L=1,7 DIHDR930 10 ANGLE(L)=-999. DIHDR931 C DIHDR932 C DIHDR933 DO 80 L=1,NB DIHDR934 C DIHDR935 IBTYPE=IBONDS(IST) DIHDR936 C DIHDR937 I1=KODE(1,IBTYPE) DIHDR938 I2=KODE(2,IBTYPE) DIHDR939 I3=KODE(3,IBTYPE) DIHDR940 I4=KODE(4,IBTYPE) DIHDR941 C DIHDR942 C SEE IF IT IS A C(I-1) DIHDR943 C DIHDR944 IF (I1.NE.1) GO TO 20 DIHDR945 C DIHDR946 C RETRIEVE IT IN RES1 DEPENDING ON THE ALTERNATE LOCATOR IC DIHDR947 C DIHDR948 I1=(IC-1)*11+I1 DIHDR949 GO TO 30 DIHDR950 C DIHDR951 C RETRIEVE IT IN RES1 DEPENDING ON THE ALTERNATE LOCATOR IL DIHDR952 C DIHDR953 20 I1=(IL-1)*11+I1 DIHDR954 GO TO 30 DIHDR955 C DIHDR956 C SEE IF IT IS A N(I+1) DIHDR957 C DIHDR958 30 IF (I3.NE.10) GO TO 40 DIHDR959 C DIHDR960 C RETRIEVE IT IN RES1 DEPENDING ON THE ALTERNATE LOCATOR IN DIHDR961 C DIHDR962 I3=(IN-1)*11+I3 DIHDR963 GO TO 50 DIHDR964 C DIHDR965 C RETRIEVE IT IN RES1 DEPENDING ON THE ALTERNATE LOCATOR IL DIHDR966 C DIHDR967 40 I3=(IL-1)*11+I3 DIHDR968 GO TO 50 DIHDR969 C DIHDR970 50 IF (.NOT.((I4.EQ.10).OR.(I4.EQ.11))) GO TO 60 DIHDR971 C DIHDR972 C RETRIEVE IT IN RES1 DEPENDING ON THE ALTERNATE LOCATOR IN DIHDR973 C DIHDR974 I4=(IN-1)*11+I4 DIHDR975 GO TO 70 DIHDR976 C DIHDR977 C RETRIEVE IT IN RES1 DEPENDING ON THE ALTERNATE LOCATOR IL DIHDR978 C DIHDR979 60 I4=(IL-1)*11+I4 DIHDR980 GO TO 70 DIHDR981 C DIHDR982 70 I2=(IL-1)*11+I2 DIHDR983 C DIHDR984 C CHECK TO SEE IF THERE ARE ANY MISSING ATOMS DIHDR985 C DIHDR986 ITMP=INLOC(I1)+INLOC(I2)+INLOC(I3)+INLOC(I4) DIHDR987 IF (ITMP.NE.4) GO TO 80 DIHDR988 C DIHDR989 ANGLE(IBTYPE)=TORCHK(XYZ(1,I1),XYZ(1,I2),XYZ(1,I3),XYZ(1,I4)) DIHDR990 GO TO 80 DIHDR991 80 IST=IST+1 DIHDR992 C DIHDR993 C PRINT THE ANGLES DIHDR994 C DIHDR995 IF (IOUT.NE.2) GO TO 90 DIHDR996 WRITE (IOUT,100) LABL1,LABL2,NRES,NCHN,NSEQ,INSC,NALT1(IC),NALT2(IDIHDR997 1L),NALT3(IN),(ANGLE(I),I=1,7),IDSET DIHDR998 90 CONTINUE DIHDR999 CALL ANGOUT (IL,IN,IC,ANGLE) DIHD1000 RETURN DIHD1001 C DIHD1002 100 FORMAT (A4,A2,1X,A3,A1,I4,4A1,7(F7.2),2X,A4) DIHD1003 END DIHD1004 SUBROUTINE ANGOUT (IL,IN,IC,ANGLE) DIHD1005 C DIHD1006 C THIS SUBROUTINE PRINTS THE ANGLES IN ALPHANUMERIC FORM DIHD1007 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1008 C NRES,NCHN,INSC,NALT1,NALT2,NALT3 DIHD1009 C IBLANK,IDSET,LINE DIHD1010 C I1 DIHD1011 C DIHD1012 DIMENSION NALT1(5), NALT2(5), NALT3(5) DIHD1013 DIMENSION ANGLE(7), LINE(14) DIHD1014 C DIHD1015 COMMON /HEADER/ IDSET DIHD1016 COMMON /RES2/ NRES,NCHN,NSEQ,INSC,IALT,ICAN,NALT1,NALT2,NALT3 DIHD1017 DATA IBLANK/4H /,LPTR/6/ DIHD1018 C DIHD1019 C THIS DATA STATEMENT IS NEEDED WHEN ENCODE/DECODE IS DONE VIA DIHD1020 C FILE TAPE3 DIHD1021 C DIHD1022 C DATA ISCR/3/ DIHD1023 C DIHD1024 IDEN(I,J)=I-J DIHD1025 C DIHD1026 C CONVERT THE ANGLES TO ALPHANUMERIC DIHD1027 C DIHD1028 DO 20 I=1,7 DIHD1029 I1=7+I DIHD1030 IF (ANGLE(I).GT.-999.) GO TO 10 DIHD1031 LINE(I1)=IBLANK DIHD1032 GO TO 20 DIHD1033 C DIHD1034 10 CONTINUE DIHD1035 I2=IFIX(ANGLE(I)+(SIGN(0.5,ANGLE(I)))) DIHD1036 C DIHD1037 C THIS CODE IS USED TO SIMULATE AN ENCODE/DECODE SEQUENCE DIHD1038 C DIHD1039 C REWIND ISCR DIHD1040 C WRITE(ISCR,50) I2 DIHD1041 C1010 FORMAT(A4) DIHD1042 C REWIND ISCR DIHD1043 C READ (ISCR,1010) LINE(I1) DIHD1044 C DIHD1045 ENCODE (4,50,LINE(I1) )I2 DIHD1046 C DIHD1047 20 CONTINUE DIHD1048 I1=LINE(10) DIHD1049 LINE(10)=IBLANK DIHD1050 C DIHD1051 LINE(1)=NRES DIHD1052 LINE(2)=NCHN DIHD1053 LINE(4)=INSC DIHD1054 C DIHD1055 C THIS CODE IS USED TO SIMULATE AN ENCODE/DECODE SEQUENCE DIHD1056 C DIHD1057 C REWIND ISCR DIHD1058 C WRITE(ISCR,50) NSEQ DIHD1059 C REWIND ISCR DIHD1060 C READ(ISCR,1010) LINE(3) DIHD1061 ENCODE (4,50,LINE(3) )NSEQ DIHD1062 C DIHD1063 IF (.NOT.((IDEN(NALT1(IC),IBLANK).EQ.0).AND.(IDEN(NALT2(IL),IBLANKDIHD1064 1).EQ.0).AND.(IDEN(NALT3(IN),IBLANK).EQ.0))) GO TO 30 DIHD1065 LINE(5)=IBLANK DIHD1066 LINE(6)=IBLANK DIHD1067 LINE(7)=IBLANK DIHD1068 WRITE (LPTR,60) LINE DIHD1069 WRITE (LPTR,70) I1 DIHD1070 GO TO 40 DIHD1071 C DIHD1072 30 LINE(5)=NALT1(IC) DIHD1073 LINE(6)=NALT2(IL) DIHD1074 LINE(7)=NALT3(IN) DIHD1075 WRITE (LPTR,80) LINE DIHD1076 WRITE (LPTR,70) I1 DIHD1077 40 RETURN DIHD1078 C DIHD1079 50 FORMAT (I4) DIHD1080 60 FORMAT (1X,A3,1X,A1,1X,A4,A1,1X,3A1,5X,A4,6(4X,A4)) DIHD1081 70 FORMAT (37X,A4) DIHD1082 80 FORMAT (1X,A3,1X,A1,1X,A4,A1,1X,1H(,A1,1H,,A1,1H,,A1,1H),1X,A4,6(4DIHD1083 1X,A4)) DIHD1084 END DIHD1085 SUBROUTINE POSNAM (IFLNAM,IER,IBUF,JCODE) DIHD1086 C DIHD1087 C THIS ROUTINE IS USED TO POSITION FILE IPDB BY NAME. DIHD1088 C DIHD1089 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1090 C IBUF,IFLNAM,IFINI,IDSET DIHD1091 C DIHD1092 C PARAMETERS PASSED TO/FROM CALLING PROGRAM DIHD1093 C IFLNAM FOUR CHARACTER PROTEIN DATA BANK ENTRY NAME DIHD1094 C IER ERROR CODE, ZERO FOR NO ERROR, NON-ZERO OTHERWISE DIHD1095 C IBUF CONTENTS OF A RECORD FROM IPDB DIHD1096 C JCODE INTEGER GIVING THE RECORD TYPE DIHD1097 C DIHD1098 DIMENSION IBUF(20) DIHD1099 C DIHD1100 COMMON /HEADER/ IDSET DIHD1101 C DIHD1102 DATA IFINI/4HFINI/,ITERM/-50/,IHEAD/1/ DIHD1103 DATA LPTR/6/ DIHD1104 C DIHD1105 IDEN(I,J)=I-J DIHD1106 C DIHD1107 IER=0 DIHD1108 C DIHD1109 10 CALL GETREC (IBUF,JCODE) DIHD1110 C DIHD1111 C TEST FOR END OF DATA BASE DIHD1112 C DIHD1113 IF (JCODE.NE.ITERM) GO TO 20 DIHD1114 GO TO 30 DIHD1115 C DIHD1116 C DIHD1117 20 IF (JCODE.NE.IHEAD) GO TO 10 DIHD1118 CALL NTRPRT (IBUF,JCODE) DIHD1119 IF (IDEN(IDSET,IFINI).EQ.0) GO TO 30 DIHD1120 IF (IDEN(IDSET,IFLNAM).EQ.0) GO TO 40 DIHD1121 GO TO 10 DIHD1122 C DIHD1123 C ERROR SINKS DIHD1124 C DIHD1125 30 IER=3 DIHD1126 WRITE (LPTR,50) DIHD1127 GO TO 40 DIHD1128 C DIHD1129 C DIHD1130 40 RETURN DIHD1131 C DIHD1132 50 FORMAT (53H0ERROR IN POSNAM--- END OF DATA BASE HAS BEEN REACHED) DIHD1133 END DIHD1134 SUBROUTINE PRNTXT (IBUF,JCODE) DIHD1135 C DIHD1136 C THIS ROUTINE HANDLES TEXT PRINTOUT DIHD1137 C THE PROGRAM HANDLES THE FOLLOWING RECORD TYPES DIFFERENTLY DIHD1138 C A) HEADER PRINTS ONLY DATE AND ENTRY CODE DIHD1139 C FOR THE FOLLOWING RECORD TYPES, AN APPROPRIATE HEADER AND THE DIHD1140 C CONTENTS OF THE BUFFER FROM COLUMN 11 IS PRINTED. DIHD1141 C COMPND DIHD1142 C SOURCE DIHD1143 C AUTHOR DIHD1144 C DIHD1145 C FOR OTHER RECORD TYPES THE WHOLE BUFFER IS PRINTED, SHIFTED BY 1 DIHD1146 C COLUMN SPACE. DIHD1147 C DIHD1148 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1149 C IBUF,IDATE,LINE,INTRY DIHD1150 C DIHD1151 C PARAMETERS PASSED TO/FROM CALLING PROGRAM DIHD1152 C IBUF CONTENTS OF AN IPDB RECORD TO BE PRINTED DIHD1153 C JCODE INTEGER GIVING THE RECORD TYPE DIHD1154 C DIHD1155 C DIHD1156 DIMENSION IBUF(20) DIHD1157 DIMENSION IDATE(3) DIHD1158 DIMENSION LINE(8) DIHD1159 C DIHD1160 COMMON /TXTCNT/ NCMPD,NSRCE,NAUTHR DIHD1161 C DIHD1162 C DIHD1163 C THIS DATA STATEMENT IS NEEDED WHEN USING FILE ISCR FOR ENCODE DIHD1164 C DIHD1165 C DATA ISCR/3/ DIHD1166 C DIHD1167 DATA IBEGIN/1/ DIHD1168 DATA IHEAD/1/ DIHD1169 DATA IJRNL/5/ DIHD1170 DATA LPTR/6/ DIHD1171 DATA ICMPD/2/,ISRCE/3/,IAUTH/4/ DIHD1172 C DIHD1173 C DIHD1174 IF (JCODE.GT.IJRNL) GO TO 50 DIHD1175 IF (JCODE.NE.IHEAD) GO TO 10 DIHD1176 C DIHD1177 C HEADER TYPE OF RECORD DIHD1178 C DIHD1179 C DIHD1180 C THE FOLLOWING STATEMENTS SIMULATE AN ENCODE/DECODE SEQUENCE DIHD1181 C DIHD1182 C REWIND ISCR DIHD1183 C WRITE(ISCR,100 ) (IBUF(I),I=1,20) DIHD1184 C REWIND ISCR DIHD1185 C READ(ISCR,110 ) IDATE,INTRY DIHD1186 C DIHD1187 ENCODE (80,100,LINE(1) )(IBUF(I),I=1,20) DIHD1188 DECODE (80,110,LINE(1) )IDATE,INTRY DIHD1189 WRITE (LPTR,120) INTRY,IDATE DIHD1190 C DIHD1191 C INITIALIZE RECORD TYPE COUNTS DIHD1192 C DIHD1193 NCMPD=IBEGIN DIHD1194 NSRCE=IBEGIN DIHD1195 NAUTHR=IBEGIN DIHD1196 GO TO 60 DIHD1197 C DIHD1198 C SHIFT THE OUTPUT SO AS NOT TO WRITE THE RECORD TYPE DIHD1199 C DIHD1200 C DIHD1201 C THE FOLLOWING STATEMENTS SIMULATE AN ENCODE/DECODE SEQUENCE DIHD1202 C DIHD1203 C 10 REWIND ISCR DIHD1204 C WRITE(ISCR,100 ) (IBUF(I),I=1,20) DIHD1205 C REWIND ISCR DIHD1206 C READ(ISCR,130 ) (IBUF(I),I=1,15) DIHD1207 C DIHD1208 10 ENCODE (80,100,LINE(1) )(IBUF(I),I=1,20) DIHD1209 DECODE (80,130,LINE(1) )(IBUF(I),I=1,15) DIHD1210 IF (JCODE.NE.ICMPD) GO TO 20 DIHD1211 IF (NCMPD.GT.1) GO TO 40 DIHD1212 NCMPD=2 DIHD1213 WRITE (LPTR,70) DIHD1214 GO TO 40 DIHD1215 20 IF (JCODE.NE.ISRCE) GO TO 30 DIHD1216 IF (NSRCE.GT.1) GO TO 40 DIHD1217 NSRCE=2 DIHD1218 WRITE (LPTR,80) DIHD1219 GO TO 40 DIHD1220 30 IF (JCODE.NE.IAUTH) GO TO 40 DIHD1221 IF (NAUTHR.GT.1) GO TO 40 DIHD1222 NAUTHR=2 DIHD1223 WRITE (LPTR,90) DIHD1224 GO TO 40 DIHD1225 40 CONTINUE DIHD1226 WRITE (LPTR,140) (IBUF(I),I=1,15) DIHD1227 GO TO 60 DIHD1228 C DIHD1229 C ALL OTHER RECORD TYPES,JUST PRINT THE ENTIRE BUFFER DIHD1230 C DIHD1231 50 WRITE (LPTR,150) (IBUF(I),I=1,20) DIHD1232 GO TO 60 DIHD1233 C DIHD1234 C DIHD1235 60 RETURN DIHD1236 C DIHD1237 C DIHD1238 70 FORMAT (5H0FOR-) DIHD1239 80 FORMAT (8H0SOURCE-) DIHD1240 90 FORMAT (14H0DEPOSITED BY-) DIHD1241 100 FORMAT (20A4) DIHD1242 110 FORMAT (50X,2A4,A2,2X,A4) DIHD1243 120 FORMAT (25H1PROTEIN DATA BANK ENTRY ,A4,9H DATED ,2A4,A2) DIHD1244 130 FORMAT (10X,15A4) DIHD1245 140 FORMAT (1X,15A4) DIHD1246 150 FORMAT (1X,20A4) DIHD1247 END DIHD1248 SUBROUTINE SKIPFL (NFILE,IER) DIHD1249 C DIHD1250 C THIS ROUTINE POSITIONS THE INPUT FILE IPDB BY SKIPPING NFILE DIHD1251 C TAPE MARKS. DIHD1252 C ROUTINE CHECKS FOR END OF DATA BASE TWO WAYS, EITHER BY A DIHD1253 C JCODE=-50 FOR DOUBLE END OF FILE OR BY A HEADER CARD WITH A FOUR DIHD1254 C LETTER CODE FINI. DIHD1255 C THIS ROUTINE COMMUNICATES WITH NTRPRT AND THUS REQUIRES THE COMMONDIHD1256 C BLOCK HEADER DIHD1257 C DIHD1258 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1259 C IBUF,IDSET,IFINI DIHD1260 C DIHD1261 DIMENSION IBUF(20) DIHD1262 COMMON /HEADER/ IDSET DIHD1263 C DIHD1264 C DIHD1265 DATA ITERM/-50/,IHEAD/1/,IEND/31/,IENDFL/-100/ DIHD1266 DATA IFINI/4HFINI/,IATOM/27/,LPTR/6/ DIHD1267 C DIHD1268 IDEN(I,J)=I-J DIHD1269 C DIHD1270 IER=0 DIHD1271 IEOF=0 DIHD1272 I=1 DIHD1273 C DIHD1274 10 CALL GETREC (IBUF,JCODE) DIHD1275 C DIHD1276 IF (JCODE.EQ.IATOM) GO TO 60 DIHD1277 C DIHD1278 IF (JCODE.NE.IHEAD) GO TO 20 DIHD1279 CALL NTRPRT (IBUF,JCODE) DIHD1280 IF (IDEN(IDSET,IFINI).EQ.0) GO TO 70 DIHD1281 GO TO 60 DIHD1282 C DIHD1283 20 IF (JCODE.NE.IEND) GO TO 30 DIHD1284 IEOF=1 DIHD1285 GO TO 40 DIHD1286 C DIHD1287 30 IF (JCODE.NE.IENDFL) GO TO 50 DIHD1288 IF (IEOF.EQ.0) GO TO 40 DIHD1289 IEOF=0 DIHD1290 GO TO 60 DIHD1291 C DIHD1292 40 I=I+1 DIHD1293 IF (I.GT.NFILE) GO TO 80 DIHD1294 GO TO 60 DIHD1295 C DIHD1296 50 IF (JCODE.NE.ITERM) GO TO 60 DIHD1297 GO TO 70 DIHD1298 C DIHD1299 60 GO TO 10 DIHD1300 C DIHD1301 C DIHD1302 70 IER=3 DIHD1303 WRITE (LPTR,90) DIHD1304 C DIHD1305 80 RETURN DIHD1306 C DIHD1307 90 FORMAT (43H0END OF DATA BASE HAS BEEN REACHED---SKIPFL) DIHD1308 END DIHD1309 SUBROUTINE GETRES (IRC,NINC,INCATM,IBUF,JCODE,JHET) DIHD1310 C DIHD1311 C THIS ROUTINE COLLECTS ATOMS AND FORMS A COMPLETE RESIDUE DIHD1312 C A COMPLETE RESIDUE IS DEFINED AS HAVING IDENTICAL CODES IN THE DIHD1313 C FOLLOWING FIELDS DIHD1314 C 1) RESIDUE NAME DIHD1315 C 2) RESIDUE SEQUENCE NUMBER DIHD1316 C 3) CHAIN NAME DIHD1317 C 4) INSERT CODE DIHD1318 C DIHD1319 C DIHD1320 C IRC IS THE RETURN CODE DIHD1321 C IRC = 0 FOR INITIAL ENTRY TO ROUTINE,MUST BE SET BY CALLING PGM. DIHD1322 C IRC = 1 IBUF CONTAINS A NON-ATOM RECORD TYPE,JCODE HAS THE REC TYPDIHD1323 C IRC = 2 COMPLETED A RESIDUE IT IS IN CURRES DIHD1324 C DIHD1325 C NINC NUMBER OF ATOM NAMES FOUND IN INCATM THAT ARE TO DIHD1326 C BE INCLUDED IN ACCUMULATING THE RESIDUE, ALL OTHERS DIHD1327 C ARE IGNORED. WHEN THIS IS SET TO ZERO, GETRES WILL DIHD1328 C INCLUDE ALL THE ATOMS IN A RESIDUE. DIHD1329 C INCATM ARRAY CONTAINING ATOM NAMES, GETRES WILL ACCUMULATE DIHD1330 C ONLY THESE ATOMS. DIHD1331 C IBUF CONTENTS OF A RECORD FROM IPDB DIHD1332 C JCODE INTEGER GIVING THE RECORD TYPE DIHD1333 C JHET FLAG TO INDICATE WHETHER HETATMS ARE TO BE PROCESSED DIHD1334 C OR NOT. DIHD1335 C JHET = 0 PROCESS HETATM DIHD1336 C JHET = 1 DO NOT PROCESS HETATM DIHD1337 C DIHD1338 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1339 C IBUF,INCATM DIHD1340 C NAME27,NALT27,NRES27,NCHN27,INSC27 DIHD1341 C NAMECR,NALTCR,NRESCR,NCHNCR,INSCCR DIHD1342 C NAMEOL,NALTOL,NRESOL,NCHNOL,INSCOL DIHD1343 C DIHD1344 C DIHD1345 C NEW ATOM CARDS ARE ASSUMED TO HAVE BEEN DEPOSITED IN COMMON AREA DIHD1346 C NAMED ATOM BY THE ROUTINE NTRPRT DIHD1347 C DIHD1348 DIMENSION IBUF(20) DIHD1349 DIMENSION INCATM(20) DIHD1350 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHD1351 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHD1352 C DIHD1353 COMMON /ATOM/ NSER27,NAME27,NALT27,NRES27,NCHN27,NSEQ27,INSC27,ATMDIHD1354 1X27,ATMY27,ATMZ27,OCPN27,TEMP27 DIHD1355 C DIHD1356 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHD1357 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHD1358 C DIHD1359 COMMON /OLDRES/ NSEROL,NAMEOL,NALTOL,NRESOL,NCHNOL,NSEQOL,INSCOL,ADIHD1360 1TMXOL,ATMYOL,ATMZOL DIHD1361 C DIHD1362 COMMON /RESLCL/ INOL DIHD1363 C DIHD1364 DATA IATOM/27/ DIHD1365 DATA IYES/0/,IHET/36/ DIHD1366 C DIHD1367 IDEN(I,J)=I-J DIHD1368 C DIHD1369 IF (IRC.NE.0) GO TO 10 DIHD1370 INOL=0 DIHD1371 NALLCR=0 DIHD1372 GO TO 20 DIHD1373 C DIHD1374 10 IF (INOL.NE.1) GO TO 20 DIHD1375 INOL=0 DIHD1376 NALLCR=1 DIHD1377 CALL PUSHCR (NRESOL,NCHNOL,NSEQOL,INSCOL,NSEROL,NAMEOL,NALTOL,ATMXDIHD1378 1OL,ATMYOL,ATMZOL) DIHD1379 GO TO 20 DIHD1380 C DIHD1381 20 CALL GETREC (IBUF,JCODE) DIHD1382 C DIHD1383 IF ((JCODE.EQ.IATOM).OR.(JCODE.EQ.IHET.AND.JHET.EQ.IYES)) GO TO 30DIHD1384 C DIHD1385 IRC=1 DIHD1386 GO TO 90 DIHD1387 C DIHD1388 30 JCODE=27 DIHD1389 CALL NTRPRT (IBUF,JCODE) DIHD1390 C DIHD1391 C CHECK WHETHER WE WANT THIS ATOM DIHD1392 C DIHD1393 IF (NINC.EQ.0) GO TO 50 DIHD1394 C DIHD1395 DO 40 J=1,NINC DIHD1396 IF (IDEN(NAME27,INCATM(J)).EQ.0) GO TO 50 DIHD1397 40 CONTINUE DIHD1398 GO TO 80 DIHD1399 C DIHD1400 50 IF (NALLCR.LE.0) GO TO 70 DIHD1401 IF (IDEN(NRES27,NRESCR).NE.0) GO TO 60 DIHD1402 IF (IDEN(NSEQ27,NSEQCR).NE.0) GO TO 60 DIHD1403 IF (IDEN(NCHN27,NCHNCR).NE.0) GO TO 60 DIHD1404 IF (IDEN(INSC27,INSCCR).NE.0) GO TO 60 DIHD1405 GO TO 70 DIHD1406 C DIHD1407 60 IRC=2 DIHD1408 INOL=1 DIHD1409 CALL PUSHOL (NSER27,NAME27,NALT27,NRES27,NCHN27,NSEQ27,INSC27,ATMXDIHD1410 127,ATMY27,ATMZ27) DIHD1411 GO TO 90 DIHD1412 C DIHD1413 70 NALLCR=NALLCR+1 DIHD1414 CALL PUSHCR (NRES27,NCHN27,NSEQ27,INSC27,NSER27,NAME27,NALT27,ATMXDIHD1415 127,ATMY27,ATMZ27) DIHD1416 GO TO 80 DIHD1417 C DIHD1418 80 GO TO 20 DIHD1419 C DIHD1420 90 RETURN DIHD1421 END DIHD1422 SUBROUTINE PUSHCR (NRES,NCHN,NSEQ,INSC,NSER,NAME,NALT,ATMX,ATMY,ATDIHD1423 1MZ) DIHD1424 C DIHD1425 C THIS ROUTINE DEPOSITS VALUES FOR THE VARIABLES IN THE COMMON DIHD1426 C AREA CURRES. DIHD1427 C DIHD1428 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1429 C NRES,NCHN,INSC,NAME,NALT DIHD1430 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHD1431 C DIHD1432 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHD1433 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHD1434 C DIHD1435 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHD1436 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHD1437 C DIHD1438 C DIHD1439 NRESCR=NRES DIHD1440 NCHNCR=NCHN DIHD1441 NSEQCR=NSEQ DIHD1442 INSCCR=INSC DIHD1443 NSERCR(NALLCR)=NSER DIHD1444 NAMECR(NALLCR)=NAME DIHD1445 NALTCR(NALLCR)=NALT DIHD1446 ATMXCR(NALLCR)=ATMX DIHD1447 ATMYCR(NALLCR)=ATMY DIHD1448 ATMZCR(NALLCR)=ATMZ DIHD1449 RETURN DIHD1450 END DIHD1451 SUBROUTINE PUSHOL (NSER,NAME,NALT,NRES,NCHN,NSEQ,INSC,ATMX,ATMY,ATDIHD1452 1MZ) DIHD1453 C DIHD1454 C THIS ROUTINE DEPOSITS VALUES FOR THE VARIABLES IN THE COMMON DIHD1455 C AREA OLDRES DIHD1456 C DIHD1457 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1458 C NAME,NALT,NRES,NCHN,INSC DIHD1459 C NAMEOL,NALTOL,NRESOL,NCHNOL,INSCOL DIHD1460 C DIHD1461 C DIHD1462 COMMON /OLDRES/ NSEROL,NAMEOL,NALTOL,NRESOL,NCHNOL,NSEQOL,INSCOL,ADIHD1463 1TMXOL,ATMYOL,ATMZOL DIHD1464 C DIHD1465 NSEROL=NSER DIHD1466 NAMEOL=NAME DIHD1467 NALTOL=NALT DIHD1468 NRESOL=NRES DIHD1469 NCHNOL=NCHN DIHD1470 NSEQOL=NSEQ DIHD1471 INSCOL=INSC DIHD1472 ATMXOL=ATMX DIHD1473 ATMYOL=ATMY DIHD1474 ATMZOL=ATMZ DIHD1475 C DIHD1476 RETURN DIHD1477 END DIHD1478 SUBROUTINE NTRPRT (IBUF,JCODE) DIHD1479 C DIHD1480 C THIS ROUTINE DECODES A RECORD TYPE AND STORES THE PERTINENT DIHD1481 C VARIABLES IN A NAMED COMMON AREA DIHD1482 C EACH RECORD TYPE WILL BE GIVEN A NAMED COMMON AREA DIHD1483 C DIHD1484 C REC. NO. TYPE JCODE DIHD1485 C 1 HEADER 1 DIHD1486 C 2 COMPND 2 DIHD1487 C 3 SOURCE 3 DIHD1488 C 4 AUTHOR 4 DIHD1489 C 5 JRNL 5 DIHD1490 C 6 REMARK 6 DIHD1491 C 7 FTNOTE 7 DIHD1492 C 8 HET 8 DIHD1493 C 9 HELIX 9 DIHD1494 C 10 SHEET 10 DIHD1495 C 11 TURN 11 DIHD1496 C 12 SITE 12 DIHD1497 C 13 CRYST,CRYST1 13 DIHD1498 C 14 ORIGX,ORIGX1,ORIGX2,ORIGX3 15 DIHD1499 C 15 SCALE,SCALE1,SCALE2,SCALE3 19 DIHD1500 C 16 MTRIX,MTRIX1,MTRIX2,MTRIX3 23 DIHD1501 C 17 ATOM 27 DIHD1502 C 18 TER 28 DIHD1503 C 19 CONECT 29 DIHD1504 C 20 MASTER 30 DIHD1505 C 21 END 31 DIHD1506 C 22 SEQRES 32 DIHD1507 C 23 SSBOND 33 DIHD1508 C 24 FORMUL 34 DIHD1509 C 25 TVECT 35 DIHD1510 C 26 HETATM 36 DIHD1511 C 27 SIGATM 37 DIHD1512 C DIHD1513 C DIHD1514 C NAMING CONVENTION USED DIHD1515 C VARIABLE NAMES DIHD1516 C DEFAULT VARIABLE TYPE IS USED DIHD1517 C FIRST FOUR LETTERS ARE USER MNEMONICS DIHD1518 C LAST TWO INDICATE RECORD TYPE DIHD1519 C FOUR CHARACTERS STORED PER VARIABLE DIHD1520 C DIHD1521 C DIHD1522 C THIS ROUTINE WILL EXPAND IN THE FUTURE TO HANDLE OTHER RECORD DIHD1523 C TYPES DIHD1524 C DIHD1525 C MNEMONICS USED DIHD1526 C SERIAL NUMBER - NSER DIHD1527 C ATOM NAME - NAME DIHD1528 C ALTERNATE LOCATOR - NALT DIHD1529 C RESIDUE NAME - NRES DIHD1530 C CHAIN ID - NCHN DIHD1531 C RESIDUE SEQ. - NSEQ DIHD1532 C INSERTION CODE - INSC DIHD1533 C DIHD1534 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1535 C IBUF,LINE,IDSET DIHD1536 C NAME27,NALT27,NRES27,NCHN27,INSC27 DIHD1537 C DIHD1538 C DIHD1539 DIMENSION IBUF(20) DIHD1540 DIMENSION LINE(8) DIHD1541 C DIHD1542 COMMON /ATOM/ NSER27,NAME27,NALT27,NRES27,NCHN27,NSEQ27,INSC27,ATMDIHD1543 1X27,ATMY27,ATMZ27,OCPN27,TEMP27 DIHD1544 C DIHD1545 COMMON /HEADER/ IDSET DIHD1546 C DIHD1547 DATA IHEAD/1/,IATOM/27/ DIHD1548 C DIHD1549 C THIS DATA STATEMENT IS NEEDED WHEN FILE ISCR IS USED FOR ENCODE DIHD1550 C DIHD1551 C DATA ISCR/3/ DIHD1552 C DIHD1553 C DIHD1554 NTYPS=37 DIHD1555 C DIHD1556 IF (JCODE.GT.NTYPS) GO TO 40 DIHD1557 C DIHD1558 C JCODE = 27 ATOM RECORD TYPE DIHD1559 C DIHD1560 IF (JCODE.NE.IATOM) GO TO 10 DIHD1561 C DIHD1562 C DIHD1563 C THE FOLLOWING STATEMENTS SIMULATE AN ENCODE/DECODE SEQUENCE DIHD1564 C DIHD1565 C REWIND ISCR DIHD1566 C WRITE(ISCR,80) (IBUF(I),I=1,20) DIHD1567 C REWIND ISCR DIHD1568 C READ(ISCR,50) NSER27,NAME27,NALT27,NRES27,NCHN27, DIHD1569 C 1 NSEQ27,INSC27,ATMX27,ATMY27,ATMZ27, DIHD1570 C 2 OCPN27,TEMP27 DIHD1571 C DIHD1572 ENCODE (80,80,LINE(1) )(IBUF(I),I=1,20) DIHD1573 DECODE (80,50,LINE(1) )NSER27,NAME27,NALT27,NRES27,NCHN27,NSEQ27,IDIHD1574 1NSC27,ATMX27,ATMY27,ATMZ27,OCPN27,TEMP27 DIHD1575 GO TO 30 DIHD1576 C DIHD1577 C JCODE = 1 HEADER TYPE OF RECORD DIHD1578 C DIHD1579 10 IF (JCODE.NE.IHEAD) GO TO 20 DIHD1580 C DIHD1581 C DIHD1582 C THE FOLLOWING STATEMENTS SIMULATE AN ENCODE/DECODE SEQUENCE DIHD1583 C DIHD1584 C REWIND ISCR DIHD1585 C WRITE(ISCR,80) (IBUF(I),I=1,20) DIHD1586 C REWIND ISCR DIHD1587 C READ(ISCR, 60) IDSET DIHD1588 C DIHD1589 ENCODE (80,80,LINE(1) )(IBUF(I),I=1,20) DIHD1590 DECODE (80,60,LINE(1) )IDSET DIHD1591 GO TO 30 DIHD1592 C DIHD1593 C DIHD1594 20 GO TO 30 DIHD1595 C DIHD1596 C DIHD1597 30 RETURN DIHD1598 C DIHD1599 C DIHD1600 40 WRITE (6,70) DIHD1601 RETURN DIHD1602 C DIHD1603 C DIHD1604 50 FORMAT (6X,I5,1X,A4,A1,A3,1X,A1,I4,A1,3X,3F8.3,2F6.2,1X,I3) DIHD1605 60 FORMAT (62X,A4) DIHD1606 70 FORMAT (27H ERROR IN NTRPRT,.GT. NTYPS) DIHD1607 80 FORMAT (20A4) DIHD1608 END DIHD1609 SUBROUTINE NEWLIN (ITITLE,LINENO,IPAGE) DIHD1610 C DIHD1611 C THIS ROUTINE IS USED TO CONTROL PAGINATION. DIHD1612 C THIS ROUTINE SHOULD BE CALLED ONCE FOR EVERY OUTPUT TO LPTR. DIHD1613 C DIHD1614 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1615 C ITITLE DIHD1616 C DIHD1617 DATA MAXLIN/60/ DIHD1618 C DIHD1619 C DIHD1620 LINENO=LINENO+1 DIHD1621 IF (LINENO.LT.MAXLIN) GO TO 10 DIHD1622 IPAGE=IPAGE+1 DIHD1623 CALL NEWPAG (ITITLE,IPAGE) DIHD1624 LINENO=6 DIHD1625 GO TO 10 DIHD1626 C DIHD1627 C DIHD1628 10 RETURN DIHD1629 END DIHD1630 SUBROUTINE NEWPAG (ITITLE,IPAGE) DIHD1631 C DIHD1632 C THIS ROUTINE IS CALLED TO WRITE OUT A NEW PAGE DIHD1633 C DIHD1634 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1635 C ITITLE,IBLANK DIHD1636 C DIHD1637 DATA LPTR/6/,IBLANK/1H / DIHD1638 C DIHD1639 C DIHD1640 WRITE (LPTR,10) ITITLE,IPAGE DIHD1641 C DIHD1642 C SKIP TWO LINES DIHD1643 C DIHD1644 WRITE (LPTR,20) IBLANK DIHD1645 C DIHD1646 RETURN DIHD1647 C DIHD1648 10 FORMAT (1H1,26HPROTEIN DATA BANK ENTRY ,A4,38X,4HPAGE,I5) DIHD1649 20 FORMAT (1H0,A1) DIHD1650 END DIHD1651 SUBROUTINE CNTALT (IALT,NALTUQ) DIHD1652 C DIHD1653 C THIS ROUTINE COUNTS THE NUMBER OF ALTERNATE LOCATIONS THAT DIHD1654 C OCCUR. DIHD1655 C DIHD1656 C IALT IS THE NUMBER OF ALTERNATE LOCATIONS FOUND DIHD1657 C NALTUQ IS THE ARRAY CONTAINING THE ALTERNATE LOCATION INDICATOR. DIHD1658 C DIHD1659 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1660 C NALTUQ,IBLANK DIHD1661 C NRESCR,NCHNCR,INSCCR,NAMECR,NALTCR DIHD1662 C DIHD1663 DIMENSION NALTUQ(5) DIHD1664 DIMENSION NSERCR(100), NAMECR(100), NALTCR(100) DIHD1665 DIMENSION ATMXCR(100), ATMYCR(100), ATMZCR(100) DIHD1666 COMMON /CURRES/ NALLCR,NRESCR,NCHNCR,NSEQCR,INSCCR,NSERCR,NAMECR,NDIHD1667 1ALTCR,ATMXCR,ATMYCR,ATMZCR DIHD1668 DATA IBLANK/1H / DIHD1669 IDEN(I,J)=I-J DIHD1670 IALT=1 DIHD1671 NALTUQ(1)=NALTCR(1) DIHD1672 C DIHD1673 DO 20 I=1,NALLCR DIHD1674 DO 10 J=1,IALT DIHD1675 IF (IDEN(NALTCR(I),NALTUQ(J)).EQ.0) GO TO 20 DIHD1676 C DIHD1677 10 CONTINUE DIHD1678 C DIHD1679 C WE HAVE A NEW ALTERNATE LOCATION DIHD1680 C DIHD1681 IALT=IALT+1 DIHD1682 NALTUQ(IALT)=NALTCR(I) DIHD1683 C DIHD1684 20 CONTINUE DIHD1685 IF (IALT.EQ.1) GO TO 60 DIHD1686 C DIHD1687 C IF BLANK HAD BEEN PICKED UP AS ONE OF THE ALTERNATE CODE,REMOVE ITDIHD1688 C DIHD1689 DO 30 J=1,IALT DIHD1690 IF ((IDEN(NALTUQ(J),IBLANK)).EQ.0) GO TO 40 DIHD1691 30 CONTINUE DIHD1692 GO TO 60 DIHD1693 40 IF (J.EQ.IALT) GO TO 50 DIHD1694 K=J+1 DIHD1695 NALTUQ(J)=NALTUQ(K) DIHD1696 J=J+1 DIHD1697 GO TO 40 DIHD1698 50 IALT=IALT-1 DIHD1699 GO TO 60 DIHD1700 C DIHD1701 60 RETURN DIHD1702 END DIHD1703 SUBROUTINE GETREC (IBUF,JCODE) DIHD1704 C DIHD1705 C ROUTINE NAME GETREC DIHD1706 C THIS ROUTINE READS A RECORD FROM THE INPUT FILE IPDB. DIHD1707 C AND ASSIGNS AN INTEGER CODE TO JCODE DEPENDING ON RECORD TYPE DIHD1708 C DIHD1709 C DIHD1710 C PRESENT CODE RECOGNIZES 27 RECORD TYPES DIHD1711 C JCODE IS SET TO -999 FOR UNRECOGNIZED RECORD TYPES DIHD1712 C -100 FOR END-OF-FILE DIHD1713 C -50 FOR DOUBLE END-OF-FILE DIHD1714 C DIHD1715 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1716 C IBUF,ITYP,IATOM,IHET,IREMA DIHD1717 C DIHD1718 C DIHD1719 DIMENSION IBUF(20) DIHD1720 DIMENSION ITYP(27) DIHD1721 DIMENSION NTYP(27) DIHD1722 C DIHD1723 COMMON /GTRLCL/ IEOF DIHD1724 C DIHD1725 C DIHD1726 DATA ITYP/4HHEAD,4HCOMP,4HSOUR,4HAUTH,4HJRNL,4HREMA,4HFTNO,4HHET ,DIHD1727 14HHELI,4HSHEE,4HTURN,4HSITE,4HCRYS,4HORIG,4HSCAL,4HMTRI,4HATOM,4HTDIHD1728 2ER ,4HCONE,4HMAST,4HEND ,4HSEQR,4HSSBO,4HFORM,4HTVEC,4HHETA,4HSIGADIHD1729 3/ DIHD1730 C DIHD1731 DATA NUNIQT/27/ DIHD1732 DATA NTYP/1,2,3,4,5,6,7,8,9,10,11,12,13,15,19,23,27,28,29,30,31,32DIHD1733 1,33,34,35,36,37/ DIHD1734 C DIHD1735 DATA IPDB/1/,ISTART/0/ DIHD1736 C DIHD1737 DATA IATOM/4HATOM/,IHET/4HHETA/,IREMA/4HREMA/ DIHD1738 C DIHD1739 IDEN(I,J)=I-J DIHD1740 C DIHD1741 IF (ISTART.NE.0) GO TO 10 DIHD1742 IEOF=0 DIHD1743 ISTART=1 DIHD1744 GO TO 10 DIHD1745 C DIHD1746 10 JCODE=-999 DIHD1747 C DIHD1748 C DIHD1749 READ (IPDB,110) IBUF DIHD1750 IF (EOF(IPDB)) 80,20 DIHD1751 C DIHD1752 C THESE IF STATEMENTS ARE FOR SPEED UP PURPOSES DIHD1753 C SINCE THE MAJORITY OF RECORDS WILL BE ONE OF THESE DIHD1754 C DIHD1755 20 IEOF=0 DIHD1756 C DIHD1757 C CHECK FOR ATOM TYPE DIHD1758 C DIHD1759 IF (IDEN(IBUF(1),IATOM).NE.0) GO TO 30 DIHD1760 JCODE=NTYP(17) DIHD1761 GO TO 100 DIHD1762 C DIHD1763 C CHECK FOR REMARK DIHD1764 C DIHD1765 30 IF (IDEN(IBUF(1),IREMA).NE.0) GO TO 40 DIHD1766 JCODE=NTYP(6) DIHD1767 GO TO 100 DIHD1768 C DIHD1769 C CHECK FOR HET TYPE DIHD1770 C DIHD1771 40 IF (IDEN(IBUF(1),IHET).NE.0) GO TO 50 DIHD1772 JCODE=NTYP(26) DIHD1773 GO TO 100 DIHD1774 C DIHD1775 50 DO 60 I=1,NUNIQT DIHD1776 IF (IDEN(IBUF(1),ITYP(I)).EQ.0) GO TO 70 DIHD1777 60 CONTINUE DIHD1778 C DIHD1779 C COULD NOT FIND RECORD TYPE DIHD1780 GO TO 100 DIHD1781 C DIHD1782 70 JCODE=NTYP(I) DIHD1783 GO TO 100 DIHD1784 C DIHD1785 C DIHD1786 80 IEOF=IEOF+1 DIHD1787 IF (IEOF.LT.2) GO TO 90 DIHD1788 JCODE=-50 DIHD1789 GO TO 100 DIHD1790 C DIHD1791 C DIHD1792 90 JCODE=-100 DIHD1793 GO TO 100 DIHD1794 C DIHD1795 C DIHD1796 100 RETURN DIHD1797 C DIHD1798 C DIHD1799 C DIHD1800 110 FORMAT (20A4) DIHD1801 END DIHD1802 SUBROUTINE ISRSAA (NRES,INUM) DIHD1803 C DIHD1804 C DIHD1805 C THE FOLLOWING VARIABLES ARE USED TO STORE CHARACTERS DIHD1806 C NRES,NAMESR DIHD1807 C DIHD1808 C THIS ROUTINE CHECKS WHETHER A RESUDUE IS AN AMINO ACID DIHD1809 DIMENSION NAMESR(25) DIHD1810 DATA NAMESR/3HALA,3HASX,3HCYS,3HASP,3HGLU,3HPHE,3HGLY,3HHIS,3HILE,DIHD1811 13HLYS,3HLEU,3HMET,3HASN,3HPRO,3HGLN,3HARG,3HSER,3HTHR,3HVAL,3HTRP,DIHD1812 23HTYR,3HGLX,3HHYP,3HPCA,3HUNK/ DIHD1813 IDEN(I,J)=I-J DIHD1814 C DIHD1815 INUM=0 DIHD1816 DO 10 I=1,25 DIHD1817 IF (IDEN(NAMESR(I),NRES).EQ.0) GO TO 20 DIHD1818 10 CONTINUE DIHD1819 C DIHD1820 C NOT IN THE TABLE DIHD1821 GO TO 30 DIHD1822 C DIHD1823 20 INUM=I DIHD1824 GO TO 30 DIHD1825 C DIHD1826 30 RETURN DIHD1827 END DIHD1828 FUNCTION TORCHK (A,B,C,D) DIHD1829 C DIHD1830 C CALCULATE THE TORSION ANGLE FOR FOUR ATOMS DIHD1831 C DIHD1832 C THE FOUR THREE-ELEMENT VECTORS A,B,C,D ARE THE COORDINATES (IN A DIHD1833 C CARTESIAN REFERENCE FRAME) OF THE FOUR ATOMS. DIHD1834 C DIHD1835 COMMON /VECCOM/ X(12) DIHD1836 DIMENSION Y(3), P(3), Q(3) DIHD1837 EQUIVALENCE (X(4),Y(1)), (X(7),P(1)), (X(10),Q(1)) DIHD1838 DIMENSION A(3), B(3), C(3), D(3) DIHD1839 DIMENSION ZERO(3) DIHD1840 DATA (ZERO(I),I=1,3)/0.0,0.0,0.0/ DIHD1841 CALL VECDIF (A,B,P) DIHD1842 CALL DISCHK (P,ICHK) DIHD1843 IF (ICHK.GT.0) GO TO 10 DIHD1844 CALL VECDIF (C,B,Q) DIHD1845 CALL DISCHK (Q,ICHK) DIHD1846 IF (ICHK.GT.0) GO TO 10 DIHD1847 CALL CROSS (P,Q,X) DIHD1848 CALL VECDIF (B,C,P) DIHD1849 CALL VECDIF (D,C,Q) DIHD1850 CALL DISCHK (Q,ICHK) DIHD1851 IF (ICHK.GT.0) GO TO 10 DIHD1852 CALL CROSS (P,Q,Y) DIHD1853 TORCHK=ANGLE(X,ZERO,Y) DIHD1854 CALL CROSS (X,Y,Q) DIHD1855 X(1)=DOT(P,Q) DIHD1856 IF (X(1).GT.0.0) TORCHK=-TORCHK DIHD1857 RETURN DIHD1858 10 TORCHK=-999.0 DIHD1859 RETURN DIHD1860 END DIHD1861 SUBROUTINE DISCHK (X,ICHK) DIHD1862 C DIHD1863 C CHECK TO SEE IF ATOMS ARE WITHIN REASONABLE DISTANCES BEFORE DIHD1864 C CALCULATING TORSION ANGLES. DIHD1865 C DIHD1866 DIMENSION X(3) DIHD1867 ICHK=0 DIHD1868 DSSQ=DOT(X,X) DIHD1869 IF ((DSSQ.LT.0.5).OR.(DSSQ.GT.9.00)) ICHK=1 DIHD1870 RETURN DIHD1871 END DIHD1872 SUBROUTINE VECDIF (X,Y,Z) DIHD1873 C----SUBTRACT TWO VECTORS AND RETURN THE RESULT IN Z DIHD1874 DIMENSION X(3), Y(3), Z(3) DIHD1875 DO 1000 I=1,3 DIHD1876 Z(I) = X(I) - Y(I) DIHD1877 1000 CONTINUE DIHD1878 RETURN DIHD1879 END DIHD1880 SUBROUTINE CROSS (X,Y,Z) DIHD1881 C----COMPUTE Z = X CROSS Y DIHD1882 DIMENSION X(3),Y(3),Z(3) DIHD1883 Z(1) = X(2)*Y(3) - Y(2)*X(3) DIHD1884 Z(2) =-X(1)*Y(3) + Y(1)*X(3) DIHD1885 Z(3) = X(1)*Y(2) - Y(1)*X(2) DIHD1886 RETURN DIHD1887 END DIHD1888 FUNCTION ANGLE (A,B,C) DIHD1889 C----GET THE ANGLE BETWEEN TWO VECTORS DEFINED BY THE ENDS DIHD1890 C OF THREE VECTORS DIHD1891 COMMON /VECCOM/ X(12) DIHD1892 DIMENSION Y(3) DIHD1893 EQUIVALENCE (X(4),Y(1)) DIHD1894 DIMENSION A(3),B(3),C(3) DIHD1895 CALL VECDIF (A,B,X) DIHD1896 CALL VECDIF (C,B,Y) DIHD1897 Q = AMAG(X) * AMAG(Y) DIHD1898 IF (Q .LT. 1.0E-7) Q = 1.0E-7 DIHD1899 ANGLE = DOT (X,Y) / Q DIHD1900 IF(ABS(ANGLE).GT.1.0) ANGLE=ANGLE/ABS(ANGLE) DIHD1901 ANGLE = 57.296 * ACOS (ANGLE) DIHD1902 RETURN DIHD1903 END DIHD1904 FUNCTION DOT (X,Y) DIHD1905 C----COMPUTE AND RETURN THE DOT PRODUCT OF X AND Y DIHD1906 DIMENSION X(3),Y(3) DIHD1907 DOT = 0.0 DIHD1908 DO 1000 I=1,3 DIHD1909 DOT = DOT + X(I) * Y(I) DIHD1910 1000 CONTINUE DIHD1911 RETURN DIHD1912 END DIHD1913 FUNCTION AMAG (X) DIHD1914 C----GET AND RETURN THE MAGNITUDE OF A VECTOR X DIHD1915 DIMENSION X(3) DIHD1916 AMAG = DOT(X,X) DIHD1917 AMAG = SQRT(AMAG) DIHD1918 RETURN DIHD1919 END DIHD1920