
C++*********************************************************************
C
C BPWR.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 BPWR.FOR
C R**2 weighting,                             03/04/92
C
C23456789012345678901234567890123456789012345678901234567890123456789012
C--*********************************************************************

         SUBROUTINE BPWR(MAXMEM)

         INCLUDE 'CMBLOCK.INC'
         INCLUDE 'CMLIMIT.INC'
         INCLUDE 'F90ALLOC.INC'
         CHARACTER*80      FINPAT,FINPIC,FOUT
         COMMON  /F_SPEC/  FINPAT,FINPIC,FOUT,NLET,NLOT

         PARAMETER  (NILMAX=2000)
         COMMON     DUMMY(80),BUF(1024),ILIST(NILMAX),Q(1)
         REAL, DIMENSION(:), ALLOCATABLE :: Q1,Q2

         CHARACTER * 1  NULL

         DATA  INPIC/99/

         NULL = CHAR(0)

         CALL  FILERD(FINPAT,NLET,NULL,
     &      'ENTER TEMPLATE FOR 2-D IMAGE NAME',IRTFLG)

         CALL  FILERD(FOUT,NLOT,NULL,
     &      'ENTER TEMPLATE FOR 2-D OUTPUT IMAGE',IRTFLG)

         CALL  FILERD(FINPIC,NLETI,NULL,'SELECTION DOC',IRTFLG)

         CALL  RDPRM(FM,NOT_USED,
     &      'CUT-OFF FREQUENCY OF PARZEN FILTER')
         K    = 0
         K2   = 1
         NANG = 0
778      LERR = -1
         IF(NANG.EQ.NILMAX)  THEN
            WRITE(NOUT,*) '*** Too many images, list truncated'
            GOTO  779
         ENDIF

         KP1 = K+1
         CALL  UNSAV(FINPIC,K,INPIC,KP1,Q,1,LERR,K2)
         IF (LERR.EQ.0)  THEN
            NANG = NANG+1
            ILIST(NANG)=Q(1)
            K=K+1
            GOTO  778
         ENDIF

779      CLOSE(INPIC)
         WRITE(NOUT,2001) NANG
2001     FORMAT(' Number of images=',I5)
         CALL  FILGET(FINPAT,FINPIC,NLET,ILIST(1),INTFLG)
         MAXIM = 0
         CALL OPFILEC(0,.FALSE.,FINPIC,INPIC,'O',IFORM,NSAM,NROW,NSL,
     &               MAXIM,' ',.FALSE.,IRTFLG)
         IF (IRTFLG .NE. 0) RETURN
         CLOSE(INPIC)

         N2S = 2*NSAM
         N2R = 2*NROW

        ALLOCATE(Q1(N2R*(N2S+2)),Q2(N2R*(N2S+2)), STAT=IRTFLG)
        IF (IRTFLG.NE.0) THEN 
           CALL ERRT(46,'BP R2',IER)
        ENDIF
	 IF (FM.GE.0.0)  THEN
            WRITE(NOUT,1001)  N2S,N2R
1001        FORMAT(//'  R**2 weighting of 2D images',/,
C     &               '  Memory needed - ',I8,/,
     &               '  Dimensions used:',2I8,/)
	 ELSE
            WRITE(NOUT,1003)  N2S,N2R
1003        FORMAT(//'  R*   weighting of 2D images',/,
C     &               '  Memory needed - ',I8,/,
     &               '  Dimensions used:',2I8,/)
	 ENDIF
         IF (MEMTOT .GT. MAXMEM)  THEN
            CALL ERRT(102,'YOUR BUFFER LENGTH IS ONLY',MAXMEM)
            RETURN
         ENDIF

         CALL  BPWR_Q(BUF,Q1,Q2,FM,ILIST,NANG,N2S,N2R,NSAM,NROW)
         IF (ALLOCATED(Q1))  DEALLOCATE(Q1)
         IF (ALLOCATED(Q2))  DEALLOCATE(Q2)
         END
