C++********************************************************************* C C FILDAT.F CREATED DEC 87 al C USED REG_ AUG 00 ARDEAN LEITH C IF (VERBOSE) JULY 01 ARDEAN LEITH C MPI USE NOV 05 ARDEAN LEITH C [] registers NOV 05 ARDEAN LEITH 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 FILDAT(LUN,NSAM) C C PARAMETERS: LUN LOGICAL UNIT FOR FILE (ALREADY OPENED) C C CALLED BY: FILGEN UTIL1 C C NOTE: THE HEADER RECORD(S) OF THE FILE CONTAINS THE FOLLOWING C BUFFER POSITIONS WHICH CAN BE RETRIEVED (AMONG OTHERS) 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 14 IANGLE= FLAG INDICATING THAT TILT ANGLES STORED C 15 PHI = TILT ANGLE C 16 THETA = TILT ANGLE C 17 PSI = TILT ANGLE C 18 XOFF = X OFFSET C 19 YOFF = Y OFFSET C 20 ZOFF = Z OFFSET C 21 SCALE = SCALE C 30 KANGLE= FLAG INDICATING THAT MORE ANGLES STORED C 31 PHI2 = PHI OF SECOND EULER ROTATION C 32 THETA2= THETA OF SECOND EULER ROTATION C 33 PSI2 = PSI OF SECOND EULER ROTATION C 34 PHI1 = PHI OF FIRST EULER ROTATION C 35 THETA1= THETA OF FIRST EULER ROTATION C 36 PSI1 = PSI OF FIRST EULER ROTATION C C--********************************************************************* SUBROUTINE FILDAT(LUN,NSAM) INCLUDE 'CMBLOCK.INC' INCLUDE 'LABLOCK.INC' INCLUDE 'CMLIMIT.INC' COMMON /IOBUF/ BUF(NBUFSIZ) COMMON NUMBER(20),VALUES(20),ILIST(20) CHARACTER(LEN=1) :: CDUM CHARACTER(LEN=80) :: NAME #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 IF (MYPID .LE. 0) THEN WRITE(NOUT,446) FMIN,FMAX,AV,SIG 446 FORMAT(6X,'FMIN= ',G10.3,3X,'FMAX= ',G10.3,3X, & 'AV= ',G10.3,3X,'SIG= ',G10.3) IF (IANGLE .GT. 0) WRITE(NOUT,447)PHI,THETA,PSI 447 FORMAT(6X,'PHI= ',G10.3,3X,'THETA=',G10.3,3X,'PSI=', & G10.3) WRITE(NOUT,448) XOFF,YOFF,ZOFF 448 FORMAT(6X,'XOFF= ',G10.3,3X,'YOFF= ',G10.3,3X,'ZOFF= ', & G10.3/) IF (SCALE .NE. 0) WRITE(NOUT,449) SCALE 449 FORMAT(6X,'SCALE= ',G10.3) IF (KANGLE .GT. 0) WRITE(NOUT,450) PHI2,THETA2,PSI2 450 FORMAT(6X,'PHI2= ',G10.3,3X,'THETA2=',G10.3,3X,'PSI2=', & G10.3) IF (KANGLE .EQ. 2) WRITE(NOUT,451) PHI1,THETA1,PSI1 451 FORMAT(6X,'PHI1= ',G10.3,3X,'THETA1=',G10.3,3X,'PSI1=', & G10.3) ENDIF CALL REG_GET_USED(NREG) IF (NREG .GT. 0) THEN C REGISTERS SPECIFIED NUMT = MIN(NREG,20) ILOW = 1 IHI = 256 CALL RDPRAI(NUMBER,20,NUMT,ILOW,IHI, & 'ENTER NUMBER(S) OF HEADER LOCATION TO BE RETRIEVED', & CDUM,IRTFLG) IF (NUMBER(1) .EQ. 0) THEN IF (MYPID .LE. 0) WRITE(NOUT,900) 900 FORMAT(/,' SOME HEADER POSITIONS WHICH CAN BE RETRIEVED:' & ,/,' 7 FMAX = IMAGE MAXIMUM',/, & ' 8 FMIN = IMAGE MINIMUM',/, & ' 9 AVD = IMAGE AVERAGE',/, & ' 10 SIG = IMAGE STANDARD DEVIATION',/, & ' 14 IANGLE = TILT ANGLES STORED FLAG',/, & ' 15 PHI = TILT ANGLE',/, & ' 16 THETA = TILT ANGLE',/, & ' 17 PSI = TILT ANGLE',/, & ' 18 XOFF = X OFFSET',/, & ' 19 YOFF = Y OFFSET',/, & ' 20 ZOFF = Z OFFSET',/, & ' 21 SCALE = SCALE',/) RETURN ENDIF C GET HEADER VALUES FOR LOCATIONS CONTAINED IN: NUMBER ARRAY DO I = 1,NUMT CALL GETLAB(LUN,NSAM,BUF,NUMBER(I),1,VALUES(I),IRTFLG) ENDDO C SET REGISTERS TO HEADER VALUES CALL REG_SET_NSELA(NUMT,VALUES,.FALSE.,IRTFLG) IF (VERBOSE) THEN C ECHO SETTINGS CALL REG_GET_SELS(ILIST,29,NGOT,IRTFLG) DO I = 1,NUMT IF (MYPID .LE. 0) THEN CALL REG_GET_NAME(ILIST(I),NAME,LENNAME,IRTFLG) WRITE(NOUT,*) ' ',NAME(1:LENNAME), & ' SET TO:',VALUES(I) ENDIF ENDDO ENDIF ENDIF RETURN END