
C***********************************************************************
C
C  MAPSTAT.FOR  -- CREATED JAN 91
C
C **********************************************************************
C *  AUTHOR: ArDean Leith 
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      MAPSTAT(LUNIN,LUND,NSAM,NROW,NSLICE,NREC1,NREC2,NVOX,IRTFLG) 
C
C      PURPOSE:  EXAMINES AN IMAGE STACK FOR NUMBERS OF EACH IMAGE VALUE
C                AND CENTER OF MASS OF EACH IMAGE VALUE.  CREATES A DOC.
C                FILE FOR STATISTICS OUTPUT HAVING KEY=IMAGE VALUE + 1, 
C                THEN NUMBER OF CELLS HAVING THAT VALUE, IXCOM, IYCOM, & 
C                IZCOM.  LIMITED TO IMAGEVALUES >= 0 AND <= MAXVOX.
C
C      PARAMETERS:  
C
C      CALLED BY:  IMSTAT 
C
C      CALLS:      REDLIN      WRTLIN   
C
C23456789 123456789 123456789 123456789 123456789 123456789 123456789 12
C--*********************************************************************

       SUBROUTINE MAPSTAT(LUNIN,LUND,NSAM,NROW,NSLICE,NREC1,NREC2,
     &            NVOX,IRTFLG)

 

       PARAMETER (MAXBUF = 16000)
       PARAMETER (MAXVOX = 9999)

       INCLUDE 'CMBLOCK.INC'

       LOGICAL ONSLICE
       COMMON BUF(MAXBUF),FVOX(MAXVOX),FXCEN(MAXVOX),FYCEN(MAXVOX),
     &        FZCEN(MAXVOX),ONSLICE(MAXVOX),NUMSL(MAXVOX)

       DIMENSION DLIST(7)
       LOGICAL   DEBUGGING

       DEBUGGING = .FALSE.

       IOVER = 0
       NVOX  = 0

C      ZERO STATISTICS COUNTERS

       DO I = 1,MAXVOX
          FVOX(I)  = 0.0
          FXCEN(I) = 0.0
          FYCEN(I) = 0.0
          FZCEN(I) = 0.0
          NUMSL(I) = 0
       END DO

       LASTSLICE = -100        
       DO IREC = NREC1,NREC2
          CALL REDLIN(LUNIN,BUF,NSAM,IREC)
          ISLICE = (IREC / NROW) + 1
          IROW   = IREC - (ISLICE - 1) * NROW 

          IF (ISLICE .NE. LASTSLICE) THEN
C            STARTING A NEW SLICE, CHANGE ONSLICE FLAGS
             DO IBLOB = 1,MAXVOX
                ONSLICE(IBLOB) = .FALSE.
             ENDDO
             LASTSLICE = ISLICE
          ENDIF

          DO ICOL = 1,NSAM
C            CHECK THIS VOXEL STATISTICS, NOTE THAT TABLE LOCATION IS
C            1 > THAN IMAGE VALUE!!

             IT = BUF(ICOL) + 1

             IF (IT .LE. 0 .OR. IT .GT. MAXVOX) THEN
C               VOXEL VALUE TOO SMALL OR LARGE FOR STATISTICS TABLE
                IOVER = IOVER + 1
                IF (IOVER .LT. 8) THEN
C                   REPORT THE PROBLEM 8 TIMES
                    WRITE(NOUT,*) ' *** VOXEL VALUE: ',IT,
     &                             ' OUTSIDE TABLE SIZE: ',MAXVOX
                ENDIF

             ELSE
C               VOXEL VALUE IS WITHIN TABLE LIMITS
                FVOX(IT)  = FVOX(IT)  + 1
                FXCEN(IT) = FXCEN(IT) + ICOL
                FYCEN(IT) = FYCEN(IT) + IROW
                FZCEN(IT) = FZCEN(IT) + ISLICE
                IF (.NOT. ONSLICE(IT)) THEN
                   ONSLICE(IT) = .TRUE.
                   NUMSL(IT)   = NUMSL(IT) + 1
                ENDIF    
                IF (IT .GT. NVOX) NVOX = IT
             ENDIF
          END DO

       END DO

C      CALCULATE STATISTICS FOR EACH VOXEL VALUE
       DO I = 1,NVOX
          INUM     = FVOX(I)
          IF (INUM .GT. 0) THEN
C           VOXEL VALUE IS OCCUPIED
            DLIST(1) = I
            DLIST(2) = FVOX(I)
            DLIST(3) = FXCEN(I) / FVOX(I)
            DLIST(4) = FYCEN(I) / FVOX(I)
            DLIST(5) = FZCEN(I) / FVOX(I)
            DLIST(6) = NUMSL(I) 

C           SAVE STATISTICS IN DOC FILE
            CALL SAVD(LUND,DLIST,6,IRTFLG)

            IF (DEBUGGING) THEN
C              WRITE STATISTICS ON STANDARD OUTPUT
               WRITE(NOUT,90) I,INUM,(DLIST(J),J=3,6)
90             FORMAT(2I10,4G12.3)
            ENDIF
          ENDIF
       ENDDO

C      CLOSE THE DOC FILE
       CALL SAVDC
       CLOSE(LUND)

       RETURN
       END

