Doxygen Source Code Documentation
AlphaSim.c File Reference
#include "mrilib.h"Go to the source code of this file.
Defines | |
| #define | PROGRAM_NAME "AlphaSim" |
| #define | PROGRAM_AUTHOR "B. Douglas Ward" |
| #define | PROGRAM_INITIAL "18 June 1997" |
| #define | PROGRAM_LATEST "02 December 2002" |
| #define | MAX_NAME_LENGTH THD_MAX_NAME |
| #define | MAX_CLUSTER_SIZE 1000 |
Functions | |
| void | display_help_menu () |
| void | AlphaSim_error (char *message) |
| void | initialize_options (int *nx, int *ny, int *nz, float *dx, float *dy, float *dz, int *filter, float *sigmax, float *sigmay, float *sigmaz, int *egfw, int *power, int *ax, int *ay, int *az, float *zsep, float *rmm, float *pthr, int *niter, int *quiet, char **outfilename) |
| void | get_options (int argc, char **argv, int *nx, int *ny, int *nz, float *dx, float *dy, float *dz, int *filter, float *sigmax, float *sigmay, float *sigmaz, int *egfw, int *power, int *ax, int *ay, int *az, float *zsep, float *rmm, float *pthr, int *niter, int *quiet, char **outfilename) |
| void | check_for_valid_inputs (int nx, int ny, int nz, float dx, float dy, float dz, int filter, float sigmax, float sigmay, float sigmaz, int power, int ax, int ay, int az, float zsep, float rmm, float pthr, int niter, char *outfilename) |
| void | initialize (int argc, char **argv, int *nx, int *ny, int *nz, float *dx, float *dy, float *dz, int *filter, float *sigmax, float *sigmay, float *sigmaz, int *egfw, float *avgsx, float *avgsy, float *avgsz, int *power, int *ax, int *ay, int *az, float *zsep, float *rmm, float *pthr, int *niter, int *quiet, char **outfilename, long *count, double *sum, double *sumsq, float *power_thr, float **fim, float **arfim, long **freq_table, long **max_table) |
| float | uniform () |
| void | normal (float *n1, float *n2) |
| void | activation_region (int nx, int ny, int nz, int ax, int ay, int az, int *xbot, int *xtop, int *ybot, int *ytop, int *zbot, int *ztop) |
| void | generate_image (int nx, int ny, int nz, int power, int ax, int ay, int az, float zsep, float *fim) |
| void | gaussian_filter (int nx, int ny, int nz, float dx, float dy, float dz, float rmm, float sigmax, float sigmay, float sigmaz, float *fim) |
| void | estimate_gfw (int nx, int ny, int nz, float dx, float dy, float dz, int niter, int quiet, float *fim, float *avgsx, float *avgsy, float *avgsz) |
| void | get_activation_region (int nx, int ny, int nz, int ax, int ay, int az, float pthr, float zsep, float *fim, float *arfim) |
| float | pcalc (int nx, int ny, int nz, float *fim, float zthr) |
| void | threshold_data (int nx, int ny, int nz, float *fim, float pthr, long *count, double *sum, double *sumsq, int quiet, int iter) |
| void | apply_mask (int nx, int ny, int nz, float *fim) |
| void | identify_clusters (int nx, int ny, int nz, float dx, float dy, float dz, float rmm, float *fim, int quiet, long *freq_table, long *max_table) |
| void | output_results (int nx, int ny, int nz, float dx, float dy, float dz, int filter, float sigmax, float sigmay, float sigmaz, int egfw, float avgsx, float avgsy, float avgsz, int power, int ax, int ay, int az, float zsep, float rmm, float pthr, int niter, char *outfilename, long *freq_table, long *max_table) |
| void | terminate (float **fim, float **arfim, long **freq_table, long **max_table) |
| int | main (int argc, char **argv) |
Variables | |
| char * | mask_filename = NULL |
| byte * | mask_vol = NULL |
| int | mask_ngood = 0 |
Define Documentation
|
|
Definition at line 49 of file AlphaSim.c. Referenced by identify_clusters(), initialize(), and output_results(). |
|
|
Definition at line 48 of file AlphaSim.c. Referenced by check_for_valid_inputs(), get_options(), and output_results(). |
|
|
Definition at line 40 of file AlphaSim.c. Referenced by main(), and output_results(). |
|
|
Definition at line 41 of file AlphaSim.c. Referenced by main(), and output_results(). |
|
|
Definition at line 42 of file AlphaSim.c. Referenced by main(), and output_results(). |
|
|
Definition at line 39 of file AlphaSim.c. Referenced by AlphaSim_error(), get_options(), main(), and output_results(). |
Function Documentation
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 787 of file AlphaSim.c. References nz. Referenced by generate_image(), and get_activation_region().
00790 {
00791 *xbot = nx/2 - ax/2;
00792 *xtop = *xbot + ax;
00793 *ybot = ny/2 - ay/2;
00794 *ytop = *ybot + ay;
00795 *zbot = nz/2 - az/2;
00796 *ztop = *zbot + az;
00797 }
|
|
|
Definition at line 112 of file AlphaSim.c. References PROGRAM_NAME. Referenced by check_for_valid_inputs(), get_options(), initialize(), and output_results().
00113 {
00114 fprintf (stderr, "%s Error: %s \n", PROGRAM_NAME, message);
00115 exit(1);
00116 }
|
|
||||||||||||||||||||
|
Definition at line 1129 of file AlphaSim.c. References fim, mask_vol, and nz. Referenced by main().
01131 {
01132 int ixyz;
01133 int nxyz;
01134
01135
01136 /*----- initialize local variables -----*/
01137 nxyz = nx * ny * nz;
01138
01139
01140 /*----- apply mask to volume data -----*/
01141 for (ixyz = 0; ixyz < nxyz; ixyz++)
01142 if (! mask_vol[ixyz])
01143 fim[ixyz] = 0.0;
01144
01145
01146 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 597 of file AlphaSim.c. References AlphaSim_error(), fout, MAX_NAME_LENGTH, and nz.
00603 {
00604 FILE * fout = NULL;
00605 char message[MAX_NAME_LENGTH]; /* error message */
00606
00607 if (nx <= 0) AlphaSim_error ("Illegal value for nx ");
00608 if (ny <= 0) AlphaSim_error ("Illegal value for ny ");
00609 if (nz <= 0) AlphaSim_error ("Illegal value for nz ");
00610 if (dx <= 0.0) AlphaSim_error ("Illegal value for dx ");
00611 if (dy <= 0.0) AlphaSim_error ("Illegal value for dy ");
00612 if (dz <= 0.0) AlphaSim_error ("Illegal value for dz ");
00613 if (filter && ((sigmax <= 0.0) || (sigmay <= 0.0) || (sigmaz <= 0.0)))
00614 AlphaSim_error ("Illegal Gaussian filter width specification ");
00615 if (power && ((ax <= 0) || (ay <= 0) || (az <= 0)))
00616 AlphaSim_error ("Illegal dimensions for activation region ");
00617 if (power && (zsep <= 0.0)) AlphaSim_error ("Illegal value for zsep ");
00618 if ( (rmm < dx) && (rmm < dy) && (rmm < dz) )
00619 AlphaSim_error ("Cluster connection radius is too small ");
00620 if ((pthr <= 0.0) || (pthr > 1.0))
00621 AlphaSim_error ("Illegal value for pthr ");
00622 if (niter <= 0) AlphaSim_error ("Illegal value for niter ");
00623
00624 if (outfilename != NULL)
00625 {
00626 /*----- see if output file already exists -----*/
00627 fout = fopen (outfilename, "r");
00628 if (fout != NULL)
00629 {
00630 sprintf (message, "Output file %s already exists. ", outfilename);
00631 AlphaSim_error (message);
00632 }
00633 }
00634
00635 }
|
|
|
Definition at line 66 of file AlphaSim.c.
00067 {
00068 printf
00069 (
00070 "This program performs alpha probability simulations. \n\n"
00071 "Usage: \n"
00072 "AlphaSim \n"
00073 "-nx n1 n1 = number of voxels along x-axis \n"
00074 "-ny n2 n2 = number of voxels along y-axis \n"
00075 "-nz n3 n3 = number of voxels along z-axis \n"
00076 "-dx d1 d1 = voxel size (mm) along x-axis \n"
00077 "-dy d2 d2 = voxel size (mm) along y-axis \n"
00078 "-dz d3 d3 = voxel size (mm) along z-axis \n"
00079 "[-mask mset] Use the 0 sub-brick of dataset 'mset' as a mask \n"
00080 " to indicate which voxels to analyze (a sub-brick \n"
00081 " selector is allowed) [default = use all voxels] \n"
00082 " Note: The -mask command REPLACES the -nx, -ny, -nz,\n"
00083 " -dx, -dy, and -dz commands. \n"
00084 "[-fwhm s] s = Gaussian filter width (FWHM) \n"
00085 "[-fwhmx sx] sx = Gaussian filter width, x-axis (FWHM) \n"
00086 "[-fwhmy sy] sy = Gaussian filter width, y-axis (FWHM) \n"
00087 "[-fwhmz sz] sz = Gaussian filter width, z-axis (FWHM) \n"
00088 "[-sigma s] s = Gaussian filter width (1 sigma) \n"
00089 "[-sigmax sx] sx = Gaussian filter width, x-axis (1 sigma) \n"
00090 "[-sigmay sy] sy = Gaussian filter width, y-axis (1 sigma) \n"
00091 "[-sigmaz sz] sz = Gaussian filter width, z-axis (1 sigma) \n"
00092 "[-power] perform statistical power calculations \n"
00093 "[-ax n1] n1 = extent of active region (in voxels) along x-axis \n"
00094 "[-ay n2] n2 = extent of active region (in voxels) along y-axis \n"
00095 "[-az n3] n3 = extent of active region (in voxels) along z-axis \n"
00096 "[-zsep z] z = z-score separation between signal and noise \n"
00097 "-rmm r r = cluster connection radius (mm) \n"
00098 "-pthr p p = individual voxel threshold probability \n"
00099 "-iter n n = number of Monte Carlo simulations \n"
00100 "[-quiet] suppress screen output \n"
00101 "[-out file] file = name of output file \n"
00102 );
00103
00104 exit(0);
00105 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 873 of file AlphaSim.c. References arg, fim, fsq, IJK_TO_THREE, nz, THREE_TO_IJK, and var. Referenced by main().
00876 {
00877 int nxy, nxyz; /* total number of voxels */
00878 int ixyz; /* voxel index */
00879 int ix, jy, kz, ixyz2;
00880 float fsum, fsq, var;
00881 float dfdx, dfdxsum, dfdxsq, varxx;
00882 float dfdy, dfdysum, dfdysq, varyy;
00883 float dfdz, dfdzsum, dfdzsq, varzz;
00884 int countx, county, countz;
00885 float sx, sy, sz;
00886 float arg;
00887
00888
00889 /*----- initialize local variables -----*/
00890 nxy = nx * ny;
00891 nxyz = nxy * nz;
00892
00893
00894 /*----- estimate the variance of the data -----*/
00895 fsum = 0.0;
00896 fsq = 0.0;
00897 for (ixyz = 0; ixyz < nxyz; ixyz++)
00898 {
00899 fsum += fim[ixyz];
00900 fsq += fim[ixyz] * fim[ixyz];
00901 }
00902 var = (fsq - (fsum * fsum)/nxyz) / (nxyz-1);
00903
00904
00905 /*----- estimate the partial derivatives -----*/
00906 dfdxsum = 0.0; dfdysum = 0.0; dfdzsum = 0.0;
00907 dfdxsq = 0.0; dfdysq = 0.0; dfdzsq = 0.0;
00908 countx = 0; county = 0; countz = 0;
00909 for (ixyz = 0; ixyz < nxyz; ixyz++)
00910 {
00911 IJK_TO_THREE (ixyz, ix, jy, kz, nx, nxy);
00912
00913 if (ix+1 < nx)
00914 {
00915 ixyz2 = THREE_TO_IJK (ix+1, jy, kz, nx, nxy);
00916 dfdx = (fim[ixyz2] - fim[ixyz]) / 1.0;
00917 dfdxsum += dfdx;
00918 dfdxsq += dfdx * dfdx;
00919 countx += 1;
00920 }
00921
00922 if (jy+1 < ny)
00923 {
00924 ixyz2 = THREE_TO_IJK (ix, jy+1, kz, nx, nxy);
00925 dfdy = (fim[ixyz2] - fim[ixyz]) / 1.0;
00926 dfdysum += dfdy;
00927 dfdysq += dfdy * dfdy;
00928 county += 1;
00929 }
00930
00931 if (kz+1 < nz)
00932 {
00933 ixyz2 = THREE_TO_IJK (ix, jy, kz+1, nx, nxy);
00934 dfdz = (fim[ixyz2] - fim[ixyz]) / 1.0;
00935 dfdzsum += dfdz;
00936 dfdzsq += dfdz * dfdz;
00937 countz += 1;
00938 }
00939
00940 }
00941
00942 /*----- estimate the variance of the partial derivatives -----*/
00943 if (countx < 2)
00944 varxx = 0.0;
00945 else
00946 varxx = (dfdxsq - (dfdxsum * dfdxsum)/countx) / (countx-1);
00947
00948 if (county < 2)
00949 varyy = 0.0;
00950 else
00951 varyy = (dfdysq - (dfdysum * dfdysum)/county) / (county-1);
00952
00953 if (countz < 2)
00954 varzz = 0.0;
00955 else
00956 varzz = (dfdzsq - (dfdzsum * dfdzsum)/countz) / (countz-1);
00957
00958
00959 /*----- now estimate the equivalent Gaussian filter width -----*/
00960 arg = 1.0 - 0.5*(varxx/var);
00961 if ( (arg <= 0.0) || (varxx == 0.0) )
00962 sx = 0.0;
00963 else
00964 sx = sqrt( -1.0 / (4.0*log(arg)) ) * dx;
00965
00966 arg = 1.0 - 0.5*(varyy/var);
00967 if ( (arg <= 0.0) || (varyy == 0.0) )
00968 sy = 0.0;
00969 else
00970 sy = sqrt( -1.0 / (4.0*log(arg)) ) * dy;
00971
00972 arg = 1.0 - 0.5*(varzz/var);
00973 if ( (arg <= 0.0) || (varzz == 0.0) )
00974 sz = 0.0;
00975 else
00976 sz = sqrt( -1.0 / (4.0*log(arg)) ) * dz;
00977
00978 /*----- save results -----*/
00979 *avgsx += sx / niter;
00980 *avgsy += sy / niter;
00981 *avgsz += sz / niter;
00982
00983 /*----- output results -----*/
00984 if (!quiet)
00985 {
00986 printf ("var =%f \n", var);
00987 printf ("varxx=%f varyy=%f varzz=%f \n", varxx, varyy, varzz);
00988 printf (" sx=%f sy=%f sz=%f \n", sx, sy, sz);
00989 }
00990 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 856 of file AlphaSim.c. References EDIT_blur_volume_3d(), fim, and nz. Referenced by main().
00859 {
00860
00861 /*----- use Gaussian blur routine -----*/
00862 EDIT_blur_volume_3d (nx, ny, nz, dx, dy, dz,
00863 MRI_float, fim, sigmax, sigmay, sigmaz);
00864
00865 }
|
|
||||||||||||||||||||||||||||||||||||||||
|
Definition at line 805 of file AlphaSim.c. References activation_region(), fim, IJK_TO_THREE, n1, n2, normal(), and nz. Referenced by main().
00807 {
00808 int nxy, nxyz;
00809 int nxyzdiv2;
00810 int ixyz;
00811 float n1, n2;
00812 int xbot, xtop, ybot, ytop, zbot, ztop;
00813 int ix, jy, kz;
00814
00815
00816 /*----- initialize local variables -----*/
00817 nxy = nx * ny;
00818 nxyz = nxy * nz;
00819 nxyzdiv2 = nxyz / 2;
00820
00821 /*----- generate random image -----*/
00822 for (ixyz = 0; ixyz < nxyzdiv2; ixyz++)
00823 {
00824 normal(&n1, &n2);
00825 fim[ixyz] = n1;
00826 fim[ixyz+nxyzdiv2] = n2;
00827 }
00828 normal(&n1, &n2);
00829 fim[nxyz-1] = n1;
00830
00831 /*----- if power calculation, generate "island" of activation -----*/
00832 if (power)
00833 {
00834 /*--- calculate dimensions of activation region ---*/
00835 activation_region (nx, ny, nz, ax, ay, az,
00836 &xbot, &xtop, &ybot, &ytop, &zbot, &ztop);
00837
00838 /*--- add z-score offset to voxels within activation region ---*/
00839 for (ixyz = 0; ixyz < nxyz; ixyz++)
00840 {
00841 IJK_TO_THREE (ixyz, ix, jy, kz, nx, nxy);
00842 if ( (ix >= xbot) && (ix < xtop)
00843 && (jy >= ybot) && (jy < ytop)
00844 && (kz >= zbot) && (kz < ztop) )
00845 fim[ixyz] += zsep;
00846 }
00847 }
00848 }
|
|
||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 998 of file AlphaSim.c. References activation_region(), fim, IJK_TO_THREE, nz, and THREE_TO_IJK. Referenced by main().
01000 {
01001 int nxy, nxyz;
01002 int axy, axyz;
01003 int ixyz, ixyz2;
01004 int xbot, xtop, ybot, ytop, zbot, ztop;
01005 int ix, jy, kz;
01006
01007
01008 /*----- initialize local variables -----*/
01009 nxy = nx * ny;
01010 nxyz = nxy * nz;
01011 axy = ax * ay;
01012 axyz = axy * az;
01013
01014
01015 /*--- calculate dimensions of activation region ---*/
01016 activation_region (nx, ny, nz, ax, ay, az,
01017 &xbot, &xtop, &ybot, &ytop, &zbot, &ztop);
01018
01019 /*--- copy activation region ---*/
01020 for (ixyz = 0; ixyz < axyz; ixyz++)
01021 {
01022 IJK_TO_THREE (ixyz, ix, jy, kz, ax, axy);
01023 ix += xbot;
01024 jy += ybot;
01025 kz += zbot;
01026 ixyz2 = THREE_TO_IJK (ix, jy, kz, nx, nxy);
01027 arfim[ixyz] = fim[ixyz2];
01028 }
01029
01030
01031 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 163 of file AlphaSim.c. References AFMALL, AFNI_logger(), AlphaSim_error(), argc, display_help_menu(), DSET_delete, DSET_DX, DSET_DY, DSET_DZ, DSET_NVOX, DSET_NX, DSET_NY, DSET_NZ, FWHM_TO_SIGMA, initialize_options(), malloc, mask_filename, mask_ngood, mask_vol, MAX_NAME_LENGTH, mc, nz, PROGRAM_NAME, THD_makemask(), and THD_open_dataset().
00171 {
00172 int nopt = 1; /* input option argument counter */
00173 int ival; /* integer input */
00174 float fval; /* float input */
00175 char message[MAX_NAME_LENGTH]; /* error message */
00176 int mask_nx, mask_ny, mask_nz, mask_nvox; /* mask dimensions */
00177 float mask_dx, mask_dy, mask_dz;
00178
00179
00180 /*----- does user request help menu? -----*/
00181 if (argc < 2 || strncmp(argv[1], "-help", 5) == 0) display_help_menu();
00182
00183
00184 /*----- add to program log -----*/
00185 AFNI_logger (PROGRAM_NAME,argc,argv);
00186
00187
00188 /*----- initialize the input options -----*/
00189 initialize_options (nx, ny, nz, dx, dy, dz, filter, sigmax, sigmay, sigmaz,
00190 egfw, power, ax, ay, az, zsep, rmm, pthr, niter, quiet,
00191 outfilename);
00192
00193 /*----- main loop over input options -----*/
00194 while (nopt < argc )
00195 {
00196
00197 /*----- -nx n -----*/
00198 if (strncmp(argv[nopt], "-nx", 3) == 0)
00199 {
00200 nopt++;
00201 if (nopt >= argc) AlphaSim_error ("need argument after -nx ");
00202 sscanf (argv[nopt], "%d", &ival);
00203 if (ival <= 0)
00204 AlphaSim_error ("illegal argument after -nx ");
00205 *nx = ival;
00206 nopt++;
00207 continue;
00208 }
00209
00210
00211 /*----- -ny n -----*/
00212 if (strncmp(argv[nopt], "-ny", 3) == 0)
00213 {
00214 nopt++;
00215 if (nopt >= argc) AlphaSim_error ("need argument after -ny ");
00216 sscanf (argv[nopt], "%d", &ival);
00217 if (ival <= 0)
00218 AlphaSim_error ("illegal argument after -ny ");
00219 *ny = ival;
00220 nopt++;
00221 continue;
00222 }
00223
00224
00225 /*----- -nz n -----*/
00226 if (strncmp(argv[nopt], "-nz", 3) == 0)
00227 {
00228 nopt++;
00229 if (nopt >= argc) AlphaSim_error ("need argument after -nz ");
00230 sscanf (argv[nopt], "%d", &ival);
00231 if (ival <= 0)
00232 AlphaSim_error ("illegal argument after -nz ");
00233 *nz = ival;
00234 nopt++;
00235 continue;
00236 }
00237
00238
00239 /*----- -dx d -----*/
00240 if (strncmp(argv[nopt], "-dx", 3) == 0)
00241 {
00242 nopt++;
00243 if (nopt >= argc) AlphaSim_error ("need argument after -dx ");
00244 sscanf (argv[nopt], "%f", &fval);
00245 if (fval <= 0.0)
00246 AlphaSim_error ("illegal argument after -dx ");
00247 *dx = fval;
00248 nopt++;
00249 continue;
00250 }
00251
00252
00253 /*----- -dy d -----*/
00254 if (strncmp(argv[nopt], "-dy", 3) == 0)
00255 {
00256 nopt++;
00257 if (nopt >= argc) AlphaSim_error ("need argument after -dy ");
00258 sscanf (argv[nopt], "%f", &fval);
00259 if (fval <= 0.0)
00260 AlphaSim_error ("illegal argument after -dy ");
00261 *dy = fval;
00262 nopt++;
00263 continue;
00264 }
00265
00266
00267 /*----- -dz d -----*/
00268 if (strncmp(argv[nopt], "-dz", 3) == 0)
00269 {
00270 nopt++;
00271 if (nopt >= argc) AlphaSim_error ("need argument after -dz ");
00272 sscanf (argv[nopt], "%f", &fval);
00273 if (fval <= 0.0)
00274 AlphaSim_error ("illegal argument after -dz ");
00275 *dz = fval;
00276 nopt++;
00277 continue;
00278 }
00279
00280
00281 /**** -mask mset [14 June 2000] ****/
00282
00283 if (strcmp(argv[nopt],"-mask") == 0 )
00284 {
00285 THD_3dim_dataset * mset ; int ii,mc ;
00286 nopt++ ;
00287 if (nopt >= argc) AlphaSim_error ("need argument after -mask!") ;
00288 mask_filename = (char *) malloc (sizeof(char) * MAX_NAME_LENGTH);
00289 if (mask_filename == NULL)
00290 AlphaSim_error ("unable to allocate memory");
00291 strcpy (mask_filename, argv[nopt]);
00292 mset = THD_open_dataset (mask_filename);
00293 if (mset == NULL) AlphaSim_error ("can't open -mask dataset!") ;
00294
00295 mask_vol = THD_makemask( mset , 0 , 1.0,0.0 ) ;
00296 if (mask_vol == NULL ) AlphaSim_error ("can't use -mask dataset!") ;
00297
00298 mask_nvox = DSET_NVOX(mset) ;
00299 mask_nx = DSET_NX(mset);
00300 mask_ny = DSET_NY(mset);
00301 mask_nz = DSET_NZ(mset);
00302 mask_dx = DSET_DX(mset);
00303 mask_dy = DSET_DY(mset);
00304 mask_dz = DSET_DZ(mset);
00305
00306 DSET_delete(mset) ;
00307
00308 for( ii=mc=0 ; ii < mask_nvox ; ii++ ) if (mask_vol[ii]) mc++ ;
00309 if (mc == 0) AlphaSim_error ("mask is all zeros!") ;
00310 printf("--- %d voxels in mask\n",mc) ;
00311 mask_ngood = mc;
00312 nopt++ ; continue ;
00313 }
00314
00315
00316 /*----- -fwhm s -----*/
00317 if (strncmp(argv[nopt], "-fwhm", 6) == 0)
00318 {
00319 nopt++;
00320 if (nopt >= argc) AlphaSim_error ("need argument after -fwhm ");
00321 sscanf (argv[nopt], "%f", &fval);
00322 if (fval < 0.0)
00323 AlphaSim_error ("illegal argument after -fwhm ");
00324 if (fval > 0.0) *filter = 1;
00325 *sigmax = FWHM_TO_SIGMA(fval);
00326 *sigmay = FWHM_TO_SIGMA(fval);
00327 *sigmaz = FWHM_TO_SIGMA(fval);
00328 nopt++;
00329 continue;
00330 }
00331
00332
00333 /*----- -fwhmx sx -----*/
00334 if (strncmp(argv[nopt], "-fwhmx", 6) == 0)
00335 {
00336 nopt++;
00337 if (nopt >= argc) AlphaSim_error ("need argument after -fwhmx ");
00338 sscanf (argv[nopt], "%f", &fval);
00339 if (fval < 0.0)
00340 AlphaSim_error ("illegal argument after -fwhmx ");
00341 if (fval > 0.0) *filter = 1;
00342 *sigmax = FWHM_TO_SIGMA(fval);
00343 nopt++;
00344 continue;
00345 }
00346
00347
00348 /*----- -fwhmy sy -----*/
00349 if (strncmp(argv[nopt], "-fwhmy", 6) == 0)
00350 {
00351 nopt++;
00352 if (nopt >= argc) AlphaSim_error ("need argument after -fwhmy ");
00353 sscanf (argv[nopt], "%f", &fval);
00354 if (fval < 0.0)
00355 AlphaSim_error ("illegal argument after -fwhmy ");
00356 if (fval > 0.0) *filter = 1;
00357 *sigmay = FWHM_TO_SIGMA(fval);
00358 nopt++;
00359 continue;
00360 }
00361
00362
00363 /*----- -fwhmz sz -----*/
00364 if (strncmp(argv[nopt], "-fwhmz", 6) == 0)
00365 {
00366 nopt++;
00367 if (nopt >= argc) AlphaSim_error ("need argument after -fwhmz ");
00368 sscanf (argv[nopt], "%f", &fval);
00369 if (fval < 0.0)
00370 AlphaSim_error ("illegal argument after -fwhmz ");
00371 if (fval > 0.0) *filter = 1;
00372 *sigmaz = FWHM_TO_SIGMA(fval);
00373 nopt++;
00374 continue;
00375 }
00376
00377
00378 /*----- -sigma s -----*/
00379 if (strncmp(argv[nopt], "-sigma", 7) == 0)
00380 {
00381 nopt++;
00382 if (nopt >= argc) AlphaSim_error ("need argument after -sigma ");
00383 sscanf (argv[nopt], "%f", &fval);
00384 if (fval < 0.0)
00385 AlphaSim_error ("illegal argument after -sigma ");
00386 if (fval > 0.0) *filter = 1;
00387 *sigmax = fval;
00388 *sigmay = fval;
00389 *sigmaz = fval;
00390 nopt++;
00391 continue;
00392 }
00393
00394
00395 /*----- -sigmax sx -----*/
00396 if (strncmp(argv[nopt], "-sigmax", 7) == 0)
00397 {
00398 nopt++;
00399 if (nopt >= argc) AlphaSim_error ("need argument after -sigmax ");
00400 sscanf (argv[nopt], "%f", &fval);
00401 if (fval < 0.0)
00402 AlphaSim_error ("illegal argument after -sigmax ");
00403 if (fval > 0.0) *filter = 1;
00404 *sigmax = fval;
00405 nopt++;
00406 continue;
00407 }
00408
00409
00410 /*----- -sigmay sy -----*/
00411 if (strncmp(argv[nopt], "-sigmay", 7) == 0)
00412 {
00413 nopt++;
00414 if (nopt >= argc) AlphaSim_error ("need argument after -sigmay ");
00415 sscanf (argv[nopt], "%f", &fval);
00416 if (fval < 0.0)
00417 AlphaSim_error ("illegal argument after -sigmay ");
00418 if (fval > 0.0) *filter = 1;
00419 *sigmay = fval;
00420 nopt++;
00421 continue;
00422 }
00423
00424
00425 /*----- -sigmaz sz -----*/
00426 if (strncmp(argv[nopt], "-sigmaz", 7) == 0)
00427 {
00428 nopt++;
00429 if (nopt >= argc) AlphaSim_error ("need argument after -sigmaz ");
00430 sscanf (argv[nopt], "%f", &fval);
00431 if (fval < 0.0)
00432 AlphaSim_error ("illegal argument after -sigmaz ");
00433 if (fval > 0.0) *filter = 1;
00434 *sigmaz = fval;
00435 nopt++;
00436 continue;
00437 }
00438
00439
00440 /*----- -egfw -----*/
00441 if (strncmp(argv[nopt], "-egfw", 5) == 0)
00442 {
00443 *egfw = 1;
00444 nopt++;
00445 continue;
00446 }
00447
00448
00449 /*----- -power -----*/
00450 if (strncmp(argv[nopt], "-power", 6) == 0)
00451 {
00452 *power = 1;
00453 nopt++;
00454 continue;
00455 }
00456
00457
00458 /*----- -ax n -----*/
00459 if (strncmp(argv[nopt], "-ax", 3) == 0)
00460 {
00461 nopt++;
00462 if (nopt >= argc) AlphaSim_error ("need argument after -ax ");
00463 sscanf (argv[nopt], "%d", &ival);
00464 if (ival <= 0)
00465 AlphaSim_error ("illegal argument after -ax ");
00466 *ax = ival;
00467 nopt++;
00468 continue;
00469 }
00470
00471
00472 /*----- -ay n -----*/
00473 if (strncmp(argv[nopt], "-ay", 3) == 0)
00474 {
00475 nopt++;
00476 if (nopt >= argc) AlphaSim_error ("need argument after -ay ");
00477 sscanf (argv[nopt], "%d", &ival);
00478 if (ival <= 0)
00479 AlphaSim_error ("illegal argument after -ay ");
00480 *ay = ival;
00481 nopt++;
00482 continue;
00483 }
00484
00485
00486 /*----- -az n -----*/
00487 if (strncmp(argv[nopt], "-az", 3) == 0)
00488 {
00489 nopt++;
00490 if (nopt >= argc) AlphaSim_error ("need argument after -az ");
00491 sscanf (argv[nopt], "%d", &ival);
00492 if (ival <= 0)
00493 AlphaSim_error ("illegal argument after -az ");
00494 *az = ival;
00495 nopt++;
00496 continue;
00497 }
00498
00499
00500 /*----- -zsep z -----*/
00501 if (strncmp(argv[nopt], "-zsep", 5) == 0)
00502 {
00503 nopt++;
00504 if (nopt >= argc) AlphaSim_error ("need argument after -zsep ");
00505 sscanf (argv[nopt], "%f", &fval);
00506 if (fval < 0.0)
00507 AlphaSim_error ("illegal argument after -zsep ");
00508 *zsep = fval;
00509 nopt++;
00510 continue;
00511 }
00512
00513
00514 /*----- -rmm r -----*/
00515 if (strncmp(argv[nopt], "-rmm", 4) == 0)
00516 {
00517 nopt++;
00518 if (nopt >= argc) AlphaSim_error ("need argument after -rmm ");
00519 sscanf (argv[nopt], "%f", &fval);
00520 if (fval <= 0.0)
00521 AlphaSim_error ("illegal argument after -rmm ");
00522 *rmm = fval;
00523 nopt++;
00524 continue;
00525 }
00526
00527
00528 /*----- -pthr p -----*/
00529 if (strncmp(argv[nopt], "-pthr", 5) == 0)
00530 {
00531 nopt++;
00532 if (nopt >= argc) AlphaSim_error ("need argument after -pthr ");
00533 sscanf (argv[nopt], "%f", &fval);
00534 if ((fval <= 0.0) || (fval > 1.0))
00535 AlphaSim_error ("illegal argument after -pthr ");
00536 *pthr = fval;
00537 nopt++;
00538 continue;
00539 }
00540
00541
00542 /*----- -iter n -----*/
00543 if (strncmp(argv[nopt], "-iter", 5) == 0)
00544 {
00545 nopt++;
00546 if (nopt >= argc) AlphaSim_error ("need argument after -iter ");
00547 sscanf (argv[nopt], "%d", &ival);
00548 if (ival <= 0)
00549 AlphaSim_error ("illegal argument after -iter ");
00550 *niter = ival;
00551 nopt++;
00552 continue;
00553 }
00554
00555
00556 /*----- -quiet q -----*/
00557 if (strncmp(argv[nopt], "-quiet", 6) == 0)
00558 {
00559 *quiet = 1;
00560 nopt++;
00561 continue;
00562 }
00563
00564
00565 /*----- -out filename -----*/
00566 if (strncmp(argv[nopt], "-out", 4) == 0)
00567 {
00568 nopt++;
00569 if (nopt >= argc) AlphaSim_error ("need argument after -out ");
00570 *outfilename = AFMALL( char, sizeof(char) * MAX_NAME_LENGTH);
00571 strcpy (*outfilename, argv[nopt]);
00572 nopt++;
00573 continue;
00574 }
00575
00576
00577 /*----- unknown command -----*/
00578 AlphaSim_error ("unrecognized command line option ");
00579 }
00580
00581
00582 /*----- If mask dataset is used, set dimensions accordingly -----*/
00583 if (mask_vol != NULL)
00584 {
00585 *nx = mask_nx; *ny = mask_ny; *nz = mask_nz;
00586 *dx = fabs(mask_dx); *dy = fabs(mask_dy); *dz = fabs(mask_dz);
00587 }
00588
00589 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1154 of file AlphaSim.c. References MCW_cluster_array::clar, DESTROY_CLARR, fim, MAX_CLUSTER_SIZE, MCW_find_clusters(), MCW_cluster_array::num_clu, MCW_cluster::num_pt, and nz. Referenced by main().
01169 {
01170 MCW_cluster_array * clar;
01171 MCW_cluster * cl;
01172 int nxy;
01173 int nxyz; /* total number of voxels */
01174 int iclu, ipt;
01175 int size, max_size;
01176 int count;
01177
01178
01179 /*----- initialize local variables -----*/
01180 nxy = nx * ny;
01181
01182 /*----- create array of clusters -----*/
01183 clar = MCW_find_clusters( nx,ny,nz , dx,dy,dz ,
01184 MRI_float , fim , rmm ) ;
01185
01186 /*----- record cluster sizes -----*/
01187 if ((clar == NULL) || (clar->num_clu == 0))
01188 {
01189 if (!quiet)
01190 printf ("NumCl=%4d MaxClSz=%4d\n", 0, 0);
01191 if (clar != NULL) DESTROY_CLARR(clar);
01192 }
01193 else
01194 {
01195 max_size = 0;
01196 for (iclu = 0; iclu < clar->num_clu; iclu++)
01197 {
01198 cl = clar->clar[iclu] ;
01199 if( cl == NULL ) continue ;
01200
01201 size = cl->num_pt;
01202
01203 if (size < MAX_CLUSTER_SIZE)
01204 freq_table[size]++;
01205 else
01206 freq_table[MAX_CLUSTER_SIZE-1]++;
01207
01208 if (size > max_size)
01209 max_size = size;
01210
01211 }
01212
01213 if (max_size < MAX_CLUSTER_SIZE)
01214 max_table[max_size]++;
01215 else
01216 max_table[MAX_CLUSTER_SIZE-1]++;
01217
01218 if (!quiet)
01219 printf ("NumCl=%4d MaxClSz=%4d\n", clar->num_clu, max_size);
01220
01221 DESTROY_CLARR(clar);
01222 }
01223
01224 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 643 of file AlphaSim.c. References AlphaSim_error(), argc, cdfnor(), check_for_valid_inputs(), fim, get_options(), i, malloc, MAX_CLUSTER_SIZE, nz, p, and q.
00655 {
00656 int i;
00657 int nxyz;
00658
00659 int which;
00660 double p, q, z, mean, sd;
00661 int status;
00662 double bound;
00663
00664
00665 /*----- get command line inputs -----*/
00666 get_options(argc, argv,
00667 nx, ny, nz, dx, dy, dz, filter, sigmax, sigmay, sigmaz,
00668 egfw, power, ax, ay, az, zsep, rmm, pthr, niter, quiet,
00669 outfilename);
00670
00671
00672 /*----- check for valid inputs -----*/
00673 check_for_valid_inputs (*nx, *ny, *nz, *dx, *dy, *dz, *filter,
00674 *sigmax, *sigmay, *sigmaz,
00675 *power, *ax, *ay, *az, *zsep,
00676 *rmm, *pthr, *niter, *outfilename);
00677
00678
00679 /*----- allocate memory space for image data -----*/
00680 nxyz = (*nx) * (*ny) * (*nz);
00681 *fim = (float *) malloc(nxyz * sizeof(float));
00682 if (*fim == NULL)
00683 AlphaSim_error ("memory allocation error");
00684
00685
00686 /*-- if power calculation, allocate memory space for activation region --*/
00687 if (*power)
00688 {
00689 nxyz = (*ax) * (*ay) * (*az);
00690 *arfim = (float *) malloc(nxyz * sizeof(float));
00691 if (*arfim == NULL)
00692 AlphaSim_error ("memory allocation error");
00693 }
00694
00695
00696 /*----- allocate memory space and initialize frequency table -----*/
00697 *freq_table = (long *) malloc( MAX_CLUSTER_SIZE * sizeof(long) );
00698 if (*freq_table == NULL)
00699 AlphaSim_error ("memory allocation error");
00700 for (i = 0; i < MAX_CLUSTER_SIZE; i++)
00701 (*freq_table)[i] = 0;
00702
00703
00704 /*----- allocate memory space and initialize max cluster size table -----*/
00705 *max_table = (long *) malloc( MAX_CLUSTER_SIZE * sizeof(long) );
00706 if (*max_table == NULL)
00707 AlphaSim_error ("memory allocation error");
00708 for (i = 0; i < MAX_CLUSTER_SIZE; i++)
00709 (*max_table)[i] = 0;
00710
00711
00712 /*----- initialize voxel intensity sums -----*/
00713 *count = 0;
00714 *sum = 0.0;
00715 *sumsq = 0.0;
00716
00717
00718 /*----- calculate power threshold -----*/
00719 if (*power)
00720 {
00721 which = 2;
00722 q = *pthr;
00723 p = 1.0 - q;
00724 mean = 0.0;
00725 sd = 1.0;
00726 cdfnor (&which, &p, &q, &z, &mean, &sd, &status, &bound);
00727
00728 z = *zsep - z;
00729 which = 1;
00730 cdfnor (&which, &p, &q, &z, &mean, &sd, &status, &bound);
00731 *power_thr = p;
00732 }
00733
00734
00735 /*----- initialize ave. est. gaussian filter widths -----*/
00736 if (*egfw)
00737 {
00738 *avgsx = 0.0; *avgsy = 0.0; *avgsz = 0.0;
00739 }
00740
00741 /*----- initialize random number generator -----*/
00742 srand48 (1234567);
00743
00744 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 124 of file AlphaSim.c. References nz.
00133 {
00134 *nx = 0; /* number of voxels along x-axis */
00135 *ny = 0; /* number of voxels along y-axis */
00136 *nz = 0; /* number of voxels along z-axis */
00137 *dx = 0.0; /* voxel size along x-axis */
00138 *dy = 0.0; /* voxel size along y-axis */
00139 *dz = 0.0; /* voxel size along z-axis */
00140 *filter = 0; /* flag for Gaussian filtering */
00141 *sigmax = 0.0; /* Gaussian filter width, x-axis (1 sigma) */
00142 *sigmay = 0.0; /* Gaussian filter width, y-axis (1 sigma) */
00143 *sigmaz = 0.0; /* Gaussian filter width, z-axis (1 sigma) */
00144 *egfw = 0; /* flag for estimation of filter width */
00145 *power = 0; /* flag for power calculations */
00146 *ax = 0; /* number of activation voxels along x-axis */
00147 *ay = 0; /* number of activation voxels along y-axis */
00148 *az = 0; /* number of activation voxels along z-axis */
00149 *zsep = 0.0; /* z-score signal and noise separation */
00150 *rmm = 0.0; /* cluster connection radius (mm) */
00151 *pthr = 0.0; /* individual voxel threshold prob. */
00152 *niter = 0; /* number of Monte Carlo simulations */
00153 *quiet = 0; /* generate screen output (default) */
00154 *outfilename = NULL; /* name of output file */
00155 }
|
|
||||||||||||
|
Definition at line 1409 of file AlphaSim.c. References apply_mask(), argc, estimate_gfw(), fim, gaussian_filter(), generate_image(), get_activation_region(), identify_clusters(), initialize(), mask_vol, nz, output_results(), PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, terminate(), and threshold_data().
01410 {
01411 int nx; /* number of voxels along x-axis */
01412 int ny; /* number of voxels along y-axis */
01413 int nz; /* number of voxels along z-axis */
01414 float dx; /* voxel size along x-axis */
01415 float dy; /* voxel size along y-axis */
01416 float dz; /* voxel size along z-axis */
01417 int filter; /* flag for Gaussian filtering */
01418 float sigmax; /* Gaussian filter width, x-axis (1 sigma) */
01419 float sigmay; /* Gaussian filter width, y-axis (1 sigma) */
01420 float sigmaz; /* Gaussian filter width, z-axis (1 sigma) */
01421 int egfw; /* flag for estimation of filter width */
01422 float avgsx; /* est. Gaussian filter width, x-axis (1 sigma) */
01423 float avgsy; /* est. Gaussian filter width, x-axis (1 sigma) */
01424 float avgsz; /* est. Gaussian filter width, x-axis (1 sigma) */
01425 int power; /* flag for perform power calculations */
01426 int ax; /* number of activation voxels along x-axis */
01427 int ay; /* number of activation voxels along y-axis */
01428 int az; /* number of activation voxels along z-axis */
01429 float zsep; /* z-score separation between signal and noise */
01430 float rmm; /* cluster connection radius (mm) */
01431 float pthr; /* individual voxel threshold probability */
01432 int niter; /* number of Monte Carlo simulations */
01433 int quiet; /* set to 1 to suppress screen output */
01434 char * outfilename; /* name of output file */
01435
01436 long count;
01437 double sum, sumsq;
01438 int iter;
01439 float power_thr;
01440
01441 float * fim = NULL;
01442 float * arfim = NULL;
01443 long * freq_table = NULL;
01444 long * max_table = NULL;
01445
01446
01447 /*----- Identify software -----*/
01448 printf ("\n\n");
01449 printf ("Program: %s \n", PROGRAM_NAME);
01450 printf ("Author: %s \n", PROGRAM_AUTHOR);
01451 printf ("Initial Release: %s \n", PROGRAM_INITIAL);
01452 printf ("Latest Revision: %s \n", PROGRAM_LATEST);
01453 printf ("\n");
01454
01455
01456 /*----- program initialization -----*/
01457 initialize (argc, argv,
01458 &nx, &ny, &nz, &dx, &dy, &dz, &filter, &sigmax, &sigmay, &sigmaz,
01459 &egfw, &avgsx, &avgsy, &avgsz, &power, &ax, &ay, &az, &zsep,
01460 &rmm, &pthr, &niter, &quiet, &outfilename, &count, &sum, &sumsq,
01461 &power_thr, &fim, &arfim, &freq_table, &max_table);
01462
01463
01464 /*----- Monte Carlo iteration -----*/
01465 for (iter = 1; iter <= niter; iter++)
01466 {
01467 if (!quiet) printf ("Iter =%5d \n", iter);
01468
01469 /*----- generate volume of random voxel intensities -----*/
01470 generate_image (nx, ny, nz, power, ax, ay, az, zsep, fim);
01471
01472
01473 /*----- apply gaussian filter to volume data -----*/
01474 if (filter) gaussian_filter (nx, ny, nz, dx, dy, dz, rmm,
01475 sigmax, sigmay, sigmaz, fim);
01476
01477
01478 /*----- estimate equivalent gaussian filter width -----*/
01479 if (egfw) estimate_gfw (nx, ny, nz, dx, dy, dz,
01480 niter, quiet, fim, &avgsx, &avgsy, &avgsz);
01481
01482
01483 /*----- if power calculation, get volume corresponding to -----*/
01484 /*----- activation region and corresponding power threshold -----*/
01485 if (power) get_activation_region (nx, ny, nz, ax, ay, az, pthr, zsep,
01486 fim, arfim);
01487
01488
01489 /*----- apply threshold to volume data -----*/
01490 if (power) threshold_data (ax, ay, az,
01491 arfim, power_thr, &count, &sum, &sumsq,
01492 quiet, iter);
01493 else
01494 threshold_data (nx, ny, nz,
01495 fim, pthr, &count, &sum, &sumsq,
01496 quiet, iter);
01497
01498
01499 /*----- apply mask to volume data -----*/
01500 if (mask_vol && (!power)) apply_mask (nx, ny, nz, fim);
01501
01502
01503 /*----- identify clusters -----*/
01504 if (power)
01505 identify_clusters (ax, ay, az, dx, dy, dz, rmm, arfim, quiet,
01506 freq_table, max_table);
01507 else
01508 identify_clusters (nx, ny, nz, dx, dy, dz, rmm, fim, quiet,
01509 freq_table, max_table);
01510
01511 }
01512
01513
01514 /*----- generate requested output -----*/
01515 output_results (nx, ny, nz, dx, dy, dz, filter, sigmax, sigmay, sigmaz,
01516 egfw, avgsx, avgsy, avgsz, power, ax, ay, az, zsep,
01517 rmm, pthr, niter, outfilename, freq_table, max_table);
01518
01519
01520 /*----- terminate program -----*/
01521 terminate (&fim, &arfim, &freq_table, &max_table);
01522
01523 exit(0);
01524 }
|
|
||||||||||||
|
Definition at line 763 of file AlphaSim.c.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1232 of file AlphaSim.c. References AlphaSim_error(), fout, i, malloc, mask_filename, mask_ngood, mask_vol, MAX_CLUSTER_SIZE, MAX_NAME_LENGTH, nz, PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, and PROGRAM_NAME.
01238 {
01239 const float EPSILON = 1.0e-6;
01240 int i, j;
01241 float divisor;
01242 float * prob_table;
01243 float * alpha_table;
01244 float * cum_prop_table;
01245 long total_num_clusters;
01246 char message[MAX_NAME_LENGTH]; /* error message */
01247 FILE * fout;
01248
01249
01250 /*----- allocate memory space for probability table -----*/
01251 prob_table = (float *) malloc( MAX_CLUSTER_SIZE * sizeof(float) );
01252 if (prob_table == NULL)
01253 AlphaSim_error ("memory allocation error");
01254 for (i = 1; i < MAX_CLUSTER_SIZE; i++)
01255 prob_table[i] = 0.0;
01256
01257 /*----- allocate memory space for alpha table -----*/
01258 alpha_table = (float *) malloc( MAX_CLUSTER_SIZE * sizeof(float) );
01259 if (alpha_table == NULL)
01260 AlphaSim_error ("memory allocation error");
01261 for (i = 1; i < MAX_CLUSTER_SIZE; i++)
01262 alpha_table[i] = 0.0;
01263
01264 /*----- allocate memory space for cum. prop. of cluster size table -----*/
01265 cum_prop_table = (float *) malloc( MAX_CLUSTER_SIZE * sizeof(float) );
01266 if (cum_prop_table == NULL)
01267 AlphaSim_error ("memory allocation error");
01268 for (i = 1; i < MAX_CLUSTER_SIZE; i++)
01269 cum_prop_table[i] = 0.0;
01270
01271 total_num_clusters = 0;
01272 for (i = 1; i < MAX_CLUSTER_SIZE; i++)
01273 total_num_clusters += freq_table[i];
01274
01275 if (power)
01276 divisor = (float)(niter) * ax * ay * az;
01277 else
01278 if (mask_vol)
01279 divisor = (float)(niter) * mask_ngood;
01280 else
01281 divisor = (float)(niter) * nx * ny * nz;
01282
01283 for (i = 1; i < MAX_CLUSTER_SIZE; i++)
01284 {
01285 prob_table[i] = i * freq_table[i] / divisor;
01286 alpha_table[i] = (float)max_table[i] / (float)niter;
01287 cum_prop_table[i] = (float)freq_table[i] / (float)total_num_clusters;
01288 }
01289
01290 for (i = 1; i < MAX_CLUSTER_SIZE-1; i++)
01291 {
01292 j = MAX_CLUSTER_SIZE - i;
01293 prob_table[j-1] += prob_table[j];
01294 alpha_table[j-1] += alpha_table[j];
01295 cum_prop_table[i+1] += cum_prop_table[i];
01296 }
01297
01298
01299 /*----- if output file has not been specified, use stdout -----*/
01300 if (outfilename == NULL)
01301 fout = stdout;
01302 else
01303 {
01304 /*----- see if output file already exists -----*/
01305 fout = fopen (outfilename, "r");
01306 if (fout != NULL)
01307 {
01308 sprintf (message, "file %s already exists. ", outfilename);
01309 AlphaSim_error (message);
01310 }
01311
01312 /*----- open file for output -----*/
01313 fout = fopen (outfilename, "w");
01314 if (fout == NULL)
01315 {
01316 AlphaSim_error ("unable to write file ");
01317 }
01318 }
01319
01320 /*----- print out the results -----*/
01321 fprintf (fout, "\n\n");
01322 fprintf (fout, "Program: %s \n", PROGRAM_NAME);
01323 fprintf (fout, "Author: %s \n", PROGRAM_AUTHOR);
01324 fprintf (fout, "Initial Release: %s \n", PROGRAM_INITIAL);
01325 fprintf (fout, "Latest Revision: %s \n", PROGRAM_LATEST);
01326 fprintf (fout, "\n");
01327
01328 fprintf (fout, "Data set dimensions: \n");
01329 fprintf (fout, "nx = %5d ny = %5d nz = %5d (voxels)\n", nx, ny, nz);
01330 fprintf (fout, "dx = %5.2f dy = %5.2f dz = %5.2f (mm)\n", dx, dy, dz);
01331
01332 if (mask_vol)
01333 fprintf (fout, "\nMask filename = %s \n", mask_filename);
01334 if (mask_vol && !power)
01335 fprintf (fout, "Voxels in mask = %5d \n", mask_ngood);
01336
01337 fprintf (fout, "\nGaussian filter widths: \n");
01338 fprintf (fout, "sigmax = %5.2f FWHMx = %5.2f \n",
01339 sigmax, sigmax * 2.0*sqrt(2.0*log(2.0)));
01340 fprintf (fout, "sigmay = %5.2f FWHMy = %5.2f \n",
01341 sigmay, sigmay * 2.0*sqrt(2.0*log(2.0)));
01342 fprintf (fout, "sigmaz = %5.2f FWHMz = %5.2f \n\n",
01343 sigmaz, sigmaz * 2.0*sqrt(2.0*log(2.0)));
01344
01345 if (egfw)
01346 {
01347 fprintf (fout, "Estimated Gaussian filter widths: \n");
01348 fprintf (fout, "Ave sx = %f Ave sy = %f Ave sz = %f \n\n",
01349 avgsx, avgsy, avgsz);
01350 }
01351
01352 if (power)
01353 {
01354 fprintf (fout, "Activation Region for Power Calculations: \n");
01355 fprintf (fout, "ax = %5d ay = %5d az = %5d (voxels) \n",
01356 ax, ay, az);
01357 fprintf (fout, "z separation = %f \n\n", zsep);
01358 }
01359
01360 fprintf (fout, "Cluster connection radius: rmm = %5.2f \n\n", rmm);
01361 fprintf (fout, "Threshold probability: pthr = %e \n\n", pthr);
01362 fprintf (fout, "Number of Monte Carlo iterations = %5d \n\n", niter);
01363 if (!power)
01364 fprintf (fout, "Cl Size Frequency Cum Prop p/Voxel"
01365 " Max Freq Alpha\n");
01366 else
01367 fprintf (fout, "Cl Size Frequency Cum Prop p/Voxel"
01368 " Max Freq Power\n");
01369 for (i = 1; i < MAX_CLUSTER_SIZE; i++)
01370 if (alpha_table[i] < EPSILON)
01371 break;
01372 else
01373 fprintf (fout, "%7d %12ld %10.6f %10.8f %7ld %10.6f\n",
01374 i, freq_table[i], cum_prop_table[i], prob_table[i],
01375 max_table[i], alpha_table[i]);
01376
01377 fclose(fout);
01378
01379 }
|
|
||||||||||||||||||||||||
|
Definition at line 1040 of file AlphaSim.c. Referenced by threshold_data().
01041 {
01042 int nxyz;
01043 int ixyz;
01044 int pcount;
01045 float p;
01046
01047
01048 /*----- initialize local variables -----*/
01049 nxyz = nx * ny * nz;
01050
01051 pcount = 0;
01052 for (ixyz = 0; ixyz < nxyz; ixyz++)
01053 if (fim[ixyz] > zthr) pcount ++;
01054 p = (float)pcount / (float)nxyz;
01055
01056 return (p);
01057 }
|
|
||||||||||||||||||||
|
Definition at line 1387 of file AlphaSim.c. Referenced by main().
01389 {
01390 if (*fim != NULL)
01391 { free (*fim); *fim = NULL; }
01392
01393 if (*arfim != NULL)
01394 { free (*arfim); *arfim = NULL; }
01395
01396 if (*freq_table != NULL)
01397 { free (*freq_table); *freq_table = NULL; }
01398
01399 if (*max_table != NULL)
01400 { free (*max_table); *max_table = NULL; }
01401 }
|
|
||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1065 of file AlphaSim.c. References cdfnor(), fim, nz, p, pcalc(), and q. Referenced by main().
01068 {
01069 const float EPSILON = 1.0e-8;
01070 int ixyz;
01071 int nxyz;
01072 float zthr;
01073 float pact;
01074
01075 int which;
01076 double p, q, z, mean, sd;
01077 int status;
01078 double bound;
01079
01080
01081 /*----- initialize local variables -----*/
01082 nxyz = nx * ny * nz;
01083
01084
01085 /*----- update sums -----*/
01086 if (*count < 1.0e+09)
01087 {
01088 *count += nxyz;
01089 for (ixyz = 0; ixyz < nxyz; ixyz++)
01090 {
01091 *sum += fim[ixyz];
01092 *sumsq += fim[ixyz] * fim[ixyz];
01093 }
01094 }
01095
01096
01097 /*----- calculate z-threshold -----*/
01098 which = 2;
01099 p = 1.0 - pthr;
01100 q = pthr;
01101 mean = (*sum) / (*count);
01102 sd = sqrt(((*sumsq) - ((*sum) * (*sum))/(*count)) / ((*count)-1));
01103 cdfnor (&which, &p, &q, &z, &mean, &sd, &status, &bound);
01104 zthr = z;
01105
01106 if (!quiet)
01107 {
01108 pact = pcalc (nx, ny, nz, fim, zthr);
01109 printf ("pthr=%f zthr=%f pact=%f ", pthr, zthr, pact);
01110 }
01111
01112
01113 /*----- apply threshold to image data -----*/
01114 for (ixyz = 0; ixyz < nxyz; ixyz++)
01115 if (fim[ixyz] > zthr)
01116 fim[ixyz] = 1.0;
01117 else
01118 fim[ixyz] = 0.0;
01119
01120
01121 }
|
|
|
Definition at line 752 of file AlphaSim.c. Referenced by get_random_value(), and normal().
00753 {
00754 return ( (float)drand48() );
00755 }
|
Variable Documentation
|
|
Definition at line 56 of file AlphaSim.c. Referenced by get_options(), and output_results(). |
|
|
Definition at line 58 of file AlphaSim.c. Referenced by get_options(), and output_results(). |
|
|
Definition at line 57 of file AlphaSim.c. Referenced by apply_mask(), get_options(), main(), and output_results(). |