C++********************************************************************* C C AP_GETDAT.F 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 AP_GETDAT(ILIP,NIMA,LSAM,LROW,NSAM,NROW,NUMTH,EXPPAT,INPIC, IGO,IEND, C LR1,LR2,LS1,LS2, X, IRTFLG) C C PURPOSE: READ READ WINDOWED IMAGE DATE INTO ARRAY X FOR 'AP' OPS. C C PARAMETERS: C ILIP LIST OF IMAGE FILE NUMBERS (INPUT) C NIMA NO. OF IMAGES (INPUT) C LSAM,LROW IMAGE DIMENSIONS (INPUT) C NSAM,NROW OUTPUT IMAGE DIMENSIONS (INPUT) C EXPPAT IMAGE SERIES FILE TEMPLATE (INPUT) C INPIC IMAGE FILE IO UNIT (INPUT) C IGO,IEND IMAGE INDEX RANGE (INPUT) C LR1,LR2,LS1,LS2 OUTPUT IMAGE WINDOW (INPUT) C X OUTPUT ARRAY (OUTPUT) C IRTFLG ERROR FLAG (OUTPUT) C C--********************************************************************* SUBROUTINE AP_GETDAT(ILIP,NIMA,LSAM,LROW,NSAM,NROW, & NUMTH,EXPPAT,INPIC, IGO,IEND, & LR1,LR2,LS1,LS2, X, & IRTFLG) INCLUDE 'CMLIMIT.INC' INCLUDE 'CMBLOCK.INC' REAL, DIMENSION(NSAM,NROW,NUMTH) :: X INTEGER, DIMENSION(NIMA) :: ILIP CHARACTER (LEN=*) :: EXPPAT CHARACTER(LEN=MAXNAM) :: FILNAM LOGICAL :: WINDOW LOGICAL :: ONEIMAGE C AUTOMATIC ARRAY REAL, DIMENSION(LSAM) :: BUFIN IRTFLG = 1 WINDOW = (LR1 .NE. 1 .OR. LS1 .NE. 1 .OR. & LR2 .NE. LROW .OR. LS2 .NE. LSAM) C write(6,*) 'Reading images: ',igo,'...',iend ONEIMAGE = (ILIP(IGO) .LE. 0) DO ITI=IGO,IEND IF (ONEIMAGE) THEN FILNAM = EXPPAT ELSE NLET = 0 CALL FILGET(EXPPAT,FILNAM,NLET,ILIP(ITI),IRTFLG) IF (IRTFLG .NE. 0) RETURN ENDIF MAXIM = 0 CALL OPFILEC(0,.FALSE.,FILNAM,INPIC,'O',IFORM, & LSAMT,LROWT,NSLICE,MAXIM,' ',.FALSE.,IRTFLG) IF (IRTFLG .NE. 0) RETURN IF (LSAMT.NE.LSAM .OR. LROWT.NE.LROW) THEN CALL ERRT(102,'INCONSISTENT IMAGE SIZE',LSAMT) IRTFLG = 1 RETURN ENDIF IT = ITI-IGO+1 IF (WINDOW) THEN C READ IN CENTRAL WINDOW FROM THE WHOLE IMAGE DO K2=LR1,LR2 CALL REDLIN(INPIC,BUFIN,LSAM,K2) KT = K2-LR1+1 DO K3=LS1,LS2 X(K3-LS1+1,KT,IT) = BUFIN(K3) ENDDO ENDDO ELSE C READ IN THE WHOLE IMAGE CALL REDVOL(INPIC,LSAM,LROW,1,1, X(1,1,IT),IRTFLG) IF (IRTFLG .NE. 0) RETURN ENDIF CLOSE(INPIC) ENDDO IRTFLG = 0 END C #ifdef USE_MPI C THE SAME AS AP_GETDAT EXCEPT THAT NO BROADCAST C IS USED IN THE READ. C SUBROUTINE AP_GETDAT1P(ILIP,NIMA,LSAM,LROW,NSAM,NROW, & NUMTH,EXPPAT,INPIC, IGO,IEND, & LR1,LR2,LS1,LS2, X, & IRTFLG) INCLUDE 'CMLIMIT.INC' INCLUDE 'CMBLOCK.INC' REAL, DIMENSION(NSAM,NROW,NUMTH) :: X INTEGER, DIMENSION(NIMA) :: ILIP CHARACTER (LEN=*) :: EXPPAT CHARACTER(LEN=MAXNAM) :: FILNAM LOGICAL :: WINDOW LOGICAL :: ONEIMAGE C AUTOMATIC ARRAY REAL, DIMENSION(LSAM) :: BUFIN IRTFLG = 1 WINDOW = (LR1 .NE. 1 .OR. LS1 .NE. 1 .OR. & LR2 .NE. LROW .OR. LS2 .NE. LSAM) C write(6,*) 'Reading images: ',igo,'...',iend ONEIMAGE = (ILIP(IGO) .LE. 0) DO ITI=IGO,IEND IF (ONEIMAGE) THEN FILNAM = EXPPAT ELSE NLET = 0 CALL FILGET(EXPPAT,FILNAM,NLET,ILIP(ITI),IRTFLG) IF (IRTFLG .NE. 0) RETURN ENDIF MAXIM = 0 CALL OPFILEC(0,.FALSE.,FILNAM,INPIC,'O',IFORM, & LSAMT,LROWT,NSLICE,MAXIM,' ',.FALSE.,IRTFLG) IF (IRTFLG .NE. 0) RETURN IF (LSAMT.NE.LSAM .OR. LROWT.NE.LROW) THEN CALL ERRT(102,'INCONSISTENT IMAGE SIZE',LSAMT) IRTFLG = 1 RETURN ENDIF IT = ITI-IGO+1 IF (WINDOW) THEN C READ IN CENTRAL WINDOW FROM THE WHOLE IMAGE DO K2=LR1,LR2 CALL REDLIN1P(INPIC,BUFIN,LSAM,K2) KT = K2-LR1+1 DO K3=LS1,LS2 X(K3-LS1+1,KT,IT) = BUFIN(K3) ENDDO ENDDO ELSE C READ IN THE WHOLE IMAGE CALL REDVOL1P(INPIC,LSAM,LROW,1,1, X(1,1,IT),IRTFLG) IF (IRTFLG .NE. 0) RETURN ENDIF CLOSE(INPIC) ENDDO IRTFLG = 0 END #endif