C ********************************************************************* c C WRTHEDMRC C C ********************************************************************* C WRTHEDMRC IS A MERGER OF ICRHDR AND IWRHDR C C ICRHDR ----------------- C C CREATE NEW HEADER. ALL OF THE STANDARD IMAGE DEFAULTS ARE C SET UP GIVEN THE REQUESTED INFORMATION. HEADER NOT WRITTEN!! C NOTE: THE STARTING POINT FOR COLUMNS,ROWS,SECTIONS C ARE SET TO 0 BY DEFAULT.!!!!!!!!! C C INXYZ : SIZE OF FILE COLUMNS, ROWS, SECTIONS C MXYZ : # OF INTERVALS COLUMNS, ROWS, SECTIONS C IMODE : DATA STORAGE MODE (1-4) C 0 = IMAGE INTEGER*1 C 1 = IMAGE INTEGER*2 C 2 = IMAGE REALS C 3 = FOURIER TRANSFORM INTEGER*2 C 4 = FOURIER TRANSFORM REALS C LABELS(20,N) :N=1,10 UP TO 10 80 CHARACTER LABELS C NL :ACTUAL # OF LABELS TO USE (0 IS O.K.) C C C IWRHDR --------------- C THE MRC FILE FORMAT WAS OPENED WITH A RECORD LENGTH OF C 1024 BYTES. WRITE THE HEADER OF SAME LENGTH THEN NSLICE * C NROW * NSAM FLOATS OF THE IMAGE. C TITLE IS A SINGLE 80 CHARACTER TITLE. C C ********************************************************************* SUBROUTINE WRTHEDMRC(FILNAM, NSAM, NROW, NSLICE, & IUNIT,BUF,DMIN,DMAX,DMEAN,MODE,IRTFLG) COMMON /UNITS/LUNT,NIN,NOUT CHARACTER*80 FILNAM REAL BUF(*) DIMENSION INXYZ(3),MXYZ(3) INTEGER LABLS(20,10) DIMENSION NCRS(3),CRST(3),NXYZ(3), & CEL(6),MAPCRS(3),DENMMM(3), ORIGXY(2) REAL STUFF(31) INTEGER*4 ISTUFF(31) EQUIVALENCE (STUFF,ISTUFF) CHARACTER*80 TIT REAL LABELS(20,10) EQUIVALENCE (TIT,LABELS) CHARACTER*1 NULL DATA TIT/'SPIDER FILE '/ DATA NBHDR/1024/, NBW/4/, NBW3/12/, NB/4/ NBL = 800 NL = 1 IRTFLG = 1 c NOTE: WE WILL ALWAYS COPY IN REAL*4 FORMAT. C IMAGE REAL*4 FORMAT NXYZ(1) = NSAM NXYZ(2) = NROW NXYZ(3) = NSLICE INXYZ(1) = NSAM INXYZ(2) = NROW INXYZ(3) = NSLICE C 0 <= ML <= 10 C ML = MIN(NL,10) C ML = MAX(ML,0) C NLAB = ML NLAB = 1 C ORIGIN ON X,Y AXIS IF (MOD(NSAM,2) .NE. 0) THEN ORIGXY(1) = (NSAM/2) + 1 ELSE ORIGXY(1) = (NSAM/2) ENDIF IF (MOD(NROW,2).NE.0) THEN ORIGXY(2) = (NROW/2) + 1 ELSE ORIGXY(2) = (NROW/2) ENDIF WRITE(NOUT,*) 'DEFAULT VALUE FOR ORIGIN (+1 IF NSAM, NROW ODD)' WRITE(NOUT,*) '(X,Y) = ((NSAM/2) + 1, (NSAM/2) + 1)' WRITE(NOUT,*) 'ENTER -9999 IF YOU WANT TO USE DEFAULT VALUES' CALL RDPRMI(I1,I2,NOT_USED,'ENTER X,Y ORIGIN OF MRC IMAGE') IF (I1 .NE. -9999) THEN ORIGXY(1) = I1 ORIGXY(2) = I2 ENDIF DO K = 1,3 NCRS(K) = NXYZ(K) MXYZ(K) = NXYZ(K) CEL(K) = NXYZ(K) CEL(K+3) = 90.0 CRST(K) = 0.0 MAPCRS(K) = K DENMMM(K) = 0.0 ENDDO DO J = 1,31 STUFF(J) = 0.0 ENDDO C SPACE GROUP, # BYTES SYMMETRY ISPG = 0 NBSYM = 0 ISTUFF(1) = 0 ISTUFF(2) = 0 TIT(12:21) = FILNAM(1:10) NULL = CHAR(0) CALL CCFILL(LABLS(1,1),NULL,NBL) DENMMM(1) = DMIN DENMMM(2) = DMAX DENMMM(3) = DMEAN NBW = 4 NBW3 = 12 NB = 4 NBL = 800 C I = 1 I=1 CALL CCPMVI(BUF(I),NCRS,NBW3/4) I= I + NBW3/4 C I = 4 CALL CCPMVI(BUF(I),MODE,NBW/4) I= I + NBW/4 C I = 5 CALL CCPMVI(BUF(I),CRST,NBW3/4) I= I + NBW3/4 C I = 8 CALL CCPMVI(BUF(I),NXYZ,NBW3/4) I= I + NBW3/4 C I = 11 CALL CCPMVI(BUF(I),CEL,(NBW*6)/4) I= I + (NBW*6)/4 C I = 17 CALL CCPMVI(BUF(I),MAPCRS,NBW3/4) I= I + NBW3/4 C I = 20 CALL CCPMVI(BUF(I),DENMMM ,NBW3/4) I= I + NBW3/4 C I = 23 CALL CCPMVI(BUF(I),STUFF,(NBW*31)/4) I= I + (NBW*31)/4 C I = 54 CALL CCPMVI(BUF(I),ORIGXY,(NBW*2)/4) I= I + (NBW*2)/4 C I = 56 CALL CCPMVI(BUF(I),NLAB,NBW/4) I= I + NBW/4 C I = 57 CALL CCPMVI(BUF(I),LABLS(1,1),NBL/4) I= I + NBL/4 -1 IF (I .GT. 256) THEN WRITE(NOUT,10) 10 FORMAT('*** HEADER IS > 1024 BYTES') CALL ERRT(100,'WRTHEDMRC',NE) RETURN ENDIF C WRITE HEADER OF 1024 BYTES (256 FLOATS) FLOAT BY FLOAT DO IRECT=1, 256 WRITE(IUNIT,REC=IRECT,IOSTAT=IERR) BUF(IRECT) IF (IERR .NE. 0) THEN WRITE(NOUT,*)'*** ERROR WRITING HEADER ELEMENT: ',IRECT CALL ERRT(100,'WRTHEDMRC',NE) IRTFLG = 1 RETURN ENDIF ENDDO IRTFLG = 0 RETURN END C ----------------------------------------------------------- SUBROUTINE CCFILL(ARR1,SCAL,NTIMES) C PARAMETERS: C ARR1 (I/O) ARRAY TO WHICH BYTES ARE TO BE COPIED C SCAL (I) BYTE VALUE TO BE COPIED INTO ARR1 C NTIMES (I) THE NUMBER OF BYTES TO BE COPIED INTEGER NTIMES LOGICAL * 1 SCAL LOGICAL * 1 ARR1(*) INTEGER N DO N = 1,NTIMES ARR1(N) = SCAL ENDDO RETURN END