Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

thd_correlate.c File Reference

#include "mrilib.h"

Go to the source code of this file.


Functions

void rank_order_float (int n, float *a)
float spearman_rank_prepare (int n, float *a)
float quadrant_corr_prepare (int n, float *a)
float spearman_rank_corr (int n, float *x, float rv, float *r)
float quadrant_corr (int n, float *x, float rv, float *r)
float THD_spearman_corr (int n, float *x, float *y)
float THD_quadrant_corr (int n, float *x, float *y)
float THD_pearson_corr (int n, float *x, float *y)

Function Documentation

float quadrant_corr int    n,
float *    x,
float    rv,
float *    r
[static]
 

Definition at line 120 of file thd_correlate.c.

References quadrant_corr_prepare(), and r.

Referenced by main(), quadrant_manycorr(), and THD_quadrant_corr().

00121 {
00122    register int ii ;
00123    register float ss ; float xv ;
00124 
00125    xv = quadrant_corr_prepare( n , x ) ; if( xv <= 0.0 ) return 0.0 ;
00126 
00127    for( ii=0,ss=0.0 ; ii < n ; ii++ ) ss += x[ii] * r[ii] ;
00128 
00129    return ( ss/sqrt(rv*xv) ) ;
00130 }

float quadrant_corr_prepare int    n,
float *    a
[static]
 

Definition at line 81 of file thd_correlate.c.

References a, and rank_order_float().

Referenced by main(), quadrant_corr(), quadrant_fimfunc(), quadrant_manycorr(), and THD_quadrant_corr().

00082 {
00083    register int ii ;
00084    register float rb , rs ;
00085 
00086    rank_order_float( n , a ) ;
00087 
00088    rb = 0.5*(n-1) ; rs=0.0 ;
00089    for( ii=0 ; ii < n ; ii++ ){
00090       a[ii] = (a[ii] > rb) ? 1.0
00091                            : (a[ii] < rb) ? -1.0 : 0.0 ;
00092       rs    += a[ii]*a[ii] ;
00093    }
00094 
00095    return rs ;
00096 }

void rank_order_float int    n,
float *    a
[static]
 

Definition at line 10 of file thd_correlate.c.

References a, c, free, malloc, n1, and qsort_floatint().

Referenced by quadrant_corr_prepare(), quadrant_fimfunc(), spearman_fimfunc(), and spearman_rank_prepare().

00011 {
00012    register int ii , ns , n1 , ib ;
00013    static int    nb = 0 ;
00014    static int *   b = NULL ;  /* workspaces */
00015    static float * c = NULL ;
00016    float cs ;
00017 
00018    /*- handle special cases -*/
00019 
00020    if( a == NULL ){
00021       if( b != NULL ){ free(b); free(c); b=NULL ; c=NULL; nb=0; }  /* free workspaces */
00022       return ;
00023    }
00024 
00025    if( n < 1 ) return ;                     /* meaningless input */
00026    if( n == 1 ){ a[0] = 0.0 ; return ; }    /* only one point!? */
00027 
00028    /*- make workspaces, if needed -*/
00029 
00030    if( nb < n ){
00031       if( b != NULL ){ free(b); free(c); }
00032       b  = (int   *) malloc(sizeof(int  )*n) ;
00033       c  = (float *) malloc(sizeof(float)*n) ;
00034       nb = n ;
00035    }
00036 
00037    for( ii=0 ; ii < n ; ii++ ) c[ii] = b[ii] = ii ;
00038 
00039    /*- sort input, carrying b along -*/
00040 
00041    qsort_floatint( n , a , b ) ;  /* see cs_sort_fi.c */
00042 
00043    /* compute ranks into c[] */
00044 
00045    n1 = n-1 ;
00046    for( ii=0 ; ii < n1 ; ii++ ){
00047       if( a[ii] == a[ii+1] ){                  /* handle ties */
00048          cs = 2*ii+1 ; ns = 2 ; ib=ii ; ii++ ;
00049          while( ii < n1 && a[ii] == a[ii+1] ){ ii++ ; ns++ ; cs += ii ; }
00050          for( cs/=ns ; ib <= ii ; ib++ ) c[ib] = cs ;
00051       }
00052    }
00053 
00054    for( ii=0 ; ii < n ; ii++ ) a[b[ii]] = c[ii] ;
00055 
00056    return ;
00057 }

float spearman_rank_corr int    n,
float *    x,
float    rv,
float *    r
[static]
 

Definition at line 106 of file thd_correlate.c.

References r, and spearman_rank_prepare().

Referenced by main(), spearman_rank_manycorr(), and THD_spearman_corr().

00107 {
00108    register int ii ;
00109    register float ss ; float xv ;
00110 
00111    xv = spearman_rank_prepare( n , x ) ; if( xv <= 0.0 ) return 0.0 ;
00112 
00113    for( ii=0,ss=0.0 ; ii < n ; ii++ ) ss += x[ii] * r[ii] ;
00114 
00115    return ( ss/sqrt(rv*xv) ) ;
00116 }

float spearman_rank_prepare int    n,
float *    a
[static]
 

Definition at line 63 of file thd_correlate.c.

References a, and rank_order_float().

Referenced by main(), spearman_fimfunc(), spearman_rank_corr(), spearman_rank_manycorr(), and THD_spearman_corr().

00064 {
00065    register int ii ;
00066    register float rb , rs ;
00067 
00068    rank_order_float( n , a ) ;
00069 
00070    rb = 0.5*(n-1) ; rs=0.0 ;
00071    for( ii=0 ; ii < n ; ii++ ){
00072       a[ii] -= rb ;
00073       rs    += a[ii]*a[ii] ;
00074    }
00075 
00076    return rs ;
00077 }

float THD_pearson_corr int    n,
float *    x,
float *    y
 

Definition at line 150 of file thd_correlate.c.

Referenced by main().

00151 {
00152    float xv=0 , yv=0 , xy=0 ;
00153    int ii ;
00154 
00155    for( ii=0 ; ii < n ; ii++ ){
00156       xv += x[ii]*x[ii] ; yv += y[ii]*y[ii] ; xy += x[ii]*y[ii] ;
00157    }
00158 
00159    if( xv <= 0.0 || yv <= 0.0 ) return 0.0 ;
00160    return xy/sqrt(xv*yv) ;
00161 }

float THD_quadrant_corr int    n,
float *    x,
float *    y
 

Definition at line 143 of file thd_correlate.c.

References quadrant_corr(), and quadrant_corr_prepare().

Referenced by main().

00144 {
00145    float xv = quadrant_corr_prepare(n,x) ;
00146    if( xv <= 0.0 ) return 0.0 ;
00147    return quadrant_corr( n,y,xv,x ) ;
00148 }

float THD_spearman_corr int    n,
float *    x,
float *    y
 

Definition at line 136 of file thd_correlate.c.

References spearman_rank_corr(), and spearman_rank_prepare().

Referenced by main().

00137 {
00138    float xv = spearman_rank_prepare(n,x) ;
00139    if( xv <= 0.0 ) return 0.0 ;
00140    return spearman_rank_corr( n,y,xv,x ) ;
00141 }
 

Powered by Plone

This site conforms to the following standards: