C++********************************************************************* C C AP_END C PEAKV REMOVED MAR 04 ArDean Leith C IKEY MAR 04 ArDean Leith C ANGDIF IF CHANGE IN MIRROR AUG 04 ArDean Leith C ANGLES IN REG OUTPUT WRONG AUG 04 ArDean Leith C APEND2 SEP 04 Chao Yang C REWRITE FOR END OF 'AP MD'.. SEP 04 ArDean Leith C REWRITE FOR UN-MIRROR OCT 04 ArDean Leith C RANGOUT <= 360 DEC 04 ArDean Leith C MPI WRITES TO REGISTERS NOW OCT 08 ArDean Leith 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 AP_END(KEY,IMGEXP,IMGREF, C ANGREF,REFDIR,ANGEXP,EXPDIR,ISHRANGE, C GOTREFANG, NGOTPAR,LSAM,LROW,CCROTT,PEAKVT, C RANGNEW,MIRRORNEW,EXPPAT,REFPAT, C NPROJT, CTYPE, XBUF,LUNDOC) C C PURPOSE : WRITE ALIGNMENT PARAMETERS TO OUTPUT FILE C C PARAMETERS: C REFANGDOC REF. ANGLES FILE NAME (INPUT) C REFPAT REF. IMAGE SERIES FILE TEMPLATE (INPUT) C EXPPAT EXP. IMAGE SERIES FILE TEMPLATE (INPUT) C DLIST PARAMETERS (OUTPUT) C C OPERATIONS: 'AP REF', 'AP RD', 'AP RN', 'AP MQ', 'AP NQ', 'AP SH' C C--********************************************************************* SUBROUTINE AP_END(KEY,IMGEXP,IMGREF, & ANGREF,REFDIR,ANGEXP,EXPDIR,ISHRANGE, & GOTREFANG, NGOTPAR,LSAM,LROW,CCROTT,PEAKVT, & RANGNEW,XSHNEW,YSHNEW,MIRRORNEW,EXPPAT,REFPAT, & NPROJT, CTYPE, XBUF, LUNDOC,DLIST) INCLUDE 'CMLIMIT.INC' INCLUDE 'CMBLOCK.INC' CHARACTER (LEN=*) :: CTYPE CHARACTER (LEN=*) :: EXPPAT,REFPAT LOGICAL :: MIRROROLD LOGICAL :: MIRRORNEW LOGICAL :: GOTREFANG REAL, DIMENSION(7) :: ANGEXP REAL, DIMENSION(3) :: ANGREF REAL, DIMENSION(3) :: ANGOUT REAL, DIMENSION(3) :: EXPDIR,REFDIR REAL, DIMENSION(*) :: XBUF REAL, DIMENSION(*) :: DLIST PARAMETER (QUADPI = 3.14159265358979323846) PARAMETER (DGR_TO_RAD = (QUADPI/180)) DATA INPIC/77/ IF (CTYPE(1:1) .EQ. 'M' .OR. & CTYPE(1:1) .EQ. 'N' .OR. & CTYPE(1:2) .EQ. 'RQ' .OR. & CTYPE(1:2) .EQ. 'RD' .OR. & CTYPE(1:2) .EQ. 'RN') THEN C FOR OBSOLETE: 'AP MQ', 'AP MD'.... CALL AP_END_OBSLT(IMGEXP,IMGREF, & CCROTT,RANGNEW,XSHNEW,YSHNEW,MIRRORNEW, & DLIST) IF (LUNDOC .GT. 0) THEN C SAVE IN ALIGNMENT DOC FILE C REF#,CCROT,PSI,SX,SY,IMG#,-1 CALL LUNDOCWRTDAT(LUNDOC,KEY,DLIST,7,IRTFLG) ENDIF CALL REG_GET_USED(NSEL_USED) IF (NSEL_USED .GT. 0) THEN C OUTPUT TO SPIDER'S REGISTERS CALL REG_SET_NSEL(1,5, DLIST(1),DLIST(2),DLIST(3), & DLIST(4),DLIST(5),IRTFLG) CALL REG_SET_NSEL(6,5, DLIST(6),DLIST(7),DLIST(8), & DLIST(9),DLIST(10),IRTFLG) CALL REG_SET_NSEL(11,5,DLIST(11),DLIST(12),DLIST(13), & DLIST(14),DLIST(15),IRTFLG) ENDIF RETURN ! ------------------------------------ ENDIF NPROJ = NPROJT IF (NPROJ .EQ. 0) NPROJ = 1 PEAKV = PEAKVT IF (IMGREF .GT. 0) THEN C IMGREF IS NUMBER OF MOST SIMILAR REF. IMAGE CCROT = CCROTT ELSE C NO REFERENCE IMAGE SELECTED CCROT = -1.0 PEAKV = 0.0 ENDIF C SET NEW PROJECTION ANGLES ANGOUT = 0.0 ! DEFAULT VALUE IF (IMGREF .GT. 0 .AND. GOTREFANG) THEN C USE REF. ANGLES AS NEW PROJECTION ANGLES ANGOUT = ANGREF(1:3) IF (MIRRORNEW) THEN C REF. PROJECTION MUST BE MIRRORED ANGOUT(1) = -ANGOUT(1) ANGOUT(2) = 180+ANGOUT(2) ENDIF ELSEIF (NGOTPAR .GE. 3) THEN C KEEP OLD EXP. PROJ. ANGLES ANGOUT = ANGEXP(1:3) ENDIF RANGOLD = 0.0 XSHOLD = 0.0 YSHOLD = 0.0 IF (NGOTPAR .GE. 7 .AND. ISHRANGE .GT. 0) THEN C USE OLD INPLANE ROT. & SHIFT RANGOLD = ANGEXP(4) XSHOLD = ANGEXP(5) YSHOLD = ANGEXP(6) MIRROROLD = (ANGEXP(7) .GT. 0) IF (MIRROROLD) THEN WRITE(NOUT,90) 90 FORMAT( & ' *** MIRRORED PROJECTION INPUT NO LONGER ALLOWED.',/, & ' *** CONVERT YOUR ALIGNMENT PARAMETER FILES TO ', & ' NON-MIRRORED FORM OR USE OLDER SPIDER RELEASE.') CALL ERRT(101, & 'MIRRORED PROJECTION INPUT NO LONGER ALLOWED',NE) ENDIF ENDIF IF (CTYPE(1:3) .EQ. 'REF' .AND. & IMGREF .GT. 0 .AND. ISHRANGE .GT. 0) THEN C FIND SHIFT PARAMETERS FOR 'AP REF' ALIGNMENT NSAMP = 2*LSAM+2 NROWP = 2*LROW CALL APSHIFT(INPIC,EXPPAT,LSAM,LROW,IMGEXP,IMGREF, & REFPAT, XBUF,ISHRANGE,NSAMP,NROWP, & RANGNEW,XSHNEW,YSHNEW,MIRRORNEW,PEAKV,IRTFLG) ENDIF C COMBINE ROT. & SHIFT WITH PREVIOUS TRANSFORMATION C = COS(RANGNEW * DGR_TO_RAD) S = -SIN(RANGNEW * DGR_TO_RAD) XSHOUT = XSHNEW + XSHOLD*C - YSHOLD*S YSHOUT = YSHNEW + XSHOLD*S + YSHOLD*C RANGOUT = RANGOLD + RANGNEW C LIST ANGLES IN RANGE 0...360 DO WHILE(RANGOUT .LT. 0.0) RANGOUT = RANGOUT + 360.0 ENDDO DO WHILE(RANGOUT .GE. 360.0) RANGOUT = RANGOUT - 360.0 ENDDO C SET FLAG FOR NO ANGDIF DETERMINED ANGDIF = -1.0 IF (IMGREF .LE. 0) THEN C NO RELEVANT REF. IMAGE FOUND ANGDIF = 0.0 ELSEIF (GOTREFANG .AND. NGOTPAR .GE. 3) THEN C CAN FIND ANGDIF ANGDIF = ABS(EXPDIR(1) * REFDIR(1) + & EXPDIR(2) * REFDIR(2) + & EXPDIR(3) * REFDIR(3)) ANGDIF = MIN(1.0,ANGDIF) ANGDIF = ACOS(ANGDIF) / DGR_TO_RAD ENDIF IKEY = KEY IF (CTYPE(1:2) .EQ. 'SH' .OR. & CTYPE(1:3) .EQ. 'REF') THEN IKEY = IMGEXP ENDIF C SAVE 15 ALIGNMENT PARAMETERS CALL AP_OUT(IKEY,IMGEXP, & ANGOUT, IMGREF,CCROT, & RANGNEW,XSHNEW,YSHNEW,MIRRORNEW, & RANGOUT,XSHOUT,YSHOUT, & NPROJ,ANGDIF,PEAKV, & LUNDOC,DLIST,15,IRTFLG) END C++****************************** AP_OUT ***************************** SUBROUTINE AP_OUT(KEY,IMGEXP, & ANGOUT, IMGREF,CCROT, & RANGNEW,XSHNEW,YSHNEW,MIRRORNEW, & RANGOUT,XSHOUT,YSHOUT, & NPROJ,ANGDIF,PEAKV, & LUNDOC,DLIST,NLIST,IRTFLG) REAL, DIMENSION(3) :: ANGOUT LOGICAL :: MIRRORNEW REAL, DIMENSION(NLIST) :: DLIST C ZERO DLIST ARRAY DLIST = 0.0 DLIST(1) = ANGOUT(1) DLIST(2) = ANGOUT(2) DLIST(3) = ANGOUT(3) DLIST(4) = IMGREF DLIST(5) = IMGEXP DLIST(6) = RANGOUT DLIST(7) = XSHOUT DLIST(8) = YSHOUT DLIST(9) = NPROJ DLIST(10) = ANGDIF DLIST(11) = CCROT DLIST(12) = RANGNEW DLIST(13) = XSHNEW DLIST(14) = YSHNEW DLIST(15) = PEAKV IF (MIRRORNEW) DLIST(15) = -PEAKV #ifndef USE_MPI IF (LUNDOC .GT. 0) THEN C SAVE IN ALIGNMENT DOC FILE IF NOT USING MPI C <,<,<, REF#,IMG#,INPLANE<, SX,SY,NPROJ,