
C ++********************************************************************
C                                                                      *
C  MRALIGN               DUAL PARAMETER BUG     DEC 2008 ARDEAN LEITH  *                               *
C                                                                      *
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  MRALIGN(XYPTS,PRJ,ANGLE,SHIFT,SCALE,PTACTIVE,NTPT)                                                                   *
C                                                                      *
C  PURPOSE:                                                            *
C  TAKES IMAGES XYPTS AND TRANSFORMS THEM BY ROTATING ABOUT THE
C  GEOMETRICAL CENTER (NOT MASS CENTER) AND TRANSLATING IT BY SHIFT.   *
C
C PARAMETERS:                                                          *
C INPUT:
C     XYPTS(2,NTPT,LV)= COORDS OF POINTS TO BE TRANSFORMED
C     ANGLE(3,LV)= EULER ANGLES. ANGLE(2) IS TILT AND ANGLE(1) IS
C                  FINAL ROTATION CORRECTION (APPLIED HERE)
C     SHIFT(2,LV)= SHIFT (X,Y) THAT THE IMAGE MUST UNDERGO
C     SCALE(LV)  = MULTIPLICATIVE SCALING FACTOR
C     NTPT       = TOTAL NUMBER OF DISTINCT MARKERS USED
C
C OUTPUT:
C     XYPTS(2,NTPT,LV) = COORDS OF CORRECTED POINTS
C        
C23456789012345678901234567890123456789012345678901234567890123456789012
C***********************************************************************

      SUBROUTINE MRALIGN(XYPTS,ANGLE,SHIFT,SCALE,PTACTIVE,NTPT)

      LOGICAL     PTACTIVE(NTPT)
      DIMENSION   XYPTS(2,NTPT), PRJ(2,NTPT)
      DIMENSION   SHIFT(2)

      CA = COS(ANGLE)
      SA = SIN(ANGLE)

C     IMAGE CENTER (CIR) WAS ALREADY SUBTRACTED IN MRGETINFO.
C     ROTATION IS MEANT TO BE AROUND THE CENTER OF THE IMAGE
C     NOT AROUND THE CORNER OR CENTER OF MASS

C     X' = SCALE * R(PSI) * X + SHIFT

      DO  IPT=1,NTPT
        IF (PTACTIVE(IPT)) THEN

	  QT           = XYPTS(1,IPT)
          XYPTS(1,IPT) = SCALE * ( QT * CA + XYPTS(2,IPT)*SA) + SHIFT(1)
          XYPTS(2,IPT) = SCALE * (-QT * SA + XYPTS(2,IPT)*CA) + SHIFT(2)
	ENDIF
      ENDDO

      END

