Doxygen Source Code Documentation
3dANOVA2.c File Reference
#include "3dANOVA.h"
#include "3dANOVA.lib"
Go to the source code of this file.
Define Documentation
|
Definition at line 68 of file 3dANOVA2.c. Referenced by main(). |
|
Definition at line 69 of file 3dANOVA2.c. Referenced by main(). |
|
Definition at line 70 of file 3dANOVA2.c. Referenced by main(). |
|
Definition at line 67 of file 3dANOVA2.c. Referenced by get_options(), initialize(), and main(). |
|
Definition at line 74 of file 3dANOVA2.c. |
Function Documentation
|
Definition at line 3115 of file 3dANOVA2.c. References calculate_acontrasts(), calculate_adifferences(), calculate_ameans(), calculate_bcontrasts(), calculate_bdifferences(), calculate_bmeans(), calculate_fa(), calculate_fab(), calculate_fb(), calculate_ftr(), calculate_xcontrasts(), calculate_xdifferences(), calculate_xmeans(), anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, and anova_options::num_xmeans.
03116 { 03117 03118 /*----- calculate F-statistic for treatment effect -----*/ 03119 if (option_data->nftr) calculate_ftr (option_data); 03120 03121 /*----- calculate F-statistic for factor A effect -----*/ 03122 if (option_data->nfa) calculate_fa (option_data); 03123 03124 /*----- calculate F-statistic for factor B effect -----*/ 03125 if (option_data->nfb) calculate_fb (option_data); 03126 03127 /*----- calculate F-statistic for interaction effect -----*/ 03128 if (option_data->nfab) calculate_fab (option_data); 03129 03130 /*----- estimate level means for factor A -----*/ 03131 if (option_data->num_ameans) calculate_ameans (option_data); 03132 03133 /*----- estimate level means for factor B -----*/ 03134 if (option_data->num_bmeans) calculate_bmeans (option_data); 03135 03136 /*----- estimate cell means -----*/ 03137 if (option_data->num_xmeans) calculate_xmeans (option_data); 03138 03139 /*----- estimate level differences for factor A -----*/ 03140 if (option_data->num_adiffs) calculate_adifferences (option_data); 03141 03142 /*----- estimate level differences for factor B -----*/ 03143 if (option_data->num_bdiffs) calculate_bdifferences (option_data); 03144 03145 /*----- estimate differences in cell means -----*/ 03146 if (option_data->num_xdiffs) calculate_xdifferences (option_data); 03147 03148 /*----- estimate level contrasts for factor A -----*/ 03149 if (option_data->num_acontr) calculate_acontrasts (option_data); 03150 03151 /*----- estimate level contrasts for factor B -----*/ 03152 if (option_data->num_bcontr) calculate_bcontrasts (option_data); 03153 03154 /*----- estimate contrasts in cell means -----*/ 03155 if (option_data->num_xcontr) calculate_xcontrasts (option_data); 03156 03157 } |
|
Definition at line 1194 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, and anova_options::nxyz. Referenced by calculate_acontrasts(), and calculate_adifferences().
01195 { 01196 double * sum = NULL; /* cumulative contrast mean (for accuracy) */ 01197 int i; /* factor A level index */ 01198 int a, b; /* number of levels for factors A and B */ 01199 int n; /* number of observations per cell */ 01200 int ixyz, nxyz; /* voxel counters */ 01201 int nvoxel; /* output voxel # */ 01202 01203 01204 /*----- initialize local variables -----*/ 01205 a = option_data->a; 01206 b = option_data->b; 01207 n = option_data->n; 01208 nxyz = option_data->nxyz; 01209 nvoxel = option_data->nvoxel; 01210 01211 /*----- allocate memory space for calculations -----*/ 01212 sum = (double *) malloc(sizeof(double)*nxyz); 01213 if (sum == NULL) 01214 ANOVA_error ("calc_acontr_mean: unable to allocate sufficient memory"); 01215 01216 for (ixyz = 0; ixyz < nxyz; ixyz++) /* init to zero */ 01217 sum[ixyz] = 0.0; 01218 01219 /*----- loop over contrast elements -----*/ 01220 for (i = 0; i < a; i++) 01221 { 01222 if (contr[i] == 0.0 ) continue; /* then skip this index */ 01223 01224 /* compute mean for this level of A (cheat, using cmean for memory) */ 01225 calculate_sum(option_data, i, -1, cmean); 01226 if (nvoxel > 0) 01227 printf( "acontr[%d] = %f, ymean = %f\n", 01228 i, contr[i], cmean[nvoxel-1] / (n*b) ); 01229 for (ixyz = 0; ixyz < nxyz; ixyz++) 01230 sum[ixyz] += (double)cmean[ixyz] / (n*b) * contr[i]; 01231 } 01232 01233 /*----- copy results to float output -----*/ 01234 for (ixyz = 0; ixyz < nxyz; ixyz++) 01235 cmean[ixyz] = sum[ixyz]; 01236 01237 /*----- release memory -----*/ 01238 free (sum); 01239 } |
|
Definition at line 1252 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), and anova_options::xname. Referenced by calculate_acontrasts(), and calculate_adifferences().
01253 { 01254 double * dsum = NULL; /* cumulative sum, for accuracy */ 01255 double * dcontr = NULL; /* contrast sum */ 01256 int i, j; /* indices for levels of factors A and B */ 01257 int k; /* index for any repeated measure */ 01258 int a, b; /* number of levels for factors A and B */ 01259 int n; /* number of observations per cell */ 01260 int ixyz, nxyz; /* voxel counters */ 01261 int nvoxel; /* output voxel # */ 01262 01263 01264 /*----- initialize local variables -----*/ 01265 a = option_data->a; 01266 b = option_data->b; 01267 n = option_data->n; 01268 nxyz = option_data->nxyz; 01269 nvoxel = option_data->nvoxel; 01270 01271 /*----- allocate memory space for calculations -----*/ 01272 dsum = (double *) malloc(sizeof(double)*nxyz); 01273 dcontr = (double *) malloc(sizeof(double)*nxyz); 01274 if (dsum == NULL || dcontr == NULL) 01275 ANOVA_error ("calc_sum_sq_acontr: unable to allocate sufficient memory"); 01276 01277 for (ixyz = 0; ixyz < nxyz; ixyz++) /* init to zero */ 01278 dsum[ixyz] = 0.0; 01279 01280 /*----- loop over factor B levels and repeated measures -----*/ 01281 for ( j = 0; j < b; j++ ) 01282 for ( k = 0; k < n; k++ ) 01283 { 01284 /*----- add squared contrast for the given j, k -----*/ 01285 for (ixyz = 0; ixyz < nxyz; ixyz++) 01286 dcontr[ixyz] = 0.0; 01287 01288 for (i = 0; i < a; i++) 01289 { 01290 if (acontr[i] == 0.0 ) continue; /* then skip this index */ 01291 01292 /* read single dataset (cheat, using sum for memory) */ 01293 read_afni_data(option_data, option_data->xname[i][j][0][k], sum); 01294 for (ixyz = 0; ixyz < nxyz; ixyz++) 01295 dcontr[ixyz] += (double)sum[ixyz] * acontr[i]; 01296 } 01297 for (ixyz = 0; ixyz < nxyz; ixyz++) 01298 dsum[ixyz] += dcontr[ixyz] * dcontr[ixyz]; 01299 } 01300 01301 /*----- copy results to float output -----*/ 01302 for (ixyz = 0; ixyz < nxyz; ixyz++) 01303 sum[ixyz] = dsum[ixyz]; 01304 01305 /*----- release memory -----*/ 01306 free (dsum); 01307 free (dcontr); 01308 } |
|
Definition at line 2797 of file 3dANOVA2.c. References a, anova_options::acname, anova_options::acontr, ANOVA_error(), anova_options::b, c, calc_acontr_mean(), calc_sum_sq_acontr(), calculate_sum(), calculate_t_from_sums(), free, malloc, anova_options::model, anova_options::n, anova_options::num_acontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02798 { 02799 float * contr = NULL; /* pointer to contrast estimate */ 02800 float * tcontr = NULL; /* pointer to t-statistic data */ 02801 int b; /* number of levels for factor B */ 02802 int nxyz; /* number of voxels */ 02803 int nvoxel; /* output voxel # */ 02804 int num_contr; /* number of user requested contrasts */ 02805 int icontr; /* index of user requested contrast */ 02806 int n; /* number of observations per cell */ 02807 int df; /* degrees of freedom for t-test */ 02808 02809 02810 /*----- initialize local variables -----*/ 02811 b = option_data->b; 02812 n = option_data->n; 02813 num_contr = option_data->num_acontr; 02814 nxyz = option_data->nxyz; 02815 nvoxel = option_data->nvoxel; 02816 02817 df = b*n - 1; /* for speed */ 02818 02819 /*----- allocate memory space for calculations -----*/ 02820 contr = (float *) malloc(sizeof(float)*nxyz); 02821 tcontr = (float *) malloc(sizeof(float)*nxyz); 02822 if ((contr == NULL) || (tcontr == NULL)) 02823 ANOVA_error ("unable to allocate sufficient memory"); 02824 02825 02826 /*----- loop over user specified constrasts -----*/ 02827 for (icontr = 0; icontr < num_contr; icontr++) 02828 { 02829 /*----- get the acontr_mean and sum of squared contrast -----*/ 02830 calc_acontr_mean(option_data, option_data->acontr[icontr], contr); 02831 calc_sum_sq_acontr(option_data, option_data->acontr[icontr], tcontr); 02832 02833 /*----- compute t -----*/ 02834 calculate_t_from_sums(tcontr, contr, tcontr, df, nxyz); 02835 02836 #if 0 /* old way */ 02837 for (level = 0; level < a; level++) 02838 { 02839 c = option_data->acontr[icontr][level]; 02840 if (c == 0.0) continue; 02841 02842 /*----- add c * treatment level mean to contrast -----*/ 02843 calculate_sum (option_data, level, -1, tcontr); 02844 fval += c * c / (b*n); 02845 for (ixyz = 0; ixyz < nxyz; ixyz++) 02846 contr[ixyz] += c * tcontr[ixyz] / (b*n); 02847 } 02848 02849 /*----- standard deviation depends on model type -----*/ 02850 if (option_data->model == 1) { 02851 volume_read ("sse", tcontr, nxyz); 02852 df = a*b*(n-1); 02853 } else { 02854 volume_read ("ssab", tcontr, nxyz); 02855 df = (a-1)*(b-1); 02856 } 02857 02858 /*----- divide by estimated standard deviation of the contrast -----*/ 02859 for (ixyz = 0; ixyz < nxyz; ixyz++) 02860 { 02861 stddev = sqrt ((tcontr[ixyz] / df) * fval); 02862 if (stddev < EPSILON) tcontr[ixyz] = 0.0; 02863 else tcontr[ixyz] = contr[ixyz] / stddev; 02864 } 02865 #endif 02866 02867 if (nvoxel > 0) 02868 printf ("No.%d contrast for factor A = %f, t = %f, df = %d\n", 02869 icontr+1, contr[nvoxel-1], tcontr[nvoxel-1], df); 02870 02871 /*----- write out afni data file -----*/ 02872 write_afni_data (option_data, option_data->acname[icontr], 02873 contr, tcontr, df, 0); 02874 02875 } 02876 02877 /*----- release memory -----*/ 02878 free (tcontr); tcontr = NULL; 02879 free (contr); contr = NULL; 02880 02881 } |
|
Definition at line 2509 of file 3dANOVA2.c. References anova_options::a, a, anova_options::adiffs, anova_options::adname, ANOVA_error(), anova_options::b, calc_acontr_mean(), calc_sum_sq_acontr(), calculate_sum(), calculate_t_from_sums(), free, i, malloc, anova_options::model, anova_options::n, anova_options::num_adiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02510 { 02511 float * diff = NULL; /* pointer to est. diff. in means */ 02512 float * tdiff = NULL; /* pointer to t-statistic data */ 02513 float * contrast; /* for using diff as contrast */ 02514 int a; /* number of levels for factor A */ 02515 int b; /* number of levels for factor B */ 02516 int nxyz; /* number of voxels */ 02517 int nvoxel; /* output voxel # */ 02518 int num_diffs; /* number of user requested diffs. */ 02519 int idiff; /* index for requested differences */ 02520 int i, j; /* factor level indices */ 02521 int n; /* number of observations per cell */ 02522 int df, df_prod; /* degrees of freedom for t-test */ 02523 02524 02525 /*----- initialize local variables -----*/ 02526 a = option_data->a; 02527 b = option_data->b; 02528 n = option_data->n; 02529 num_diffs = option_data->num_adiffs; 02530 nxyz = option_data->nxyz; 02531 nvoxel = option_data->nvoxel; 02532 02533 /*----- number of differences, minus one -----*/ 02534 df = b*n - 1; 02535 df_prod = df * (df+1); 02536 02537 /*----- allocate memory space for calculations -----*/ 02538 diff = (float *) malloc(sizeof(float)*nxyz); 02539 tdiff = (float *) malloc(sizeof(float)*nxyz); 02540 contrast = (float *) malloc(sizeof(float)*a); 02541 if ((diff == NULL) || (tdiff == NULL) || (contrast == NULL)) 02542 ANOVA_error ("calc_adiffs: unable to allocate sufficient memory"); 02543 02544 /*----- loop over user specified treatment differences -----*/ 02545 for (idiff = 0; idiff < num_diffs; idiff++) 02546 { 02547 for (i = 0 ; i < a; i++ ) contrast[i] = 0.0; /* clear contrast array */ 02548 02549 i = option_data->adiffs[idiff][0]; 02550 j = option_data->adiffs[idiff][1]; 02551 02552 /* set the diff as a contrast */ 02553 contrast[i] = 1; contrast[j] = -1; 02554 02555 /*----- and compute diff and t-stat as a contrast -----*/ 02556 calc_acontr_mean(option_data, contrast, diff); 02557 calc_sum_sq_acontr(option_data, contrast, tdiff); 02558 calculate_t_from_sums(tdiff, diff, tdiff, df, nxyz); 02559 02560 if (nvoxel > 0) 02561 printf ("Difference of factor A level %d - level %d = %f \n", 02562 i+1, j+1, diff[nvoxel-1]); 02563 02564 #if 0 02565 /*----- read first treatment level mean -----*/ 02566 calculate_sum (option_data, i, -1, diff); 02567 for (ixyz = 0; ixyz < nxyz; ixyz++) diff[ixyz] = diff[ixyz] / (b*n); 02568 02569 /*----- subtract second treatment level mean -----*/ 02570 calculate_sum (option_data, j, -1, tdiff); 02571 for (ixyz = 0; ixyz < nxyz; ixyz++) diff[ixyz] -= tdiff[ixyz] / (b*n); 02572 02573 /*----- divide by estimated standard deviation of difference -----*/ 02574 if (option_data->model == 1) /*----- fixed effects model -----*/ 02575 { 02576 volume_read ("sse", tdiff, nxyz); 02577 df = a*b*(n-1); 02578 } else { /*----- mixed effects model -----*/ 02579 volume_read ("ssab", tdiff, nxyz); 02580 df = (a-1)*(b-1); 02581 } 02582 fval = (1.0 / df) * (2.0 / (b*n)); 02583 for (ixyz = 0; ixyz < nxyz; ixyz++) 02584 { 02585 stddev = sqrt (tdiff[ixyz] * fval); 02586 if (stddev < EPSILON) tdiff[ixyz] = 0.0; 02587 else tdiff[ixyz] = diff[ixyz] / stddev; 02588 } 02589 #endif 02590 02591 if (nvoxel > 0) 02592 printf ("t for difference of factor A level %d - level %d = %f \n", 02593 i+1, j+1, tdiff[nvoxel-1]); 02594 02595 /*----- write out afni data file -----*/ 02596 write_afni_data (option_data, option_data->adname[idiff], 02597 diff, tdiff, df, 0); 02598 02599 } 02600 02601 /*----- release memory -----*/ 02602 free (tdiff); tdiff = NULL; 02603 free (diff); diff = NULL; 02604 free (contrast); contrast = NULL; 02605 } |
|
Definition at line 2243 of file 3dANOVA2.c. References a, anova_options::ameans, anova_options::amname, ANOVA_error(), anova_options::b, calculate_sum(), calculate_sum_sq(), calculate_t_from_sums(), free, malloc, anova_options::model, anova_options::n, anova_options::num_ameans, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02244 { 02245 float * mean = NULL; /* treatment mean volume */ 02246 float * tmean = NULL; /* t-statistic */ 02247 int imean; /* output mean option index */ 02248 int level; /* factor A level index */ 02249 int n; /* number of observations per cell */ 02250 int ixyz, nxyz; /* voxel counters */ 02251 int nvoxel; /* output voxel # */ 02252 int b; /* number of levels for factor B */ 02253 int num_means; /* number of user requested means */ 02254 int df; /* degrees of freedom for t-test */ 02255 02256 02257 /*----- initialize local variables -----*/ 02258 b = option_data->b; 02259 n = option_data->n; 02260 num_means = option_data->num_ameans; 02261 nxyz = option_data->nxyz; 02262 nvoxel = option_data->nvoxel; 02263 02264 /*----- note degrees of freedom -----*/ 02265 df = b * n - 1; 02266 02267 /*----- allocate memory space for calculations -----*/ 02268 mean = (float *) malloc(sizeof(float)*nxyz); 02269 tmean = (float *) malloc(sizeof(float)*nxyz); 02270 if ((mean == NULL) || (tmean == NULL)) 02271 ANOVA_error ("unable to allocate sufficient memory"); 02272 02273 /*----- loop over user specified treatment means -----*/ 02274 for (imean = 0; imean < num_means; imean++) 02275 { 02276 level = option_data->ameans[imean]; 02277 02278 /*----- start with sum and sum of squares -----*/ 02279 calculate_sum (option_data, level, -1, mean); 02280 calculate_sum_sq (option_data, level, -1, tmean); 02281 02282 /*----- estimate factor mean for this treatment level -----*/ 02283 for (ixyz = 0; ixyz < nxyz; ixyz++) 02284 mean[ixyz] /= (df + 1.0); 02285 02286 /*----- calculate t-stats -----*/ 02287 calculate_t_from_sums(tmean, mean, tmean, df, nxyz); 02288 02289 if (nvoxel > 0) 02290 printf ("factor A level %d: mean = %f, t = %f, df = %d\n", 02291 level+1, mean[nvoxel-1], tmean[nvoxel-1], df); 02292 02293 #if 0 /* old way */ 02294 /*----- estimate factor mean for this treatment level -----*/ 02295 calculate_sum (option_data, level, -1, mean); 02296 for (ixyz = 0; ixyz < nxyz; ixyz++) 02297 mean[ixyz] = mean[ixyz] / (n*b); 02298 02299 /*----- divide by estimated standard deviation of factor mean -----*/ 02300 if (option_data->model == 1) /*----- fixed effects model -----*/ 02301 { 02302 volume_read ("sse", tmean, nxyz); 02303 df = a*b*(n-1); 02304 } 02305 else /*----- mixed effects model -----*/ 02306 { 02307 volume_read ("ssab", tmean, nxyz); 02308 df = (a-1)*(b-1); 02309 } 02310 fval = (1.0 / df) * (1.0 / (b*n)); 02311 for (ixyz = 0; ixyz < nxyz; ixyz++) 02312 { 02313 stddev = sqrt(tmean[ixyz] * fval); 02314 if (stddev < EPSILON) tmean[ixyz] = 0.0; 02315 else tmean[ixyz] = mean[ixyz] / stddev; 02316 } 02317 #endif 02318 02319 /*----- write out afni data file -----*/ 02320 write_afni_data (option_data, option_data->amname[imean], 02321 mean, tmean, df, 0); 02322 02323 } 02324 02325 /*----- release memory -----*/ 02326 free (tmean); tmean = NULL; 02327 free (mean); mean = NULL; 02328 } |
|
Definition at line 3072 of file 3dANOVA2.c. References calculate_ss0(), calculate_ssa(), calculate_ssab(), calculate_ssb(), calculate_sse(), calculate_ssi(), calculate_ssij(), calculate_ssijk(), calculate_ssj(), calculate_sstr(), anova_options::n, and volume_delete().
03073 { 03074 03075 /*----- calculate various sum and sums of squares -----*/ 03076 calculate_ss0 (option_data); 03077 calculate_ssi (option_data); 03078 calculate_ssj (option_data); 03079 calculate_ssij (option_data); 03080 if (option_data->n != 1) calculate_ssijk (option_data); 03081 03082 03083 /*----- calculate error sum of squares -----*/ 03084 if (option_data->n != 1) 03085 { 03086 calculate_sse (option_data); 03087 volume_delete ("ssijk"); 03088 } 03089 03090 /*----- calculate treatment sum of squares -----*/ 03091 calculate_sstr (option_data); 03092 volume_delete ("ssij"); 03093 03094 /*----- calculate sum of squares due to A effect -----*/ 03095 calculate_ssa (option_data); 03096 volume_delete ("ssi"); 03097 03098 /*----- calculate sum of squares due to B effect -----*/ 03099 calculate_ssb (option_data); 03100 volume_delete ("ssj"); 03101 03102 volume_delete ("ss0"); 03103 03104 /*----- calculate sum of squares due to A*B interaction -----*/ 03105 calculate_ssab (option_data); 03106 03107 } |
|
Definition at line 2891 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bcname, anova_options::bcontr, c, calculate_sum(), free, malloc, anova_options::n, anova_options::num_bcontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_zero(), and write_afni_data().
02892 { 02893 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02894 float * contr = NULL; /* pointer to contrast estimate */ 02895 float * tcontr = NULL; /* pointer to t-statistic data */ 02896 int a; /* number of levels for factor A */ 02897 int b; /* number of levels for factor B */ 02898 int ixyz, nxyz; /* voxel counters */ 02899 int nvoxel; /* output voxel # */ 02900 int num_contr; /* number of user requested contrasts */ 02901 int icontr; /* index of user requested contrast */ 02902 int level; /* factor level index */ 02903 int df; /* degrees of freedom for t-test */ 02904 int n; /* number of observations per cell */ 02905 float fval; /* for calculating std. dev. */ 02906 float c; /* contrast coefficient */ 02907 float stddev; /* est. std. dev. of contrast */ 02908 02909 02910 /*----- initialize local variables -----*/ 02911 a = option_data->a; 02912 b = option_data->b; 02913 n = option_data->n; 02914 num_contr = option_data->num_bcontr; 02915 nxyz = option_data->nxyz; 02916 nvoxel = option_data->nvoxel; 02917 02918 /*----- allocate memory space for calculations -----*/ 02919 contr = (float *) malloc(sizeof(float)*nxyz); 02920 tcontr = (float *) malloc(sizeof(float)*nxyz); 02921 if ((contr == NULL) || (tcontr == NULL)) 02922 ANOVA_error ("unable to allocate sufficient memory"); 02923 02924 02925 /*----- loop over user specified constrasts -----*/ 02926 for (icontr = 0; icontr < num_contr; icontr++) 02927 { 02928 volume_zero (contr, nxyz); 02929 fval = 0.0; 02930 02931 for (level = 0; level < b; level++) 02932 { 02933 c = option_data->bcontr[icontr][level]; 02934 if (c == 0.0) continue; 02935 02936 /*----- add c * treatment level mean to contrast -----*/ 02937 calculate_sum (option_data, -1, level, tcontr); 02938 fval += c * c / (a*n); 02939 for (ixyz = 0; ixyz < nxyz; ixyz++) 02940 contr[ixyz] += c * tcontr[ixyz] / (a*n); 02941 } 02942 if (nvoxel > 0) 02943 printf ("No.%d contrast for factor B = %f \n", 02944 icontr+1, contr[nvoxel-1]); 02945 02946 /*----- divide by estimated standard deviation of the contrast -----*/ 02947 volume_read ("sse", tcontr, nxyz); 02948 df = a * b * (n-1); 02949 for (ixyz = 0; ixyz < nxyz; ixyz++) 02950 { 02951 stddev = sqrt ((tcontr[ixyz] / df) * fval); 02952 if (stddev < EPSILON) 02953 tcontr[ixyz] = 0.0; 02954 else 02955 tcontr[ixyz] = contr[ixyz] / stddev; 02956 } 02957 02958 if (nvoxel > 0) 02959 printf ("t of No.%d contrast for factor B = %f \n", 02960 icontr+1, tcontr[nvoxel-1]); 02961 02962 /*----- write out afni data file -----*/ 02963 write_afni_data (option_data, option_data->bcname[icontr], 02964 contr, tcontr, a*b*(n-1), 0); 02965 02966 } 02967 02968 /*----- release memory -----*/ 02969 free (tcontr); tcontr = NULL; 02970 free (contr); contr = NULL; 02971 } |
|
Definition at line 2616 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bdiffs, anova_options::bdname, calculate_sum(), free, i, malloc, anova_options::n, anova_options::num_bdiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02617 { 02618 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02619 float * diff = NULL; /* pointer to est. diff. in means */ 02620 float * tdiff = NULL; /* pointer to t-statistic data */ 02621 int a; /* number of levels for factor A */ 02622 int b; /* number of levels for factor B */ 02623 int ixyz, nxyz; /* voxel counters */ 02624 int nvoxel; /* output voxel # */ 02625 int num_diffs; /* number of user requested diffs. */ 02626 int idiff; /* index for requested differences */ 02627 int i, j; /* factor level indices */ 02628 int n; /* number of observations per cell */ 02629 int df; /* degrees of freedom for t-test */ 02630 float fval; /* for calculating std. dev. */ 02631 float stddev; /* est. std. dev. of difference */ 02632 02633 02634 /*----- initialize local variables -----*/ 02635 a = option_data->a; 02636 b = option_data->b; 02637 n = option_data->n; 02638 df = a*b*(n-1); 02639 num_diffs = option_data->num_bdiffs; 02640 nxyz = option_data->nxyz; 02641 nvoxel = option_data->nvoxel; 02642 02643 /*----- allocate memory space for calculations -----*/ 02644 diff = (float *) malloc(sizeof(float)*nxyz); 02645 tdiff = (float *) malloc(sizeof(float)*nxyz); 02646 if ((diff == NULL) || (tdiff == NULL)) 02647 ANOVA_error ("unable to allocate sufficient memory"); 02648 02649 /*----- loop over user specified treatment differences -----*/ 02650 for (idiff = 0; idiff < num_diffs; idiff++) 02651 { 02652 02653 /*----- read first treatment level mean -----*/ 02654 i = option_data->bdiffs[idiff][0]; 02655 calculate_sum (option_data, -1, i, diff); 02656 for (ixyz = 0; ixyz < nxyz; ixyz++) 02657 diff[ixyz] = diff[ixyz] / (a*n); 02658 02659 /*----- subtract second treatment level mean -----*/ 02660 j = option_data->bdiffs[idiff][1]; 02661 calculate_sum (option_data, -1, j, tdiff); 02662 for (ixyz = 0; ixyz < nxyz; ixyz++) 02663 diff[ixyz] -= tdiff[ixyz] / (a*n); 02664 if (nvoxel > 0) 02665 printf ("Difference of factor B level %d - level %d = %f \n", 02666 i+1, j+1, diff[nvoxel-1]); 02667 02668 /*----- divide by estimated standard deviation of difference -----*/ 02669 volume_read ("sse", tdiff, nxyz); 02670 fval = (1.0 / df) * (2.0 / (a*n)); 02671 for (ixyz = 0; ixyz < nxyz; ixyz++) 02672 { 02673 stddev = sqrt (tdiff[ixyz] * fval); 02674 if (stddev < EPSILON) 02675 tdiff[ixyz] = 0.0; 02676 else 02677 tdiff[ixyz] = diff[ixyz] / stddev; 02678 } 02679 02680 if (nvoxel > 0) 02681 printf ("t for difference of factor B level %d - level %d = %f \n", 02682 i+1, j+1, tdiff[nvoxel-1]); 02683 02684 /*----- write out afni data file -----*/ 02685 write_afni_data (option_data, option_data->bdname[idiff], 02686 diff, tdiff, df, 0); 02687 02688 } 02689 02690 /*----- release memory -----*/ 02691 free (tdiff); tdiff = NULL; 02692 free (diff); diff = NULL; 02693 } |
|
Definition at line 2339 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bmeans, anova_options::bmname, calculate_sum(), free, malloc, anova_options::n, anova_options::nt, anova_options::num_bmeans, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02340 { 02341 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02342 float * mean = NULL; /* pointer to treatment mean data */ 02343 float * tmean = NULL; /* pointer to t-statistic data */ 02344 int imean; /* output mean option index */ 02345 int level; /* factor B level index */ 02346 int n; /* number of observations per cell */ 02347 int ixyz, nxyz; /* voxel counters */ 02348 int nvoxel; /* output voxel # */ 02349 int a; /* number of levels for factor A */ 02350 int b; /* number of levels for factor B */ 02351 int nt; /* total number of observations */ 02352 int num_means; /* number of user requested means */ 02353 int df; /* degrees of freedom for t-test */ 02354 float fval; /* for calculating std. dev. */ 02355 float stddev; /* est. std. dev. of factor mean */ 02356 02357 02358 /*----- initialize local variables -----*/ 02359 a = option_data->a; 02360 b = option_data->b; 02361 n = option_data->n; 02362 df = a * b * (n-1); 02363 nt = option_data->nt; 02364 num_means = option_data->num_bmeans; 02365 nxyz = option_data->nxyz; 02366 nvoxel = option_data->nvoxel; 02367 02368 /*----- allocate memory space for calculations -----*/ 02369 mean = (float *) malloc(sizeof(float)*nxyz); 02370 tmean = (float *) malloc(sizeof(float)*nxyz); 02371 if ((mean == NULL) || (tmean == NULL)) 02372 ANOVA_error ("unable to allocate sufficient memory"); 02373 02374 /*----- loop over user specified treatment means -----*/ 02375 for (imean = 0; imean < num_means; imean++) 02376 { 02377 level = option_data->bmeans[imean]; 02378 02379 /*----- estimate factor mean for this treatment level -----*/ 02380 calculate_sum (option_data, -1, level, mean); 02381 for (ixyz = 0; ixyz < nxyz; ixyz++) 02382 mean[ixyz] = mean[ixyz] / (n*a); 02383 if (nvoxel > 0) 02384 printf ("Mean of factor B level %d = %f \n", level+1, mean[nvoxel-1]); 02385 02386 /*----- divide by estimated standard deviation of factor mean -----*/ 02387 volume_read ("sse", tmean, nxyz); 02388 fval = (1.0 / df) * (1.0 / (a*n)); 02389 for (ixyz = 0; ixyz < nxyz; ixyz++) 02390 { 02391 stddev = sqrt(tmean[ixyz] * fval); 02392 if (stddev < EPSILON) 02393 tmean[ixyz] = 0.0; 02394 else 02395 tmean[ixyz] = mean[ixyz] / stddev; 02396 } 02397 if (nvoxel > 0) 02398 printf ("t for mean of factor B level %d = %f \n", 02399 level+1, tmean[nvoxel-1]); 02400 02401 /*----- write out afni data file -----*/ 02402 write_afni_data (option_data, option_data->bmname[imean], 02403 mean, tmean, df, 0); 02404 02405 } 02406 02407 /*----- release memory -----*/ 02408 free (tmean); tmean = NULL; 02409 free (mean); mean = NULL; 02410 } |
|
Definition at line 1962 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, fa, anova_options::faname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and write_afni_data().
01963 { 01964 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 01965 float * msa = NULL; /* pointer to MSA data */ 01966 float * fa = NULL; /* pointer to F due to factor A */ 01967 int a; /* number of levels for factor A */ 01968 int b; /* number of levels for factor B */ 01969 int n; /* number of observations per cell */ 01970 int ixyz, nxyz; /* voxel counters */ 01971 int nvoxel; /* output voxel # */ 01972 int numdf; /* numerator degrees of freedom */ 01973 int dendf; /* denominator degrees of freedom */ 01974 float mse; /* mean square error */ 01975 float msab; /* mean square interaction */ 01976 01977 01978 /*----- initialize local variables -----*/ 01979 a = option_data->a; 01980 b = option_data->b; 01981 n = option_data->n; 01982 nxyz = option_data->nxyz; 01983 nvoxel = option_data->nvoxel; 01984 01985 /*----- allocate memory space for calculations -----*/ 01986 fa = (float *) malloc(sizeof(float)*nxyz); 01987 msa = (float *) malloc(sizeof(float)*nxyz); 01988 if ((fa == NULL) || (msa == NULL)) 01989 ANOVA_error ("unable to allocate sufficient memory"); 01990 01991 /*----- calculate mean SS due to factor A -----*/ 01992 volume_read ("ssa", msa, nxyz); 01993 numdf = a - 1; 01994 for (ixyz = 0; ixyz < nxyz; ixyz++) 01995 msa[ixyz] = msa[ixyz] / numdf; /*--- MSA = SSA / (a-1) ---*/ 01996 if (nvoxel > 0) 01997 printf ("MSA = %f \n", msa[nvoxel-1]); 01998 01999 /*----- calculate F-statistic -----*/ 02000 if (option_data->model == 1) 02001 { 02002 /*----- fixed effects model -----*/ 02003 volume_read ("sse", fa, nxyz); 02004 dendf = a * b * (n-1); 02005 for (ixyz = 0; ixyz < nxyz; ixyz++) 02006 { 02007 mse = fa[ixyz] / dendf; /*--- MSE = SSE / (ab(n-1)) ---*/ 02008 if (mse < EPSILON) 02009 fa[ixyz] = 0.0; 02010 else 02011 fa[ixyz] = msa[ixyz] / mse; /*--- F = MSA / MSE ---*/ 02012 } 02013 } 02014 else 02015 { 02016 /*----- random or mixed effects model -----*/ 02017 volume_read ("ssab", fa, nxyz); 02018 dendf = (a-1) * (b-1); 02019 for (ixyz = 0; ixyz < nxyz; ixyz++) 02020 { 02021 msab = fa[ixyz] / dendf; /*--- MSAB = SSAB / (a-1)(b-1) ---*/ 02022 if (msab < EPSILON) 02023 fa[ixyz] = 0.0; 02024 else 02025 fa[ixyz] = msa[ixyz] / msab; /*--- F = MSA / MSAB ---*/ 02026 } 02027 } 02028 02029 if (nvoxel > 0) 02030 printf ("FA = %f \n", fa[nvoxel-1]); 02031 02032 /*----- write out afni data file -----*/ 02033 for (ixyz = 0; ixyz < nxyz; ixyz++) 02034 msa[ixyz] = sqrt(msa[ixyz]); /*-- msa now holds square root --*/ 02035 write_afni_data (option_data, option_data->faname, 02036 msa, fa, numdf, dendf); 02037 02038 /*----- this data file is no longer needed -----*/ 02039 volume_delete ("ssa"); 02040 02041 /*----- release memory -----*/ 02042 free (msa); msa = NULL; 02043 free (fa); fa = NULL; 02044 02045 } |
|
Definition at line 2164 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::fabname, free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02165 { 02166 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02167 float * msab = NULL; /* pointer to MSAB data */ 02168 float * fab = NULL; /* pointer to F due to interaction */ 02169 int a; /* number of levels for factor A */ 02170 int b; /* number of levels for factor B */ 02171 int n; /* number of observations per cell */ 02172 int ixyz, nxyz; /* voxel counters */ 02173 int nvoxel; /* output voxel # */ 02174 float fval; /* float value used in calculations */ 02175 float mse; /* mean square error */ 02176 02177 02178 /*----- initialize local variables -----*/ 02179 a = option_data->a; 02180 b = option_data->b; 02181 n = option_data->n; 02182 nxyz = option_data->nxyz; 02183 nvoxel = option_data->nvoxel; 02184 02185 /*----- allocate memory space for calculations -----*/ 02186 fab = (float *) malloc(sizeof(float)*nxyz); 02187 msab = (float *) malloc(sizeof(float)*nxyz); 02188 if ((fab == NULL) || (msab == NULL)) 02189 ANOVA_error ("unable to allocate sufficient memory"); 02190 02191 /*----- calculate mean SS due to interaction -----*/ 02192 volume_read ("ssab", msab, nxyz); 02193 fval = 1.0 / ((a - 1.0)*(b - 1.0)); 02194 for (ixyz = 0; ixyz < nxyz; ixyz++) 02195 msab[ixyz] = msab[ixyz] * fval; /*--- MSAB = SSAB/((a-1)(b-1)) ---*/ 02196 if (nvoxel > 0) 02197 printf ("MSAB = %f \n", msab[nvoxel-1]); 02198 02199 /*----- calculate F-statistic -----*/ 02200 volume_read ("sse", fab, nxyz); 02201 fval = 1.0 / (a * b * (n-1)); 02202 for (ixyz = 0; ixyz < nxyz; ixyz++) 02203 { 02204 mse = fab[ixyz] * fval; /*--- MSE = SSE / (ab(n-1)) ---*/ 02205 if (mse < EPSILON) 02206 fab[ixyz] = 0.0; 02207 else 02208 fab[ixyz] = msab[ixyz] / mse; /*--- F = MSAB / MSE ---*/ 02209 } 02210 if (nvoxel > 0) 02211 printf ("FAB = %f \n", fab[nvoxel-1]); 02212 02213 /*----- write out afni data file -----*/ 02214 for (ixyz = 0; ixyz < nxyz; ixyz++) 02215 msab[ixyz] = sqrt(msab[ixyz]); /*-- msab now holds square root --*/ 02216 write_afni_data (option_data, option_data->fabname, 02217 msab, fab, (a-1)*(b-1), a*b*(n-1)); 02218 02219 /*----- release memory -----*/ 02220 free (msab); msab = NULL; 02221 free (fab); fab = NULL; 02222 02223 } |
|
Definition at line 2067 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, fb, anova_options::fbname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and write_afni_data().
02068 { 02069 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02070 float * msb = NULL; /* pointer to MSB data */ 02071 float * fb = NULL; /* pointer to F due to factor B */ 02072 int a; /* number of levels for factor A */ 02073 int b; /* number of levels for factor B */ 02074 int n; /* number of observations per cell */ 02075 int ixyz, nxyz; /* voxel counters */ 02076 int nvoxel; /* output voxel # */ 02077 int numdf; /* numerator degrees of freedom */ 02078 int dendf; /* denominator degrees of freedom */ 02079 float mse; /* mean square error */ 02080 float msab; /* mean square interaction */ 02081 02082 02083 /*----- initialize local variables -----*/ 02084 a = option_data->a; 02085 b = option_data->b; 02086 n = option_data->n; 02087 nxyz = option_data->nxyz; 02088 nvoxel = option_data->nvoxel; 02089 02090 /*----- allocate memory space for calculations -----*/ 02091 fb = (float *) malloc(sizeof(float)*nxyz); 02092 msb = (float *) malloc(sizeof(float)*nxyz); 02093 if ((fb == NULL) || (msb == NULL)) 02094 ANOVA_error ("unable to allocate sufficient memory"); 02095 02096 /*----- calculate mean SS due to factor B -----*/ 02097 volume_read ("ssb", msb, nxyz); 02098 numdf = b - 1; 02099 for (ixyz = 0; ixyz < nxyz; ixyz++) 02100 msb[ixyz] = msb[ixyz] / numdf; /*--- MSB = SSB / (b-1) ---*/ 02101 if (nvoxel > 0) 02102 printf ("MSB = %f \n", msb[nvoxel-1]); 02103 02104 /*----- calculate F-statistic -----*/ 02105 if ((option_data->model == 1) || (option_data->model == 3)) 02106 { 02107 /*----- fixed effects model or mixed effects model -----*/ 02108 volume_read ("sse", fb, nxyz); 02109 dendf = a * b * (n-1); 02110 for (ixyz = 0; ixyz < nxyz; ixyz++) 02111 { 02112 mse = fb[ixyz] / dendf; /*--- MSE = SSE / (ab(n-1)) ---*/ 02113 if (mse < EPSILON) 02114 fb[ixyz] = 0.0; 02115 else 02116 fb[ixyz] = msb[ixyz] / mse; /*--- F = MSB / MSE ---*/ 02117 } 02118 } 02119 else 02120 { 02121 /*----- random effects model -----*/ 02122 volume_read ("ssab", fb, nxyz); 02123 dendf = (a-1) * (b-1); 02124 for (ixyz = 0; ixyz < nxyz; ixyz++) 02125 { 02126 msab = fb[ixyz] / dendf; /*--- MSAB = SSAB / (a-1)(b-1) ---*/ 02127 if (msab < EPSILON) 02128 fb[ixyz] = 0.0; 02129 else 02130 fb[ixyz] = msb[ixyz] / msab; /*--- F = MSB / MSAB ---*/ 02131 } 02132 } 02133 02134 if (nvoxel > 0) 02135 printf ("FB = %f \n", fb[nvoxel-1]); 02136 02137 /*----- write out afni data file -----*/ 02138 for (ixyz = 0; ixyz < nxyz; ixyz++) 02139 msb[ixyz] = sqrt(msb[ixyz]); /*-- msb now holds square root --*/ 02140 write_afni_data (option_data, option_data->fbname, 02141 msb, fb, numdf, dendf); 02142 02143 /*----- this data file is no longer needed -----*/ 02144 volume_delete ("ssb"); 02145 02146 /*----- release memory -----*/ 02147 free (msb); msb = NULL; 02148 free (fb); fb = NULL; 02149 02150 } |
|
Definition at line 1877 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, anova_options::ftrname, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and write_afni_data(). Referenced by analyze_results().
01878 { 01879 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 01880 float * mstr = NULL; /* pointer to MSTR data */ 01881 float * ftr = NULL; /* pointer to F due-to-treatment */ 01882 int a; /* number of levels for factor A */ 01883 int b; /* number of levels for factor B */ 01884 int n; /* number of observations per cell */ 01885 int ixyz, nxyz; /* voxel counters */ 01886 int nvoxel; /* output voxel # */ 01887 float fval; /* float value used in calculations */ 01888 float mse; /* mean square error */ 01889 01890 01891 01892 /*----- initialize local variables -----*/ 01893 a = option_data->a; 01894 b = option_data->b; 01895 n = option_data->n; 01896 nxyz = option_data->nxyz; 01897 nvoxel = option_data->nvoxel; 01898 01899 /*----- allocate memory space for calculations -----*/ 01900 ftr = (float *) malloc(sizeof(float)*nxyz); 01901 mstr = (float *) malloc(sizeof(float)*nxyz); 01902 if ((ftr == NULL) || (mstr == NULL)) 01903 ANOVA_error ("unable to allocate sufficient memory"); 01904 01905 /*----- calculate mean SS due to treatments -----*/ 01906 volume_read ("sstr", mstr, nxyz); 01907 fval = 1.0 / (a*b - 1.0); 01908 for (ixyz = 0; ixyz < nxyz; ixyz++) 01909 mstr[ixyz] = mstr[ixyz] * fval; /*--- MSTR = SSTR / (ab-1) ---*/ 01910 if (nvoxel > 0) 01911 printf ("MSTR = %f \n", mstr[nvoxel-1]); 01912 01913 /*----- calculate F-statistic -----*/ 01914 volume_read ("sse", ftr, nxyz); 01915 fval = 1.0 / (a * b * (n-1)); 01916 for (ixyz = 0; ixyz < nxyz; ixyz++) 01917 { 01918 mse = ftr[ixyz] * fval; /*--- MSE = SSE / (ab(n-1)) ---*/ 01919 if (mse < EPSILON) 01920 ftr[ixyz] = 0.0; 01921 else 01922 ftr[ixyz] = mstr[ixyz] / mse; /*--- F = MSTR / MSE ---*/ 01923 } 01924 if (nvoxel > 0) 01925 printf ("FTR = %f \n", ftr[nvoxel-1]); 01926 01927 /*----- write out afni data file -----*/ 01928 for (ixyz = 0; ixyz < nxyz; ixyz++) 01929 mstr[ixyz] = sqrt(mstr[ixyz]); /*-- mstr now holds square root --*/ 01930 write_afni_data (option_data, option_data->ftrname, 01931 mstr, ftr, a*b-1, a*b*(n-1)); 01932 01933 /*----- this data file is no longer needed -----*/ 01934 volume_delete ("sstr"); 01935 01936 /*----- release memory -----*/ 01937 free (mstr); mstr = NULL; 01938 free (ftr); ftr = NULL; 01939 01940 } |
|
Definition at line 1317 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, and volume_write().
01318 { 01319 float * ss0 = NULL; /* pointer to output data */ 01320 float * ysum = NULL; /* pointer to sum over all observations */ 01321 int a; /* number of levels for factor A */ 01322 int b; /* number of levels for factor B */ 01323 int n; /* number of observations per cell */ 01324 int ixyz, nxyz; /* voxel counters */ 01325 int nvoxel; /* output voxel # */ 01326 int nval; /* divisor of sum */ 01327 char filename[MAX_NAME_LENGTH]; /* name of output file */ 01328 01329 01330 /*----- initialize local variables -----*/ 01331 a = option_data->a; 01332 b = option_data->b; 01333 n = option_data->n; 01334 nxyz = option_data->nxyz; 01335 nvoxel = option_data->nvoxel; 01336 nval = a * b * n; 01337 01338 /*----- allocate memory space for calculations -----*/ 01339 ss0 = (float *) malloc(sizeof(float)*nxyz); 01340 ysum = (float *) malloc(sizeof(float)*nxyz); 01341 if ((ss0 == NULL) || (ysum == NULL)) 01342 ANOVA_error ("unable to allocate sufficient memory"); 01343 01344 /*----- sum over all observations -----*/ 01345 calculate_sum (option_data, -1, -1, ysum); 01346 01347 /*----- calculate ss0 -----*/ 01348 for (ixyz = 0; ixyz < nxyz; ixyz++) 01349 ss0[ixyz] = ysum[ixyz] * ysum[ixyz] / nval; 01350 01351 01352 /*----- save the sum -----*/ 01353 if (nvoxel > 0) 01354 printf ("SS0 = %f \n", ss0[nvoxel-1]); 01355 strcpy (filename, "ss0"); 01356 volume_write (filename, ss0, nxyz); 01357 01358 01359 /*----- release memory -----*/ 01360 free (ysum); ysum = NULL; 01361 free (ss0); ss0 = NULL; 01362 01363 } |
|
Definition at line 1721 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01722 { 01723 float * y = NULL; /* input data pointer */ 01724 float * ssa = NULL; /* output data pointer */ 01725 int ixyz, nxyz; /* voxel counters */ 01726 int nvoxel; /* output voxel # */ 01727 01728 01729 /*----- assign local variables -----*/ 01730 nxyz = option_data->nxyz; 01731 nvoxel = option_data->nvoxel; 01732 01733 /*----- allocate memory space for calculations -----*/ 01734 ssa = (float *) malloc (sizeof(float)*nxyz); 01735 y = (float *) malloc (sizeof(float)*nxyz); 01736 if ((y == NULL) || (ssa == NULL)) 01737 ANOVA_error ("unable to allocate sufficient memory"); 01738 01739 01740 /*----- calculate SSA -----*/ 01741 volume_read ("ssi", ssa, nxyz); 01742 01743 volume_read ("ss0", y, nxyz); 01744 for (ixyz = 0; ixyz < nxyz; ixyz++) 01745 ssa[ixyz] -= y[ixyz]; 01746 01747 01748 /*----- protection against round-off error -----*/ 01749 for (ixyz = 0; ixyz < nxyz; ixyz++) 01750 if (ssa[ixyz] < 0.0) ssa[ixyz] = 0.0; 01751 01752 /*----- save factor A sum of squares -----*/ 01753 if (nvoxel > 0) 01754 printf ("SSA = %f \n", ssa[nvoxel-1]); 01755 volume_write ("ssa", ssa, nxyz); 01756 01757 /*----- release memory -----*/ 01758 free (y); y = NULL; 01759 free (ssa); ssa = NULL; 01760 01761 } |
|
Definition at line 1819 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01820 { 01821 float * y = NULL; /* input data pointer */ 01822 float * ssab = NULL; /* output data pointer */ 01823 int ixyz, nxyz; /* voxel counters */ 01824 int nvoxel; /* output voxel # */ 01825 01826 01827 /*----- assign local variables -----*/ 01828 nxyz = option_data->nxyz; 01829 nvoxel = option_data->nvoxel; 01830 01831 /*----- allocate memory space for calculations -----*/ 01832 ssab = (float *) malloc (sizeof(float)*nxyz); 01833 y = (float *) malloc (sizeof(float)*nxyz); 01834 if ((y == NULL) || (ssab == NULL)) 01835 ANOVA_error ("unable to allocate sufficient memory"); 01836 01837 01838 /*----- calculate SSAB -----*/ 01839 volume_read ("sstr", ssab, nxyz); 01840 01841 volume_read ("ssa", y, nxyz); 01842 for (ixyz = 0; ixyz < nxyz; ixyz++) 01843 ssab[ixyz] -= y[ixyz]; 01844 01845 volume_read ("ssb", y, nxyz); 01846 for (ixyz = 0; ixyz < nxyz; ixyz++) 01847 ssab[ixyz] -= y[ixyz]; 01848 01849 01850 /*----- protection against round-off error -----*/ 01851 for (ixyz = 0; ixyz < nxyz; ixyz++) 01852 if (ssab[ixyz] < 0.0) ssab[ixyz] = 0.0; 01853 01854 /*----- save factor A*B sum of squares -----*/ 01855 if (nvoxel > 0) 01856 printf ("SSAB = %f \n", ssab[nvoxel-1]); 01857 volume_write ("ssab", ssab, nxyz); 01858 01859 /*----- release memory -----*/ 01860 free (y); y = NULL; 01861 free (ssab); ssab = NULL; 01862 01863 } |
|
Definition at line 1770 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01771 { 01772 float * y = NULL; /* input data pointer */ 01773 float * ssb = NULL; /* output data pointer */ 01774 int ixyz, nxyz; /* voxel counters */ 01775 int nvoxel; /* output voxel # */ 01776 01777 01778 /*----- assign local variables -----*/ 01779 nxyz = option_data->nxyz; 01780 nvoxel = option_data->nvoxel; 01781 01782 /*----- allocate memory space for calculations -----*/ 01783 ssb = (float *) malloc (sizeof(float)*nxyz); 01784 y = (float *) malloc (sizeof(float)*nxyz); 01785 if ((y == NULL) || (ssb == NULL)) 01786 ANOVA_error ("unable to allocate sufficient memory"); 01787 01788 01789 /*----- calculate SSB -----*/ 01790 volume_read ("ssj", ssb, nxyz); 01791 01792 volume_read ("ss0", y, nxyz); 01793 for (ixyz = 0; ixyz < nxyz; ixyz++) 01794 ssb[ixyz] -= y[ixyz]; 01795 01796 01797 /*----- protection against round-off error -----*/ 01798 for (ixyz = 0; ixyz < nxyz; ixyz++) 01799 if (ssb[ixyz] < 0.0) ssb[ixyz] = 0.0; 01800 01801 /*----- save factor B sum of squares -----*/ 01802 if (nvoxel > 0) 01803 printf ("SSB = %f \n", ssb[nvoxel-1]); 01804 volume_write ("ssb", ssb, nxyz); 01805 01806 /*----- release memory -----*/ 01807 free (y); y = NULL; 01808 free (ssb); ssb = NULL; 01809 01810 } |
|
Definition at line 1623 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01624 { 01625 float * y = NULL; /* input data pointer */ 01626 float * sse = NULL; /* sse data pointer */ 01627 int ixyz, nxyz; /* voxel counters */ 01628 int nvoxel; /* output voxel # */ 01629 01630 01631 /*----- assign local variables -----*/ 01632 nxyz = option_data->nxyz; 01633 nvoxel = option_data->nvoxel; 01634 01635 /*----- allocate memory space for calculations -----*/ 01636 sse = (float *) malloc (sizeof(float)*nxyz); 01637 y = (float *) malloc (sizeof(float)*nxyz); 01638 if ((y == NULL) || (sse == NULL)) 01639 ANOVA_error ("unable to allocate sufficient memory"); 01640 01641 01642 /*----- calculate SSE -----*/ 01643 volume_read ("ssijk", sse, nxyz); 01644 01645 volume_read ("ssij", y, nxyz); 01646 for (ixyz = 0; ixyz < nxyz; ixyz++) 01647 sse[ixyz] -= y[ixyz]; 01648 01649 01650 /*----- protection against round-off error -----*/ 01651 for (ixyz = 0; ixyz < nxyz; ixyz++) 01652 if (sse[ixyz] < 0.0) sse[ixyz] = 0.0; 01653 01654 /*----- save error sum of squares -----*/ 01655 if (nvoxel > 0) 01656 printf ("SSE = %f \n", sse[nvoxel-1]); 01657 volume_write ("sse", sse, nxyz); 01658 01659 /*----- release memory -----*/ 01660 free (y); y = NULL; 01661 free (sse); sse = NULL; 01662 01663 } |
|
Definition at line 1372 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().
01373 { 01374 float * ssi = NULL; /* pointer to output data */ 01375 float * ysum = NULL; /* pointer to sum over observations */ 01376 int a; /* number of levels for factor A */ 01377 int b; /* number of levels for factor B */ 01378 int n; /* number of observations per cell */ 01379 int i; /* index for factor A levels */ 01380 int ixyz, nxyz; /* voxel counters */ 01381 int nvoxel; /* output voxel # */ 01382 int nval; /* divisor of sum */ 01383 char filename[MAX_NAME_LENGTH]; /* name of output file */ 01384 01385 01386 /*----- initialize local variables -----*/ 01387 a = option_data->a; 01388 b = option_data->b; 01389 n = option_data->n; 01390 nxyz = option_data->nxyz; 01391 nvoxel = option_data->nvoxel; 01392 nval = b * n; 01393 01394 /*----- allocate memory space for calculations -----*/ 01395 ssi = (float *) malloc(sizeof(float)*nxyz); 01396 ysum = (float *) malloc(sizeof(float)*nxyz); 01397 if ((ssi == NULL) || (ysum == NULL)) 01398 ANOVA_error ("unable to allocate sufficient memory"); 01399 01400 volume_zero (ssi, nxyz); 01401 01402 /*----- loop over levels of factor A -----*/ 01403 for (i = 0; i < a; i++) 01404 { 01405 /*----- sum over observations -----*/ 01406 calculate_sum (option_data, i, -1, ysum); 01407 01408 /*----- add to ssi -----*/ 01409 for (ixyz = 0; ixyz < nxyz; ixyz++) 01410 ssi[ixyz] += ysum[ixyz] * ysum[ixyz] / nval; 01411 } 01412 01413 /*----- save the sum -----*/ 01414 if (nvoxel > 0) 01415 printf ("SSI = %f \n", ssi[nvoxel-1]); 01416 strcpy (filename, "ssi"); 01417 volume_write (filename, ssi, nxyz); 01418 01419 01420 /*----- release memory -----*/ 01421 free (ysum); ysum = NULL; 01422 free (ssi); ssi = NULL; 01423 01424 } |
|
Definition at line 1494 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().
01495 { 01496 float * ssij = NULL; /* pointer to output data */ 01497 float * ysum = NULL; /* pointer to sum over observations */ 01498 int a; /* number of levels for factor A */ 01499 int b; /* number of levels for factor B */ 01500 int n; /* number of observations per cell */ 01501 int i, j; /* indices for factor A and B levels */ 01502 int ixyz, nxyz; /* voxel counters */ 01503 int nvoxel; /* output voxel # */ 01504 int nval; /* divisor of sum */ 01505 char filename[MAX_NAME_LENGTH]; /* name of output file */ 01506 01507 01508 /*----- initialize local variables -----*/ 01509 a = option_data->a; 01510 b = option_data->b; 01511 n = option_data->n; 01512 nxyz = option_data->nxyz; 01513 nvoxel = option_data->nvoxel; 01514 nval = n; 01515 01516 /*----- allocate memory space for calculations -----*/ 01517 ssij = (float *) malloc(sizeof(float)*nxyz); 01518 ysum = (float *) malloc(sizeof(float)*nxyz); 01519 if ((ssij == NULL) || (ysum == NULL)) 01520 ANOVA_error ("unable to allocate sufficient memory"); 01521 01522 volume_zero (ssij, nxyz); 01523 01524 /*----- loop over levels of factor A -----*/ 01525 for (i = 0; i < a; i++) 01526 { 01527 /*----- loop over levels of factor B -----*/ 01528 for (j = 0; j < b; j++) 01529 { 01530 /*----- sum over observations -----*/ 01531 calculate_sum (option_data, i, j, ysum); 01532 01533 /*----- add to ssij -----*/ 01534 for (ixyz = 0; ixyz < nxyz; ixyz++) 01535 ssij[ixyz] += ysum[ixyz] * ysum[ixyz] / nval; 01536 } 01537 } 01538 01539 /*----- save the sum -----*/ 01540 if (nvoxel > 0) 01541 printf ("SSIJ = %f \n", ssij[nvoxel-1]); 01542 strcpy (filename, "ssij"); 01543 volume_write (filename, ssij, nxyz); 01544 01545 01546 /*----- release memory -----*/ 01547 free (ysum); ysum = NULL; 01548 free (ssij); ssij = NULL; 01549 01550 } |
|
Definition at line 1559 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), volume_write(), volume_zero(), and anova_options::xname.
01560 { 01561 float * ssijk = NULL; /* pointer to output data */ 01562 float * y = NULL; /* pointer to input data */ 01563 int i; /* factor A level index */ 01564 int j; /* factor B level index */ 01565 int m; /* observation number index */ 01566 int a; /* number of levels for factor A */ 01567 int b; /* number of levels for factor B */ 01568 int n; /* number of observations per cell */ 01569 int ixyz, nxyz; /* voxel counters */ 01570 int nvoxel; /* output voxel # */ 01571 01572 01573 /*----- initialize local variables -----*/ 01574 a = option_data->a; 01575 b = option_data->b; 01576 n = option_data->n; 01577 nxyz = option_data->nxyz; 01578 nvoxel = option_data->nvoxel; 01579 01580 /*----- allocate memory space for calculations -----*/ 01581 ssijk = (float *) malloc(sizeof(float)*nxyz); 01582 y = (float *) malloc(sizeof(float)*nxyz); 01583 if ((ssijk == NULL) || (y == NULL)) 01584 ANOVA_error ("unable to allocate sufficient memory"); 01585 01586 01587 volume_zero (ssijk, nxyz); 01588 01589 for (i = 0; i < a; i++) 01590 { 01591 for (j = 0; j < b; j++) 01592 { 01593 for (m = 0; m < n; m++) 01594 { 01595 read_afni_data (option_data, 01596 option_data->xname[i][j][0][m], y); 01597 01598 for (ixyz = 0; ixyz < nxyz; ixyz++) 01599 ssijk[ixyz] += y[ixyz] * y[ixyz]; 01600 } 01601 } 01602 } 01603 01604 01605 /*----- save the sum -----*/ 01606 if (nvoxel > 0) 01607 printf ("SSIJK = %f \n", ssijk[nvoxel-1]); 01608 volume_write ("ssijk", ssijk, nxyz); 01609 01610 /*----- release memory -----*/ 01611 free (y); y = NULL; 01612 free (ssijk); ssijk = NULL; 01613 01614 } |
|
Definition at line 1433 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().
01434 { 01435 float * ssj = NULL; /* pointer to output data */ 01436 float * ysum = NULL; /* pointer to sum over observations */ 01437 int a; /* number of levels for factor A */ 01438 int b; /* number of levels for factor B */ 01439 int n; /* number of observations per cell */ 01440 int j; /* index for factor B levels */ 01441 int ixyz, nxyz; /* voxel counters */ 01442 int nvoxel; /* output voxel # */ 01443 int nval; /* divisor of sum */ 01444 char filename[MAX_NAME_LENGTH]; /* name of output file */ 01445 01446 01447 /*----- initialize local variables -----*/ 01448 a = option_data->a; 01449 b = option_data->b; 01450 n = option_data->n; 01451 nxyz = option_data->nxyz; 01452 nvoxel = option_data->nvoxel; 01453 nval = a * n; 01454 01455 /*----- allocate memory space for calculations -----*/ 01456 ssj = (float *) malloc(sizeof(float)*nxyz); 01457 ysum = (float *) malloc(sizeof(float)*nxyz); 01458 if ((ssj == NULL) || (ysum == NULL)) 01459 ANOVA_error ("unable to allocate sufficient memory"); 01460 01461 volume_zero (ssj, nxyz); 01462 01463 /*----- loop over levels of factor B -----*/ 01464 for (j = 0; j < b; j++) 01465 { 01466 /*----- sum over observations -----*/ 01467 calculate_sum (option_data, -1, j, ysum); 01468 01469 /*----- add to ssj -----*/ 01470 for (ixyz = 0; ixyz < nxyz; ixyz++) 01471 ssj[ixyz] += ysum[ixyz] * ysum[ixyz] / nval; 01472 } 01473 01474 /*----- save the sum -----*/ 01475 if (nvoxel > 0) 01476 printf ("SSJ = %f \n", ssj[nvoxel-1]); 01477 strcpy (filename, "ssj"); 01478 volume_write (filename, ssj, nxyz); 01479 01480 01481 /*----- release memory -----*/ 01482 free (ysum); ysum = NULL; 01483 free (ssj); ssj = NULL; 01484 01485 } |
|
Definition at line 1672 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write(). Referenced by calculate_anova().
01673 { 01674 float * y = NULL; /* input data pointer */ 01675 float * sstr = NULL; /* sstr data pointer */ 01676 int ixyz, nxyz; /* voxel counters */ 01677 int nvoxel; /* output voxel # */ 01678 01679 01680 /*----- assign local variables -----*/ 01681 nxyz = option_data->nxyz; 01682 nvoxel = option_data->nvoxel; 01683 01684 /*----- allocate memory space for calculations -----*/ 01685 sstr = (float *) malloc (sizeof(float)*nxyz); 01686 y = (float *) malloc (sizeof(float)*nxyz); 01687 if ((y == NULL) || (sstr == NULL)) 01688 ANOVA_error ("unable to allocate sufficient memory"); 01689 01690 01691 /*----- calculate SSTR -----*/ 01692 volume_read ("ssij", sstr, nxyz); 01693 01694 volume_read ("ss0", y, nxyz); 01695 for (ixyz = 0; ixyz < nxyz; ixyz++) 01696 sstr[ixyz] -= y[ixyz]; 01697 01698 01699 /*----- protection against round-off error -----*/ 01700 for (ixyz = 0; ixyz < nxyz; ixyz++) 01701 if (sstr[ixyz] < 0.0) sstr[ixyz] = 0.0; 01702 01703 /*----- save error sum of squares -----*/ 01704 if (nvoxel > 0) 01705 printf ("SSTR = %f \n", sstr[nvoxel-1]); 01706 volume_write ("sstr", sstr, nxyz); 01707 01708 /*----- release memory -----*/ 01709 free (y); y = NULL; 01710 free (sstr); sstr = NULL; 01711 01712 } |
|
Definition at line 961 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), volume_zero(), and anova_options::xname.
00963 { 00964 float * y = NULL; /* pointer to input data */ 00965 int i, itop, ibot; /* factor A level index */ 00966 int j, jtop, jbot; /* factor B level index */ 00967 int m; /* observation number index */ 00968 int a; /* number of levels for factor A */ 00969 int b; /* number of levels for factor B */ 00970 int n; /* number of observations per cell */ 00971 int ixyz, nxyz; /* voxel counters */ 00972 int nvoxel; /* output voxel # */ 00973 char sum_label[MAX_NAME_LENGTH]; /* name of sum for print to screen */ 00974 char str[MAX_NAME_LENGTH]; /* temporary string */ 00975 00976 00977 /*----- initialize local variables -----*/ 00978 a = option_data->a; 00979 b = option_data->b; 00980 n = option_data->n; 00981 nxyz = option_data->nxyz; 00982 nvoxel = option_data->nvoxel; 00983 00984 /*----- allocate memory space for calculations -----*/ 00985 y = (float *) malloc(sizeof(float)*nxyz); 00986 if (y == NULL) ANOVA_error ("unable to allocate sufficient memory"); 00987 00988 00989 /*----- set up summation limits -----*/ 00990 if (ii < 0) 00991 { ibot = 0; itop = a; } 00992 else 00993 { ibot = ii; itop = ii+1; } 00994 00995 if (jj < 0) 00996 { jbot = 0; jtop = b; } 00997 else 00998 { jbot = jj; jtop = jj+1; } 00999 01000 01001 volume_zero (ysum, nxyz); 01002 01003 /*----- loop over levels of factor A -----*/ 01004 for (i = ibot; i < itop; i++) 01005 { 01006 /*----- loop over levels of factor B -----*/ 01007 for (j = jbot; j < jtop; j++) 01008 { 01009 /*----- sum observations within this cell -----*/ 01010 for (m = 0; m < n; m++) 01011 { 01012 read_afni_data (option_data, 01013 option_data->xname[i][j][0][m], y); 01014 if (nvoxel > 0) 01015 printf ("y[%d][%d][%d] = %f \n", 01016 i+1, j+1, m+1, y[nvoxel-1]); 01017 for (ixyz = 0; ixyz < nxyz; ixyz++) 01018 ysum[ixyz] += y[ixyz]; 01019 } /* m */ 01020 } /* j */ 01021 } /* i */ 01022 01023 01024 /*----- print the sum for this cell -----*/ 01025 if (nvoxel > 0) 01026 { 01027 strcpy (sum_label, "y"); 01028 if (ii < 0) 01029 strcat (sum_label, "[.]"); 01030 else 01031 { 01032 sprintf (str, "[%d]", ii+1); 01033 strcat (sum_label, str); 01034 } 01035 if (jj < 0) 01036 strcat (sum_label, "[.]"); 01037 else 01038 { 01039 sprintf (str, "[%d]", jj+1); 01040 strcat (sum_label, str); 01041 } 01042 printf ("%s[.] = %f \n", sum_label, ysum[nvoxel-1]); 01043 } 01044 01045 /*----- release memory -----*/ 01046 free (y); y = NULL; 01047 01048 } |
|
Definition at line 1100 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), and anova_options::xname. Referenced by calculate_ameans().
01102 { 01103 double * yd = NULL; /* for accuracy */ 01104 float * y = NULL; /* pointer to input data */ 01105 int i, itop, ibot; /* factor A level index */ 01106 int j, jtop, jbot; /* factor B level index */ 01107 int m; /* observation number index */ 01108 int a; /* number of levels for factor A */ 01109 int b; /* number of levels for factor B */ 01110 int n; /* number of observations per cell */ 01111 int ixyz, nxyz; /* voxel counters */ 01112 int nvoxel; /* output voxel # */ 01113 char sum_label[MAX_NAME_LENGTH]; /* name of sum for print to screen */ 01114 char str[MAX_NAME_LENGTH]; /* temporary string */ 01115 01116 01117 /*----- initialize local variables -----*/ 01118 a = option_data->a; 01119 b = option_data->b; 01120 n = option_data->n; 01121 nxyz = option_data->nxyz; 01122 nvoxel = option_data->nvoxel; 01123 01124 /*----- allocate memory space for calculations -----*/ 01125 y = (float *) malloc(sizeof(float)*nxyz); 01126 yd = (double *) malloc(sizeof(double)*nxyz); 01127 if (!y || !yd) ANOVA_error ("sum_sq: unable to allocate sufficient memory"); 01128 01129 /*----- set up summation limits -----*/ 01130 if (ii < 0) { ibot = 0; itop = a; } 01131 else { ibot = ii; itop = ii+1; } 01132 01133 if (jj < 0) { jbot = 0; jtop = b; } 01134 else { jbot = jj; jtop = jj+1; } 01135 01136 for (ixyz = 0; ixyz < nxyz; ixyz++) /* init to zero */ 01137 yd[ixyz] = 0.0; 01138 01139 /*----- loop over levels of factor A -----*/ 01140 for (i = ibot; i < itop; i++) 01141 /*----- loop over levels of factor B -----*/ 01142 for (j = jbot; j < jtop; j++) 01143 /*----- sum observations within this cell -----*/ 01144 for (m = 0; m < n; m++) 01145 { 01146 read_afni_data (option_data, option_data->xname[i][j][0][m], y); 01147 if (nvoxel > 0) 01148 printf ("y[%d][%d][%d] = %f \n", i+1, j+1, m+1, y[nvoxel-1]); 01149 for (ixyz = 0; ixyz < nxyz; ixyz++) 01150 yd[ixyz] += y[ixyz] * y[ixyz]; 01151 } 01152 01153 /*----- now copy results to float output -----*/ 01154 for (ixyz = 0; ixyz < nxyz; ixyz++) 01155 ysum[ixyz] = yd[ixyz]; 01156 01157 /*----- print the sum for this cell -----*/ 01158 if (nvoxel > 0) 01159 { 01160 strcpy (sum_label, "y"); 01161 if (ii < 0) 01162 strcat (sum_label, "[.]"); 01163 else 01164 { 01165 sprintf (str, "[%d]", ii+1); 01166 strcat (sum_label, str); 01167 } 01168 if (jj < 0) 01169 strcat (sum_label, "[.]"); 01170 else 01171 { 01172 sprintf (str, "[%d]", jj+1); 01173 strcat (sum_label, str); 01174 } 01175 printf ("%s_squares[.] = %f \n", sum_label, ysum[nvoxel-1]); 01176 } 01177 01178 /*----- release memory -----*/ 01179 free (y); y = NULL; 01180 free (yd); yd = NULL; 01181 } |
|
Definition at line 1065 of file 3dANOVA2.c. References mp. Referenced by calculate_acontrasts(), calculate_adifferences(), and calculate_ameans().
01067 { 01068 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 01069 double dval; 01070 float *res, *mp, *ssp, sval; 01071 int index, df_prod; 01072 01073 /* set df_prod and use pointers, for slight speed improvement */ 01074 df_prod = df * (df + 1); 01075 01076 res = result; 01077 mp = mean; 01078 ssp = sum_sq; 01079 for (index = 0; index < nvox; index++) 01080 { 01081 sval = *mp; /* for repeated use */ 01082 dval = *ssp - (df+1.0) * sval * sval; 01083 01084 if (dval < EPSILON) *res = 0.0; 01085 else *res = sval * sqrt( df_prod / dval ); 01086 01087 res++; mp++; ssp++; 01088 } 01089 } |
|
Definition at line 2982 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, c, calculate_sum(), free, malloc, anova_options::n, anova_options::num_xcontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_zero(), write_afni_data(), anova_options::xcname, and anova_options::xcontr. Referenced by analyze_results().
02983 { 02984 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02985 float * contr = NULL; /* pointer to contrast estimate */ 02986 float * tcontr = NULL; /* pointer to t-statistic data */ 02987 int a; /* number of levels for factor A */ 02988 int b; /* number of levels for factor B */ 02989 int ixyz, nxyz; /* voxel counters */ 02990 int nvoxel; /* output voxel # */ 02991 int num_contr; /* number of user requested contrasts */ 02992 int icontr; /* index of user requested contrast */ 02993 int ilevel, jlevel; /* factor level indices */ 02994 int df; /* degrees of freedom for t-test */ 02995 int n; /* number of observations per cell */ 02996 float fval; /* for calculating std. dev. */ 02997 float c; /* contrast coefficient */ 02998 float stddev; /* est. std. dev. of contrast */ 02999 03000 03001 /*----- initialize local variables -----*/ 03002 a = option_data->a; 03003 b = option_data->b; 03004 n = option_data->n; 03005 num_contr = option_data->num_xcontr; 03006 nxyz = option_data->nxyz; 03007 nvoxel = option_data->nvoxel; 03008 03009 /*----- allocate memory space for calculations -----*/ 03010 contr = (float *) malloc(sizeof(float)*nxyz); 03011 tcontr = (float *) malloc(sizeof(float)*nxyz); 03012 if ((contr == NULL) || (tcontr == NULL)) 03013 ANOVA_error ("unable to allocate sufficient memory"); 03014 03015 03016 /*----- loop over user specified constrasts -----*/ 03017 for (icontr = 0; icontr < num_contr; icontr++) 03018 { 03019 volume_zero (contr, nxyz); 03020 fval = 0.0; 03021 03022 for (ilevel = 0; ilevel < a; ilevel++) 03023 for (jlevel = 0; jlevel < b; jlevel++) 03024 { 03025 c = option_data->xcontr[icontr][ilevel][jlevel]; 03026 if (c == 0.0) continue; 03027 03028 /*----- add c * cell mean to contrast -----*/ 03029 calculate_sum (option_data, ilevel, jlevel, tcontr); 03030 fval += c * c / n; 03031 for (ixyz = 0; ixyz < nxyz; ixyz++) 03032 contr[ixyz] += c * tcontr[ixyz] / n; 03033 } 03034 if (nvoxel > 0) 03035 printf ("No.%d contrast for cell means = %f \n", 03036 icontr+1, contr[nvoxel-1]); 03037 03038 /*----- divide by estimated standard deviation of the contrast -----*/ 03039 volume_read ("sse", tcontr, nxyz); 03040 df = a * b * (n-1); 03041 for (ixyz = 0; ixyz < nxyz; ixyz++) 03042 { 03043 stddev = sqrt ((tcontr[ixyz] / df) * fval); 03044 if (stddev < EPSILON) 03045 tcontr[ixyz] = 0.0; 03046 else 03047 tcontr[ixyz] = contr[ixyz] / stddev; 03048 } 03049 03050 if (nvoxel > 0) 03051 printf ("t-stat for No.%d contrast for cell means = %f \n", 03052 icontr+1, tcontr[nvoxel-1]); 03053 03054 /*----- write out afni data file -----*/ 03055 write_afni_data (option_data, option_data->xcname[icontr], 03056 contr, tcontr, a*b*(n-1), 0); 03057 03058 } 03059 03060 /*----- release memory -----*/ 03061 free (tcontr); tcontr = NULL; 03062 free (contr); contr = NULL; 03063 03064 } |
|
Definition at line 2704 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::num_xdiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), write_afni_data(), anova_options::xdiffs, and anova_options::xdname.
02705 { 02706 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02707 float * diff = NULL; /* pointer to est. diff. in means */ 02708 float * tdiff = NULL; /* pointer to t-statistic data */ 02709 int a; /* number of levels for factor A */ 02710 int b; /* number of levels for factor B */ 02711 int ixyz, nxyz; /* voxel counters */ 02712 int nvoxel; /* output voxel # */ 02713 int num_diffs; /* number of user requested diffs. */ 02714 int idiff; /* index for requested differences */ 02715 int ia, ib, ja, jb; /* cell indices */ 02716 int n; /* number of observations per cell */ 02717 int df; /* degrees of freedom for t-test */ 02718 float fval; /* for calculating std. dev. */ 02719 float stddev; /* est. std. dev. of difference */ 02720 02721 02722 /*----- initialize local variables -----*/ 02723 a = option_data->a; 02724 b = option_data->b; 02725 n = option_data->n; 02726 df = a*b*(n-1); 02727 num_diffs = option_data->num_xdiffs; 02728 nxyz = option_data->nxyz; 02729 nvoxel = option_data->nvoxel; 02730 02731 /*----- allocate memory space for calculations -----*/ 02732 diff = (float *) malloc(sizeof(float)*nxyz); 02733 tdiff = (float *) malloc(sizeof(float)*nxyz); 02734 if ((diff == NULL) || (tdiff == NULL)) 02735 ANOVA_error ("unable to allocate sufficient memory"); 02736 02737 /*----- loop over user specified treatment differences -----*/ 02738 for (idiff = 0; idiff < num_diffs; idiff++) 02739 { 02740 02741 /*----- calculate first cell mean -----*/ 02742 ia = option_data->xdiffs[idiff][0][0]; 02743 ib = option_data->xdiffs[idiff][0][1]; 02744 calculate_sum (option_data, ia, ib, diff); 02745 for (ixyz = 0; ixyz < nxyz; ixyz++) 02746 diff[ixyz] = diff[ixyz] / n; 02747 02748 /*----- subtract second cell mean -----*/ 02749 ja = option_data->xdiffs[idiff][1][0]; 02750 jb = option_data->xdiffs[idiff][1][1]; 02751 calculate_sum (option_data, ja, jb, tdiff); 02752 for (ixyz = 0; ixyz < nxyz; ixyz++) 02753 diff[ixyz] -= tdiff[ixyz] / n; 02754 if (nvoxel > 0) 02755 printf ("Difference of Cell[%d][%d] - Cell[%d][%d] = %f \n", 02756 ia+1, ib+1, ja+1, jb+1, diff[nvoxel-1]); 02757 02758 /*----- divide by estimated standard deviation of difference -----*/ 02759 volume_read ("sse", tdiff, nxyz); 02760 fval = (1.0 / df) * (2.0 / n); 02761 for (ixyz = 0; ixyz < nxyz; ixyz++) 02762 { 02763 stddev = sqrt (tdiff[ixyz] * fval); 02764 if (stddev < EPSILON) 02765 tdiff[ixyz] = 0.0; 02766 else 02767 tdiff[ixyz] = diff[ixyz] / stddev; 02768 } 02769 02770 if (nvoxel > 0) 02771 printf ("t-stat for Cell[%d][%d] - Cell[%d][%d] = %f \n", 02772 ia+1, ib+1, ja+1, jb+1, tdiff[nvoxel-1]); 02773 02774 /*----- write out afni data file -----*/ 02775 write_afni_data (option_data, option_data->xdname[idiff], 02776 diff, tdiff, df, 0); 02777 02778 } 02779 02780 /*----- release memory -----*/ 02781 free (tdiff); tdiff = NULL; 02782 free (diff); diff = NULL; 02783 02784 } |
|
Definition at line 2421 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::nt, anova_options::num_xmeans, anova_options::nvoxel, anova_options::nxyz, volume_read(), write_afni_data(), anova_options::xmeans, and anova_options::xmname.
02422 { 02423 const float EPSILON = 1.0e-10; /* protect against divide by zero */ 02424 float * mean = NULL; /* pointer to treatment mean data */ 02425 float * tmean = NULL; /* pointer to t-statistic data */ 02426 int imean; /* output mean option index */ 02427 int alevel; /* factor A level index */ 02428 int blevel; /* factor B level index */ 02429 int n; /* number of observations per cell */ 02430 int ixyz, nxyz; /* voxel counters */ 02431 int nvoxel; /* output voxel # */ 02432 int a; /* number of levels for factor A */ 02433 int b; /* number of levels for factor B */ 02434 int nt; /* total number of observations */ 02435 int num_means; /* number of user requested means */ 02436 int df; /* degrees of freedom for t-test */ 02437 float fval; /* for calculating std. dev. */ 02438 float stddev; /* est. std. dev. of cell mean */ 02439 02440 02441 /*----- initialize local variables -----*/ 02442 a = option_data->a; 02443 b = option_data->b; 02444 n = option_data->n; 02445 df = a * b * (n-1); 02446 nt = option_data->nt; 02447 num_means = option_data->num_xmeans; 02448 nxyz = option_data->nxyz; 02449 nvoxel = option_data->nvoxel; 02450 02451 /*----- allocate memory space for calculations -----*/ 02452 mean = (float *) malloc(sizeof(float)*nxyz); 02453 tmean = (float *) malloc(sizeof(float)*nxyz); 02454 if ((mean == NULL) || (tmean == NULL)) 02455 ANOVA_error ("unable to allocate sufficient memory"); 02456 02457 /*----- loop over user specified treatment means -----*/ 02458 for (imean = 0; imean < num_means; imean++) 02459 { 02460 alevel = option_data->xmeans[imean][0]; 02461 blevel = option_data->xmeans[imean][1]; 02462 02463 /*----- estimate mean for this cell -----*/ 02464 calculate_sum (option_data, alevel, blevel, mean); 02465 for (ixyz = 0; ixyz < nxyz; ixyz++) 02466 mean[ixyz] = mean[ixyz] / n; 02467 if (nvoxel > 0) 02468 printf ("Mean of Cell[%d][%d] = %f \n", 02469 alevel+1, blevel+1, mean[nvoxel-1]); 02470 02471 /*----- divide by estimated standard deviation of cell mean -----*/ 02472 volume_read ("sse", tmean, nxyz); 02473 fval = (1.0 / df) * (1.0 / n); 02474 for (ixyz = 0; ixyz < nxyz; ixyz++) 02475 { 02476 stddev = sqrt(tmean[ixyz] * fval); 02477 if (stddev < EPSILON) 02478 tmean[ixyz] = 0.0; 02479 else 02480 tmean[ixyz] = mean[ixyz] / stddev; 02481 } 02482 if (nvoxel > 0) 02483 printf ("t-stat for Mean of Cell[%d][%d] = %f \n", 02484 alevel+1, blevel+1, tmean[nvoxel-1]); 02485 02486 /*----- write out afni data file -----*/ 02487 write_afni_data (option_data, option_data->xmname[imean], 02488 mean, tmean, df, 0); 02489 02490 } 02491 02492 /*----- release memory -----*/ 02493 free (tmean); tmean = NULL; 02494 free (mean); mean = NULL; 02495 } |
|
Definition at line 788 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::model, anova_options::n, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, and anova_options::num_xmeans.
00789 { 00790 int a, b; /* number of factor levels */ 00791 int n; /* number of observations per cell */ 00792 00793 00794 /*----- initialize local variables -----*/ 00795 a = option_data->a; 00796 b = option_data->b; 00797 n = option_data->n; 00798 00799 00800 /*----- check for valid inputs -----*/ 00801 if (a < 2) ANOVA_error ("must specify number of factor A levels (a>1) "); 00802 if (b < 2) ANOVA_error ("must specify number of factor B levels (b>1) "); 00803 if (n < 1) ANOVA_error ("sample size is too small"); 00804 00805 switch (option_data->model) 00806 { 00807 case 1: /* fixed effects */ 00808 if (n == 1) 00809 ANOVA_error ("sample size is too small for fixed effects model"); 00810 break; 00811 case 2: /* random effects */ 00812 if (option_data->nftr > 0) 00813 ANOVA_error ("-ftr is inappropriate for random effects model"); 00814 if (option_data->num_ameans > 0) 00815 ANOVA_error ("-amean is inappropriate for random effects model"); 00816 if (option_data->num_bmeans > 0) 00817 ANOVA_error ("-bmean is inappropriate for random effects model"); 00818 if (option_data->num_xmeans > 0) 00819 ANOVA_error ("-xmean is inappropriate for random effects model"); 00820 if (option_data->num_adiffs > 0) 00821 ANOVA_error ("-adiff is inappropriate for random effects model"); 00822 if (option_data->num_bdiffs > 0) 00823 ANOVA_error ("-bdiff is inappropriate for random effects model"); 00824 if (option_data->num_xdiffs > 0) 00825 ANOVA_error ("-xdiff is inappropriate for random effects model"); 00826 if (option_data->num_acontr > 0) 00827 ANOVA_error ("-acontr is inappropriate for random effects model"); 00828 if (option_data->num_bcontr > 0) 00829 ANOVA_error ("-bcontr is inappropriate for random effects model"); 00830 if (option_data->num_xcontr > 0) 00831 ANOVA_error ("-xcontr is inappropriate for random effects model"); 00832 if ((n == 1) && (option_data->nfab > 0)) 00833 ANOVA_error ("sample size too small to calculate F-interaction"); 00834 break; 00835 case 3: /* mixed effects */ 00836 if (option_data->nftr > 0) 00837 ANOVA_error ("-ftr is inappropriate for mixed effects model"); 00838 if (option_data->num_bmeans > 0) 00839 ANOVA_error ("-bmean is inappropriate for mixed effects model"); 00840 if (option_data->num_xmeans > 0) 00841 ANOVA_error ("-xmean is inappropriate for mixed effects model"); 00842 if (option_data->num_bdiffs > 0) 00843 ANOVA_error ("-bdiff is inappropriate for mixed effects model"); 00844 if (option_data->num_xdiffs > 0) 00845 ANOVA_error ("-xdiff is inappropriate for mixed effects model"); 00846 if (option_data->num_bcontr > 0) 00847 ANOVA_error ("-bcontr is inappropriate for mixed effects model"); 00848 if (option_data->num_xcontr > 0) 00849 ANOVA_error ("-xcontr is inappropriate for mixed effects model"); 00850 if ((n == 1) && (option_data->nfab > 0)) 00851 ANOVA_error ("sample size too small to calculate F-interaction"); 00852 if ((n == 1) && (option_data->nfb > 0)) 00853 ANOVA_error ("sample size too small to calculate F for B effect"); 00854 break; 00855 } 00856 00857 } |
|
Definition at line 725 of file 3dANOVA2.c. References anova_options::acname, anova_options::adname, anova_options::amname, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, check_one_output_file(), anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::ftrname, i, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::xcname, anova_options::xdname, and anova_options::xmname.
00726 { 00727 int i; /* index */ 00728 00729 if (option_data->nftr > 0) 00730 check_one_output_file (option_data, option_data->ftrname); 00731 00732 if (option_data->nfa > 0) 00733 check_one_output_file (option_data, option_data->faname); 00734 00735 if (option_data->nfb > 0) 00736 check_one_output_file (option_data, option_data->fbname); 00737 00738 if (option_data->nfab > 0) 00739 check_one_output_file (option_data, option_data->fabname); 00740 00741 if (option_data->num_ameans > 0) 00742 for (i = 0; i < option_data->num_ameans; i++) 00743 check_one_output_file (option_data, option_data->amname[i]); 00744 00745 if (option_data->num_bmeans > 0) 00746 for (i = 0; i < option_data->num_bmeans; i++) 00747 check_one_output_file (option_data, option_data->bmname[i]); 00748 00749 if (option_data->num_xmeans > 0) 00750 for (i = 0; i < option_data->num_xmeans; i++) 00751 check_one_output_file (option_data, option_data->xmname[i]); 00752 00753 if (option_data->num_adiffs > 0) 00754 for (i = 0; i < option_data->num_adiffs; i++) 00755 check_one_output_file (option_data, option_data->adname[i]); 00756 00757 if (option_data->num_bdiffs > 0) 00758 for (i = 0; i < option_data->num_bdiffs; i++) 00759 check_one_output_file (option_data, option_data->bdname[i]); 00760 00761 if (option_data->num_xdiffs > 0) 00762 for (i = 0; i < option_data->num_xdiffs; i++) 00763 check_one_output_file (option_data, option_data->xdname[i]); 00764 00765 if (option_data->num_acontr > 0) 00766 for (i = 0; i < option_data->num_acontr; i++) 00767 check_one_output_file (option_data, option_data->acname[i]); 00768 00769 if (option_data->num_bcontr > 0) 00770 for (i = 0; i < option_data->num_bcontr; i++) 00771 check_one_output_file (option_data, option_data->bcname[i]); 00772 00773 if (option_data->num_xcontr > 0) 00774 for (i = 0; i < option_data->num_xcontr; i++) 00775 check_one_output_file (option_data, option_data->xcname[i]); 00776 00777 if (option_data->bucket_filename != NULL) 00778 check_one_output_file (option_data, option_data->bucket_filename); 00779 00780 } |
|
Definition at line 703 of file 3dANOVA2.c. References check_one_temporary_file().
00704 { 00705 00706 check_one_temporary_file ("ss0"); 00707 check_one_temporary_file ("ssi"); 00708 check_one_temporary_file ("ssj"); 00709 check_one_temporary_file ("ssij"); 00710 check_one_temporary_file ("ssijk"); 00711 00712 check_one_temporary_file ("sse"); 00713 check_one_temporary_file ("sstr"); 00714 check_one_temporary_file ("ssa"); 00715 check_one_temporary_file ("ssb"); 00716 check_one_temporary_file ("ssab"); 00717 } |
|
Definition at line 3165 of file 3dANOVA2.c. References anova_options::acname, add_file_name(), ADN_directory_name, ADN_none, anova_options::adname, anova_options::amname, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, DSET_IS_1D, DSET_IS_3D, EDIT_dset_items(), EDIT_empty_copy(), anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::first_dataset, anova_options::ftrname, i, ISVALID_3DIM_DATASET, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), anova_options::xcname, anova_options::xdname, and anova_options::xmname.
03167 { 03168 char bucket_str[10000]; /* command line for program 3dbucket */ 03169 char refit_str[10000]; /* command line for program 3drefit */ 03170 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */ 03171 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */ 03172 int i; /* file index */ 03173 int ibrick; /* sub-brick index number */ 03174 char str[100]; /* temporary character string */ 03175 03176 03177 /*----- read first dataset -----*/ 03178 dset = THD_open_dataset (option_data->first_dataset) ; 03179 if( ! ISVALID_3DIM_DATASET(dset) ){ 03180 fprintf(stderr,"*** Unable to open dataset file %s\n", 03181 option_data->first_dataset); 03182 exit(1) ; 03183 } 03184 03185 if( DSET_IS_1D(dset) ) USE_1D_filenames(1) ; /* 14 Mar 2003 */ 03186 else if( DSET_IS_3D(dset) ) USE_1D_filenames(3) ; /* 21 Mar 2003 */ 03187 03188 03189 /*----- make an empty copy of this dataset -----*/ 03190 new_dset = EDIT_empty_copy( dset ) ; 03191 THD_delete_3dim_dataset (dset , False); dset = NULL; 03192 EDIT_dset_items (new_dset, 03193 ADN_directory_name, option_data->session, 03194 ADN_none); 03195 03196 03197 /*----- begin command line for program 3dbucket -----*/ 03198 strcpy (bucket_str, "3dbucket"); 03199 strcat (bucket_str, " -prefix "); 03200 strcat (bucket_str, option_data->bucket_filename); 03201 03202 03203 /*----- begin command line for program 3drefit -----*/ 03204 strcpy (refit_str, "3drefit "); 03205 ibrick = -1; 03206 03207 03208 /*----- make F-stat for treatment sub-bricks -----*/ 03209 if (option_data->nftr != 0) 03210 { 03211 add_file_name (new_dset, option_data->ftrname, bucket_str); 03212 03213 ibrick++; 03214 sprintf (str, " -sublabel %d %s:Inten ", 03215 ibrick, option_data->ftrname); 03216 strcat (refit_str, str); 03217 03218 ibrick++; 03219 sprintf (str, " -sublabel %d %s:F-stat ", 03220 ibrick, option_data->ftrname); 03221 strcat (refit_str, str); 03222 } 03223 03224 03225 /*----- make F-stat for factor A sub-bricks -----*/ 03226 if (option_data->nfa != 0) 03227 { 03228 add_file_name (new_dset, option_data->faname, bucket_str); 03229 03230 ibrick++; 03231 sprintf (str, " -sublabel %d %s:Inten ", 03232 ibrick, option_data->faname); 03233 strcat (refit_str, str); 03234 03235 ibrick++; 03236 sprintf (str, " -sublabel %d %s:F-stat ", 03237 ibrick, option_data->faname); 03238 strcat (refit_str, str); 03239 } 03240 03241 03242 /*----- make F-stat for factor B sub-bricks -----*/ 03243 if (option_data->nfb != 0) 03244 { 03245 add_file_name (new_dset, option_data->fbname, bucket_str); 03246 03247 ibrick++; 03248 sprintf (str, " -sublabel %d %s:Inten ", 03249 ibrick, option_data->fbname); 03250 strcat (refit_str, str); 03251 03252 ibrick++; 03253 sprintf (str, " -sublabel %d %s:F-stat ", 03254 ibrick, option_data->fbname); 03255 strcat (refit_str, str); 03256 } 03257 03258 03259 /*----- make F-stat for A*B interaction sub-bricks -----*/ 03260 if (option_data->nfab != 0) 03261 { 03262 add_file_name (new_dset, option_data->fabname, bucket_str); 03263 03264 ibrick++; 03265 sprintf (str, " -sublabel %d %s:Inten ", 03266 ibrick, option_data->fabname); 03267 strcat (refit_str, str); 03268 03269 ibrick++; 03270 sprintf (str, " -sublabel %d %s:F-stat ", 03271 ibrick, option_data->fabname); 03272 strcat (refit_str, str); 03273 } 03274 03275 03276 /*----- make factor A level mean sub-bricks -----*/ 03277 if (option_data->num_ameans > 0) 03278 for (i = 0; i < option_data->num_ameans; i++) 03279 { 03280 add_file_name (new_dset, option_data->amname[i], bucket_str); 03281 03282 ibrick++; 03283 sprintf (str, " -sublabel %d %s:Mean ", 03284 ibrick, option_data->amname[i]); 03285 strcat (refit_str, str); 03286 03287 ibrick++; 03288 sprintf (str, " -sublabel %d %s:t-stat ", 03289 ibrick, option_data->amname[i]); 03290 strcat (refit_str, str); 03291 } 03292 03293 03294 /*----- make factor B level mean sub-bricks -----*/ 03295 if (option_data->num_bmeans > 0) 03296 for (i = 0; i < option_data->num_bmeans; i++) 03297 { 03298 add_file_name (new_dset, option_data->bmname[i], bucket_str); 03299 03300 ibrick++; 03301 sprintf (str, " -sublabel %d %s:Mean ", 03302 ibrick, option_data->bmname[i]); 03303 strcat (refit_str, str); 03304 03305 ibrick++; 03306 sprintf (str, " -sublabel %d %s:t-stat ", 03307 ibrick, option_data->bmname[i]); 03308 strcat (refit_str, str); 03309 } 03310 03311 03312 /*----- make individual cell mean sub-bricks -----*/ 03313 if (option_data->num_xmeans > 0) 03314 for (i = 0; i < option_data->num_xmeans; i++) 03315 { 03316 add_file_name (new_dset, option_data->xmname[i], bucket_str); 03317 03318 ibrick++; 03319 sprintf (str, " -sublabel %d %s:Mean ", 03320 ibrick, option_data->xmname[i]); 03321 strcat (refit_str, str); 03322 03323 ibrick++; 03324 sprintf (str, " -sublabel %d %s:t-stat ", 03325 ibrick, option_data->xmname[i]); 03326 strcat (refit_str, str); 03327 } 03328 03329 03330 /*----- make difference in factor A level means sub-bricks -----*/ 03331 if (option_data->num_adiffs > 0) 03332 for (i = 0; i < option_data->num_adiffs; i++) 03333 { 03334 add_file_name (new_dset, option_data->adname[i], bucket_str); 03335 03336 ibrick++; 03337 sprintf (str, " -sublabel %d %s:Diff ", 03338 ibrick, option_data->adname[i]); 03339 strcat (refit_str, str); 03340 03341 ibrick++; 03342 sprintf (str, " -sublabel %d %s:t-stat ", 03343 ibrick, option_data->adname[i]); 03344 strcat (refit_str, str); 03345 } 03346 03347 03348 /*----- make difference in factor B level means sub-bricks -----*/ 03349 if (option_data->num_bdiffs > 0) 03350 for (i = 0; i < option_data->num_bdiffs; i++) 03351 { 03352 add_file_name (new_dset, option_data->bdname[i], bucket_str); 03353 03354 ibrick++; 03355 sprintf (str, " -sublabel %d %s:Diff ", 03356 ibrick, option_data->bdname[i]); 03357 strcat (refit_str, str); 03358 03359 ibrick++; 03360 sprintf (str, " -sublabel %d %s:t-stat ", 03361 ibrick, option_data->bdname[i]); 03362 strcat (refit_str, str); 03363 } 03364 03365 03366 /*----- make difference in cell means sub-bricks -----*/ 03367 if (option_data->num_xdiffs > 0) 03368 for (i = 0; i < option_data->num_xdiffs; i++) 03369 { 03370 add_file_name (new_dset, option_data->xdname[i], bucket_str); 03371 03372 ibrick++; 03373 sprintf (str, " -sublabel %d %s:Diff ", 03374 ibrick, option_data->xdname[i]); 03375 strcat (refit_str, str); 03376 03377 ibrick++; 03378 sprintf (str, " -sublabel %d %s:t-stat ", 03379 ibrick, option_data->xdname[i]); 03380 strcat (refit_str, str); 03381 } 03382 03383 03384 /*----- make contrast in factor A level means sub-brickss -----*/ 03385 if (option_data->num_acontr > 0) 03386 for (i = 0; i < option_data->num_acontr; i++) 03387 { 03388 add_file_name (new_dset, option_data->acname[i], bucket_str); 03389 03390 ibrick++; 03391 sprintf (str, " -sublabel %d %s:Contr ", 03392 ibrick, option_data->acname[i]); 03393 strcat (refit_str, str); 03394 03395 ibrick++; 03396 sprintf (str, " -sublabel %d %s:t-stat ", 03397 ibrick, option_data->acname[i]); 03398 strcat (refit_str, str); 03399 } 03400 03401 03402 /*----- make contrast in factor B level means sub-bricks -----*/ 03403 if (option_data->num_bcontr > 0) 03404 for (i = 0; i < option_data->num_bcontr; i++) 03405 { 03406 add_file_name (new_dset, option_data->bcname[i], bucket_str); 03407 03408 ibrick++; 03409 sprintf (str, " -sublabel %d %s:Contr ", 03410 ibrick, option_data->bcname[i]); 03411 strcat (refit_str, str); 03412 03413 ibrick++; 03414 sprintf (str, " -sublabel %d %s:t-stat ", 03415 ibrick, option_data->bcname[i]); 03416 strcat (refit_str, str); 03417 } 03418 03419 03420 /*----- make contrast in cell means sub-bricks -----*/ 03421 if (option_data->num_xcontr > 0) 03422 for (i = 0; i < option_data->num_xcontr; i++) 03423 { 03424 add_file_name (new_dset, option_data->xcname[i], bucket_str); 03425 03426 ibrick++; 03427 sprintf (str, " -sublabel %d %s:Contr ", 03428 ibrick, option_data->xcname[i]); 03429 strcat (refit_str, str); 03430 03431 ibrick++; 03432 sprintf (str, " -sublabel %d %s:t-stat ", 03433 ibrick, option_data->xcname[i]); 03434 strcat (refit_str, str); 03435 } 03436 03437 03438 /*----- invoke program 3dbucket to generate bucket type output dataset 03439 by concatenating previous output files -----*/ 03440 printf("Writing `bucket' dataset "); 03441 printf("into %s\n", option_data->bucket_filename); 03442 03443 fprintf(stderr,"RUNNING COMMAND: %s\n",bucket_str) ; 03444 system (bucket_str); 03445 03446 03447 /*----- invoke program 3drefit to label individual sub-bricks -----*/ 03448 add_file_name (new_dset, option_data->bucket_filename, refit_str); 03449 fprintf(stderr,"RUNNING COMMAND: %s\n",refit_str) ; 03450 system (refit_str); 03451 03452 03453 /*----- release memory -----*/ 03454 THD_delete_3dim_dataset (new_dset , False); new_dset = NULL; 03455 03456 } |
|
Definition at line 85 of file 3dANOVA2.c. References MASTER_SHORTHELP_STRING.
00086 { 00087 printf 00088 ( 00089 "This program performs two-factor ANOVA on 3D data sets \n\n" 00090 "Usage: \n" 00091 "3dANOVA2 \n" 00092 "-type k type of ANOVA model to be used: \n" 00093 " k=1 fixed effects model (A and B fixed) \n" 00094 " k=2 random effects model (A and B random) \n" 00095 " k=3 mixed effects model (A fixed, B random) \n" 00096 " \n" 00097 "-alevels a a = number of levels of factor A \n" 00098 "-blevels b b = number of levels of factor B \n" 00099 "-dset 1 1 filename data set for level 1 of factor A \n" 00100 " and level 1 of factor B \n" 00101 " . . . . . . \n" 00102 " \n" 00103 "-dset i j filename data set for level i of factor A \n" 00104 " and level j of factor B \n" 00105 " . . . . . . \n" 00106 " \n" 00107 "-dset a b filename data set for level a of factor A \n" 00108 " and level b of factor B \n" 00109 " \n" 00110 "[-voxel num] screen output for voxel # num \n" 00111 "[-diskspace] print out disk space required for \n" 00112 " program execution \n" 00113 " \n" 00114 " \n" 00115 "The following commands generate individual AFNI 2 sub-brick datasets: \n" 00116 " (In each case, output is written to the file with the specified \n" 00117 " prefix file name.) \n" 00118 " \n" 00119 "[-ftr prefix] F-statistic for treatment effect \n" 00120 "[-fa prefix] F-statistic for factor A effect \n" 00121 "[-fb prefix] F-statistic for factor B effect \n" 00122 "[-fab prefix] F-statistic for interaction \n" 00123 "[-amean i prefix] estimate mean of factor A level i \n" 00124 "[-bmean j prefix] estimate mean of factor B level j \n" 00125 "[-xmean i j prefix] estimate mean of cell at level i of \n" 00126 " factor A, level j of factor B \n" 00127 "[-adiff i j prefix] difference between levels i and j of \n" 00128 " factor A \n" 00129 "[-bdiff i j prefix] difference between levels i and j of \n" 00130 " factor B \n" 00131 "[-xdiff i j k l prefix] difference between cell mean at A=i,B=j \n" 00132 " and cell mean at A=k,B=l \n" 00133 "[-acontr c1 ... ca prefix] contrast in factor A levels \n" 00134 "[-bcontr c1 ... cb prefix] contrast in factor B levels \n" 00135 "[-xcontr c11 ... c1b c21 ... c2b ... ca1 ... cab prefix] \n" 00136 " contrast in cell means \n" 00137 " \n" 00138 " \n" 00139 "The following command generates one AFNI 'bucket' type dataset: \n" 00140 " \n" 00141 "[-bucket prefix] create one AFNI 'bucket' dataset whose \n" 00142 " sub-bricks are obtained by concatenating \n" 00143 " the above output files; the output 'bucket'\n" 00144 " is written to file with prefix file name \n" 00145 "\n"); 00146 00147 printf 00148 ( 00149 "\n" 00150 "N.B.: For this program, the user must specify 1 and only 1 sub-brick \n" 00151 " with each -dset command. That is, if an input dataset contains \n" 00152 " more than 1 sub-brick, a sub-brick selector must be used, e.g.: \n" 00153 " -dset 2 4 'fred+orig[3]' \n" 00154 ); 00155 00156 printf("\n" MASTER_SHORTHELP_STRING ) ; 00157 00158 exit(0); 00159 } |
|
Definition at line 167 of file 3dANOVA2.c. References anova_options::a, anova_options::acname, anova_options::acontr, anova_options::adiffs, anova_options::adname, AFNI_logger(), anova_options::ameans, anova_options::amname, ANOVA_error(), argc, anova_options::b, anova_options::bcname, anova_options::bcontr, anova_options::bdiffs, anova_options::bdname, anova_options::bmeans, anova_options::bmname, anova_options::bucket_filename, anova_options::datum, anova_options::diskspace, display_help_menu(), DSET_NVALS, anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::ftrname, i, initialize_options(), ISVALID_3DIM_DATASET, malloc, MAX_CONTR, MAX_DIFFS, MAX_LEVELS, MAX_MEANS, anova_options::model, anova_options::n, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::nvoxel, PROGRAM_NAME, anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), anova_options::xcname, anova_options::xcontr, anova_options::xdiffs, anova_options::xdname, anova_options::xmeans, anova_options::xmname, and anova_options::xname.
00168 { 00169 int nopt = 1; /* input option argument counter */ 00170 int ival, jval; /* integer input */ 00171 int i, j, k; /* factor level counters */ 00172 int nij; /* number of data files in cell i,j */ 00173 float fval; /* float input */ 00174 THD_3dim_dataset * dset=NULL; /* test whether data set exists */ 00175 char message[MAX_NAME_LENGTH]; /* error message */ 00176 int n[MAX_LEVELS][MAX_LEVELS]; /* data file counters */ 00177 00178 00179 /*----- does user request help menu? -----*/ 00180 if (argc < 2 || strncmp(argv[1], "-help", 5) == 0) display_help_menu(); 00181 00182 /*----- add to program log -----*/ 00183 AFNI_logger (PROGRAM_NAME,argc,argv); 00184 00185 /*----- initialize the input options -----*/ 00186 initialize_options (option_data); 00187 00188 /*----- initialize data file counters -----*/ 00189 for (i = 0; i < MAX_LEVELS; i++) 00190 for (j = 0; j < MAX_LEVELS; j++) 00191 n[i][j] = 0; 00192 00193 00194 /*----- main loop over input options -----*/ 00195 while (nopt < argc) 00196 { 00197 00198 /*----- allocate memory for storing data file names -----*/ 00199 if ((option_data->xname == NULL) && (option_data->a > 0) && 00200 (option_data->b > 0)) 00201 { 00202 option_data->xname = 00203 (char *****) malloc (sizeof(char ****) * option_data->a); 00204 for (i = 0; i < option_data->a; i++) 00205 { 00206 option_data->xname[i] = 00207 (char ****) malloc (sizeof(char ***) * option_data->b); 00208 for (j = 0; j < option_data->b; j++) 00209 { 00210 option_data->xname[i][j] = 00211 (char ***) malloc (sizeof(char **) * 1); 00212 for (k = 0; k < 1; k++) 00213 { 00214 option_data->xname[i][j][k] = 00215 (char **) malloc (sizeof(char *) * MAX_OBSERVATIONS); 00216 } 00217 } 00218 } 00219 } 00220 00221 00222 /*----- -diskspace -----*/ 00223 if( strncmp(argv[nopt],"-diskspace",5) == 0 ) 00224 { 00225 option_data->diskspace = 1; 00226 nopt++ ; continue ; /* go to next arg */ 00227 } 00228 00229 00230 /*----- -datum type -----*/ 00231 if( strncmp(argv[nopt],"-datum",5) == 0 ){ 00232 if( ++nopt >= argc ) ANOVA_error("need an argument after -datum!") ; 00233 00234 if( strcmp(argv[nopt],"short") == 0 ){ 00235 option_data->datum = MRI_short ; 00236 } else if( strcmp(argv[nopt],"float") == 0 ){ 00237 option_data->datum = MRI_float ; 00238 } else { 00239 char buf[256] ; 00240 sprintf(buf,"-datum of type '%s' is not supported in 3dANOVA2!", 00241 argv[nopt] ) ; 00242 ANOVA_error(buf) ; 00243 } 00244 nopt++ ; continue ; /* go to next arg */ 00245 } 00246 00247 00248 /*----- -session dirname -----*/ 00249 if( strncmp(argv[nopt],"-session",5) == 0 ){ 00250 nopt++ ; 00251 if( nopt >= argc ) ANOVA_error("need argument after -session!") ; 00252 strcpy(option_data->session , argv[nopt++]) ; 00253 continue ; 00254 } 00255 00256 00257 /*----- -voxel num -----*/ 00258 if (strncmp(argv[nopt], "-voxel", 6) == 0) 00259 { 00260 nopt++; 00261 if (nopt >= argc) ANOVA_error ("need argument after -voxel "); 00262 sscanf (argv[nopt], "%d", &ival); 00263 if (ival <= 0) 00264 ANOVA_error ("illegal argument after -voxel "); 00265 option_data->nvoxel = ival; 00266 nopt++; 00267 continue; 00268 } 00269 00270 00271 /*----- -type k -----*/ 00272 if (strncmp(argv[nopt], "-type", 5) == 0) 00273 { 00274 nopt++; 00275 if (nopt >= argc) ANOVA_error ("need argument after -type "); 00276 sscanf (argv[nopt], "%d", &ival); 00277 if ((ival < 1) || (ival > 3)) 00278 ANOVA_error ("illegal argument after -type "); 00279 option_data->model = ival; 00280 nopt++; 00281 continue; 00282 } 00283 00284 00285 /*----- -alevels a -----*/ 00286 if (strncmp(argv[nopt], "-alevels", 5) == 0) 00287 { 00288 nopt++; 00289 if (nopt >= argc) ANOVA_error ("need argument after -alevels "); 00290 sscanf (argv[nopt], "%d", &ival); 00291 if ((ival <= 0) || (ival > MAX_LEVELS)) 00292 ANOVA_error ("illegal argument after -alevels "); 00293 option_data->a = ival; 00294 nopt++; 00295 continue; 00296 } 00297 00298 00299 /*----- -blevels b -----*/ 00300 if (strncmp(argv[nopt], "-blevels", 5) == 0) 00301 { 00302 nopt++; 00303 if (nopt >= argc) ANOVA_error ("need argument after -blevels "); 00304 sscanf (argv[nopt], "%d", &ival); 00305 if ((ival <= 0) || (ival > MAX_LEVELS)) 00306 ANOVA_error ("illegal argument after -blevels "); 00307 option_data->b = ival; 00308 nopt++; 00309 continue; 00310 } 00311 00312 00313 /*----- -dset alevel blevel filename -----*/ 00314 if (strncmp(argv[nopt], "-dset", 5) == 0) 00315 { 00316 nopt++; 00317 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -dset "); 00318 sscanf (argv[nopt], "%d", &ival); 00319 if ((ival <= 0) || (ival > option_data->a)) 00320 ANOVA_error ("illegal argument after -dset "); 00321 00322 nopt++; 00323 sscanf (argv[nopt], "%d", &jval); 00324 if ((jval <= 0) || (jval > option_data->b)) 00325 ANOVA_error ("illegal argument after -dset "); 00326 00327 n[ival-1][jval-1] += 1; 00328 nij = n[ival-1][jval-1]; 00329 if (nij > MAX_OBSERVATIONS) 00330 ANOVA_error ("too many data files"); 00331 00332 /*--- check whether input files exist ---*/ 00333 nopt++; 00334 dset = THD_open_dataset( argv[nopt] ) ; 00335 if( ! ISVALID_3DIM_DATASET(dset) ) 00336 { 00337 sprintf(message,"Unable to open dataset file %s\n", 00338 argv[nopt]); 00339 ANOVA_error (message); 00340 } 00341 00342 /*--- check number of selected sub-bricks ---*/ 00343 if (DSET_NVALS(dset) != 1) 00344 { 00345 sprintf(message,"Must specify exactly 1 sub-brick for file %s\n", 00346 argv[nopt]); 00347 ANOVA_error (message); 00348 } 00349 00350 THD_delete_3dim_dataset( dset , False ) ; dset = NULL ; 00351 00352 option_data->xname[ival-1][jval-1][0][nij-1] 00353 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00354 strcpy (option_data->xname[ival-1][jval-1][0][nij-1], argv[nopt]); 00355 nopt++; 00356 continue; 00357 } 00358 00359 00360 /*----- -ftr filename -----*/ 00361 if (strncmp(argv[nopt], "-ftr", 5) == 0) 00362 { 00363 nopt++; 00364 if (nopt >= argc) ANOVA_error ("need argument after -ftr "); 00365 option_data->nftr = 1; 00366 option_data->ftrname = malloc (sizeof(char) * MAX_NAME_LENGTH); 00367 strcpy (option_data->ftrname, argv[nopt]); 00368 nopt++; 00369 continue; 00370 } 00371 00372 00373 /*----- -fa filename -----*/ 00374 if (strncmp(argv[nopt], "-fa", 5) == 0) 00375 { 00376 nopt++; 00377 if (nopt >= argc) ANOVA_error ("need argument after -fa "); 00378 option_data->nfa = 1; 00379 option_data->faname = malloc (sizeof(char) * MAX_NAME_LENGTH); 00380 strcpy (option_data->faname, argv[nopt]); 00381 nopt++; 00382 continue; 00383 } 00384 00385 00386 /*----- -fb filename -----*/ 00387 if (strncmp(argv[nopt], "-fb", 5) == 0) 00388 { 00389 nopt++; 00390 if (nopt >= argc) ANOVA_error ("need argument after -fb "); 00391 option_data->nfb = 1; 00392 option_data->fbname = malloc (sizeof(char) * MAX_NAME_LENGTH); 00393 strcpy (option_data->fbname, argv[nopt]); 00394 nopt++; 00395 continue; 00396 } 00397 00398 00399 /*----- -fab filename -----*/ 00400 if (strncmp(argv[nopt], "-fab", 5) == 0) 00401 { 00402 nopt++; 00403 if (nopt >= argc) ANOVA_error ("need argument after -fab "); 00404 option_data->nfab = 1; 00405 option_data->fabname = malloc (sizeof(char) * MAX_NAME_LENGTH); 00406 strcpy (option_data->fabname, argv[nopt]); 00407 nopt++; 00408 continue; 00409 } 00410 00411 00412 /*----- -amean level filename -----*/ 00413 if (strncmp(argv[nopt], "-amean", 5) == 0) 00414 { 00415 nopt++; 00416 if (nopt+1 >= argc) ANOVA_error ("need 2 arguments after -amean "); 00417 00418 option_data->num_ameans++; 00419 if (option_data->num_ameans > MAX_MEANS) 00420 ANOVA_error ("too many factor A level mean estimates"); 00421 00422 sscanf (argv[nopt], "%d", &ival); 00423 if ((ival <= 0) || (ival > option_data->a)) 00424 ANOVA_error ("illegal argument after -amean "); 00425 option_data->ameans[option_data->num_ameans-1] = ival - 1; 00426 nopt++; 00427 00428 option_data->amname[option_data->num_ameans-1] 00429 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00430 strcpy (option_data->amname[option_data->num_ameans-1], argv[nopt]); 00431 nopt++; 00432 continue; 00433 } 00434 00435 00436 /*----- -bmean level filename -----*/ 00437 if (strncmp(argv[nopt], "-bmean", 5) == 0) 00438 { 00439 nopt++; 00440 if (nopt+1 >= argc) ANOVA_error ("need 2 arguments after -bmean "); 00441 00442 option_data->num_bmeans++; 00443 if (option_data->num_bmeans > MAX_MEANS) 00444 ANOVA_error ("too many factor B level mean estimates"); 00445 00446 sscanf (argv[nopt], "%d", &ival); 00447 if ((ival <= 0) || (ival > option_data->b)) 00448 ANOVA_error ("illegal argument after -bmean "); 00449 option_data->bmeans[option_data->num_bmeans-1] = ival - 1; 00450 nopt++; 00451 00452 option_data->bmname[option_data->num_bmeans-1] 00453 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00454 strcpy (option_data->bmname[option_data->num_bmeans-1], argv[nopt]); 00455 nopt++; 00456 continue; 00457 } 00458 00459 00460 /*----- -xmean i j filename -----*/ 00461 if (strncmp(argv[nopt], "-xmean", 5) == 0) 00462 { 00463 nopt++; 00464 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -xmean "); 00465 00466 option_data->num_xmeans++; 00467 if (option_data->num_xmeans > MAX_MEANS) 00468 ANOVA_error ("too many cell mean estimates"); 00469 00470 sscanf (argv[nopt], "%d", &ival); 00471 if ((ival <= 0) || (ival > option_data->a)) 00472 ANOVA_error ("illegal argument after -xmean "); 00473 option_data->xmeans[option_data->num_xmeans-1][0] = ival - 1; 00474 nopt++; 00475 00476 sscanf (argv[nopt], "%d", &ival); 00477 if ((ival <= 0) || (ival > option_data->b)) 00478 ANOVA_error ("illegal argument after -xmean "); 00479 option_data->xmeans[option_data->num_xmeans-1][1] = ival - 1; 00480 nopt++; 00481 00482 option_data->xmname[option_data->num_xmeans-1] 00483 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00484 strcpy (option_data->xmname[option_data->num_xmeans-1], argv[nopt]); 00485 nopt++; 00486 continue; 00487 } 00488 00489 00490 /*----- -adiff level1 level2 filename -----*/ 00491 if (strncmp(argv[nopt], "-adiff", 5) == 0) 00492 { 00493 nopt++; 00494 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -adiff "); 00495 00496 option_data->num_adiffs++; 00497 if (option_data->num_adiffs > MAX_DIFFS) 00498 ANOVA_error ("too many factor A level differences"); 00499 00500 sscanf (argv[nopt], "%d", &ival); 00501 if ((ival <= 0) || (ival > option_data->a)) 00502 ANOVA_error ("illegal argument after -adiff "); 00503 option_data->adiffs[option_data->num_adiffs-1][0] = ival - 1; 00504 nopt++; 00505 00506 sscanf (argv[nopt], "%d", &ival); 00507 if ((ival <= 0) || (ival > option_data->a)) 00508 ANOVA_error ("illegal argument after -adiff "); 00509 option_data->adiffs[option_data->num_adiffs-1][1] = ival - 1; 00510 nopt++; 00511 00512 option_data->adname[option_data->num_adiffs-1] 00513 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00514 strcpy (option_data->adname[option_data->num_adiffs-1], argv[nopt]); 00515 nopt++; 00516 continue; 00517 } 00518 00519 00520 /*----- -bdiff level1 level2 filename -----*/ 00521 if (strncmp(argv[nopt], "-bdiff", 5) == 0) 00522 { 00523 nopt++; 00524 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -bdiff "); 00525 00526 option_data->num_bdiffs++; 00527 if (option_data->num_bdiffs > MAX_DIFFS) 00528 ANOVA_error ("too many factor B level differences"); 00529 00530 sscanf (argv[nopt], "%d", &ival); 00531 if ((ival <= 0) || (ival > option_data->b)) 00532 ANOVA_error ("illegal argument after -bdiff "); 00533 option_data->bdiffs[option_data->num_bdiffs-1][0] = ival - 1; 00534 nopt++; 00535 00536 sscanf (argv[nopt], "%d", &ival); 00537 if ((ival <= 0) || (ival > option_data->b)) 00538 ANOVA_error ("illegal argument after -bdiff "); 00539 option_data->bdiffs[option_data->num_bdiffs-1][1] = ival - 1; 00540 nopt++; 00541 00542 option_data->bdname[option_data->num_bdiffs-1] 00543 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00544 strcpy (option_data->bdname[option_data->num_bdiffs-1], argv[nopt]); 00545 nopt++; 00546 continue; 00547 } 00548 00549 00550 /*----- -xdiff i j k l filename -----*/ 00551 if (strncmp(argv[nopt], "-xdiff", 5) == 0) 00552 { 00553 nopt++; 00554 if (nopt+4 >= argc) ANOVA_error ("need 5 arguments after -xdiff "); 00555 00556 option_data->num_xdiffs++; 00557 if (option_data->num_xdiffs > MAX_DIFFS) 00558 ANOVA_error ("too many cell means differences"); 00559 00560 sscanf (argv[nopt], "%d", &ival); 00561 if ((ival <= 0) || (ival > option_data->a)) 00562 ANOVA_error ("illegal argument after -xdiff "); 00563 option_data->xdiffs[option_data->num_xdiffs-1][0][0] = ival - 1; 00564 nopt++; 00565 00566 sscanf (argv[nopt], "%d", &ival); 00567 if ((ival <= 0) || (ival > option_data->b)) 00568 ANOVA_error ("illegal argument after -xdiff "); 00569 option_data->xdiffs[option_data->num_xdiffs-1][0][1] = ival - 1; 00570 nopt++; 00571 00572 sscanf (argv[nopt], "%d", &ival); 00573 if ((ival <= 0) || (ival > option_data->a)) 00574 ANOVA_error ("illegal argument after -xdiff "); 00575 option_data->xdiffs[option_data->num_xdiffs-1][1][0] = ival - 1; 00576 nopt++; 00577 00578 sscanf (argv[nopt], "%d", &ival); 00579 if ((ival <= 0) || (ival > option_data->b)) 00580 ANOVA_error ("illegal argument after -xdiff "); 00581 option_data->xdiffs[option_data->num_xdiffs-1][1][1] = ival - 1; 00582 nopt++; 00583 00584 option_data->xdname[option_data->num_xdiffs-1] 00585 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00586 strcpy (option_data->xdname[option_data->num_xdiffs-1], argv[nopt]); 00587 nopt++; 00588 continue; 00589 } 00590 00591 00592 /*----- -acontr c1 ... cr filename -----*/ 00593 if (strncmp(argv[nopt], "-acontr", 5) == 0) 00594 { 00595 nopt++; 00596 if (nopt + option_data->a >= argc) 00597 ANOVA_error ("need a+1 arguments after -acontr "); 00598 00599 option_data->num_acontr++; 00600 if (option_data->num_acontr > MAX_CONTR) 00601 ANOVA_error ("too many factor A level contrasts"); 00602 00603 for (i = 0; i < option_data->a; i++) 00604 { 00605 sscanf (argv[nopt], "%f", &fval); 00606 option_data->acontr[option_data->num_acontr - 1][i] = fval ; 00607 nopt++; 00608 } 00609 00610 option_data->acname[option_data->num_acontr-1] 00611 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00612 strcpy (option_data->acname[option_data->num_acontr-1], argv[nopt]); 00613 nopt++; 00614 continue; 00615 } 00616 00617 00618 /*----- -bcontr c1 ... cr filename -----*/ 00619 if (strncmp(argv[nopt], "-bcontr", 5) == 0) 00620 { 00621 nopt++; 00622 if (nopt + option_data->b >= argc) 00623 ANOVA_error ("need b+1 arguments after -bcontr "); 00624 00625 option_data->num_bcontr++; 00626 if (option_data->num_bcontr > MAX_CONTR) 00627 ANOVA_error ("too many factor B level contrasts"); 00628 00629 for (i = 0; i < option_data->b; i++) 00630 { 00631 sscanf (argv[nopt], "%f", &fval); 00632 option_data->bcontr[option_data->num_bcontr - 1][i] = fval ; 00633 nopt++; 00634 } 00635 00636 option_data->bcname[option_data->num_bcontr-1] 00637 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00638 strcpy (option_data->bcname[option_data->num_bcontr-1], argv[nopt]); 00639 nopt++; 00640 continue; 00641 } 00642 00643 00644 /*--- -xcontr c11 ... c1b c21 ... c2b ... ca1 ... cab filename ---*/ 00645 if (strncmp(argv[nopt], "-xcontr", 5) == 0) 00646 { 00647 nopt++; 00648 if (nopt + (option_data->a * option_data->b) >= argc) 00649 ANOVA_error ("need ab+1 arguments after -xcontr "); 00650 00651 option_data->num_xcontr++; 00652 if (option_data->num_xcontr > MAX_CONTR) 00653 ANOVA_error ("too many cell means contrasts"); 00654 00655 for (i = 0; i < option_data->a; i++) 00656 for (j = 0; j < option_data->b; j++) 00657 { 00658 sscanf (argv[nopt], "%f", &fval); 00659 option_data->xcontr[option_data->num_xcontr - 1][i][j] = fval ; 00660 nopt++; 00661 } 00662 00663 option_data->xcname[option_data->num_xcontr-1] 00664 = malloc (sizeof(char) * MAX_NAME_LENGTH); 00665 strcpy (option_data->xcname[option_data->num_xcontr-1], argv[nopt]); 00666 nopt++; 00667 continue; 00668 } 00669 00670 00671 /*----- -bucket filename -----*/ 00672 if (strncmp(argv[nopt], "-bucket", 4) == 0) 00673 { 00674 nopt++; 00675 if (nopt >= argc) ANOVA_error ("need argument after -bucket "); 00676 option_data->bucket_filename = malloc (sizeof(char)*MAX_NAME_LENGTH); 00677 strcpy (option_data->bucket_filename, argv[nopt]); 00678 nopt++; 00679 continue; 00680 } 00681 00682 00683 /*----- unknown command -----*/ 00684 sprintf (message,"Unrecognized command line option: %s\n", argv[nopt]); 00685 ANOVA_error (message); 00686 } 00687 00688 00689 /*----- check that all treatment sample sizes are equal -----*/ 00690 option_data->n = n[0][0]; 00691 for (i = 0; i < option_data->a; i++) 00692 for (j = 0; j < option_data->b; j++) 00693 if (n[i][j] != option_data->n) 00694 ANOVA_error ("must have equal sample sizes for 3dANOVA2"); 00695 } |
|
Definition at line 906 of file 3dANOVA2.c. References a, ANOVA_error(), argc, check_disk_space(), check_for_valid_inputs(), check_output_files(), check_temporary_files(), get_dimensions(), get_options(), malloc, PROGRAM_NAME, and tross_commandline().
00907 { 00908 int a, b; /* number of factor levels */ 00909 int n; /* number of observations per cell */ 00910 00911 00912 /*----- save command line for history notes -----*/ 00913 commandline = tross_commandline( PROGRAM_NAME , argc,argv ) ; 00914 00915 00916 /*----- allocate memory space for input data -----*/ 00917 *option_data = (anova_options *) malloc(sizeof(anova_options)); 00918 if (*option_data == NULL) 00919 ANOVA_error ("memory allocation error"); 00920 00921 /*----- get command line inputs -----*/ 00922 get_options(argc, argv, *option_data); 00923 00924 /*----- use first data set to get data set dimensions -----*/ 00925 (*option_data)->first_dataset = (*option_data)->xname[0][0][0][0]; 00926 get_dimensions (*option_data); 00927 printf ("Data set dimensions: nx = %d ny = %d nz = %d nxyz = %d \n", 00928 (*option_data)->nx, (*option_data)->ny, 00929 (*option_data)->nz, (*option_data)->nxyz); 00930 if ((*option_data)->nvoxel > (*option_data)->nxyz) 00931 ANOVA_error ("argument of -voxel is too large"); 00932 00933 /*----- initialize local variables -----*/ 00934 a = (*option_data)->a; 00935 b = (*option_data)->b; 00936 n = (*option_data)->n; 00937 00938 /*----- total number of observations -----*/ 00939 (*option_data)->nt = n * a * b; 00940 00941 /*----- check for valid inputs -----*/ 00942 check_for_valid_inputs (*option_data); 00943 00944 /*----- check whether temporary files already exist -----*/ 00945 check_temporary_files (*option_data); 00946 00947 /*----- check whether output files already exist -----*/ 00948 check_output_files (*option_data); 00949 00950 /*----- check whether there is sufficient disk space -----*/ 00951 if ((*option_data)->diskspace) check_disk_space (*option_data); 00952 } |
|
Definition at line 3593 of file 3dANOVA2.c. References addto_args(), analyze_results(), argc, calculate_anova(), free, initialize(), machdep(), PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, and terminate().
03594 { 03595 anova_options * option_data = NULL; 03596 03597 03598 /*----- Identify software -----*/ 03599 printf ("\n\n"); 03600 printf ("Program: %s \n", PROGRAM_NAME); 03601 printf ("Author: %s \n", PROGRAM_AUTHOR); 03602 printf ("Initial Release: %s \n", PROGRAM_INITIAL); 03603 printf ("Latest Revision: %s \n", PROGRAM_LATEST); 03604 printf ("\n"); 03605 03606 /*-- 20 Apr 2001: addto the arglist, if user wants to [RWCox] --*/ 03607 03608 machdep() ; 03609 { int new_argc ; char ** new_argv ; 03610 addto_args( argc , argv , &new_argc , &new_argv ) ; 03611 if( new_argv != NULL ){ argc = new_argc ; argv = new_argv ; } 03612 } 03613 03614 /*----- program initialization -----*/ 03615 initialize (argc, argv, &option_data); 03616 03617 /*----- calculate sums of squares -----*/ 03618 calculate_anova (option_data); 03619 03620 /*----- generate requested output -----*/ 03621 analyze_results (option_data); 03622 03623 /*----- terminate program -----*/ 03624 terminate (option_data); 03625 free (option_data); option_data = NULL; 03626 03627 exit(0); 03628 } |
|
Definition at line 866 of file 3dANOVA2.c. References anova_options::bucket_filename, max, anova_options::n, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, and anova_options::num_xmeans.
00867 { 00868 int now; /* number of disk files just prior 00869 to program termination */ 00870 int nout; /* number of output files */ 00871 int nmax; /* maximum number of disk files */ 00872 00873 00874 if (option_data->n != 1) 00875 { 00876 nmax = 6; now = 5; 00877 } 00878 else 00879 { 00880 nmax = 5; now = 5; 00881 } 00882 00883 nout = option_data->nftr + option_data->nfab 00884 + option_data->nfa + option_data->nfb 00885 + option_data->num_ameans + option_data->num_bmeans + option_data->num_xmeans 00886 + option_data->num_adiffs + option_data->num_bdiffs + option_data->num_xdiffs 00887 + option_data->num_acontr + option_data->num_bcontr 00888 + option_data->num_xcontr; 00889 00890 now = now + nout; 00891 00892 nmax = max (now, nmax); 00893 00894 if (option_data->bucket_filename != NULL) 00895 nmax = max (nmax, 2*nout); 00896 00897 return (nmax); 00898 } |
|
Definition at line 3466 of file 3dANOVA2.c. References anova_options::a, anova_options::acname, ADN_directory_name, ADN_none, anova_options::adname, anova_options::amname, anova_options::b, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, create_bucket(), destroy_anova_options(), EDIT_dset_items(), EDIT_empty_copy(), anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::first_dataset, anova_options::ftrname, i, ISVALID_3DIM_DATASET, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, remove_dataset(), anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), volume_delete(), anova_options::xcname, anova_options::xdname, and anova_options::xmname.
03467 { 03468 int i, j; 03469 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */ 03470 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */ 03471 char filename[MAX_NAME_LENGTH]; 03472 03473 03474 /*----- remove temporary data files -----*/ 03475 volume_delete ("sstr"); 03476 volume_delete ("sse"); 03477 volume_delete ("ssa"); 03478 volume_delete ("ssb"); 03479 volume_delete ("ssab"); 03480 for (i = 0; i < option_data->a; i++) 03481 { 03482 sprintf (filename, "ya.%d", i); 03483 volume_delete (filename); 03484 } 03485 for (j = 0; j < option_data->b; j++) 03486 { 03487 sprintf (filename, "yb.%d", j); 03488 volume_delete (filename); 03489 } 03490 03491 03492 /*----- create bucket dataset -----*/ 03493 if (option_data->bucket_filename != NULL) 03494 create_bucket (option_data); 03495 03496 03497 /*----- if 'bucket' datset was created, remove the individual 2-subbrick 03498 data files -----*/ 03499 if (option_data->bucket_filename != NULL) 03500 { 03501 03502 /*----- read first dataset -----*/ 03503 dset = THD_open_dataset (option_data->first_dataset) ; 03504 if( ! ISVALID_3DIM_DATASET(dset) ){ 03505 fprintf(stderr,"*** Unable to open dataset file %s\n", 03506 option_data->first_dataset); 03507 exit(1) ; 03508 } 03509 03510 /*----- make an empty copy of this dataset -----*/ 03511 new_dset = EDIT_empty_copy (dset); 03512 THD_delete_3dim_dataset (dset , False); dset = NULL; 03513 EDIT_dset_items (new_dset, 03514 ADN_directory_name, option_data->session, 03515 ADN_none); 03516 03517 /*----- remove F-stat for treatment data file -----*/ 03518 if (option_data->nftr != 0) 03519 remove_dataset (new_dset, option_data->ftrname); 03520 03521 /*----- remove F-stat for factor A main effect data file -----*/ 03522 if (option_data->nfa != 0) 03523 remove_dataset (new_dset, option_data->faname); 03524 03525 /*----- remove F-stat for factor B main effect data file -----*/ 03526 if (option_data->nfb != 0) 03527 remove_dataset (new_dset, option_data->fbname); 03528 03529 /*----- remove F-stat for A*B interaction data file -----*/ 03530 if (option_data->nfab != 0) 03531 remove_dataset (new_dset, option_data->fabname); 03532 03533 /*----- remove factor A level mean data files -----*/ 03534 if (option_data->num_ameans > 0) 03535 for (i = 0; i < option_data->num_ameans; i++) 03536 remove_dataset (new_dset, option_data->amname[i]); 03537 03538 /*----- remove factor B level mean data files -----*/ 03539 if (option_data->num_bmeans > 0) 03540 for (i = 0; i < option_data->num_bmeans; i++) 03541 remove_dataset (new_dset, option_data->bmname[i]); 03542 03543 /*----- remove individual cell mean data files -----*/ 03544 if (option_data->num_xmeans > 0) 03545 for (i = 0; i < option_data->num_xmeans; i++) 03546 remove_dataset (new_dset, option_data->xmname[i]); 03547 03548 /*----- remove difference in factor A levels data files -----*/ 03549 if (option_data->num_adiffs > 0) 03550 for (i = 0; i < option_data->num_adiffs; i++) 03551 remove_dataset (new_dset, option_data->adname[i]); 03552 03553 /*----- remove difference in factor B levels data files -----*/ 03554 if (option_data->num_bdiffs > 0) 03555 for (i = 0; i < option_data->num_bdiffs; i++) 03556 remove_dataset (new_dset, option_data->bdname[i]); 03557 03558 /*----- remove difference in cell means data files -----*/ 03559 if (option_data->num_xdiffs > 0) 03560 for (i = 0; i < option_data->num_xdiffs; i++) 03561 remove_dataset (new_dset, option_data->xdname[i]); 03562 03563 /*----- remove contrast in factor A levels data files -----*/ 03564 if (option_data->num_acontr > 0) 03565 for (i = 0; i < option_data->num_acontr; i++) 03566 remove_dataset (new_dset, option_data->acname[i]); 03567 03568 /*----- remove contrast in factor B levels data files -----*/ 03569 if (option_data->num_bcontr > 0) 03570 for (i = 0; i < option_data->num_bcontr; i++) 03571 remove_dataset (new_dset, option_data->bcname[i]); 03572 03573 /*----- remove contrast in cell means data files -----*/ 03574 if (option_data->num_xcontr > 0) 03575 for (i = 0; i < option_data->num_xcontr; i++) 03576 remove_dataset (new_dset, option_data->xcname[i]); 03577 03578 THD_delete_3dim_dataset (new_dset , False); new_dset = NULL; 03579 } 03580 03581 03582 /*----- deallocate memory -----*/ 03583 destroy_anova_options (option_data); 03584 03585 } |