
C++*********************************************************************
C
C  CGR_3.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  CALCULATES CENTER OF GRAVITY INSIDE ELLIPSOIDE AROUND HIGHEST PEAK
C
C23456789012345678901234567890123456789012345678901234567890123456789012
C--*********************************************************************

         SUBROUTINE CGR_3(LUN,BUF,NSAM,NROW,NSLICE,
     &                    ELIPX,ELIPY,ELIPZ,NPC,
     &                    RXCEN,RYCEN,RZCEN,RSUM)

         DIMENSION  BUF(NSAM),NPC(3)

         XCOOR=NPC(1)
         YCOOR=NPC(2)
         ZCOOR=NPC(3)

         XMAXI = XCOOR + ELIPX
         XMINI = XCOOR - ELIPX
         YMAXI = YCOOR + ELIPY
         YMINI = YCOOR - ELIPY
         ZMAXI = ZCOOR + ELIPZ
         ZMINI = ZCOOR - ELIPZ

         RSUM  = 0

         RXCEN = 0
         RYCEN = 0
         RZCEN = 0

         DO I=ZMINI,ZMAXI
            RRAUZI = ((FLOAT(I)-ZCOOR)/ELIPZ)**2
            IR     = MOD(I-1+NSLICE,NSLICE)+1

            DO II=YMINI,YMAXI
               IIR = MOD(II-1+NROW,NROW)+1
               CALL REDLIN(LUN,BUF,NSAM,(IR-1)*NROW+IIR)

               RRAUXI = ((FLOAT(II)-YCOOR)/ELIPY)**2 + RRAUZI

               DO III=XMINI,XMAXI
                  RELIPS = ((FLOAT(III)-XCOOR)/ELIPX)**2 + RRAUXI

                  IF (RELIPS .LE. 1.0) THEN
                     IIIR = MOD(III-1+NSAM,NSAM) + 1
                     IF (BUF(IIIR) .LT. 0.0)  THEN
                        RSUM = 0.0
                        RETURN
                     ENDIF
                     RXCEN = BUF(IIIR)*III + RXCEN
                     RYCEN = BUF(IIIR)*II  + RYCEN
                     RZCEN = BUF(IIIR)*I   + RZCEN
                     RSUM  = BUF(IIIR)+RSUM
                  ENDIF
	       ENDDO
	    ENDDO
	 ENDDO
         IF (RSUM .EQ. 0.0) RETURN

         RXCEN = RXCEN/RSUM
         RYCEN = RYCEN/RSUM
         RZCEN = RZCEN/RSUM

         END

