C- READ CCP4 density map, swap bytes for reals, long integers. C- Copy map to new version, same filename. CHARACTER*1 BLINE(1024) CHARACTER*36 RECLINE(30) EQUIVALENCE (RECLINE(1),BLINE(1)) real*4 rline(256),TCELL(6),CELL(6) EQUIVALENCE (RLINE(1),BLINE(1)),(TCELL(1),RLINE(11)) INTEGER*4 LINT(256),NN,n,ii EQUIVALENCE (LINT(1),BLINE(1)) INTEGER*2 NX,NY,NZ,NXYZ(3) EQUIVALENCE (NX,NXYZ(1)),(NY,NXYZ(2)),(NZ,NXYZ(3)) CHARACTER*80 TTITLE,TITLE,TSYMTRY,SYMTRY EQUIVALENCE (TTITLE,RLINE(57)) EQUIVALENCE (TSYMTRY,RLINE(1)) CHARACTER*50 INFILE,OUTFILE,FILENAME real RMAP CHARACTER*40 FNAME,ASTRING CHARACTER*1 OUTSTRING(1200),HSTRING(16),xyzstr(3) LOGICAL*4 EFLG integer*2 ZLP CHARACTER DAT*12,TIM*12 REAL*8 SUM,SSQU C THESE FOR SWAPPING BYTES: real*4 A,B CHARACTER*1 AS(4),BS(4) EQUIVALENCE (A,AS(1)),(B,BS(1)) pi=4*ATAN(1.) R64K=256*256 R32K=128*256 DATA XYZSTR/'X','Y','Z'/ write(6,*)'eflg=',eflg c DO 2 I=1,16 c2 WRITE(6,*)I,' ',HSTRING(I) WRITE(6,1000) 1000 FORMAT(//' CCP4 DENSITY MAP byteswap vax->unix.') 5 WRITE(6,1100) 1100 FORMAT(/'$Input filename (CR to quit, don't give version): ') READ(5,1200) INFILE 1200 FORMAT(A) IF (INFILE(:5).EQ.' ') STOP INQUIRE(FILE=INFILE, NAME=FILENAME,EXIST=EFLG) WRITE(6,*)'INFILE=',INFILE,'EFLG=',EFLG,'FILENAME=',FILENAME IF (.NOT.EFLG) GOTO 5 OPEN (UNIT=2,FILE=INFILE,STATUS='OLD',FORM='UNFORMATTED', . READONLY) READ(2)(RLINE(I),I=1,256) C These dimensions are actual dimens present in map- maybe < full unit cell 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: c correspond to true x,y,z axes, regardles of order in map. NX=LINT(8) NY=LINT(9) NZ=LINT(10) iaxf=lint(17) iaxm=lint(18) iaxsl=lint(19) C MFAST, MED, SLOW ARE FULL UNIT CELL IN THOSE DIRECTIONS mfast=nxyz(iaxf) mmed=nxyz(iaxm) mslow=nxyz(iaxsl) 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)=',IAXF, & IAXM,IAXSL 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 C SWAP BYTES FOR LONG INTEGERS: DO 291 I=1,10 A=RLINE(I) BS(1)=AS(4) BS(2)=AS(3) BS(3)=AS(2) BS(4)=AS(1) 291 RLINE(I)=B C SWAP BYTES FOR REALS: DO 292 I=11,16 A=RLINE(I)/4 BS(1)=AS(2) BS(2)=AS(1) BS(3)=AS(4) BS(4)=AS(3) 292 RLINE(I)=B C SWAP BYTES FOR LONG INTEGERS: DO 293 I=17,19 A=RLINE(I) BS(1)=AS(4) BS(2)=AS(3) BS(3)=AS(2) BS(4)=AS(1) 293 RLINE(I)=B C SWAP BYTES FOR REALS: DO 294 I=20,22 A=RLINE(I)/4 BS(1)=AS(2) BS(2)=AS(1) BS(3)=AS(4) BS(4)=AS(3) 294 RLINE(I)=B C SWAP BYTES FOR LONG INTEGERS: DO 295 I=23,24 A=RLINE(I) BS(1)=AS(4) BS(2)=AS(3) BS(3)=AS(2) BS(4)=AS(1) 295 RLINE(I)=B C SWAP BYTES FOR REALS: C DO 296 I=55,55 A=RLINE(55)/4 BS(1)=AS(2) BS(2)=AS(1) BS(3)=AS(4) BS(4)=AS(3) RLINE(55)=B C SWAP BYTES FOR LONG INTEGERS: C DO 297 I=56,56 A=RLINE(56) BS(1)=AS(4) BS(2)=AS(3) BS(3)=AS(2) BS(4)=AS(1) RLINE(56)=B OPEN (UNIT=3,FILE=infile,STATUS='NEW',FORM='UNFORMATTED', & RECL=256, RECORDTYPE='FIXED', CARRIAGECONTROL='NONE', $ ACCESS='DIRECT') WRITE(3,rec=1)RLINE READ(2)(RLINE(I),I=1,256) SYMTRY=TSYMTRY C WRITE(6,*)SYMTRY II=1+NSYMCHAR/4 C !!!IF NSYMCHAR NOT A MULTIPLE OF 4, SHOULD ROUND UP, NOT DOWN? DO 297 I=II,256 A=RLINE(I)/4 BS(1)=AS(2) BS(2)=AS(1) BS(3)=AS(4) BS(4)=AS(3) 297 RLINE(I)=B WRITE(3,rec=2)RLINE NN=(NFAST*NMED*NSLOW) NREC=(NN+ii)/256 IF(256*NREC.LT.NN+ii) NREC=NREC+1 NREC=NREC+1 !1 RECORD FOR HEADER. write(6,*)'Number of sym words, pixels, records:',ii, NN, NREC DO 390 K=3,NREC READ(2,end=400)(RLINE(I),I=1,256) 300 DO 298 I=1,256 A=RLINE(I)/4 BS(1)=AS(2) BS(2)=AS(1) BS(3)=AS(4) BS(4)=AS(3) 298 RLINE(I)=B 390 WRITE(3,rec=K)RLINE STOP 'NORMAL END' 400 write(6,*) 'END OF FILE BEFORE END OF MAP' write(6,*) 'record=',k,'. Will fill out rest of map.' goto 300 END