C++*********************************************************************
C
C ALROSF_Q.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 IMAGE_PROCESSING_ROUTINE
C
C23456789012345678901234567890123456789012345678901234567890123456789012
C--*********************************************************************

        SUBROUTINE  ALROSF_Q(A,ATMP,B,C,REFER,LSD,NSAM,NROW,NSI,
     &     PARA,NOCHANGE,
     &     A_CIRC,REFER_CIRC,LCIRC,JACUP,NUMR,NRING,MAXRIN,TEMP,MODE)

        PARAMETER (QUADPI = 3.141592653589793238462643383279502884197)
        PARAMETER (DGR_TO_RAD = (QUADPI/180))

        DIMENSION   A(LSD,NROW),B(LSD,NROW),C(LSD,NROW)
        DIMENSION   REFER(LSD,NROW),ATMP(LSD,NROW),PARA(3)
        INTEGER  NUMR(3,NRING),MAXRIN
        DOUBLE PRECISION  TEMP(MAXRIN+2,2),TOTMIN
        DIMENSION  A_CIRC(LCIRC),REFER_CIRC(LCIRC)
        LOGICAL  NOCHANGE
        CHARACTER*1 MODE


        NSNR=NSAM*NROW

        CALL  ALRQ_Q
     &    (REFER,LSD,NSAM,NROW,NUMR,REFER_CIRC,LCIRC,NRING,MODE,IPIC)
        CALL  FOURING_Q
     &    (REFER_CIRC,LCIRC,NUMR,NRING,TEMP,MODE)
        INS=1
        CALL  FMRS_2(REFER,NSAM,NROW,INS)

C       ATMP HAS TO BE UPDATED BEFORE THE CALL
C       CALL  RTQS(A,ATMP,NSAM,NROW,PARA(1),PARA(2),PARA(3))

        ITER=0
        NOCHANGE=.FALSE.
101     ITER=ITER+1
        CALL  ALRQ_Q
     &    (ATMP,LSD,NSAM,NROW,NUMR,A_CIRC,LCIRC,NRING,MODE,IPIC)
        CALL  FOURING_Q
     &    (A_CIRC,LCIRC,NUMR,NRING,TEMP,MODE)

        CALL  CROSRNG_Q
     &    (REFER_CIRC,A_CIRC,LCIRC,NRING,TEMP,TEMP(1,2),
     &    MAXRIN,JACUP,NUMR,TOTMIN,TOT,MODE)

         ROTMP = ANG(TOT,MODE)
         CALL  RTQ_Q(ATMP,B,LSD,NSAM,NROW,ROTMP)

         INS = 1
         CALL  FMRS_2(B,NSAM,NROW,INS)

         LSC = NSAM+2-MOD(NSAM,2)
         CALL  CCRS_2(REFER,B,C, LSC,NSAM,NROW)

         CALL  FINDMX_Q(C,LSD,NSAM,NROW,NSI,CMX1,SX1,SY1)

         DD = ((COS(ROTMP*DGR_TO_RAD)-1.0)*NUMR(1,NRING)+SX1)**2
     &      +(SIN(ROTMP*DGR_TO_RAD)*NUMR(1,NRING)+SY1)**2
         IF (DD.LT.0.25) THEN
            IF (ITER .EQ. 1)  NOCHANGE=.TRUE.
            RETURN
         ENDIF

         CALL  SUMAP(PARA(1),PARA(2),PARA(3),ROTMP,SX1,SY1,P1,P2,P3)
         PARA(1)=P1
         PARA(2)=P2
         PARA(3)=P3
         CALL  RTQS_Q(A,ATMP,LSD,NSAM,NROW,PARA(1),PARA(2),PARA(3))
         IF (ITER.GT.25)  RETURN
         GOTO 101

         END

