C++*********************************************************************
C
C ALROSI_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  ALROSI_Q(A,ATMP,B,C,REFER,LSD,NSAM,NROW,NSI,
     &     PARA,NOCHANGE,
     &    A_CIRC,REFER_CIRC,LCIRC,JACUP,NUMR,NRING,MAXRIN,TEMP,MODE,KTN)

        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=LSD*NROW

C       ATMP HAS TO BE UPDATED BEFORE THE CALL

        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.

C          NEXT LINE WOULD BE USED FOR NON-ZERO TOT ONLY
C          CALL  UPDTC(REFER_CIRC,A_CIRC,LCIRC,NRING,NUMR,TOT,MAXRIN,KTN)

           CALL  UPDTF(REFER_CIRC,A_CIRC,LCIRC,KTN)
           CALL  UPDTF(REFER,B,NSNR,KTN)
           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
