13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 1 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 0001 c read PDB file in orthogonal system (later read any pdb, convert to orth axes) 0002 c no, read RDI. convert pdb to rdi w pdb2rdi AFTER REMOVING nonatom records 0003 c operate with specified rotation + translation 0004 c put into arbitrary unit cell (given orth axis relative to cell vectors) 0005 c (write out this file for use by sfclc) 0006 c read MEP file 0007 c check for overlap of protein between asu's: 0008 c for each atom 0009 c operate on atom with each MEP operation 0010 c check atom in new position for overlap with each atom of primary position 0011 c (If primary position does not overlap with any other, that ensures 0012 c there will be no overlap between an positions?) 0013 0014 0015 REAL*4 V(3),W(3),RM(3,3),A,B,ANGLE,COSA,SINA,SYMOP(3,4,12) 0016 REAL*4 D(3,20000),CELLA,CELLB,CELLC,ALPHA,BETA,GAMMA,CELL(3,3) 0017 REAL*8 RCELL(4,4) 0018 INTEGER I,J,K,I1,I2,I3 0019 CHARACTER*15 RESI 0020 CHARACTER*40 FNAME 0021 CHARACTER*1 AXIS 0022 character*80 astring 0023 0024 WRITE(6,*) 'PROGRAM TO CHECK .RDI FILE FOR COLLISION BETWEEN' 0025 WRITE(6,*) 'ASYMMETRIC UNITS. .RDI FILE HAS ORTH COORDINATES' 0026 WRITE(6,*) 'WRITE NEW .RDI FILE WITH COOR AU ALONG CELL AXES' 0027 0028 radius=5 0029 30 TYPE *,'ENTER FILE NAME OF RDI FILE TO CHECK:' 0030 35 read(5,40)FNAME 0031 IF (FNAME.EQ.'Q') GOTO 501 0032 40 FORMAT (A40) 0033 OPEN(UNIT=2,FILE=FNAME,STATUS='OLD') 0034 0035 WRITE(6,*)'ENTER A B C ALPHA BETA GAMMA:' 0036 READ(5,*) CELLA,CELLB,CELLC,ALPHA,BETA,GAMMA 0037 0038 CELL(1,1)=CELLA 0039 CELL(2,1)=0 0040 CELL(3,1)=0 0041 CELL(1,2)=CELLB*COS(GAMMA) 0042 CELL(2,2)=CELLB*SIN(GAMMA) 0043 CELL(3,2)=0 0044 CELL(1,3)=CELLC*COS(BETA) 0045 CELL(2,3)=CELLC*COS(ALPHA)*SIN(BETA) 0046 CELL(3,3)=CELLC*SIN(ALPHA)*SIN(BETA) 0047 0048 DO 405 I=1,3 0049 DO 405 J=1,3 0050 405 RCELL(I,J)=CELL(I,J) 0051 N=3 0052 CALL MATINV(RCELL,N,DET) 0053 C IF V IS COOORD IN FRACTION ALONG UNIT CELL => X = CELL * V 0054 C SO V CAN BE OBTAINED AS V = RCELL * X 0055 C MEP operators work on V, not on X. 0056 0057 WRITE(6,*) 'ENTER NAME OF .MEP FILE WITH SYM OPS' PACKING$MAIN 13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 2 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 0058 READ(5,40)FNAME 0059 OPEN (UNIT=4,FILE=FNAME,STATUS='OLD') 0060 READ(4,*)NSYM 0061 DO 41 K=1,NSYM 0062 41 READ(4,*) ((SYMOP(I,J,K),I=1,3),J=1,4) 0063 CLOSE (UNIT=4) 0064 0065 49 format (a80) 0066 read(2,49) astring 0067 read(2,49) astring 0068 read(2,49) astring 0069 0070 L=0 0071 C 20.000 32.000 4.000 0.000 2 1 0 1.00 ALA 1 N 0072 50 format (4f10.3,3I5,f8.2,A15) 0073 C50 format (4f10.3,3I5,f8.2,' ALA 1 N ') 0074 C50 format ('HETATM',I5,' N ALA A 1 ',3f8.3,2f6.2) 0075 55 read(2,50,END=501) (v(i),i=1,3),a,I1,I2,I3,B,RESI 0076 L=L+1 0077 write (6,*) (v(i),i=1,3) 0078 0079 C IF D IS COOORD IN FRACTION ALONG UNIT CELL => V = CELL * D 0080 C SO D CAN BE OBTAINED AS D = RCELL * V 0081 C MEP operators work on V, not on X. 0082 do 92 i=1,3 0083 D(i,L)=0 0084 do 92 j=1,3 0085 92 D(i,L)=D(i,L)+rcell(i,j)*V(j) 0086 write (6,*) (D(I,L),i=1,3) 0087 IF (L.LT.20000) GOTO 55 0088 WRITE(6,*)' STOP READING FILE AFTER 20,000 ATOMS!' 0089 501 CONTINUE 0090 M=L 0091 0092 DO 700 L=1,M 0093 DO 700 ksym=2,nsym 0094 c operate on atom with symmetry operator: 0095 do 90 i=1,3 0096 w(i)=symop(i,4,ksym) 0097 do 90 j=1,3 0098 90 w(i)=w(i)+symop(i,j,ksym)*D(j,L) 0099 0100 C DO 700 LL=L,M !CHECK FOR OVERLAP WITH ITSELF OR LATER ATOM 0101 DO 700 LL=1,M !CHECK FOR OVERLAP WITH ITSELF OR ANY ATOM 0102 DIST=0 0103 DO 620 I=1,3 0104 DX=W(I)-D(I,L) 0105 620 DIST=DIST+DX*DX 0106 DIST=SQRT(DIST) 0107 IF (DIST.LT.RADIUS) THEN 0108 WRITE(6,*)'CRASH: OPERATOR ',KSYM,' ON ATOM ',L,' AT ', 0109 & (D(I,L),I=1,3),' WITH ',LL,' AT ',(D(I,L),I=1,3),DIST 0110 COUNT=COUNT+1 0111 ENDIF 0112 700 CONTINUE 0113 WRITE(6,*) M,' ATOMS CHECKED. FOUND ',COUNT, 0114 & ' COLLISIONS CLOSER THAN ',RADIUS PACKING$MAIN 13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 3 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 0115 END PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 1423 PIC CON REL LCL SHR EXE RD NOWRT QUAD 1 $PDATA 387 PIC CON REL LCL SHR NOEXE RD NOWRT QUAD 2 $LOCAL 241232 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD Total Space Allocated 243042 ENTRY POINTS Address Type Name 0-00000000 PACKING$MAIN VARIABLES Address Type Name Address Type Name Address Type Name Address Type Name 2-0003AD28 R*4 A 2-0003AD3C R*4 ALPHA ** R*4 ANGLE 2-0003ACD7 CHAR ASTRING ** CHAR AXIS 2-0003AD2C R*4 B 2-0003AD40 R*4 BETA 2-0003AD30 R*4 CELLA 2-0003AD34 R*4 CELLB 2-0003AD38 R*4 CELLC ** R*4 COSA 2-0003AD6C R*4 COUNT 2-0003AD58 R*4 DET ** R*4 DIST ** R*4 DX 2-0003ACAF CHAR FNAME 2-0003AD44 R*4 GAMMA ** I*4 I 2-0003AD48 I*4 I1 2-0003AD4C I*4 I2 2-0003AD50 I*4 I3 ** I*4 J ** I*4 K ** I*4 KSYM 2-0003AD60 I*4 L ** I*4 LL 2-0003AD64 I*4 M 2-0003AD54 I*4 N 2-0003AD5C I*4 NSYM ** R*4 RADIUS 2-0003ACA0 CHAR RESI ** R*4 SINA ARRAYS Address Type Name Bytes Dimensions 2-0003AC7C R*4 CELL 36 (3, 3) 2-000002FC R*4 D 240000 (3, 20000) 2-00000000 R*8 RCELL 128 (4, 4) 2-00000018 R*4 RM 36 (3, 3) 2-000000BC R*4 SYMOP 576 (3, 4, 12) 2-00000080 R*4 V 12 (3) 2-0000008C R*4 W 12 (3) LABELS Address Label Address Label Address Label Address Label Address Label Address Label ** 30 ** 35 1-0000016E 40' ** 41 1-00000171 49' 1-00000174 50' 0-000002C0 55 ** 90 ** 92 ** 405 0-000003DE 501 ** 620 ** 700 PACKING$MAIN 13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 4 01 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name Type Name Type Name Type Name Type Name FOR$CLOSE FOR$OPEN MATINV R*4 MTH$COS R*4 MTH$SIN R*4 MTH$SQRT 13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 5 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 0001 0002 SUBROUTINE MATPRN(ARRAY,M,N) 0003 C DOUBLE PRECISION ARRAY 0004 REAL*8 ARRAY(4,4) 0005 DO 10 I=1,M 0006 10 WRITE (6,*) (ARRAY(I,J),J=1,N) 0007 RETURN 0008 END PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 80 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 36 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD Total Space Allocated 116 ENTRY POINTS Address Type Name 0-00000000 MATPRN VARIABLES Address Type Name Address Type Name Address Type Name Address Type Name ** I*4 I ** I*4 J AP-00000008@ I*4 M AP-0000000C@ I*4 N ARRAYS Address Type Name Bytes Dimensions AP-00000004@ R*8 ARRAY 128 (4, 4) LABELS Address Label ** 10 13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 6 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 0001 0002 0003 SUBROUTINE MATINV (ARRAY, NORDER, DET) 0004 DOUBLE PRECISION ARRAY, AMAX, SAVE 0005 2 DIMENSION ARRAY(4,4), IK (10), JK (10) 0006 10 DET = 1 0007 11 DO 100 K=1, NORDER 0008 C 0009 C FIND LARGEST ELEMENT ARRAY(I,J) IN REST OF MATRIX 0010 C 0011 AMAX=0 0012 21 DO 30 I=K, NORDER 0013 DO 30 J=K, NORDER 0014 23 IF (DABS (AMAX) - DABS (ARRAY(I,J) ) ) 24, 24, 30 0015 24 AMAX=ARRAY(I,J) 0016 IK(K) =I 0017 JK(K) =J 0018 30 CONTINUE 0019 C 0020 C INTERCHANGE ROWS AND COLUMNS TO PUT AMAX IN ARRAY(K,K) 0021 C 0022 31 IF (AMAX) 41, 32, 41 0023 32 DET=0. 0024 GO TO 140 0025 41 I=IK (K) 0026 IF (I-K) 21, 51, 43 0027 43 DO 50 J=1, NORDER 0028 SAVE= ARRAY(K,J) 0029 ARRAY(K,J)= ARRAY(I,J) 0030 50 ARRAY(I,J)= -SAVE 0031 51 J=JK (K) 0032 IF (J-K) 21, 61, 53 0033 53 DO 60 I=1, NORDER 0034 SAVE= ARRAY(I,K) 0035 ARRAY(I,K)= ARRAY(I,J) 0036 60 ARRAY(I,J)= -SAVE 0037 C 0038 C ACCUMULATE ELEMENTS OF INVERSE MATRIX 0039 C 0040 61 DO 70 I=1, NORDER 0041 IF(I-K) 63, 70, 63 0042 63 ARRAY(I,K) = -ARRAY(I,K) / AMAX 0043 70 CONTINUE 0044 71 DO 80 I=1, NORDER 0045 DO 80 J=1, NORDER 0046 IF (I-K) 74, 80, 74 0047 74 IF (J-K) 75, 80, 75 0048 75 ARRAY(I,J) = ARRAY(I,J) + ARRAY(I,K) *ARRAY(K,J) 0049 80 CONTINUE 0050 81 DO 90 J=1, NORDER 0051 IF (J-K) 83, 90, 83 0052 83 ARRAY(K,J) = ARRAY(K,J) / AMAX 0053 90 CONTINUE 0054 ARRAY(K,K) = 1. / AMAX 0055 100 DET=DET *AMAX 0056 C 0057 C RESTORE ORDERING OF MATRIX MATINV 13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 7 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 0058 C 0059 101 DO 130 L=1, NORDER 0060 K= NORDER - L +1 0061 J= IK (K) 0062 IF (J-K) 111, 111, 105 0063 105 DO 110 I=1, NORDER 0064 SAVE= ARRAY(I,K) 0065 ARRAY(I,K)= -ARRAY(I,J) 0066 110 ARRAY(I,J)= SAVE 0067 111 I= JK(K) 0068 IF (I-K) 130, 130, 113 0069 113 DO 120 J=1, NORDER 0070 SAVE= ARRAY(K,J) 0071 ARRAY(K,J) = -ARRAY(I,J) 0072 120 ARRAY(I,J)= SAVE 0073 130 CONTINUE 0074 140 RETURN 0075 END PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 637 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 164 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD Total Space Allocated 801 ENTRY POINTS Address Type Name 0-00000000 MATINV VARIABLES Address Type Name Address Type Name Address Type Name Address Type Name 2-00000050 R*8 AMAX AP-0000000C@ R*4 DET 2-00000060 I*4 I 2-00000064 I*4 J 2-00000058 I*4 K 2-00000080 I*4 L AP-00000008@ I*4 NORDER ** R*8 SAVE ARRAYS Address Type Name Bytes Dimensions AP-00000004@ R*8 ARRAY 128 (4, 4) 2-00000000 I*4 IK 40 (10) 2-00000028 I*4 JK 40 (10) MATINV 13-Oct-1994 08:58:28 VAX FORTRAN V5.6-119 Page 8 01 13-Oct-1994 08:58:25 DISK$XRAY2:[BERRY.FOR]PACKING.FOR;7 LABELS Address Label Address Label Address Label Address Label Address Label Address Label ** 2 ** 10 ** 11 0-00000030 21 ** 23 ** 24 0-00000085 30 ** 31 ** 32 0-0000009C 41 ** 43 ** 50 0-000000E4 51 ** 53 ** 60 0-0000012A 61 ** 63 0-00000153 70 ** 71 ** 74 ** 75 0-00000196 80 ** 81 ** 83 0-000001BE 90 ** 100 ** 101 ** 105 ** 110 0-00000235 111 ** 113 ** 120 0-00000274 130 0-0000027C 140 COMMAND QUALIFIERS FOR PACKING/LIS /CHECK=(NOBOUNDS,OVERFLOW,NOUNDERFLOW) /DEBUG=(NOSYMBOLS,TRACEBACK) /DESIGN=(NOCOMMENTS,NOPLACEHOLDERS) /SHOW=(NODICTIONARY,NOINCLUDE,MAP,NOPREPROCESSOR,SINGLE) /STANDARD=(NOSEMANTIC,NOSOURCE_FORM,NOSYNTAX) /WARNINGS=(NODECLARATIONS,GENERAL,NOULTRIX,NOVAXELN) /CONTINUATIONS=19 /NOCROSS_REFERENCE /NOD_LINES /NOEXTEND_SOURCE /F77 /NOG_FLOATING /I4 /NOMACHINE_CODE /OPTIMIZE /NOPARALLEL /NOANALYSIS_DATA /NODIAGNOSTICS /LIST=DISK$XRAY2:[BERRY.FOR]PACKING.LIS;5 /OBJECT=DISK$XRAY2:[BERRY.FOR]PACKING.OBJ;2 COMPILATION STATISTICS Run Time: 1.05 seconds Elapsed Time: 1.47 seconds Page Faults: 859 Dynamic Memory: 588 pages