C++********************************************************************* C C OPFILEC FEB 03 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 Shift alignment 07/31/91, non-power-of-two dimensions C Subtraction of an image from the average. c Quadratic interpolation as an option. c Scratch file on the disk C c Procedures called: C SUBROUTINE SAQB(MAXMEM) C SUBROUTINE SAQB_P(BUF,NSAM,NROW,NIMA,NGRP,JACUP, C SUBROUTINE SAQB_F(BUF,NSAM,NROW,NIMA,NGRP,JACUP, C SUBROUTINE UPDTF(C,A,N,IMI) C SUBROUTINE COP(A,B,N) C SUBROUTINE CRSM_2(X,Y,O,NSAM,NROW,WRK) C SUBROUTINE MLC(X,Y,O,N) C SUBROUTINE SHFC_2(X,Y,NSAM,NROW,WRK,SX,SY) C SUBROUTINE SH180_2(X,Y,NSAM,NROW,WRK,SX,SY) C SUBROUTINE SHFM_2(X,NSAM,NROW,WRK,SX,SY) C SUBROUTINE CR180_2(X,Y,O,NSAM,NROW,WRK) C SUBROUTINE MJC(X,Y,O,N) C SUBROUTINE FMR_2(X,NSAM,NROW,WORK,INV) C SUBROUTINE FMR_1(X,N,WORK,INV) C SUBROUTINE FFTMCF (A,B,NTOT,N,NSPAN,ISN) C SUBROUTINE FINDMX(D,NSAM,NROW,CMX,SX,SY,JACUP) C DOUBLE PRECISION FUNCTION ENFR_2(A,NSAM,NROW) C SUBROUTINE RTQ(X,OUT,NSAM,NROW,THETA) C FUNCTION QUADRI(XX, YY, NXDATA, NYDATA, FDATA) C C IMAGE_PROCESSING_ROUTINE C C 1 2 3 4 5 6 7 C23456789012345678901234567890123456789012345678901234567890123456789012 C--********************************************************************* SUBROUTINE SAQB INCLUDE 'CMBLOCK.INC' COMMON DUMMY(80),BUF(1024) CHARACTER*80 FINPAT,DOCFIL,FINPIC COMMON /FISPEC/ FINPAT,NLET,FINPIC,DOCFIL,NLETI REAL, ALLOCATABLE, DIMENSION(:,:) :: CNEW CHARACTER*1 NULL,FLIP DATA INPIC/77/,NDOC/55/ C ASK FOR DATA FILE NULL=CHAR(0) CALL FILERD(FINPAT,NLET,NULL, & 'ENTER TEMPLATE FOR 2-D IMAGE NAME',INTFLG) IF(INTFLG.NE.0) RETURN CALL FILERD(DOCFIL,NLETI,NULL, & 'DOCUMENT (WITH GROUP ASSIGNMENT)',IRTFLG) IF (IRTFLG.EQ.-1) RETURN CALL RDPRMI(NGRP,NIMA,NOT_USED,'GROUP NUMBER') CALL RDPRMC(FLIP,NA,.TRUE.,'CHECK 180 DEG POSITION (Y/N)', & NULL,ITRFLG) C CALL RDPRMI(JACUP,NDUMP,NOT_USED, C & 'PRECISION OF PEAK LOCATION (0..100)') C JACUP=MAX0(0,MIN0(100,JACUP)) JACUP=0 K=0 K2=1 NIMA=0 778 LERR=-1 KP1=K+1 CALL UNSAV(DOCFIL,K,NDOC,KP1,BUF,4,LERR,K2) IF(LERR.EQ.0) THEN IF(IFIX(BUF(4)).EQ.NGRP) NIMA=NIMA+1 K=K+1 C PICK UP ONE OF THE IMAGES IMAGE=IFIX(BUF(1)) GOTO 778 ENDIF IF(NIMA.EQ.0) THEN WRITE(NOUT,*) ' *** DESIRED GROUP NOT FOUND !' CLOSE(NDOC) RETURN ENDIF C OPEN FIRST IMAGE FILE TO DETERMINE NSAM, NROW, NSL CALL FILGET(FINPAT,FINPIC,NLET,IMAGE,INTFLG) MAXIM = 0 CALL OPFILEC(0,.FALSE.,FINPIC,INPIC,'O',IFORM,NSAM,NROW,NSL, & MAXIM,'DUMMY',.FALSE.,IRTFLG) IF (IRTFLG .NE. 0) RETURN CLOSE(INPIC) LSD=NSAM+2-MOD(NSAM,2) ALLOCATE (CNEW(LSD,NROW), STAT=IRTFLG) IF (IRTFLG.NE.0) THEN CALL ERRT(46,'AP SA, CNEW',IER) RETURN ENDIF IF (FLIP .EQ. 'Y') THEN CALL SAQB_P(BUF,LSD,NSAM,NROW,NIMA,NGRP,JACUP,CNEW) ELSE CALL SAQB_F(BUF,LSD,NSAM,NROW,NIMA,NGRP,JACUP,CNEW) ENDIF MAXIM = 0 NSLICE = 1 IFORM = 1 CALL OPFILEC(0,.TRUE.,FINPAT,INPIC,'U',IFORM,NSAM,NROW,NSLICE, & MAXIM,'OUTPUT',.FALSE.,IRTFLG) IF (IRTFLG .NE. 0) THEN CALL ERRT(4,'AP SA ',NE) DEALLOCATE (CNEW) RETURN ENDIF INS = -1 CALL FMRS_2(CNEW,NSAM,NROW,INS) CALL WRITEV(INPIC,CNEW,LSD,NROW,NSAM,NROW,NSLICE) 5 CLOSE(INPIC) WRITE (NDAT,2600) CLOSE(NDOC) DEALLOCATE (CNEW) RETURN 2600 FORMAT (/' ',80('-')//' ',' Shift alignment, ', & 'end of computation',//' ',80('-')/) END