C- READ 1024 BYTES AT A TIME. C- READ INTO ARRAY COMMON WITH 256 REAL*4, 256 INT*4, 1 BYTE STRINGS C- PICK OUT THE VALUES FOR A CCP4 DENSITY MAP, BE THEY CHARACTER, INTEGER, C- OR REAL (DENSITIES ARE REAL). CHARACTER*1 BLINE(1024) real*4 rline(256),TCELL(6),CELL(6) EQUIVALENCE (RLINE(1),BLINE(1)),(TCELL(1),RLINE(11)) INTEGER*4 LINT(256) EQUIVALENCE (LINT(1),BLINE(1)) CHARACTER*80 TTITLE,TITLE,TSYMTRY,SYMTRY EQUIVALENCE (TTITLE,RLINE(57)) EQUIVALENCE (TSYMTRY,RLINE(1)) CHARACTER*50 INFILE,OUTFILE,FILENAME DIMENSION RMAP(600,600) WRITE(6,1000) 1000 FORMAT(//' PROGRAM TO READ CCP4 MAP FILES') 5 WRITE(6,1100) 1100 FORMAT(/'$Input filename (CR to quit): ') READ(5,1200) INFILE 1200 FORMAT(A) C IF (INFILE(:5).EQ.' ') STOP C INQUIRE(FILE=INFILE, NAME=FILENAME,EXIST=EFLG) C IF (.NOT.EFLG) GOTO 5 OPEN (UNIT=2,FILE=INFILE,STATUS='OLD',FORM='UNFORMATTED') READ(2)(RLINE(I),I=1,256) C These dimensions are actual dimens present in map- maybe < sample NFAST=LINT(1) NMED=LINT(2) NSLOW=LINT(3) maptype=LINT(4) nsfast=lint(5) nsmed=lint(6) nsslow=lint(7) DO 290 I=1,6 290 CELL(I)=TCELL(I) C These dimensions are sampling dimensions, corresp to full unit cell: NX=LINT(8) NY=LINT(9) NZ=LINT(10) iaxfast=lint(17) iaxmed=lint(18) iaxslow=lint(19) dmin=rline(20) dmax=rline(21) dmean=rline(22) nsg=lint(23) nsymchar=lint(24) ddev=RLINE(55) ntitle=lint(56) TITLE=TTITLE WRITE(6,*)'NFAST, MEDIUM, SLOW=',NFAST,NMED,NSLOW WRITE(6,*)'MAP TYPE=',MAPTYPE WRITE(6,*)'START (FAST, MED, SLOW)=',NSFAST,NSMED,NSSLOW WRITE(6,*)'CELL: ',(CELL(I),I=1,6) WRITE(6,*)'SAMPLING(NX, NY, NZ)=',NX, NY, NZ WRITE(6,*)'AXIS PERMUTAION (FAST, MEDIUM, SLOW)=',IAXFAST, & IAXMED,IAXSLOW WRITE(6,*)'DMIN, DMAX, DMEAN, DDEV=',DMIN,DMAX,DMEAN,DDEV WRITE(6,*)'SPACE GROUP #',NSG WRITE(6,*)'# CHAR OF SYM INFO:',NSYMCHAR WRITE(6,*)'NUMBER OF TITLES:',NTITLE WRITE(6,*) TITLE READ(2)(RLINE(I),I=1,256) SYMTRY=TSYMTRY WRITE(6,*)SYMTRY WRITE(6,*)'Enter scale factor to put density in range -9 TO 99:' read(5,*)scale WRITE(6,*)'ENTER 1 FOR DELAY BETWEEN SECTIONS, 0 FOR NO DELAY' READ(5,*)IDELAY II=1+NSYMCHAR/4 C !!!IF NSYMCHAR NOT A MULTIPLE OF 4, SHOULD ROUND UP, NOT DOWN? DO 325 I=1,NSLOW WRITE(6,*) DO 300 J=1,NMED DO 300 K=1,NFAST IF (II.GT.256) THEN READ(2,END=900)(RLINE(IJ),IJ=1,256) II=1 ENDIF RMAP(J,K)=RLINE(II) 300 II=II+1 MAX=NFAST IF (NMED.GT.MAX)MAX=NMED C EXCLUSIVE OR: IF BOTH OR NEITHER CONDITION ON FIRST LINE IS TRUE: C BECAUSE WE WANT THE SHORTEST ACROSS IF LONGEST TOO LONG, C OTHERWISE WE WANT SHORTEST DAOWN TO SAVE PAGES. IF (((MAX.GT.40).AND.(NFAST.LE.NMED)).OR. @ ((MAX.LE.40).AND.(NFAST.GT.NMED))) THEN C if (nfast.LE.nmed) then LIM=NFAST IF (LIM.GT.50) LIM=50 WRITE(6,*)'SECTION ',I,' Fast Axis ---->' DO 320 J=1,NMED 320 WRITE(6,321) J,(INT(0.5+SCALE*RMAP(J,K)),K=1,LIM) 321 FORMAT(' ',I3,'*',50I2) else LIM=NMED IF (LIM.GT.50) LIM=50 WRITE(6,*)'SECTION ',I,' Medium Axis ---->' DO 322 K=1,NFAST 322 WRITE(6,321) K,(INT(0.5+SCALE*RMAP(J,K)),J=1,LIM) endif 325 IF (IDELAY.NE.0) read(5,'(A)')infile 380 CLOSE(UNIT=2) STOP 'NORMAL END' 900 STOP 'END OF FILE BEFORE END OF MAP' END