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),xyzstr(3) DATA XYZSTR/'X','Y','Z'/ CHARACTER*36 RECLINE(30) EQUIVALENCE (RECLINE(1),BLINE(1)) real*4 rline(256),TCELL(6),CELL(6),x,y,z,xyz(3),fpix,mpix,spix equivalence (x,xyz(1)),(y,xyz(2)),(z,xyz(3)) 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(0:202,0:246, 0:20) WRITE(6,1001) 1001 FORMAT(//' PROGRAM TO READ CCP4 MAP FILES. Edit the fortran to' . ' change map param.' . //' new map written to same filename, next version') 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) c*** 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 if ((nfast.le.247).and.(nmed.le.203).and.(nslow.le.20)) goto 10 stop 'dimensioned for nfast=247, nmed=203, nslow=20. map exceeds!' 10 II=1+NSYMCHAR/4 C !!!IF NSYMCHAR NOT A MULTIPLE OF 4, SHOULD ROUND UP, NOT DOWN? DO 325 K=0,NSLOW-1 C WRITE(6,*)'SECTION ',J DO 300 I=0,NMED-1 DO 300 J=0,NFAST-1 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! write(6,*)'enter cella, cellb, cellc:' read(5,*)cell(1),cell(2),cell(3) fpix=cell(iaxfast)/nfast mpix=cell(iaxmed)/nmed spix=cell(iaxslow)/nslow write(6,*)'axis xyz cell sample pixelsize' write(6,*) 'fast ',xyzstr(iaxfast),cell(iaxfast),nfast,fpix write(6,*) 'med ',xyzstr(iaxmed ),cell(iaxmed ),nmed ,mpix write(6,*) 'slow ',xyzstr(iaxslow),cell(iaxslow),nslow,spix OPEN (UNIT=3,FILE='MODEL.RDI',STATUS='NEW') write(3,*)'rdi format model from ccp4 format map',infile write(3,*) title radius=0. idw=2 no=1 weight=1.0 do 400 k=0,cell(iaxslow),4 write(6,*)'k=',k xyz(iaxslow)=k kk=k/spix do 400 i=0,cell(iaxmed),4 c write(6,*)'i=',i xyz(iaxmed)=i ii=i/mpix do 400 j=0,cell(iaxfast),4 c write(6,*)'j=',j jj=j/fpix if (rmap(ii,jj,kk).gt.0.) then xyz(iaxfast)=j 50 format (4f10.3,3I5,f8.2,A15) IENTRY=IENTRY+1 WRITE(3,50) X,Y,Z,RADIUS,IDW,NO,IENTRY,WEIGHT,' ALA 1 N' c WRITE(3,50) X, Y, Z, 0., 2, 1, 0, 1., 'ALA 1 N ' endif 400 continue close(unit=3) goto 2000 1900 write(6,*)' end of file too soon!' 2000 end