
C **********************************************************************
C  CLAST            
C           COSMETIC   CHANGES                  DEC 2008 ARDEAN LEITH                                                *
C           PIXEL FILE FDUM                     JUN 09 ARDEAN LEITH
C           IMC FILE FDUM                       JUN 09 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*  CLAST(N2DIM,NFAC,NUMIM,KFAC,NCLAS,G,KLAS,CI,PCLAS,LUNI)
C*
C*  PURPOSE:
C*      DETERMINATION OF CLASSES FROM COORDINATES.  THE DISTANCE               
C*      BETWEEN OBJECT I AND THE NCLAS CENTERS IS CALCULATED.                  
C*      THE COORDINATES OF THE NCLAS CENTERS ARE IN G(NCLAS,*).                
C*      OBJECT I IS ASSIGNED TO THE NEAREST CLASS.  THE GRAVITY                
C*      CENTERS OF THE NEWLY FORMED NCLAS CLASSES ARE DETERMINED               
C*      AND USED IN THE NEXT ITERATION.                                        
C*      FILLINF OF KLAS(NUMIM).                                                
C*                                                                             
C **********************************************************************

      SUBROUTINE CLAST(N2DIM,NFAC,NUMIM,KFAC,NCLAS,G,KLAS,CI,PCLAS,            
     &                  LUNI)
                                                                               
      DIMENSION KLAS(NUMIM),CI(NFAC),PCLAS(NCLAS), G(N2DIM,KFAC)

      CALL REWF(LUNI, 1)      ! REWIND _IMC FILE TO RECORD 1
                                                         
      DO N = 1,NCLAS                                                      
         DO KF = 1,KFAC                                                      
            G(NCLAS+N,KF) = 0.0                                                        
	 ENDDO
         PCLAS(N) = 0.0                                                             
      ENDDO
                                                                         
C     ASSIGNMENT OF OBJECT TO THE NEAREST CENTER                              
                                                                               
      DO I = 1,NUMIM                                                      
         READ(LUNI,*) (CI(KF),KF=1,NFAC), FDUM,FDUM,FDUM,FDUM
         SUP   = 1.0 E+15                                                          
         KAT   = 1 
                                                                
         DO  N=1,NCLAS                                                      
            DIST  = 0.0                                                               
            DO KF = 1,KFAC                                                      
               DC   = CI(KF) - G(N,KF)                                                  
               DIST = DIST + DC*DC                                                      
	    ENDDO
            IF (DIST .GT. SUP) CYCLE                                
            KAT   = N                                                                 
            SUP   = DIST                                                              
         ENDDO                                                                
         KLAS(I)    = KAT                                                              
         PCLAS(KAT) =  PCLAS(KAT) + 1.0                                              
         DO KF = 1,KFAC                                                      
           G(NCLAS+KAT,KF) = G(NCLAS+KAT,KF) + CI(KF)                                 
         ENDDO
      ENDDO
                                                                              
C     PROTECTION AGAINST AN EMPTY CLASS (REJECTED FURTHER)               
                                                                              
        DO N=1,NCLAS                                                      
           IF (PCLAS(N) .GT. 0.0)  CYCLE                               
           DO KF = 1,KFAC                                                      
             G(NCLAS+N,KF) = 1.0E+8                                                    
	   ENDDO
        ENDDO                                                                
                                                                               
C       UPDATE COORDINATES OF THE GRAVITY CENTERS                              
        DO N=1,NCLAS                                                     
           IF (PCLAS(N) .LE. 0.0)  PCLAS(N) = 1.0E-8                    
           DO  KF = 1,KFAC                                                      
             G(N,KF) = G(NCLAS+N,KF) / PCLAS(N)
	   ENDDO
	ENDDO

        RETURN                                                                 
        END                                                                    
