C ********************************************************************** C C HALI.F C RESTRICTION OF THE INTERPOLATION FIELD 10/13/89 C QUADRATIC INTERPOLATION 07/09/93 C OPFILEC 02/24/03 al C CHKMIRROR 06/18/08 al C ********************************************************************** C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM. AUTHOR: J.FRANK * C=* Copyright (C) 1985-2008 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 HALI C C23456789012345678901234567890123456789012345678901234567890123456789012 C--********************************************************************* SUBROUTINE HALI(MIRROR) INCLUDE 'CMBLOCK.INC' INCLUDE 'CMLIMIT.INC' CHARACTER(LEN=MAXNAM) :: FINPIC, FINPAT INTEGER, ALLOCATABLE, DIMENSION(:) :: ILIST INTEGER, ALLOCATABLE, DIMENSION(:,:) :: NUMR CHARACTER(LEN=1) :: MODE,MIRROR,ASK,NULL CHARACTER(LEN=1) :: CHKMIRROR LOGICAL*1 :: NORM DATA INPIC/77/ NILMAX = NIMAX NULL = CHAR(0) ALLOCATE (ILIST(NILMAX), STAT=IRTFLG) IF (IRTFLG .NE. 0) THEN CALL ERRT(46,'AP C, ILIST',NILMAX) RETURN ENDIF C ASK FOR DATA FILE NAME TEMPLATE CALL FILELIST(.TRUE.,INPIC,FINPAT,NLET,ILIST,NILMAX,NIMA, & 'ENTER TEMPLATE FOR 2-D IMAGE NAME',IRTFLG) IF (IRTFLG .NE. 0) GOTO 9999 C NIMA - TOTAL NUMBER OF IMAGES IF (NIMA .GT. 0) THEN WRITE(NOUT,2001) NIMA 2001 FORMAT(' Number of images: ',I5) ELSE CALL ERRT(101,'NO IMAGES',NDUM) GOTO 9999 ENDIF CALL FILGET(FINPAT,FINPIC,NLET,ILIST(1),INTFLG) MAXIM = 0 CALL OPFILEC(0,.FALSE.,FINPIC,INPIC,'O',IFORM,NSAM,NROW,NSLICE, & MAXIM,' ',.FALSE.,IRTFLG) IF (IRTFLG .NE. 0) GOTO 9999 CLOSE(INPIC) CALL RDPRMI(MR,NR,NOT_USED,'FIRST AND LAST RING') IF(MR.LE.0.OR.NR.GE.MIN(((NSAM-1)/2)*2+1,((NROW-1)/2)*2+1))THEN CALL ERRT(31,'OR 2',NE) GOTO 9999 ENDIF CALL RDPRMI(ISKIP,NDUMP,NOT_USED,'SKIP') ISKIP = MAX(1,ISKIP) CALL RDPRMC(ASK,NA,.TRUE.,'(F)ULL OR (H)ALF CIRCLE',NULL,IRT) IF (ASK .EQ. 'F') THEN MODE = 'F' ELSEIF (ASK .EQ. 'H') THEN MODE = 'H' ELSE GOTO 9999 ENDIF CALL RDPRMC(ASK,NA,.TRUE.,'NORMALIZE UNDER MASK? (Y/N)', & NULL,IRT) NORM = (ASK.EQ.'Y') C CALL RDPRMI(JACUP,NDUMP,NOT_USED, C & 'PRECISION OF PEAK LOCATION (0..100)') C JACUP = MAX(0,MIN(100,JACUP)) JACUP = 0 CALL RDPRMI(NKMAX,MAXIT,NOT_USED, & 'NUMBER OF GROUPS, MAX. NUMBER OF ITERATIONS') C CALL RDPRMI(KXORD,KYORD,NOT_USED,'X,Y ORDER OF SPLINES') C KXORD = MAX(2,KXORD) C KYORD = MAX(2,KYORD) C IF (KXORD.EQ.0) WRITE(NOUT,*)'QUADRATIC INTERPOLATION USED !' C FIND TOTAL NUMBER OF RINGS NRING = 0 DO I=MR,NR,ISKIP NRING = NRING + 1 ENDDO ALLOCATE(NUMR(3,NRING), STAT=IRTFLG) IF (IRTFLG .NE. 0) THEN CALL ERRT(46,'AP C, NUMR',3*NRING) GOTO 9999 ENDIF NRING=0 DO I=MR,NR,ISKIP NRING = NRING+1 NUMR(1,NRING) = I ENDDO CHKMIRROR = MIRROR IF (MIRROR .EQ. 'C') THEN C MUST ASK IF WANT TO CHECK MIRROR CALL RDPRI1S(IMIRROR,NOT_USED, & 'CHECK MIRRORED POSITIONS (0=NOCHECK / 1=CHECK)?',IRTFLG) IF (IRTFLG .NE. 0) GOTO 9999 CHKMIRROR = 'A' IF (IMIRROR .NE. 0) CHKMIRROR = 'M' ENDIF C CALCULATION OF ACTUAL DIMENSION OF AN IMAGE TO BE INTERPOLATED C 2*(No. OF RINGS)+(0'TH ELEMENT)+2*(MARGIN OF 1) NRA = MIN(((NSAM-1)/2)*2+1,((NROW-1)/2)*2+1,2*NR+3) LSAM = NSAM LROW = NROW NSAM = NRA NROW = NRA CALL ALPRBS(NUMR,NRING,LCIRC,MODE) MAXRIN = NUMR(3,NRING) CALL HALI_P(ILIST,NSAM,NROW,LSAM,LROW,NIMA,NRING,LCIRC, & MAXRIN,JACUP,NUMR,NKMAX,MAXIT,MODE,CHKMIRROR,NORM,NOUT, & FINPAT,NLET) 9999 IF (ALLOCATED(ILIST)) DEALLOCATE(ILIST) IF (ALLOCATED(NUMR)) DEALLOCATE(NUMR) END