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