1 #include "mrilib.h"
2 
3 #define NCOR 5
4 
5 static char *cor_name[NCOR] = { "Pearson" , "Spearman" , "Quadrant" , "MutualInfo" , "CorrRatio" } ;
6 typedef float (*cfun)(int,float *,float *) ;
7 static cfun cor_func[NCOR] =
8  { THD_pearson_corr , THD_spearman_corr_nd , THD_quadrant_corr_nd ,
9    THD_mutual_info  , THD_corr_ratio } ;
10 
main(int argc,char * argv[])11 int main( int argc , char *argv[] )
12 {
13    int iarg , ii,jj,kk,mm , nvec , do_one=0 , nx=0,ny , ff ;
14    MRI_IMAGE *tim ;
15    MRI_IMARR *tar ;
16    float sum , **tvec ;
17    float *far ;
18 
19    /* help? */
20 
21    if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
22      printf("Usage: 1dcorr [options] 1Dfile 1Dfile ...\n"
23             " - Prints various correlations of the 1D columns.\n"
24             " - Output appears on stdout.\n"
25             " - Not meant for mass consumption.\n"
26             "\n"
27             "Options:\n"
28             " - There are no stinking options.\n"
29            ) ;
30      PRINT_COMPILE_DATE ; exit(0) ;
31    }
32 
33    /* options */
34 
35    iarg = 1 ; nvec = 0 ;
36    while( iarg < argc && argv[iarg][0] == '-' ){
37      ERROR_exit("There are no options available in 1dcorr!") ;
38    }
39 
40    if( iarg == argc )
41      ERROR_exit("No 1D files on command line!?\n") ;
42 
43    /* input 1D files */
44 
45    ff = iarg ;
46    INIT_IMARR(tar) ; if( do_one ) nvec = 1 ;
47    for( ; iarg < argc ; iarg++ ){
48      tim = mri_read_1D( argv[iarg] ) ;
49      if( tim == NULL ){
50        fprintf(stderr,"** Can't read 1D file %s\n",argv[iarg]); exit(1);
51      }
52      if( nx == 0 ){
53        nx = tim->nx ;
54      } else if( tim->nx != nx ){
55        ERROR_exit("1D file %s doesn't match first file in length!",argv[iarg]);
56      }
57      nvec += tim->ny ;
58      ADDTO_IMARR(tar,tim) ;
59    }
60 
61    /* create vectors from 1D files */
62 
63    tvec = (float **) malloc( sizeof(float *)*nvec ) ;
64    for( jj=0 ; jj < nvec ; jj++ )
65      tvec[jj] = (float *) malloc( sizeof(float)*nx ) ;
66 
67    kk = 0 ;
68 
69    for( mm=0 ; mm < IMARR_COUNT(tar) ; mm++ ){
70      tim = IMARR_SUBIM(tar,mm) ;
71      far = MRI_FLOAT_PTR(tim) ;
72      for( jj=0 ; jj < tim->ny ; jj++,kk++ ){
73        for( ii=0 ; ii < nx ; ii++ ) tvec[kk][ii] = far[ii+jj*nx] ;
74      }
75    }
76    DESTROY_IMARR(tar) ;
77 
78    /* Correlations */
79 
80    for( mm=0 ; mm < NCOR ; mm++ ){
81      printf("\n++ %s:\n   ",cor_name[mm]) ;
82      for( kk=0 ; kk < nvec ; kk++ ) printf(" ---- %02d ----",kk) ;
83      printf("\n") ;
84      for( kk=0 ; kk < nvec ; kk++ ){
85        printf("%02d:",kk) ;
86        for( jj=0 ; jj < nvec ; jj++ ){
87          sum = (cor_func[mm])( nx , tvec[kk] , tvec[jj] ) ;
88          printf(" %12.3f",sum) ;
89        }
90        printf("\n") ;
91      }
92    }
93 
94    exit(0) ;
95 }
96