
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*                                                                    *         
C*                                                                    *         
C*      INITIAL DENDROGRAM CHARACTERIZED BY NKLA SUMMITS IS TRUN-     *         
C*      CATED INTO KPART FINAL CLASSES.  OBJECTS ARE ASSIGNED         *         
C*      TO THE NEW CLASSES.                                           *         
C*                                                                    *         
C*   INPUT:                                                           *         
C*      NUMIM,NKLA,KPART,PK(NKLA),LA(NKLA),LB(NKLA) (CF,CHAVA)        *         
C*                                                                    *         
C*   OUTPUT:                                                          *         
C*      KLAS(NUMIM)      = NEW CLASSIFICATION CONTAINING KPART CLASSES*         
C*      IV(NKLA)         = ASSIGNMENT OF OLD CLASSES TO NEW CLASSES   *         
C*      NT(NKLA)         = SIZES OF THE KPART CLASSES                 *         
C*                                                                    *         
C*   WORKING ARRAY ... IW(NKLA)                                       *         
C*                                                                    *         
C*--------------------------------------------------------------------*         

      SUBROUTINE COUPE(NUMIM,NKLA,KPART, PK,LA,LB,IV,KLAS,NT, IW) 
             
      DIMENSION IV(NKLA),LA(NKLA),LB(NKLA),KLAS(NUMIM),PK(NKLA),                
     &          NT(NKLA),IW(NKLA)                                               

      JDEB  = NKLA + 1                                                          
      JFIN  = 2*NKLA - 1                                                        
                                                                              
C     INDICATOR IV(NKLA) OF THE AGGREGATION IN KPART CLASSES               
                                                                               
      DO   L = 1,NKLA                                                       
         IV(L) = 0 
      ENDDO 
                                                               
      DO   J = JDEB,JFIN                                                    
         NT(1) = J                                                                 
         KPT   = 0                                                                 
         JI    = 1 
                                                                
   20    IF (NT(JI) .LE. NKLA) THEN                                
            K       = NT(JI)                                                            
            KPT     = KPT + 1                                                           
            IW(KPT) = K                                                                
            JI      = JI - 1                                                            
         ELSE 
                               
            IJ      = JI + 1                                                            
            NI      = NT(JI) - JDEB + 1                                                 
            NT(IJ)  = LA(NI)                                                            
            NT(JI)  = LB(NI)                                                            
            JI      = JI + 1 
         ENDIF                                                           
         IF (JI .NE. 0) GO TO  20
                                
         IF (J .LE. JFIN-KPART+1) THEN                                
            DO   KK = 1,KPT                                                       
               JPP     = IW(KK)                                                            
               IV(JPP) = J                                                                
	    ENDDO
         ENDIF
         I1    = IW(1)                                                             
         I2    = IW(KPT)                                                           
      ENDDO

      KKK   = 1                                                                 
      NKLA1 = NKLA - 1                                                          
      DO  IL1 = 1,NKLA1                                                   
         IF(IV(IL1) .NE. 0) THEN                                
            IF (IV(IL1) .LT. KKK) CYCLE                               
            IV1     = IV(IL1)                                                           
            IV(IL1) = KKK                                                              
            IL3     = IL1 + 1
                                                           
            DO IL2 = IL3,NKLA                                                   
               IF (IV(IL2) .NE. IV1) CYCLE                                
               IV(IL2) = IV(IL1)                                                          
            ENDDO                                                                
         ELSE 
            IV(IL1 )= KKK 
         ENDIF                                                             
         KKK   = KKK + 1
      ENDDO
                                                               
      IF (IV(NKLA) .EQ. 0) IV(NKLA) = KKK 
                          
      END                                                                    
