1 /*****************************************************************************
2    Major portions of this software are copyrighted by the Medical College
3    of Wisconsin, 1994-2000, and are released under the Gnu General Public
4    License, Version 2.  See the file README.Copyright for details.
5 ******************************************************************************/
6 
7 #include "mrilib.h"
8 #include "thd.h"
9 
10 /*----------------------------------------------------------------
11     Check to see if there are any duplicate ID codes in the
12     datasets stored herein.
13     [28 Jul 2003] Modified for new THD_session struct.
14 ------------------------------------------------------------------*/
15 
THD_check_idcodes(THD_sessionlist * ssl)16 void THD_check_idcodes( THD_sessionlist *ssl )
17 {
18    int iss , idd,jdd , ivv , dsnum , nd ;
19    THD_session *sess ;
20    THD_3dim_dataset * dset , **dsl ;
21 
22 ENTRY("THD_check_idcodes") ;
23 
24    /*-- sanity check --*/
25 
26    if( ! ISVALID_SESSIONLIST(ssl) || ssl->num_sess <= 0 ) EXRETURN ;
27 
28    /*-- count number of datasets --*/
29 
30    for( dsnum=iss=0 ; iss < ssl->num_sess ; iss++ ){
31      sess = ssl->ssar[iss] ; if( !ISVALID_SESSION(sess) ) continue ;
32      for( idd=0 ; idd < sess->num_dsset ; idd++ ){
33        for( ivv=FIRST_VIEW_TYPE ; ivv <= LAST_VIEW_TYPE ; ivv++ ){
34          dset = GET_SESSION_DSET(sess, idd, ivv);
35 /*         dset = sess->dsset_xform_table[idd][ivv] ;*/
36          if( ISVALID_DSET(dset) ) dsnum++ ;
37        }
38      }
39    }
40    STATUS("counted datasets") ;
41    if( dsnum < 2 ) EXRETURN ;  /* 21 Feb 2007 */
42 
43    /*-- make list of datasets --*/
44 
45    dsl = (THD_3dim_dataset **) malloc( sizeof(THD_3dim_dataset *) * dsnum ) ;
46 
47    for( nd=iss=0 ; iss < ssl->num_sess ; iss++ ){
48      sess = ssl->ssar[iss] ; if( !ISVALID_SESSION(sess) ) continue ;
49      for( idd=0 ; idd < sess->num_dsset ; idd++ ){
50        for( ivv=FIRST_VIEW_TYPE ; ivv <= LAST_VIEW_TYPE ; ivv++ ){
51          dset = GET_SESSION_DSET(sess, idd, ivv);
52 /*         dset = sess->dsset_xform_table[idd][ivv] ;*/
53          if( ISVALID_DSET(dset) ) dsl[nd++] = dset ;
54        }
55      }
56    }
57    STATUS("collected datasets") ;
58 
59    /*-- check list for duplicates --*/
60 
61    for( iss=idd=0 ; idd < dsnum-1 ; idd++ ){
62      nd = 0 ;
63      for( jdd=idd+1 ; jdd < dsnum ; jdd++ ){
64        if( DUPLICATE_DSETS(dsl[idd],dsl[jdd]) ){ /* 20 Dec 2001: change EQUIV_IDCODES() to DUPLICATE_DSETS() */
65          fprintf(stderr,
66                  "\n*** WARNING: Identical ID codes in %s and %s",
67                  DSET_HEADNAME(dsl[idd]) , DSET_HEADNAME(dsl[jdd]) ) ;
68          iss++ ;
69        }
70      }
71    }
72 
73    if( iss > 0 ) fprintf(stderr,"\n") ;
74 
75    free(dsl) ; EXRETURN ;
76 }
77