C++********************************************************************* C C SETLAB.FOR -- CREATED NOV 87 ArDean Leith C LUNRED FEB 03 ARDEAN LEITH C C ********************************************************************** C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM. AUTHOR: J.FRANK * C=* Copyright (C) 1985-2005 Health Research Inc. * C=* * C=* HEALTH RESEARCH INCORPORATED (HRI), * C=* ONE UNIVERSITY PLACE, RENSSELAER, NY 12144-3455. * C=* * C=* Email: spider@wadsworth.org * C=* * C=* This program is free software; you can redistribute it and/or * C=* modify it under the terms of the GNU General Public License as * C=* published by the Free Software Foundation; either version 2 of the * C=* License, or (at your option) any later version. * C=* * C=* This program is distributed in the hope that it will be useful, * C=* but WITHOUT ANY WARRANTY; without even the implied warranty of * C=* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * C=* General Public License for more details. * C=* * C=* You should have received a copy of the GNU General Public License * C=* along with this program; if not, write to the * C=* Free Software Foundation, Inc., * C=* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * C=* * C ********************************************************************** C C SETLAB(LUN,BUF,IGO,NBUF,VALUE,TYPE,IRTFLG) C C PURPOSE: THIS SUBROUTINE SETS HEADER PARAMETERS BY BUFFER NUMBER C WRITES THE HEADER INTO THE FILE. C C PARAMETERS: C C LUN LOGICAL UNIT NUMBER OF FILE C BUF WORK SPACE FOR READ/WRITE BUFFER C IGO FIRST BUFFER POSITION TO BE SET C NBUF NUMBER OF BUFFER POSITIONS TO BE SET C VALUES ARRAY FOR BUFFER VALUES TO BE SET C TYPE CHARACTER VARIABLE CONTAINING FLAG FOR IFORM C TYPE SYMBOL DATA TYPE IFORM C R 2-D REAL +1 C R3 3-D REAL +3 C P 2-D POLAR +2 C D NON-IMAGE DATA 0 C F 2-D FOURIER -1 C F3 3-D FOURIER -3 C U UNCHANGED UNCHANGED C O2 2-D FOURIER, MIXED RADIX ODD -11 C E2 2-D FOURIER, MIXED RADIX EVEN -12 C O3 3-D FOURIER, MIXED RADIX ODD -21 C E3 3-D FOURIER, MIXED RADIX EVEN -22 C C IRTFLG ERROR FLAG (-1 ON ENTRY SUPRESSES PRINT-OUT) C C C NOTE: THE HEADER RECORD(S) OF THE FILE CONTAIN THE FOLLOWING C BUFFER POSITIONS WHICH CAN BE ALTERED (AMONG OTHERS): C POSITION 1 NSLICE = NUMBER OF SLICES (PLANES) IN VOLUME C (=1 FOR AN IMAGE) ON VAX LONG HEADER C FORMAT FILES THE VALUE OF NSLICE STORED IN C THE FILE IS NEGATIVE. C 2 NROW = NUMBER OF ROWS PER SLICE C 3 IREC = (UNUSED) C 4 NHISTREC = (UNUSED) C 5 FLAG INDICATING DATA TYPE (=IFORM) C 6 IMAMI = FLAG INDICATING IF THE IMAGE HAS C BEEN SEARCHED FOR MAX AND MIN. C IMAMI IS SET TO +1 IF SEARCHED. C 7 FMAXD = IMAGE MAXIMUM C 8 FMIND = IMAGE MINIMUM C 9 AVD = IMAGE AVERAGE C 10 SIG = STANDARD DEVIATION (SQ. ROOT OF VARIANCE) C 11 IHIST = UNUSED C 13 LABLN = NUMBER OF FLOATING POINT HEADER VARIABLES C 14 IANGLE= ANGLE FILL FLAG C 15 PHI = TILT ANGLE C 16 THETA = TILT ANGLE C 17 PSI = TILT ANGLE C 18 XOFF = X TRANSLATION C 19 YOFF = Y TRANSLATION C 20 ZOFF = Z TRANSLATION C C--********************************************************************* SUBROUTINE SETLAB(LUN,NSAM,UNUSED,IGO,NBUF,VALUES,TYPE,IRTFLG) INCLUDE 'CMBLOCK.INC' DIMENSION UNUSED(*),VALUES(*) CHARACTER *(*) TYPE LOGICAL PRNT C AUTOMATIC ARRAYS DIMENSION OLDVALUES(NBUF) #ifdef USE_MPI INCLUDE 'mpif.h' INTEGER MYPID, COMM, IERR COMM = MPI_COMM_WORLD CALL MPI_COMM_RANK(COMM, MYPID, IERR) #else MYPID = -1 #endif PRNT = .TRUE. IF (IRTFLG .EQ. -1) PRNT = .FALSE. IRTFLG = 1 C UPDATE THE HEADER BUFFER IF (TYPE(1:1) .NE. 'U') THEN LENC = LEN(TYPE) IF (LENC .EQ. 2 .AND. TYPE(1:2) .EQ. 'R3') THEN ITYPE = 3 ELSEIF (LENC .EQ. 2 .AND. TYPE(1:2) .EQ. 'O2') THEN ITYPE = -11 ELSEIF (LENC .EQ. 2 .AND. TYPE(1:2) .EQ. 'E2') THEN ITYPE = -12 ELSEIF (LENC .EQ. 2 .AND. TYPE(1:2) .EQ. 'O3') THEN ITYPE = -21 ELSEIF (LENC .EQ. 2 .AND. TYPE(1:2) .EQ. 'E3') THEN ITYPE = -22 ELSEIF (TYPE(1:1) .EQ. 'P') THEN ITYPE = 2 ELSEIF (TYPE(1:1) .EQ. 'D') THEN ITYPE = 0 ELSE ITYPE = 1 ENDIF CALL LUNSETTYPE(LUN,ITYPE,IRTFLG) #ifdef USE_MPI IF (PRNT .AND. MYPID .EQ. 0) & WRITE(NOUT,9993) ITYPE,TYPE #else IF (PRNT) WRITE(NOUT,9993) ITYPE,TYPE #endif 9993 FORMAT(' NEW IFORM:',I5,' TYPE:',A2) ENDIF ISTOP = MIN(256,IGO+NBUF-1) NVAL = ISTOP - IGO + 1 CALL LUNGETVALS(LUN,IGO,NVAL,OLDVALUES,IRTFLG) IF (IRTFLG .NE. 0) RETURN CALL LUNSETVALS(LUN,IGO,NVAL,VALUES,IRTFLG) IF (IRTFLG .NE. 0) RETURN IF (PRNT .AND. VERBOSE) THEN J = 0 DO I = IGO,ISTOP J = J + 1 #ifdef USE_MPI IF (MYPID .EQ. 0) THEN WRITE(NOUT,9999) I,OLDVALUES(J),VALUES(J) ENDIF #else WRITE(NOUT,9999) I,OLDVALUES(J),VALUES(J) #endif 9999 FORMAT(' HEADER LOCATION: ',I3,' CHANGED FROM: ', & G10.3,' TO: ',G10.3) ENDDO ENDIF C WRITE ALTERED HEADER BACK IN THE FILE CALL LUNWRTCURHED(LUN,IRTFLG) RETURN END