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) CHARACTER*36 RECLINE(30) EQUIVALENCE (RECLINE(1),BLINE(1)) real*4 rline(256),TCELL(6),CELL(6) REAL*4 RMX(3,3),RMY(3,3),RMZ(3,3),TEMP(3,3),PROD(3,3),X1(3),X2(3) EQUIVALENCE (RLINE(1),BLINE(1)),(TCELL(1),RLINE(11)) INTEGER*4 LINT(256) integer*2 plusmin,plusmax,minmin,minmax EQUIVALENCE (LINT(1),BLINE(1)) CHARACTER*80 TTITLE,TITLE,TSYMTRY,SYMTRY EQUIVALENCE (TTITLE,RLINE(57)) EQUIVALENCE (TSYMTRY,RLINE(1)) CHARACTER*50 INFILE,OUTFILE,FILENAME LOGICAL*1 INSIDE DIMENSION RMAP(100,100,300) WRITE(6,1001) 1001 FORMAT(//' PROGRAM TO READ CCP4 MAP FILES') 5 WRITE(6,1002) 1002 FORMAT(/'$Input filename (CR to quit): ') READ(5,1003) INFILE 1003 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) 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) nmyst=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, SLOW, MEDIUM)=',IAXFAST, & IAXMED,IAXSLOW WRITE(6,*)'DMIN, DMAX, DMEAN, DDEV=',DMIN,DMAX,DMEAN,DDEV WRITE(6,*)'SPACE GROUP #',NSG WRITE(6,*)'NUMBER OF TITLES:',NTITLE WRITE(6,*) TITLE READ(2)(RLINE(I),I=1,256) SYMTRY=TSYMTRY WRITE(6,*)SYMTRY II=21 DO 325 J=1,NSLOW C WRITE(6,*)'SECTION ',J DO 300 I=1,NMED DO 300 K=1,NFAST IF (II.GT.256) THEN READ(2,END=1900)(RLINE(IJ),IJ=1,256) II=1 ENDIF RMAP(I,J,K)=RLINE(II) C I,J,K CORRESPOND TO X,Y,Z, OR NMED, NSLOW, NFAST 300 II=II+1 325 CONTINUE 380 CLOSE(UNIT=2) C NOW WE HAVE THE WHOLE MAP IN MEMORY! C PREPARE SOME THINGS: C READ TRANSLATION write(6,*)'Enter limits for molecule. Outside will be zeroed.' write(6,*)' in pixels, first being 1 not zero!' WRITE(6,*)'Min and max z-values for the protein:' read(5,*)zmin, zmax WRITE(6,*)'Min and max values of x+y:' read(5,*) plusmin,plusmax WRITE(6,*)'Min and max values of x-y:' read(5,*) minmin, minmax do 385 k=1, zmin-1 do 385 i=1,nmed do 385 j=1,nslow 385 rmap(i,j,k)=0 do 387 k=zmin,zmax do 387 i=1,nmed do 387 j=1,nslow if (i+j.lt.plusmin) rmap(i,j,k)=0 if (i+j.gt.plusmax) rmap(i,j,k)=0 if (i-j.lt.minmin) rmap(i,j,k)=0 if (i-j.gt.minmax) rmap(i,j,k)=0 387 continue do 389 k=zmax+1,nfast do 389 i=1,nmed do 389 j=1,nslow 389 rmap(i,j,k)=0 sx=0 sx2=0 c take the next 3 or 4lines! c iaxfast=3 c iaxmed=1 c iaxslow=2 nsg=1 dmin=1e3 dmax=-1e3 do 390 i=1,nmed do 390 j=1,nslow do 390 k=1,nfast x=rmap(i,j,k) if(x.lt.dmin)dmin=x if(x.gt.dmax)dmax=x sx=sx+x 390 sx2=sx2+x*x n=nfast*nmed*nslow dmean=sx/n ddev=sqrt(sx2/n-dmean*dmean) write(6,*)'sx, sx2=',sx,sx2 write(6,*)'dmax, dmin, dmean, ddev=',dmax, dmin, dmean, ddev OPEN (UNIT=3,FILE='cut.MAP',STATUS='NEW',FORM='UNFORMATTED', & RECL=256, RECORDTYPE='FIXED', CARRIAGECONTROL='NONE') DO 400 I=1,256 400 RLINE(I)=0 LINT(1)=NFAST LINT(2)=NMED LINT(3)=NSLOW LINT(4)=maptype lint(5)=nsfast lint(6)=nsmed lint(7)=nsslow LINT(8)=NX LINT(9)=NY LINT(10)=NZ DO 490 I=1,6 490 TCELL(I)=CELL(I) lint(17)=iaxfast lint(18)=iaxmed lint(19)=iaxslow rline(20)=dmin rline(21)=dmax rline(22)=dmean lint(23)=nsg lint(24)=nmyst rline(55)=ddev lint(56)=ntitle TTITLE=TITLE WRITE(3)(RLINE(I),I=1,256) DO 493 I=1,20 493 RLINE(I)=0 TSYMTRY=SYMTRY II=21 DO 1500 J=1,NSLOW WRITE(6,*)'SECTION ',J,J2 DO 1500 I=1,NMED DO 1500 K=1,NFAST IF (II.GT.256) THEN WRITE(3)(RLINE(IJ),IJ=1,256) II=1 ENDIF C GET A VALUE FOR THE NEXT (I,J,K'TH) PIXEL RLINE(II)=RMAP(I,J,K) 1500 II=II+1 WRITE(3)(RLINE(I),I=1,256) CLOSE(UNIT=3) STOP 'NORMAL END' 1900 STOP 'END OF FILE BEFORE END OF MAP' END C STILL NEED TO APPLY SYMETRY OPERATIONS! USE ANOTHER PROGRAM, READ IN THE MAP ALL INTO MEMORY, C STEP THROUGH THE PIXELS OF ONE ASU. FOR EACH PIXEL, EXAMINE ALL EQUIVLENT PIXELS. SET ALL TO VALUE OF DENSEST. C ONLY ONE OF THE EQUIV PIXELS SHOULD HAVE ANY DENSITY BEFORE THIS?