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