Doxygen Source Code Documentation
3dANOVA.c File Reference
#include "3dANOVA.h"#include "3dANOVA.lib"Go to the source code of this file.
Define Documentation
|
|
Definition at line 63 of file 3dANOVA.c. Referenced by main(). |
|
|
Definition at line 64 of file 3dANOVA.c. Referenced by main(). |
|
|
Definition at line 65 of file 3dANOVA.c. Referenced by main(). |
|
|
Definition at line 62 of file 3dANOVA.c. Referenced by get_options(), initialize(), and main(). |
|
|
|
Function Documentation
|
|
Definition at line 1341 of file 3dANOVA.c. References calculate_contrasts(), calculate_differences(), calculate_f_statistic(), calculate_means(), anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, and anova_options::num_ameans.
01342 {
01343
01344 /*----- calculate F-statistic for treatment effect -----*/
01345 if (option_data->nftr > 0) calculate_f_statistic (option_data);
01346
01347 /*----- estimate factor level means -----*/
01348 if (option_data->num_ameans > 0) calculate_means (option_data);
01349
01350 /*----- estimate differences in factor level means -----*/
01351 if (option_data->num_adiffs > 0) calculate_differences (option_data);
01352
01353 /*----- calculate contrasts in factor levels -----*/
01354 if (option_data->num_acontr > 0) calculate_contrasts (option_data);
01355
01356 }
|
|
|
Definition at line 1312 of file 3dANOVA.c. References calculate_ss(), calculate_sse(), calculate_ssto(), calculate_sstr(), calculate_y(), and calculate_ysum().
01313 {
01314
01315 /*----- sum observations within treatment -----*/
01316 calculate_y (option_data);
01317
01318 /*----- sum all observations -----*/
01319 calculate_ysum (option_data);
01320
01321 /*----- calculate sum of squares -----*/
01322 calculate_ss (option_data);
01323
01324 /*----- calculate total (corrected for the mean) sum of squares -----*/
01325 calculate_ssto (option_data);
01326
01327 /*----- calculate treatment sum of squares -----*/
01328 calculate_sstr (option_data);
01329
01330 /*----- calculate error sum of squares -----*/
01331 calculate_sse (option_data);
01332
01333 }
|
|
|
Definition at line 1219 of file 3dANOVA.c. References anova_options::a, anova_options::acname, anova_options::acontr, ANOVA_error(), c, free, malloc, anova_options::na, anova_options::nt, anova_options::num_acontr, anova_options::nvoxel, anova_options::nxyz, r, volume_read(), volume_zero(), and write_afni_data(). Referenced by analyze_results().
01220 {
01221 const float EPSILON = 1.0e-10; /* protect against divide by zero */
01222 float * fin = NULL; /* pointer to float input data */
01223 float * contr = NULL; /* pointer to contrast estimate */
01224 float * tcontr = NULL; /* pointer to t-statistic data */
01225 int r; /* number of factor levels */
01226 int nt; /* total number of observations */
01227 int ixyz, nxyz; /* voxel counters */
01228 int nvoxel; /* output voxel # */
01229 int num_contr; /* number of user requested contrasts */
01230 int icontr; /* index of user requested contrast */
01231 int level; /* factor level index */
01232 int ni; /* number of obs. at factor level i */
01233 float fval; /* for calculating std. dev. */
01234 float c; /* contrast coefficient */
01235 float stddev; /* est. std. dev. of contrast */
01236 char filename[MAX_NAME_LENGTH]; /* input data file name */
01237
01238
01239 /*----- initialize local variables -----*/
01240 r = option_data->a;
01241 nt = option_data->nt;
01242 num_contr = option_data->num_acontr;
01243 nxyz = option_data->nxyz;
01244 nvoxel = option_data->nvoxel;
01245
01246 /*----- allocate memory space for calculations -----*/
01247 contr = (float *) malloc(sizeof(float)*nxyz);
01248 tcontr = (float *) malloc(sizeof(float)*nxyz);
01249 if ((contr == NULL) || (tcontr == NULL))
01250 ANOVA_error ("unable to allocate sufficient memory");
01251
01252
01253 /*----- loop over user specified constrasts -----*/
01254 for (icontr = 0; icontr < num_contr; icontr++)
01255 {
01256 volume_zero (contr, nxyz);
01257 fval = 0.0;
01258
01259 /*----- allocate temporary memory space -----*/
01260 fin = (float *) malloc(sizeof(float)*nxyz);
01261 if (fin == NULL) ANOVA_error ("unable to allocate sufficient memory");
01262
01263 for (level = 0; level < r; level++)
01264 {
01265 c = option_data->acontr[icontr][level];
01266 if (c == 0.0) continue;
01267
01268 /*----- add c * treatment level mean to contrast -----*/
01269 sprintf (filename, "y.%d", level);
01270 volume_read (filename, fin, nxyz);
01271 ni = option_data->na[level];
01272 fval += c * c / ni;
01273 for (ixyz = 0; ixyz < nxyz; ixyz++)
01274 contr[ixyz] += c * fin[ixyz] / ni;
01275 }
01276 if (nvoxel > 0)
01277 printf ("Contr no.%d = %f \n", icontr+1, contr[nvoxel-1]);
01278
01279 /*----- divide by estimated standard deviation of the contrast -----*/
01280 volume_read ("sse", fin, nxyz);
01281 for (ixyz = 0; ixyz < nxyz; ixyz++)
01282 {
01283 stddev = sqrt ((fin[ixyz] / (nt-r)) * fval);
01284 if (stddev < EPSILON)
01285 tcontr[ixyz] = 0.0;
01286 else
01287 tcontr[ixyz] = contr[ixyz] / stddev;
01288 }
01289 if (nvoxel > 0)
01290 printf ("t-Contr no.%d = %f \n", icontr+1, tcontr[nvoxel-1]);
01291
01292 /*----- release memory -----*/
01293 free (fin); fin = NULL;
01294
01295 /*----- write out afni data file -----*/
01296 write_afni_data (option_data, option_data->acname[icontr],
01297 contr, tcontr, nt-r, 0);
01298 }
01299
01300 /*----- release memory -----*/
01301 free (tcontr); tcontr = NULL;
01302 free (contr); contr = NULL;
01303
01304 }
|
|
|
Definition at line 1123 of file 3dANOVA.c. References anova_options::a, anova_options::adiffs, anova_options::adname, ANOVA_error(), free, i, malloc, anova_options::na, anova_options::nt, anova_options::num_adiffs, anova_options::nvoxel, anova_options::nxyz, r, volume_read(), and write_afni_data(). Referenced by analyze_results().
01124 {
01125 const float EPSILON = 1.0e-10; /* protect against divide by zero */
01126 float * fin = NULL; /* pointer to float input data */
01127 float * diff = NULL; /* pointer to est. diff. in means */
01128 float * tdiff = NULL; /* pointer to t-statistic data */
01129 int r; /* number of factor levels */
01130 int nt; /* total number of observations */
01131 int ixyz, nxyz; /* voxel counters */
01132 int nvoxel; /* output voxel # */
01133 int num_diffs; /* number of user requested diffs. */
01134 int idiff; /* index for requested differences */
01135 int i, j; /* factor level indices */
01136 int ni, nj; /* number of obs. at levels i and j */
01137 float fval; /* for calculating std. dev. */
01138 float stddev; /* est. std. dev. of difference */
01139 char filename[MAX_NAME_LENGTH]; /* input file name */
01140
01141
01142 /*----- initialize local variables -----*/
01143 r = option_data->a;
01144 nt = option_data->nt;
01145 num_diffs = option_data->num_adiffs;
01146 nxyz = option_data->nxyz;
01147 nvoxel = option_data->nvoxel;
01148
01149 /*----- allocate memory space for calculations -----*/
01150 diff = (float *) malloc(sizeof(float)*nxyz);
01151 tdiff = (float *) malloc(sizeof(float)*nxyz);
01152 if ((diff == NULL) || (tdiff == NULL))
01153 ANOVA_error ("unable to allocate sufficient memory");
01154
01155 /*----- loop over user specified treatment differences -----*/
01156 for (idiff = 0; idiff < num_diffs; idiff++)
01157 {
01158
01159 /*----- allocate temporary memory space -----*/
01160 fin = (float *) malloc(sizeof(float)*nxyz);
01161 if (fin == NULL) ANOVA_error ("unable to allocate sufficient memory");
01162
01163 /*----- read first treatment level mean -----*/
01164 i = option_data->adiffs[idiff][0];
01165 ni = option_data->na[i];
01166 sprintf (filename, "y.%d", i);
01167 volume_read (filename, fin, nxyz);
01168 for (ixyz = 0; ixyz < nxyz; ixyz++)
01169 diff[ixyz] = fin[ixyz] / ni;
01170
01171 /*----- subtract second treatment level mean -----*/
01172 j = option_data->adiffs[idiff][1];
01173 nj = option_data->na[j];
01174 sprintf (filename, "y.%d", j);
01175 volume_read (filename, fin, nxyz);
01176 for (ixyz = 0; ixyz < nxyz; ixyz++)
01177 diff[ixyz] -= fin[ixyz] / nj;
01178 if (nvoxel > 0)
01179 printf ("Diff [%d] - [%d] = %f \n", i+1, j+1, diff[nvoxel-1]);
01180
01181 /*----- divide by estimated standard deviation of difference -----*/
01182 volume_read ("sse", fin, nxyz);
01183 fval = (1.0 / (nt-r)) * ((1.0/ni) + (1.0/nj));
01184 for (ixyz = 0; ixyz < nxyz; ixyz++)
01185 {
01186 stddev = sqrt (fin[ixyz] * fval);
01187 if (stddev < EPSILON)
01188 tdiff[ixyz] = 0.0;
01189 else
01190 tdiff[ixyz] = diff[ixyz] / stddev;
01191 }
01192 if (nvoxel > 0)
01193 printf ("t-Diff [%d] - [%d] = %f \n", i+1, j+1, tdiff[nvoxel-1]);
01194
01195 /*----- release memory -----*/
01196 free (fin); fin = NULL;
01197
01198 /*----- write out afni data file -----*/
01199 write_afni_data (option_data, option_data->adname[idiff],
01200 diff, tdiff, nt-r, 0);
01201
01202 }
01203
01204 /*----- release memory -----*/
01205 free (tdiff); tdiff = NULL;
01206 free (diff); diff = NULL;
01207
01208 }
|
|
|
Definition at line 957 of file 3dANOVA.c. References anova_options::a, ANOVA_error(), free, anova_options::ftrname, malloc, anova_options::nt, anova_options::nvoxel, anova_options::nxyz, r, volume_delete(), volume_read(), and write_afni_data(). Referenced by analyze_results().
00958 {
00959 const float EPSILON = 1.0e-10; /* protect against divide by zero */
00960 float * fin = NULL; /* pointer to input float data */
00961 float * mstr = NULL; /* pointer to MSTR data */
00962 float * ftr = NULL; /* pointer to F due-to-treatment */
00963 int r; /* number of factor levels */
00964 int nt; /* total number of observations */
00965 int ixyz, nxyz; /* voxel counters */
00966 int nvoxel; /* output voxel # */
00967 float fval; /* float value used in calculations */
00968 float mse; /* mean square error */
00969
00970
00971 /*----- initialize local variables -----*/
00972 r = option_data->a;
00973 nt = option_data->nt;
00974 nxyz = option_data->nxyz;
00975 nvoxel = option_data->nvoxel;
00976
00977 /*----- allocate memory space for calculations -----*/
00978 /*----- Note: the order in which memory allocations take place
00979 is important! -----*/
00980 ftr = (float *) malloc(sizeof(float)*nxyz);
00981 mstr = (float *) malloc(sizeof(float)*nxyz);
00982 fin = (float *) malloc(sizeof(float)*nxyz);
00983 if ((fin == NULL) || (ftr == NULL) || (mstr == NULL))
00984 ANOVA_error ("unable to allocate sufficient memory");
00985
00986
00987 /*----- calculate mean SS due to treatments -----*/
00988 volume_read ("sstr", fin, nxyz);
00989 fval = 1.0 / (r - 1.0);
00990 for (ixyz = 0; ixyz < nxyz; ixyz++)
00991 mstr[ixyz] = fin[ixyz] * fval; /*--- MSTR = SSTR / (r-1) ---*/
00992 if (nvoxel > 0)
00993 printf ("MSTR = %f \n", mstr[nvoxel-1]);
00994
00995 /*----- calculate F-statistic FTR = MSTR / MSE -----*/
00996 volume_read ("sse", fin, nxyz);
00997 fval = 1.0 / (nt - r);
00998 for (ixyz = 0; ixyz < nxyz; ixyz++)
00999 {
01000 mse = fin[ixyz] * fval; /*--- MSE = SSE / (nt-r) ---*/
01001 if (mse < EPSILON)
01002 ftr[ixyz] = 0.0;
01003 else
01004 ftr[ixyz] = mstr[ixyz] / mse; /*--- FTR = MSTR / MSE ---*/
01005 }
01006 if (nvoxel > 0)
01007 printf ("FTR = %f \n", ftr[nvoxel-1]);
01008
01009 /*----- release memory -----*/
01010 free (fin); fin = NULL;
01011
01012 /*----- write out afni data file -----*/
01013 for (ixyz = 0; ixyz < nxyz; ixyz++)
01014 mstr[ixyz] = sqrt(mstr[ixyz]); /*-- mstr now holds square root --*/
01015 write_afni_data (option_data, option_data->ftrname, mstr, ftr, r-1, nt-r);
01016
01017 /*----- this data file is no longer needed -----*/
01018 volume_delete ("sstr");
01019
01020 /*----- release memory -----*/
01021 free (mstr); mstr = NULL;
01022 free (ftr); ftr = NULL;
01023
01024 }
|
|
|
Definition at line 1035 of file 3dANOVA.c. References anova_options::a, anova_options::ameans, anova_options::amname, ANOVA_error(), free, malloc, anova_options::na, anova_options::nt, anova_options::num_ameans, anova_options::nvoxel, anova_options::nxyz, r, volume_read(), and write_afni_data(). Referenced by analyze_results().
01036 {
01037 const float EPSILON = 1.0e-10; /* protect against divide by zero */
01038 float * fin = NULL; /* pointer to float input data */
01039 float * mean = NULL; /* pointer to treatment mean data */
01040 float * tmean = NULL; /* pointer to t-statistic data */
01041 int imean; /* output mean option index */
01042 int level; /* factor level index */
01043 int ni; /* number obs. at factor level i */
01044 int ixyz, nxyz; /* voxel counters */
01045 int nvoxel; /* output voxel # */
01046 int r; /* number of factor levels */
01047 int nt; /* total number of observations */
01048 int num_means; /* number of user requested means */
01049 float fval; /* for calculating std. dev. */
01050 float stddev; /* est. std. dev. of factor mean */
01051 char filename[MAX_NAME_LENGTH]; /* input data file name */
01052
01053
01054 /*----- initialize local variables -----*/
01055 r = option_data->a;
01056 nt = option_data->nt;
01057 num_means = option_data->num_ameans;
01058 nxyz = option_data->nxyz;
01059 nvoxel = option_data->nvoxel;
01060
01061 /*----- allocate memory space for calculations -----*/
01062 mean = (float *) malloc(sizeof(float)*nxyz);
01063 tmean = (float *) malloc(sizeof(float)*nxyz);
01064 if ((mean == NULL) || (tmean == NULL))
01065 ANOVA_error ("unable to allocate sufficient memory");
01066
01067 /*----- loop over user specified treatment means -----*/
01068 for (imean = 0; imean < num_means; imean++)
01069 {
01070 level = option_data->ameans[imean];
01071 ni = option_data->na[level];
01072
01073 /*----- allocate temporary memory space -----*/
01074 fin = (float *) malloc(sizeof(float)*nxyz);
01075 if (fin == NULL) ANOVA_error ("unable to allocate sufficient memory");
01076
01077 /*----- estimate factor mean for this treatment level -----*/
01078 sprintf (filename, "y.%d", level);
01079 volume_read (filename, fin, nxyz);
01080 for (ixyz = 0; ixyz < nxyz; ixyz++)
01081 mean[ixyz] = fin[ixyz] / ni;
01082 if (nvoxel > 0)
01083 printf ("Mean [%d] = %f \n", level+1, mean[nvoxel-1]);
01084
01085 /*----- divide by estimated standard deviation of factor mean -----*/
01086 volume_read ("sse", fin, nxyz);
01087 fval = (1.0 / (nt-r)) * (1.0 / ni);
01088 for (ixyz = 0; ixyz < nxyz; ixyz++)
01089 {
01090 stddev = sqrt(fin[ixyz] * fval);
01091 if (stddev < EPSILON)
01092 tmean[ixyz] = 0.0;
01093 else
01094 tmean[ixyz] = mean[ixyz] / stddev;
01095 }
01096 if (nvoxel > 0)
01097 printf ("t-Mean [%d] = %f \n", level+1, tmean[nvoxel-1]);
01098
01099 /*----- release memory -----*/
01100 free (fin); fin = NULL;
01101
01102 /*----- write out afni data file -----*/
01103 write_afni_data (option_data, option_data->amname[imean],
01104 mean, tmean, nt-r, 0);
01105
01106 }
01107
01108 /*----- release memory -----*/
01109 free (tmean); tmean = NULL;
01110 free (mean); mean = NULL;
01111
01112 }
|
|
|
Definition at line 728 of file 3dANOVA.c. References anova_options::a, ANOVA_error(), free, i, malloc, anova_options::na, anova_options::nvoxel, anova_options::nxyz, r, read_afni_data(), volume_write(), volume_zero(), and anova_options::xname. Referenced by calculate_anova().
00729 {
00730 float * x = NULL; /* pointer to original input data */
00731 float * ss = NULL; /* pointer to sum of squares data */
00732 int i; /* factor level index */
00733 int j; /* observation data index */
00734 int r; /* number of factor levels */
00735 int ixyz, nxyz; /* voxel counters */
00736 int nvoxel; /* output voxel # */
00737 float xval; /* float input data */
00738
00739
00740 /*----- initialize local variables -----*/
00741 r = option_data->a;
00742 nxyz = option_data->nxyz;
00743 nvoxel = option_data->nvoxel;
00744
00745 /*----- allocate memory space for calculations -----*/
00746 x = (float *) malloc(sizeof(float)*nxyz);
00747 ss = (float *) malloc(sizeof(float)*nxyz);
00748 if ((x == NULL) || (ss == NULL))
00749 ANOVA_error ("unable to allocate sufficient memory");
00750
00751 /*----- sum the squares of all observations -----*/
00752 volume_zero (ss, nxyz);
00753 for (i = 0; i < r; i++)
00754 for (j = 0; j < option_data->na[i]; j++)
00755 {
00756 read_afni_data (option_data,
00757 option_data->xname[i][0][0][j], x);
00758 for (ixyz = 0; ixyz < nxyz; ixyz++)
00759 {
00760 xval = x[ixyz];
00761 ss[ixyz] += xval * xval;
00762 }
00763 }
00764
00765 if (nvoxel > 0)
00766 printf ("SS = %f \n", ss[nvoxel-1]);
00767 volume_write ("ss", ss, nxyz);
00768
00769 /*----- release memory -----*/
00770 free (ss); ss = NULL;
00771 free (x); x = NULL;
00772
00773 }
|
|
|
Definition at line 899 of file 3dANOVA.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and volume_write().
00900 {
00901 float * sstr = NULL; /* pointer to sstr data */
00902 float * sse = NULL; /* pointer to sse data */
00903 int ixyz, nxyz; /* voxel counters */
00904 int nvoxel; /* output voxel # */
00905
00906
00907 /*----- assign local variables -----*/
00908 nxyz = option_data->nxyz;
00909 nvoxel = option_data->nvoxel;
00910
00911 /*----- allocate memory space for calculations -----*/
00912 sstr = (float *) malloc(sizeof(float)*nxyz);
00913 sse = (float *) malloc(sizeof(float)*nxyz);
00914 if ((sstr == NULL) || (sse == NULL))
00915 ANOVA_error ("unable to allocate sufficient memory");
00916
00917 /*----- read SSTO (total sum of squares) -----*/
00918 volume_read ("ssto", sse, nxyz);
00919
00920 /*----- read SSTR (treatment sum of squares) -----*/
00921 volume_read ("sstr", sstr, nxyz);
00922 for (ixyz = 0; ixyz < nxyz; ixyz++)
00923 {
00924 /*----- SSE = SSTO - SSTR -----*/
00925 sse[ixyz] -= sstr[ixyz];
00926
00927 /*----- protection against round-off error -----*/
00928 if (sse[ixyz] < 0.0) sse[ixyz] = 0.0;
00929 }
00930
00931 /*----- ssto data file is no longer needed -----*/
00932 volume_delete ("ssto");
00933
00934 /*----- save error sum of squares -----*/
00935 if (nvoxel > 0)
00936 printf ("SSE = %f \n", sse[nvoxel-1]);
00937 volume_write ("sse", sse, nxyz);
00938
00939 /*----- release memory -----*/
00940 free (sse); sse = NULL;
00941 free (sstr); sstr = NULL;
00942
00943 }
|
|
|
Definition at line 781 of file 3dANOVA.c. References ANOVA_error(), free, malloc, anova_options::nt, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and volume_write().
00782 {
00783 float * ysum = NULL; /* ptr to sum over all observations */
00784 float * ssto = NULL; /* pointer to ssto data */
00785 int ixyz, nxyz; /* voxel counters */
00786 int nvoxel; /* output voxel # */
00787 int nt; /* total number of observations */
00788 float yval; /* sum over all observations */
00789
00790
00791 /*----- initialize local variables -----*/
00792 nt = option_data->nt;
00793 nxyz = option_data->nxyz;
00794 nvoxel = option_data->nvoxel;
00795
00796 /*----- allocate memory space for calculations -----*/
00797 ysum = (float *) malloc(sizeof(float)*nxyz);
00798 ssto = (float *) malloc(sizeof(float)*nxyz);
00799 if ((ysum == NULL) || (ssto == NULL))
00800 ANOVA_error ("unable to allocate sufficient memory");
00801
00802 /*----- SSTO = SS - ((YSUM)^2)/nt -----*/
00803 volume_read ("ss", ssto, nxyz);
00804 volume_read ("ysum", ysum, nxyz);
00805 for (ixyz = 0; ixyz < nxyz; ixyz++)
00806 {
00807 yval = ysum[ixyz];
00808 ssto[ixyz] -= yval * yval / nt;
00809 }
00810
00811 /*----- ss data file is no longer needed -----*/
00812 volume_delete ("ss");
00813
00814 /*----- save total (corrected) sum of squares -----*/
00815 if (nvoxel > 0)
00816 printf ("SSTO = %f \n", ssto[nvoxel-1]);
00817 volume_write ("ssto", ssto, nxyz);
00818
00819 /*----- release memory -----*/
00820 free (ssto); ssto = NULL;
00821 free (ysum); ysum = NULL;
00822
00823 }
|
|
|
Definition at line 831 of file 3dANOVA.c. References anova_options::a, ANOVA_error(), free, i, malloc, anova_options::na, anova_options::nt, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), volume_write(), and volume_zero().
00832 {
00833 float * y = NULL; /* input data pointer */
00834 float * sstr = NULL; /* sstr data pointer */
00835 int i; /* factor level index */
00836 int ixyz, nxyz; /* voxel counters */
00837 int nvoxel; /* output voxel # */
00838 int ni; /* number of observations at level i */
00839 int nt; /* total number of observations */
00840 float yval; /* temporary float value */
00841 char filename[MAX_NAME_LENGTH]; /* input data file name */
00842
00843
00844 /*----- assign local variables -----*/
00845 nt = option_data->nt;
00846 nxyz = option_data->nxyz;
00847 nvoxel = option_data->nvoxel;
00848
00849 /*----- allocate memory space for calculations -----*/
00850 y = (float *) malloc(sizeof(float)*nxyz);
00851 sstr = (float *) malloc(sizeof(float)*nxyz);
00852 if ((y == NULL) || (sstr == NULL))
00853 ANOVA_error ("unable to allocate sufficient memory");
00854
00855 volume_zero (sstr, nxyz);
00856 for (i = 0; i < option_data->a; i++)
00857 {
00858 ni = option_data->na[i];
00859 sprintf (filename, "y.%d", i);
00860 volume_read (filename, y, nxyz);
00861 for (ixyz = 0; ixyz < nxyz; ixyz++)
00862 {
00863 yval = y[ixyz];
00864 sstr[ixyz] += yval * yval / ni;
00865 }
00866 }
00867
00868 volume_read ("ysum", y, nxyz);
00869 for (ixyz = 0; ixyz < nxyz; ixyz++)
00870 {
00871 yval = y[ixyz];
00872 sstr[ixyz] -= yval * yval / nt;
00873
00874 /*----- protection against round-off error -----*/
00875 if (sstr[ixyz] < 0.0) sstr[ixyz] = 0.0;
00876 }
00877
00878 /*----- ysum data file is no longer needed -----*/
00879 volume_delete ("ysum");
00880
00881 /*----- save treatment sum of squares -----*/
00882 if (nvoxel > 0)
00883 printf ("SSTR = %f \n", sstr[nvoxel-1]);
00884 volume_write ("sstr", sstr, nxyz);
00885
00886 /*----- release memory -----*/
00887 free (sstr); sstr = NULL;
00888 free (y); y = NULL;
00889
00890 }
|
|
|
Definition at line 621 of file 3dANOVA.c. References anova_options::a, ANOVA_error(), free, i, malloc, anova_options::na, anova_options::nvoxel, anova_options::nxyz, r, read_afni_data(), volume_write(), volume_zero(), and anova_options::xname. Referenced by calculate_anova().
00622 {
00623 float * x = NULL; /* pointer to original input data */
00624 float * y = NULL; /* pointer to sum within treatment data */
00625 int i; /* factor level index */
00626 int j; /* observation number index */
00627 int r; /* number of factor levels (treatments) */
00628 int ixyz, nxyz; /* voxel counters */
00629 int nvoxel; /* output voxel # */
00630 char filename[MAX_NAME_LENGTH]; /* name of file for sum within treatment */
00631
00632
00633 /*----- initialize local variables -----*/
00634 r = option_data->a;
00635 nxyz = option_data->nxyz;
00636 nvoxel = option_data->nvoxel;
00637
00638 /*----- allocate memory space for calculations -----*/
00639 x = (float *) malloc(sizeof(float)*nxyz);
00640 y = (float *) malloc(sizeof(float)*nxyz);
00641 if ((x == NULL) || (y == NULL))
00642 ANOVA_error ("unable to allocate sufficient memory");
00643
00644
00645 /*----- loop over treatment levels -----*/
00646 for (i = 0; i < r; i++)
00647 {
00648 /*----- sum observations within a treatment level -----*/
00649 volume_zero (y, nxyz);
00650 for (j = 0; j < option_data->na[i]; j++)
00651 {
00652 read_afni_data (option_data,
00653 option_data->xname[i][0][0][j], x);
00654 if (nvoxel > 0)
00655 printf ("y[%d][%d] = %f \n", i+1, j+1, x[nvoxel-1]);
00656 for (ixyz = 0; ixyz < nxyz; ixyz++)
00657 y[ixyz] += x[ixyz];
00658 }
00659
00660 /*----- save the sum for this treatment level -----*/
00661 if (nvoxel > 0)
00662 printf ("y[%d]. = %f \n", i+1, y[nvoxel-1]);
00663 sprintf (filename, "y.%d", i);
00664 volume_write (filename, y, nxyz);
00665 }
00666
00667 /*----- release memory -----*/
00668 free (y); y = NULL;
00669 free (x); x = NULL;
00670
00671 }
|
|
|
Definition at line 680 of file 3dANOVA.c. References anova_options::a, ANOVA_error(), free, i, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_write(), and volume_zero(). Referenced by calculate_anova().
00681 {
00682 float * y = NULL; /* pointer to sum within treatment data */
00683 float * ysum = NULL; /* pointer to overall sum data */
00684 int i; /* factor level index */
00685 int ixyz, nxyz; /* voxel counters */
00686 int nvoxel; /* output voxel # */
00687 char filename[MAX_NAME_LENGTH]; /* sum within treatment input file name */
00688
00689
00690 /*----- initialize local variables -----*/
00691 nxyz = option_data->nxyz;
00692 nvoxel = option_data->nvoxel;
00693
00694 /*----- allocate memory space for calculations -----*/
00695 y = (float *) malloc(sizeof(float)*nxyz);
00696 ysum = (float *) malloc(sizeof(float)*nxyz);
00697 if ((y == NULL) || (ysum == NULL))
00698 ANOVA_error ("unable to allocate sufficient memory");
00699
00700
00701 /*----- sum over all observations -----*/
00702 volume_zero (ysum, nxyz);
00703 for (i = 0; i < option_data->a; i++)
00704 {
00705 sprintf (filename, "y.%d", i);
00706 volume_read (filename, y, nxyz);
00707 for (ixyz = 0; ixyz < nxyz; ixyz++)
00708 ysum[ixyz] += y[ixyz];
00709 }
00710
00711 if (nvoxel > 0)
00712 printf ("y.. = %f \n", ysum[nvoxel-1]);
00713 volume_write ("ysum",ysum, nxyz);
00714
00715 /*----- release memory -----*/
00716 free (ysum); ysum = NULL;
00717 free (y); y = NULL;
00718
00719 }
|
|
|
Definition at line 511 of file 3dANOVA.c. References anova_options::a, ANOVA_error(), i, anova_options::na, and anova_options::nt.
00512 {
00513 int i; /* factor level index */
00514 char message[MAX_NAME_LENGTH]; /* error message */
00515
00516 if (option_data->a < 2)
00517 ANOVA_error ("must specify number of factor levels (r>1) ");
00518
00519 if (option_data->nt < option_data->a + 1)
00520 ANOVA_error ("too few data sets for ANOVA");
00521
00522 for (i = 0; i < option_data->a; i++)
00523 if (option_data->na[i] == 0)
00524 {
00525 sprintf (message, "level %d has too few data sets", i+1);
00526 ANOVA_error (message);
00527 }
00528 }
|
|
|
Definition at line 482 of file 3dANOVA.c. References anova_options::acname, anova_options::adname, anova_options::amname, anova_options::bucket_filename, check_one_output_file(), anova_options::ftrname, i, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, and anova_options::num_ameans.
00483 {
00484 int i; /* index */
00485
00486 if (option_data->nftr > 0)
00487 check_one_output_file (option_data, option_data->ftrname);
00488
00489 if (option_data->num_ameans > 0)
00490 for (i = 0; i < option_data->num_ameans; i++)
00491 check_one_output_file (option_data, option_data->amname[i]);
00492
00493 if (option_data->num_adiffs > 0)
00494 for (i = 0; i < option_data->num_adiffs; i++)
00495 check_one_output_file (option_data, option_data->adname[i]);
00496
00497 if (option_data->num_acontr > 0)
00498 for (i = 0; i < option_data->num_acontr; i++)
00499 check_one_output_file (option_data, option_data->acname[i]);
00500
00501 if (option_data->bucket_filename != NULL)
00502 check_one_output_file (option_data, option_data->bucket_filename);
00503 }
|
|
|
Definition at line 452 of file 3dANOVA.c. References anova_options::a, check_one_temporary_file(), and i.
00453 {
00454 char filename[MAX_NAME_LENGTH]; /* temporary file name */
00455
00456 int i; /* file counter */
00457
00458 for (i = 0; i < option_data->a; i++)
00459 {
00460 /*----- temporary file name -----*/
00461 sprintf (filename, "y.%d", i);
00462
00463 /*----- see if file already exists -----*/
00464 check_one_temporary_file (filename);
00465 }
00466
00467
00468 check_one_temporary_file ("ysum");
00469 check_one_temporary_file ("ss");
00470 check_one_temporary_file ("ssto");
00471 check_one_temporary_file ("sstr");
00472 check_one_temporary_file ("sse");
00473
00474 }
|
|
|
Definition at line 1364 of file 3dANOVA.c. References anova_options::acname, add_file_name(), ADN_directory_name, ADN_none, anova_options::adname, anova_options::amname, anova_options::bucket_filename, DSET_IS_1D, DSET_IS_3D, EDIT_dset_items(), EDIT_empty_copy(), anova_options::first_dataset, anova_options::ftrname, i, ISVALID_3DIM_DATASET, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::session, THD_delete_3dim_dataset(), and THD_open_dataset().
01366 {
01367 char bucket_str[10000]; /* command line for program 3dbucket */
01368 char refit_str[10000]; /* command line for program 3drefit */
01369 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */
01370 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */
01371 int i; /* file index */
01372 int ibrick; /* sub-brick index number */
01373 char str[100]; /* temporary character string */
01374
01375
01376 /*----- read first dataset -----*/
01377 dset = THD_open_dataset (option_data->first_dataset) ;
01378 if( ! ISVALID_3DIM_DATASET(dset) ){
01379 fprintf(stderr,"*** Unable to open dataset file %s\n",
01380 option_data->first_dataset);
01381 exit(1) ;
01382 }
01383
01384 if( DSET_IS_1D(dset) ) USE_1D_filenames(1) ; /* 14 Mar 2003 */
01385 else if( DSET_IS_3D(dset) ) USE_1D_filenames(3) ; /* 21 Mar 2003 */
01386
01387
01388 /*----- make an empty copy of this dataset -----*/
01389 new_dset = EDIT_empty_copy( dset ) ;
01390 THD_delete_3dim_dataset (dset , False); dset = NULL;
01391 EDIT_dset_items (new_dset,
01392 ADN_directory_name, option_data->session,
01393 ADN_none);
01394
01395
01396 /*----- begin command line for program 3dbucket -----*/
01397 strcpy (bucket_str, "3dbucket ");
01398 strcat (bucket_str, " -prefix ");
01399 strcat (bucket_str, option_data->bucket_filename);
01400
01401
01402 /*----- begin command line for program 3drefit -----*/
01403 strcpy (refit_str, "3drefit ");
01404 ibrick = -1;
01405
01406
01407 /*----- make F-statistic sub-bricks -----*/
01408 if (option_data->nftr != 0)
01409 {
01410 add_file_name (new_dset, option_data->ftrname, bucket_str);
01411
01412 ibrick++;
01413 sprintf (str, " -sublabel %d %s:Inten ",
01414 ibrick, option_data->ftrname);
01415 strcat (refit_str, str);
01416
01417 ibrick++;
01418 sprintf (str, " -sublabel %d %s:F-stat ",
01419 ibrick, option_data->ftrname);
01420 strcat (refit_str, str);
01421 }
01422
01423
01424 /*----- make factor level mean sub-bricks -----*/
01425 if (option_data->num_ameans > 0)
01426 for (i = 0; i < option_data->num_ameans; i++)
01427 {
01428 add_file_name (new_dset, option_data->amname[i], bucket_str);
01429
01430 ibrick++;
01431 sprintf (str, " -sublabel %d %s:Mean ",
01432 ibrick, option_data->amname[i]);
01433 strcat (refit_str, str);
01434
01435 ibrick++;
01436 sprintf (str, " -sublabel %d %s:t-stat ",
01437 ibrick, option_data->amname[i]);
01438 strcat (refit_str, str);
01439 }
01440
01441
01442 /*----- make difference in factor level means sub-bricks -----*/
01443 if (option_data->num_adiffs > 0)
01444 for (i = 0; i < option_data->num_adiffs; i++)
01445 {
01446 add_file_name (new_dset, option_data->adname[i], bucket_str);
01447
01448 ibrick++;
01449 sprintf (str, " -sublabel %d %s:Diff ",
01450 ibrick, option_data->adname[i]);
01451 strcat (refit_str, str);
01452
01453 ibrick++;
01454 sprintf (str, " -sublabel %d %s:t-stat ",
01455 ibrick, option_data->adname[i]);
01456 strcat (refit_str, str);
01457 }
01458
01459
01460 /*----- make contrast in factor level means sub-bricks -----*/
01461 if (option_data->num_acontr > 0)
01462 for (i = 0; i < option_data->num_acontr; i++)
01463 {
01464 add_file_name (new_dset, option_data->acname[i], bucket_str);
01465
01466 ibrick++;
01467 sprintf (str, " -sublabel %d %s:Contr ",
01468 ibrick, option_data->acname[i]);
01469 strcat (refit_str, str);
01470
01471 ibrick++;
01472 sprintf (str, " -sublabel %d %s:t-stat ",
01473 ibrick, option_data->acname[i]);
01474 strcat (refit_str, str);
01475 }
01476
01477
01478 /*----- invoke program 3dbucket to generate bucket type output dataset
01479 by concatenating previous output files -----*/
01480 printf("Writing `bucket' dataset ");
01481 printf("into %s\n", option_data->bucket_filename);
01482 fprintf(stderr,"RUNNING COMMAND: %s\n",bucket_str);
01483 system (bucket_str);
01484
01485
01486 /*----- invoke program 3drefit to label individual sub-bricks -----*/
01487 add_file_name (new_dset, option_data->bucket_filename, refit_str);
01488 fprintf(stderr,"RUNNING COMMAND: %s\n",refit_str);
01489 system (refit_str);
01490
01491
01492 /*----- release memory -----*/
01493 THD_delete_3dim_dataset (new_dset , False); new_dset = NULL;
01494
01495 }
|
|
|
Definition at line 80 of file 3dANOVA.c. References MASTER_SHORTHELP_STRING.
00081 {
00082 printf
00083 (
00084 "This program performs single factor Analysis of Variance (ANOVA) \n"
00085 "on 3D datasets \n"
00086 " \n"
00087 "--------------------------------------------------------------- \n"
00088 " \n"
00089 "Usage: \n"
00090 "----- \n"
00091 " \n"
00092 "3dANOVA \n"
00093 " -levels r : r = number of factor levels \n"
00094 " \n"
00095 " -dset 1 filename : data set for factor level 1 \n"
00096 " . . . . . . \n"
00097 " -dset 1 filename data set for factor level 1 \n"
00098 " . . . . . . \n"
00099 " -dset r filename data set for factor level r \n"
00100 " . . . . . . \n"
00101 " -dset r filename data set for factor level r \n"
00102 " \n"
00103 " [-voxel num] : screen output for voxel # num \n"
00104 " \n"
00105 " [-diskspace] : print out disk space required for \n"
00106 " program execution \n"
00107 " \n"
00108 "The following commands generate individual AFNI 2-sub-brick datasets: \n"
00109 " (In each case, output is written to the file with the specified \n"
00110 " prefix file name.) \n"
00111 " \n"
00112 " [-ftr prefix] : F-statistic for treatment effect \n"
00113 " \n"
00114 " [-mean i prefix] : estimate of factor level i mean \n"
00115 " \n"
00116 " [-diff i j prefix] : difference between factor levels \n"
00117 " \n"
00118 " [-contr c1...cr prefix] : contrast in factor levels \n"
00119 " \n"
00120 "The following command generates one AFNI 'bucket' type dataset: \n"
00121 " \n"
00122 " [-bucket prefix] : create one AFNI 'bucket' dataset whose \n"
00123 " sub-bricks are obtained by \n"
00124 " concatenating the above output files; \n"
00125 " the output 'bucket' is written to file \n"
00126 " with prefix file name \n"
00127 "\n");
00128
00129 printf
00130 (
00131 "N.B.: For this program, the user must specify 1 and only 1 sub-brick \n"
00132 " with each -dset command. That is, if an input dataset contains \n"
00133 " more than 1 sub-brick, a sub-brick selector must be used, \n"
00134 " e.g., -dset 2 'fred+orig[3]' \n"
00135 );
00136
00137 printf
00138 ("\n"
00139 "Example of 3dANOVA: \n"
00140 "------------------ \n"
00141 " \n"
00142 " Example is based on a study with one factor (independent variable) \n"
00143 " called 'Pictures', with 3 levels: \n"
00144 " (1) Faces, (2) Houses, and (3) Donuts \n"
00145 " \n"
00146 " The ANOVA is being conducted on subject Fred's data: \n"
00147 " \n"
00148 " 3dANOVA -levels 3 \\ \n"
00149 " -dset 1 fred_Faces+tlrc \\ \n"
00150 " -dset 2 fred_Houses+tlrc \\ \n"
00151 " -dset 3 fred_Donuts+tlrc \\ \n"
00152 " -ftr Pictures \\ \n"
00153 " -mean 1 Faces \\ \n"
00154 " -mean 2 Houses \\ \n"
00155 " -mean 3 Donuts \\ \n"
00156 " -diff 1 2 FvsH \\ \n"
00157 " -diff 2 3 HvsD \\ \n"
00158 " -diff 1 3 FvsD \\ \n"
00159 " -contr 1 1 -1 FHvsD \\ \n"
00160 " -contr -1 1 1 FvsHD \\ \n"
00161 " -contr 1 -1 1 FDvsH \\ \n"
00162 " -bucket fred_ANOVA \n"
00163 );
00164
00165 printf("\n" MASTER_SHORTHELP_STRING );
00166
00167 printf("---------------------------------------------------\n"
00168 "Also see HowTo#5 - Group Analysis on the AFNI website: \n"
00169 "http://afni.nimh.nih.gov/pub/dist/HOWTO/howto/ht05_group/html/index.shtml\n"
00170 "\n" );
00171
00172 exit(0);
00173 }
|
|
||||||||||||||||
|
Definition at line 180 of file 3dANOVA.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::bucket_filename, anova_options::datum, anova_options::diskspace, display_help_menu(), DSET_NVALS, anova_options::ftrname, i, initialize_options(), ISVALID_3DIM_DATASET, malloc, MAX_CONTR, MAX_DIFFS, MAX_LEVELS, MAX_MEANS, anova_options::na, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::nvoxel, PROGRAM_NAME, anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), and anova_options::xname.
00181 {
00182 int nopt = 1; /* input option argument counter */
00183 int ival; /* integer input */
00184 int i, j, k; /* factor level counter */
00185 int nijk; /* number of data files in cell i */
00186 float fval; /* float input */
00187 THD_3dim_dataset * dset=NULL; /* test whether data set exists */
00188 char message[MAX_NAME_LENGTH]; /* error message */
00189
00190
00191 /*----- does user request help menu? -----*/
00192 if (argc < 2 || strncmp(argv[1], "-help", 5) == 0) display_help_menu();
00193
00194 /*----- add to program log -----*/
00195 AFNI_logger (PROGRAM_NAME,argc,argv);
00196
00197 /*----- initialize the input options -----*/
00198 initialize_options (option_data);
00199
00200
00201 /*----- main loop over input options -----*/
00202 while (nopt < argc)
00203 {
00204
00205 /*----- allocate memory for storing data file names -----*/
00206 if ((option_data->xname == NULL) && (option_data->a > 0))
00207 {
00208 option_data->xname =
00209 (char *****) malloc (sizeof(char ****) * option_data->a);
00210 for (i = 0; i < option_data->a; i++)
00211 {
00212 option_data->xname[i] =
00213 (char ****) malloc (sizeof(char ***) * 1);
00214 for (j = 0; j < 1; j++)
00215 {
00216 option_data->xname[i][j] =
00217 (char ***) malloc (sizeof(char **) * 1);
00218 for (k = 0; k < 1; k++)
00219 {
00220 option_data->xname[i][j][k] =
00221 (char **) malloc (sizeof(char *) * MAX_OBSERVATIONS);
00222 }
00223 }
00224 }
00225 }
00226
00227
00228 /*----- -diskspace -----*/
00229 if( strncmp(argv[nopt],"-diskspace",5) == 0 )
00230 {
00231 option_data->diskspace = 1;
00232 nopt++ ; continue ; /* go to next arg */
00233 }
00234
00235
00236 /*----- -datum type -----*/
00237 if( strncmp(argv[nopt],"-datum",6) == 0 ){
00238 if( ++nopt >= argc ) ANOVA_error("need an argument after -datum!") ;
00239
00240 if( strcmp(argv[nopt],"short") == 0 ){
00241 option_data->datum = MRI_short ;
00242 } else if( strcmp(argv[nopt],"float") == 0 ){
00243 option_data->datum = MRI_float ;
00244 } else {
00245 char buf[256] ;
00246 sprintf(buf,"-datum of type '%s' is not supported in 3dANOVA!",
00247 argv[nopt] ) ;
00248 ANOVA_error(buf) ;
00249 }
00250 nopt++ ; continue ; /* go to next arg */
00251 }
00252
00253
00254 /*----- -session dirname -----*/
00255 if( strncmp(argv[nopt],"-session",6) == 0 ){
00256 nopt++ ;
00257 if( nopt >= argc ) ANOVA_error("need argument after -session!") ;
00258 strcpy(option_data->session , argv[nopt++]) ;
00259 continue ;
00260 }
00261
00262
00263 /*----- -voxel num -----*/
00264 if (strncmp(argv[nopt], "-voxel", 6) == 0)
00265 {
00266 nopt++;
00267 if (nopt >= argc) ANOVA_error ("need argument after -voxel ");
00268 sscanf (argv[nopt], "%d", &ival);
00269 if (ival <= 0)
00270 ANOVA_error ("illegal argument after -voxel ");
00271 option_data->nvoxel = ival;
00272 nopt++;
00273 continue;
00274 }
00275
00276
00277 /*----- -levels r -----*/
00278 if (strncmp(argv[nopt], "-levels", 7) == 0)
00279 {
00280 nopt++;
00281 if (nopt >= argc) ANOVA_error ("need argument after -levels ");
00282 sscanf (argv[nopt], "%d", &ival);
00283 if ((ival <= 0) || (ival > MAX_LEVELS))
00284 ANOVA_error ("illegal argument after -levels ");
00285 option_data->a = ival;
00286 nopt++;
00287 continue;
00288 }
00289
00290
00291 /*----- -dset level filename -----*/
00292 if (strncmp(argv[nopt], "-dset", 5) == 0)
00293 {
00294 nopt++;
00295 if (nopt+1 >= argc) ANOVA_error ("need 2 arguments after -dset ");
00296 sscanf (argv[nopt], "%d", &ival);
00297 if ((ival <= 0) || (ival > option_data->a))
00298 ANOVA_error ("illegal argument after -dset ");
00299
00300 option_data->na[ival-1] += 1;
00301 nijk = option_data->na[ival-1];
00302 if (nijk > MAX_OBSERVATIONS)
00303 ANOVA_error ("too many data files");
00304
00305 /*--- check whether input files exist ---*/
00306 nopt++;
00307 dset = THD_open_dataset( argv[nopt] ) ;
00308 if( ! ISVALID_3DIM_DATASET(dset) )
00309 {
00310 sprintf(message,"Unable to open dataset file %s\n",
00311 argv[nopt]);
00312 ANOVA_error (message);
00313 }
00314
00315 /*--- check number of selected sub-bricks ---*/
00316 if (DSET_NVALS(dset) != 1)
00317 {
00318 sprintf(message,"Must specify exactly 1 sub-brick for file %s\n",
00319 argv[nopt]);
00320 ANOVA_error (message);
00321 }
00322
00323 THD_delete_3dim_dataset( dset , False ) ; dset = NULL ;
00324
00325 option_data->xname[ival-1][0][0][nijk-1]
00326 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00327 strcpy (option_data->xname[ival-1][0][0][nijk-1],
00328 argv[nopt]);
00329
00330 nopt++;
00331 continue;
00332 }
00333
00334
00335 /*----- -ftr filename -----*/
00336 if (strncmp(argv[nopt], "-ftr", 4) == 0)
00337 {
00338 nopt++;
00339 if (nopt >= argc) ANOVA_error ("need argument after -ftr ");
00340 option_data->nftr = 1;
00341 option_data->ftrname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00342 strcpy (option_data->ftrname, argv[nopt]);
00343 nopt++;
00344 continue;
00345 }
00346
00347
00348 /*----- -mean level filename -----*/
00349 if (strncmp(argv[nopt], "-mean", 5) == 0)
00350 {
00351 nopt++;
00352 if (nopt+1 >= argc) ANOVA_error ("need 2 arguments after -mean ");
00353
00354 option_data->num_ameans++;
00355 if (option_data->num_ameans > MAX_MEANS)
00356 ANOVA_error ("too many factor level mean estimates");
00357
00358 sscanf (argv[nopt], "%d", &ival);
00359 if ((ival <= 0) || (ival > option_data->a))
00360 ANOVA_error ("illegal argument after -mean ");
00361 option_data->ameans[option_data->num_ameans-1] = ival - 1;
00362 nopt++;
00363
00364 option_data->amname[option_data->num_ameans-1]
00365 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00366 strcpy (option_data->amname[option_data->num_ameans-1], argv[nopt]);
00367 nopt++;
00368 continue;
00369 }
00370
00371
00372 /*----- -diff level1 level2 filename -----*/
00373 if (strncmp(argv[nopt], "-diff", 5) == 0)
00374 {
00375 nopt++;
00376 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -diff ");
00377
00378 option_data->num_adiffs++;
00379 if (option_data->num_adiffs > MAX_DIFFS)
00380 ANOVA_error ("too many factor level differences");
00381
00382 sscanf (argv[nopt], "%d", &ival);
00383 if ((ival <= 0) || (ival > option_data->a))
00384 ANOVA_error ("illegal argument after -diff ");
00385 option_data->adiffs[option_data->num_adiffs-1][0] = ival - 1;
00386 nopt++;
00387
00388 sscanf (argv[nopt], "%d", &ival);
00389 if ((ival <= 0) || (ival > option_data->a))
00390 ANOVA_error ("illegal argument after -diff ");
00391 option_data->adiffs[option_data->num_adiffs-1][1] = ival - 1;
00392 nopt++;
00393
00394 option_data->adname[option_data->num_adiffs-1]
00395 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00396 strcpy (option_data->adname[option_data->num_adiffs-1], argv[nopt]);
00397 nopt++;
00398 continue;
00399 }
00400
00401
00402 /*----- -contr c1 ... cr filename -----*/
00403 if (strncmp(argv[nopt], "-contr", 6) == 0)
00404 {
00405 nopt++;
00406 if (nopt + option_data->a >= argc)
00407 ANOVA_error ("need r+1 arguments after -contr ");
00408
00409 option_data->num_acontr++;
00410 if (option_data->num_acontr > MAX_CONTR)
00411 ANOVA_error ("too many factor level contrasts");
00412
00413 for (i = 0; i < option_data->a; i++)
00414 {
00415 sscanf (argv[nopt], "%f", &fval);
00416 option_data->acontr[option_data->num_acontr - 1][i] = fval ;
00417 nopt++;
00418 }
00419
00420 option_data->acname[option_data->num_acontr-1]
00421 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00422 strcpy (option_data->acname[option_data->num_acontr-1], argv[nopt]);
00423 nopt++;
00424 continue;
00425 }
00426
00427
00428 /*----- -bucket filename -----*/
00429 if (strncmp(argv[nopt], "-bucket", 4) == 0)
00430 {
00431 nopt++;
00432 if (nopt >= argc) ANOVA_error ("need argument after -bucket ");
00433 option_data->bucket_filename = malloc (sizeof(char)*MAX_NAME_LENGTH);
00434 strcpy (option_data->bucket_filename, argv[nopt]);
00435 nopt++;
00436 continue;
00437 }
00438
00439
00440 /*----- unknown command -----*/
00441 sprintf (message,"Unrecognized command line option: %s\n", argv[nopt]);
00442 ANOVA_error (message);
00443 }
00444
00445 }
|
|
||||||||||||||||
|
Definition at line 568 of file 3dANOVA.c. References ANOVA_error(), argc, check_disk_space(), check_for_valid_inputs(), check_output_files(), check_temporary_files(), get_dimensions(), get_options(), i, malloc, PROGRAM_NAME, and tross_commandline().
00569 {
00570 int i; /* factor level index */
00571
00572
00573
00574 /*----- save command line for history notes -----*/
00575 commandline = tross_commandline( PROGRAM_NAME , argc,argv ) ;
00576
00577
00578 /*----- allocate memory space for input data -----*/
00579 *option_data = (anova_options *) malloc(sizeof(anova_options));
00580 if (*option_data == NULL)
00581 ANOVA_error ("memory allocation error");
00582
00583 /*----- get command line inputs -----*/
00584 get_options(argc, argv, *option_data);
00585
00586 /*----- use first data set to get data set dimensions -----*/
00587 (*option_data)->first_dataset = (*option_data)->xname[0][0][0][0];
00588 get_dimensions (*option_data);
00589 printf ("Data set dimensions: nx = %d ny = %d nz = %d nxyz = %d \n",
00590 (*option_data)->nx, (*option_data)->ny,
00591 (*option_data)->nz, (*option_data)->nxyz);
00592 if ((*option_data)->nvoxel > (*option_data)->nxyz)
00593 ANOVA_error ("argument of -voxel is too large");
00594
00595 /*----- count number of observations per treatment level -----*/
00596 (*option_data)->nt = 0;
00597 for (i = 0; i < (*option_data)->a; i++)
00598 (*option_data)->nt += (*option_data)->na[i];
00599
00600 /*----- check for valid inputs -----*/
00601 check_for_valid_inputs (*option_data);
00602
00603 /*----- check whether temporary files already exist -----*/
00604 check_temporary_files (*option_data);
00605
00606 /*----- check whether output files already exist -----*/
00607 check_output_files (*option_data);
00608
00609 /*----- check whether there is sufficient disk space -----*/
00610 if ((*option_data)->diskspace) check_disk_space (*option_data);
00611 }
|
|
||||||||||||
|
Definition at line 1582 of file 3dANOVA.c. References addto_args(), analyze_results(), argc, calculate_anova(), free, initialize(), machdep(), mainENTRY, PRINT_VERSION, PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, and terminate().
01583 {
01584 anova_options * option_data = NULL;
01585
01586 #if 0
01587 /*----- Identify software -----*/
01588 printf ("\n\n");
01589 printf ("Program: %s \n", PROGRAM_NAME);
01590 printf ("Author: %s \n", PROGRAM_AUTHOR);
01591 printf ("Initial Release: %s \n", PROGRAM_INITIAL);
01592 printf ("Latest Revision: %s \n", PROGRAM_LATEST);
01593 printf ("\n");
01594 #endif
01595
01596
01597 /*-- 20 Apr 2001: addto the arglist, if user wants to [RWCox] --*/
01598
01599 mainENTRY("3dANOVA main"); machdep(); PRINT_VERSION("3dANOVA");
01600 { int new_argc ; char ** new_argv ;
01601 addto_args( argc , argv , &new_argc , &new_argv ) ;
01602 if( new_argv != NULL ){ argc = new_argc ; argv = new_argv ; }
01603 }
01604
01605 /*----- program initialization -----*/
01606 initialize (argc, argv, &option_data);
01607
01608 /*----- calculate sums of squares -----*/
01609 calculate_anova (option_data);
01610
01611 /*----- generate requested output -----*/
01612 analyze_results (option_data);
01613
01614 /*----- terminate program -----*/
01615 terminate (option_data);
01616 free (option_data); option_data = NULL;
01617
01618 exit(0);
01619 }
|
|
|
Definition at line 535 of file 3dANOVA.c. References anova_options::a, anova_options::bucket_filename, max, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, and r.
00536 {
00537 int r; /* number of factor levels */
00538 int nftr; /* number of F-treatment output files
00539 (0 or 1) */
00540 int nmeans; /* number of estimated mean output files */
00541 int ndiffs; /* number of difference output files */
00542 int ncontr; /* number of contrast output files */
00543 int nout; /* number of output files */
00544 int nmax; /* maximum number of disk files */
00545
00546
00547 /*----- initialize local variables -----*/
00548 r = option_data->a;
00549 nftr = option_data->nftr;
00550 nmeans = option_data->num_ameans;
00551 ndiffs = option_data->num_adiffs;
00552 ncontr = option_data->num_acontr;
00553 nout = nftr + nmeans + ndiffs + ncontr;
00554
00555 nmax = r + 2 + nout;
00556 if (option_data->bucket_filename != NULL)
00557 nmax = max (nmax, 2*nout);
00558
00559 return (nmax);
00560 }
|
|
|
Definition at line 1505 of file 3dANOVA.c. References anova_options::a, anova_options::acname, ADN_directory_name, ADN_none, anova_options::adname, anova_options::amname, anova_options::bucket_filename, create_bucket(), destroy_anova_options(), EDIT_dset_items(), EDIT_empty_copy(), anova_options::first_dataset, anova_options::ftrname, i, ISVALID_3DIM_DATASET, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, remove_dataset(), anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), and volume_delete().
01506 {
01507 int i;
01508 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */
01509 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */
01510 char filename[MAX_NAME_LENGTH];
01511
01512
01513 /*----- remove temporary data files -----*/
01514 volume_delete ("sstr");
01515 volume_delete ("sse");
01516 for (i = 0; i < option_data->a; i++)
01517 {
01518 sprintf (filename, "y.%d", i);
01519 volume_delete (filename);
01520 }
01521
01522
01523 /*----- create bucket dataset -----*/
01524 if (option_data->bucket_filename != NULL)
01525 create_bucket (option_data);
01526
01527
01528 /*----- if 'bucket' datset was created, remove the individual 2-subbrick
01529 data files -----*/
01530 if (option_data->bucket_filename != NULL)
01531 {
01532
01533 /*----- read first dataset -----*/
01534 dset = THD_open_dataset (option_data->first_dataset) ;
01535 if( ! ISVALID_3DIM_DATASET(dset) ){
01536 fprintf(stderr,"*** Unable to open dataset file %s\n",
01537 option_data->first_dataset);
01538 exit(1) ;
01539 }
01540
01541 /*----- make an empty copy of this dataset -----*/
01542 new_dset = EDIT_empty_copy (dset);
01543 THD_delete_3dim_dataset (dset , False); dset = NULL;
01544 EDIT_dset_items (new_dset,
01545 ADN_directory_name, option_data->session,
01546 ADN_none);
01547
01548 /*----- remove F-statistic data file -----*/
01549 if (option_data->nftr != 0)
01550 remove_dataset (new_dset, option_data->ftrname);
01551
01552 /*----- remove mean factor level data files -----*/
01553 if (option_data->num_ameans > 0)
01554 for (i = 0; i < option_data->num_ameans; i++)
01555 remove_dataset (new_dset, option_data->amname[i]);
01556
01557 /*----- remove difference in factor levels data files -----*/
01558 if (option_data->num_adiffs > 0)
01559 for (i = 0; i < option_data->num_adiffs; i++)
01560 remove_dataset (new_dset, option_data->adname[i]);
01561
01562 /*----- remove contrast in factor levels data files -----*/
01563 if (option_data->num_acontr > 0)
01564 for (i = 0; i < option_data->num_acontr; i++)
01565 remove_dataset (new_dset, option_data->acname[i]);
01566
01567 THD_delete_3dim_dataset (new_dset , False); new_dset = NULL;
01568 }
01569
01570
01571 /*----- deallocate memory -----*/
01572 destroy_anova_options (option_data);
01573
01574 }
|