Doxygen Source Code Documentation
uuu2.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Functions | |
void | set_unusuality_tail (float p) |
void | find_unusual_correlations (int nr, float *rr, int *nhi, int *ihi) |
Variables | |
float | zstar = 0.0 |
float | pstar = 0.0 |
Function Documentation
|
Definition at line 27 of file uuu2.c. References free, getenv(), malloc, nr, qsort_float(), qsort_floatint(), set_unusuality_tail(), strtod(), and zstar.
00029 { 00030 int ii , nzero,mzero ; 00031 float zmid,zsig,zmed , rmid,rcut ; 00032 float * zz , * aa ; 00033 int * iz ; 00034 00035 if( nhi == NULL ) return ; /* illegal entry */ 00036 00037 *nhi = 0 ; /* default return */ 00038 00039 if( nr < 1000 || rr == NULL || ihi == NULL ) return ; /* illegal entry */ 00040 00041 /*-- make workspace --*/ 00042 00043 zz = (float *) malloc(sizeof(float)*nr*2) ; aa = zz + nr ; 00044 iz = (int *) malloc(sizeof(int) *nr ) ; 00045 00046 if( zstar <= 0.0 ){ /* initialize zstar if needed */ 00047 char * cp = getenv("PTAIL") ; 00048 float pp = 0.0001 ; 00049 if( cp != NULL ){ 00050 float xx = strtod( cp , NULL ) ; 00051 if( xx > 0.0 && xx < 1.0 ) pp = xx ; 00052 } 00053 set_unusuality_tail( pp ) ; 00054 } 00055 00056 /*-- copy data into workspace --*/ 00057 00058 memcpy( zz , rr , sizeof(float)*nr ) ; /* the copy */ 00059 for( ii=0 ; ii < nr ; ii++ ) iz[ii] = ii ; /* tag location */ 00060 qsort_floatint( nr , zz , iz ) ; /* sort now */ 00061 00062 /*- trim off 1's (perfect correlations) -*/ 00063 00064 for( ii=nr-1 ; ii > 0 && zz[ii] > 0.999 ; ii-- ) ; /* nada */ 00065 if( ii == 0 ){ free(zz); free(iz); return; } /* shouldn't happen */ 00066 nr = ii+1 ; /* the trim */ 00067 00068 /*-- find median of atanh(rr) --*/ 00069 00070 if( nr%2 == 1 ) /* median */ 00071 zmid = zz[nr/2] ; 00072 else 00073 zmid = 0.5 * ( zz[nr/2] + zz[nr/2-1] ) ; 00074 00075 rmid = zmid ; /* median of rr */ 00076 zmid = atanh(zmid) ; /* median of atanh(rr) */ 00077 00078 /*-- aa = fabs( tanh( atanh(zz) - atanh(rmid) ) ) --*/ 00079 00080 for( ii=0 ; ii < nr ; ii++ ) 00081 aa[ii] = fabs( (zz[ii]-rmid)/(1.0-zz[ii]*rmid) ) ; 00082 00083 /*-- find MAD of atanh(rr) --*/ 00084 00085 qsort_float( nr , aa ) ; 00086 if( nr%2 == 1 ) /* MAD = median absolute deviation */ 00087 zmed = aa[nr/2] ; 00088 else 00089 zmed = 0.5 * ( aa[nr/2] + aa[nr/2-1] ) ; 00090 00091 zmed = atanh(zmed) ; /* MAD of atanh(rr) */ 00092 zsig = 1.4826 * zmed ; /* estimate standard dev. of atanh(rr) */ 00093 /* 1.4826 = 1/(sqrt(2)*erfinv(0.5)) */ 00094 00095 if( zsig <= 0.0 ){ free(zz); free(iz); return; } /* shouldn't happen */ 00096 00097 /*-- find values of correlation greater than threshold --*/ 00098 /*-- that is, with (atanh(rr)-zmid)/zsig > zstar --*/ 00099 00100 rcut = tanh( zsig*zstar + zmid ) ; 00101 for( ii=nr-1 ; ii > 0 ; ii-- ) if( zz[ii] < rcut ) break ; 00102 00103 nzero = ii+1 ; mzero = nr - nzero ; 00104 00105 *nhi = mzero ; 00106 for( ii=0 ; ii < mzero ; ii++ ) ihi[ii] = iz[nzero+ii] ; 00107 00108 free(zz) ; free(iz) ; return ; 00109 } |
|
Definition at line 11 of file uuu2.c. References p, pstar, qginv(), and zstar.
|
Variable Documentation
|
Definition at line 9 of file uuu2.c. Referenced by set_unusuality_tail(). |
|
Definition at line 8 of file uuu2.c. Referenced by find_unusual_correlations(), and set_unusuality_tail(). |