C++*********************************************************************
C
C APPLYWS.F
C               MODIFED FOR USING FFTW3           MAR 2003 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 APPLYWS_NEW(CIRC,LCIRC,NUMR,WR,NRING,MAXRIN)
C
C PURPOSE: APPLY WEIGTHS FROM ARRAY: WR TO: CIRC ARRAY VALUES
C	   WR()  = REAL(RING_RADIUS * PI / REAL(NVAL) *
C                  REAL(MAXRIN) / REAL(NVAL)

C23456789012345678901234567890123456789012345678901234567890123456789012
C--*********************************************************************

	SUBROUTINE APPLYWS_NEW(CIRC,LCIRC,NUMR,WR,NRING)

	INTEGER :: NUMR(3,NRING), NVAL,IGO
	REAL    :: CIRC(LCIRC), WR(NRING)

	DO I=1,NRING
	   IGO       = NUMR(2,I)
	   W         = WR(I)

C          APPLY WEIGHTS FOR CIRC LOCATIONS

#ifdef SP_LIBFFTW3

	   NVAL   = NUMR(3,I) - 2     ! NOT INCLUDING FOURIER PAD
           MAXRIN = NUMR(3,NRING) - 2 ! ACTUAL LENGTH OF LONGEST RING

	   DO J=1,NVAL+2
	      JC       = J + IGO - 1
	      CIRC(JC) = CIRC(JC) * W
	   ENDDO

	   IF (NVAL .NE. MAXRIN) THEN
C             UNUSUAL WEIGHTING HISTORICALLY USED HERE
              CIRC(IGO+1) = CIRC(IGO+1) - 0.5 * W
           ENDIF

#else
	   NVAL   = NUMR(3,I)   
           MAXRIN = NUMR(3,NRING)   ! ACTUAL LENGTH OF LONGEST RING

	   CIRC(IGO) = CIRC(IGO) * W

	   IF (NVAL .EQ. MAXRIN)  THEN
	      CIRC(IGO+1) = CIRC(IGO+1) * W
	   ELSE
	      CIRC(IGO+1) = CIRC(IGO+1) * 0.5 * W
	   ENDIF

	   DO J=3,NVAL
	      JC       = J + IGO - 1
	      CIRC(JC) = CIRC(JC) * W
	   ENDDO
#endif

	ENDDO
	END

C       -------------------- APPLYWS --------------------------------

	SUBROUTINE APPLYWS(CIRC,LCIRC,NUMR,WR,NRING,MAXRIN)

	INTEGER :: NUMR(3,NRING), MAXRIN, NVAL,IGO
	REAL    :: CIRC(LCIRC), WR(NRING)

	DO I=1,NRING
	   IGO       = NUMR(2,I)
	   NVAL       = NUMR(3,I)

	   W         = WR(I)
	   CIRC(IGO) = CIRC(IGO)*W

	   IF (NVAL .EQ. MAXRIN)  THEN
	      CIRC(IGO+1) = CIRC(IGO+1) * W
	   ELSE
	      CIRC(IGO+1) = CIRC(IGO+1) * 0.5 * W
	   ENDIF

	   DO J=3,NVAL
	      JC       = J + IGO - 1
	      CIRC(JC) = CIRC(JC) * W
	   ENDDO
	ENDDO
	END

