
C++*********************************************************************
C
C  REDPRQ.F
C
C                  OPFILEC                         FEB  03 ARDEAN LEITH
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   REDPRQ
C
C IMAGE_PROCESSING_ROUTINE
C
C23456789 123456789 123456789 123456789 123456789 123456789 123456789 12
C--*********************************************************************

        SUBROUTINE  REDPRQ(N,NANG,ANG,ILIST,IPCUBE,NN,DM,
     &                     RI,ABA,LUNPROJ,LUNVOL,IRTFLG)

        INCLUDE           'CMBLOCK.INC'

        REAL, ALLOCATABLE, DIMENSION(:,:,:) :: CB
        REAL, DIMENSION(N,N) ::                PROJ
        INTEGER, DIMENSION(NANG) ::            ILIST
        INTEGER, DIMENSION(5,NN) ::            IPCUBE
        REAL, DIMENSION(9,NANG) ::             DM
        REAL, DIMENSION(3,NANG) ::             ANG

        CHARACTER*80      FINPIC,FINPAT
        COMMON  /F_SPEC/  FINPAT,NLET,FINPIC
        COMMON /NORMB/    BNORM
        DOUBLE PRECISION  ABA

        IRTFLG = 1

        ABA    = 0.0D0
        KLP    = 0

        ALLOCATE (CB(N,N,N), STAT=IRTFLG)
        IF (IRTFLG.NE.0) THEN 
           CALL ERRT(46,'REDPRQ, CB',IER)
           RETURN
        ENDIF

C       ZERO CB ARRAY
        CB = 0.0

        DO  K=1,NANG
C          OPEN DESIRED FILE
           CALL FILGET(FINPAT,FINPIC,NLET,ILIST(K),IRTFLG)
           IF (IRTFLG .NE. 0) RETURN

           MAXIM = 0
           CALL OPFILEC(0,.FALSE.,FINPIC,LUNPROJ,'O',IFORM,
     &                  LSAM,LROW,NSL,
     &                  MAXIM,'DUMMY',.FALSE.,IRTFLG)
           IF (IRTFLG .NE. 0) RETURN

           DO K2=1,N
              CALL REDLIN(LUNPROJ,PROJ(1,K2),N,K2)
           ENDDO
           CLOSE(LUNPROJ)

           IF (VERBOSE) WRITE(NOUT,333)  K,(ANG(J,K),J=3,1,-1)
333        FORMAT(' PROJECTION #',I6,
     &            '; PSI=',F6.1,' THETA=',F6.1,' PHI=',F6.1)
  
           CALL ASTA(PROJ,N,RI,ABA,KLP)

           CALL RPRQ(N,PROJ,CB(1,1,1),IPCUBE,NN,
     &              ANG(1,K),ANG(2,K),ANG(3,K),DM(1,K),RI)

        ENDDO

        ABA = ABA / KLP

C       PRINT STATISTICS
        WRITE(NOUT,2044) KLP,ABA
2044    FORMAT(' TOTAL NUMBER OF POINTS IN PROJECTIONS:',I10,/,
     &         ' AVERAGE OUTSIDE THE WINDOW:           ',1PE10.3,/)

C       SUBTRACT THE AVERAGE AND WRITE TO THE FILE
        BNORM = 0.0
        QT    = ABA * NANG
        DO KN=1,NN
           J = IPCUBE(4,KN)
           K = IPCUBE(5,KN)
           DO I=IPCUBE(3,KN),IPCUBE(3,KN)+IPCUBE(2,KN)-IPCUBE(1,KN)
              CB(I,J,K) = CB(I,J,K) - QT
              BNORM     = BNORM+CB(I,J,K) * CB(I,J,K)
           ENDDO
           CALL WRTLIN(LUNVOL,CB(1,J,K),N,(K-1)*N+J)
        ENDDO

        IRTFLG = 0
        IF (ALLOCATED(CB)) DEALLOCATE(CB)

        RETURN
        END


