Skip to content

AFNI/NIfTI Server

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

Doxygen Source Code Documentation


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

3dANOVA3.c File Reference

#include "3dANOVA.h"
#include "3dANOVA.lib"

Go to the source code of this file.


Defines

#define PROGRAM_NAME   "3dANOVA3"
#define PROGRAM_AUTHOR   "B. Douglas Ward"
#define PROGRAM_INITIAL   "29 Jan 1997"
#define PROGRAM_LATEST   "19 Jul 2004"
#define SUFFIX   ".3danova3"
#define N_INDEX(i, j, k)   n[(k) + MAX_LEVELS * ((j) + MAX_LEVELS * (i))]

Functions

void display_help_menu ()
void get_options (int argc, char **argv, anova_options *option_data)
void check_temporary_files (anova_options *option_data)
void check_output_files (anova_options *option_data)
void check_for_valid_inputs (anova_options *option_data)
int required_data_files (anova_options *option_data)
void initialize (int argc, char **argv, anova_options **option_data)
void calculate_sum (anova_options *option_data, int ii, int jj, int kk, float *ysum)
void calculate_ss0 (anova_options *option_data)
void calculate_ssi (anova_options *option_data)
void calculate_ssj (anova_options *option_data)
void calculate_ssk (anova_options *option_data)
void calculate_ssij (anova_options *option_data)
void calculate_ssik (anova_options *option_data)
void calculate_ssjk (anova_options *option_data)
void calculate_ssijk (anova_options *option_data)
void calculate_ssijkm (anova_options *option_data)
void calculate_ssto (anova_options *option_data)
void calculate_sse (anova_options *option_data)
void calculate_ssa (anova_options *option_data)
void calculate_ssb (anova_options *option_data)
void calculate_ssc (anova_options *option_data)
void calculate_ssab (anova_options *option_data)
void calculate_ssac (anova_options *option_data)
void calculate_ssca (anova_options *option_data)
void calculate_ssbc (anova_options *option_data)
void calculate_ssabc (anova_options *option_data)
void calculate_ssbca (anova_options *option_data)
void calculate_fa (anova_options *option_data)
void calculate_fb (anova_options *option_data)
void calculate_fc (anova_options *option_data)
void calculate_fab (anova_options *option_data)
void calculate_fbc (anova_options *option_data)
void calculate_fac (anova_options *option_data)
void calculate_fabc (anova_options *option_data)
void calculate_ameans (anova_options *option_data)
void calculate_bmeans (anova_options *option_data)
void calculate_cmeans (anova_options *option_data)
void calculate_xmeans (anova_options *option_data)
void calculate_adifferences (anova_options *option_data)
void calculate_bdifferences (anova_options *option_data)
void calculate_cdifferences (anova_options *option_data)
void calculate_xdifferences (anova_options *option_data)
void calculate_acontrasts (anova_options *option_data)
void calculate_bcontrasts (anova_options *option_data)
void calculate_ccontrasts (anova_options *option_data)
void calculate_anova (anova_options *option_data)
void analyze_results (anova_options *option_data)
void create_bucket (anova_options *option_data)
void terminate (anova_options *option_data)
int main (int argc, char **argv)

Define Documentation

#define N_INDEX i,
j,
k       n[(k) + MAX_LEVELS * ((j) + MAX_LEVELS * (i))]
 

Definition at line 156 of file 3dANOVA3.c.

Referenced by get_options().

#define PROGRAM_AUTHOR   "B. Douglas Ward"
 

Definition at line 51 of file 3dANOVA3.c.

Referenced by main().

#define PROGRAM_INITIAL   "29 Jan 1997"
 

Definition at line 52 of file 3dANOVA3.c.

Referenced by main().

#define PROGRAM_LATEST   "19 Jul 2004"
 

Definition at line 53 of file 3dANOVA3.c.

Referenced by main().

#define PROGRAM_NAME   "3dANOVA3"
 

Definition at line 50 of file 3dANOVA3.c.

Referenced by get_options(), initialize(), and main().

#define SUFFIX   ".3danova3"
 

Definition at line 57 of file 3dANOVA3.c.


Function Documentation

void analyze_results anova_options   option_data
 

Definition at line 4438 of file 3dANOVA3.c.

References calculate_acontrasts(), calculate_adifferences(), calculate_ameans(), calculate_bcontrasts(), calculate_bdifferences(), calculate_bmeans(), calculate_ccontrasts(), calculate_cdifferences(), calculate_cmeans(), calculate_fa(), calculate_fab(), calculate_fabc(), calculate_fac(), calculate_fb(), calculate_fbc(), calculate_fc(), calculate_xdifferences(), calculate_xmeans(), anova_options::nfa, anova_options::nfab, anova_options::nfabc, anova_options::nfac, anova_options::nfb, anova_options::nfbc, anova_options::nfc, 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_ccontr, anova_options::num_cdiffs, anova_options::num_cmeans, anova_options::num_xdiffs, and anova_options::num_xmeans.

04439 {
04440 
04441    /*-----  calculate F-statistic for factor A effect  -----*/
04442    if (option_data->nfa)  calculate_fa (option_data);
04443 
04444    /*-----  calculate F-statistic for factor B effect  -----*/
04445    if (option_data->nfb)  calculate_fb (option_data);
04446 
04447    /*-----  calculate F-statistic for factor C effect  -----*/
04448    if (option_data->nfc)  calculate_fc (option_data);
04449 
04450    /*-----  calculate F-statistic for A*B interaction effect  -----*/
04451    if (option_data->nfab)  calculate_fab (option_data);
04452 
04453    /*-----  calculate F-statistic for A*C interaction effect  -----*/
04454    if (option_data->nfac)  calculate_fac (option_data);
04455 
04456    /*-----  calculate F-statistic for B*C interaction effect  -----*/
04457    if (option_data->nfbc)  calculate_fbc (option_data);
04458 
04459    /*-----  calculate F-statistic for A*B*C interaction effect  -----*/
04460    if (option_data->nfabc)  calculate_fabc (option_data);
04461 
04462    /*-----  estimate level means for factor A  -----*/
04463    if (option_data->num_ameans)  calculate_ameans (option_data);
04464 
04465    /*-----  estimate level means for factor B  -----*/
04466    if (option_data->num_bmeans)  calculate_bmeans (option_data);
04467 
04468    /*-----  estimate level means for factor C  -----*/
04469    if (option_data->num_cmeans)  calculate_cmeans (option_data);
04470 
04471    /*-----  estimate cell means  -----*/
04472    if (option_data->num_xmeans)  calculate_xmeans (option_data);
04473 
04474    /*-----  estimate level differences for factor A  -----*/
04475    if (option_data->num_adiffs)  calculate_adifferences (option_data);
04476 
04477    /*-----  estimate level differences for factor B  -----*/
04478    if (option_data->num_bdiffs)  calculate_bdifferences (option_data);
04479 
04480    /*-----  estimate level differences for factor C  -----*/
04481    if (option_data->num_cdiffs)  calculate_cdifferences (option_data);
04482 
04483    /*-----  estimate differences in cell means  -----*/
04484    if (option_data->num_xdiffs)  calculate_xdifferences (option_data);
04485 
04486    /*-----  estimate level contrasts for factor A  -----*/
04487    if (option_data->num_acontr)  calculate_acontrasts (option_data);
04488 
04489    /*-----  estimate level contrasts for factor B  -----*/
04490    if (option_data->num_bcontr)  calculate_bcontrasts (option_data);
04491 
04492    /*-----  estimate level contrasts for factor C  -----*/
04493    if (option_data->num_ccontr)  calculate_ccontrasts (option_data);
04494 
04495 }

void calculate_acontrasts anova_options   option_data
 

Definition at line 4050 of file 3dANOVA3.c.

References anova_options::a, a, anova_options::acname, anova_options::acontr, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, malloc, anova_options::model, anova_options::n, anova_options::num_acontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_zero(), and write_afni_data().

Referenced by analyze_results().

04051 {
04052   const float  EPSILON = 1.0e-10;     /* protect against divide by zero */
04053   float * contr = NULL;               /* pointer to contrast estimate */
04054   float * tcontr = NULL;              /* pointer to t-statistic data */
04055   int a;                              /* number of levels for factor A */
04056   int b;                              /* number of levels for factor B */
04057   int c;                              /* number of levels for factor C */
04058   int n;                              /* number of observations per cell */
04059   int ixyz, nxyz;                     /* voxel counters */
04060   int nvoxel;                         /* output voxel # */
04061   int num_contr;                      /* number of user requested contrasts */
04062   int icontr;                         /* index of user requested contrast */
04063   int level;                          /* factor level index */
04064   int df;                             /* degrees of freedom for t-test */
04065   float fval;                         /* for calculating std. dev. */
04066   float coef;                         /* contrast coefficient */
04067   float stddev;                       /* est. std. dev. of contrast */
04068   char filename[MAX_NAME_LENGTH];     /* input data file name */
04069   
04070   
04071   /*----- initialize local variables -----*/
04072   a = option_data->a;
04073   b = option_data->b;
04074   c = option_data->c;
04075   n = option_data->n;
04076   num_contr = option_data->num_acontr;
04077   nxyz = option_data->nxyz;
04078   nvoxel = option_data->nvoxel;
04079   
04080   /*----- allocate memory space for calculations -----*/
04081   contr  = (float *) malloc(sizeof(float)*nxyz);
04082   tcontr = (float *) malloc(sizeof(float)*nxyz);
04083   if ((contr == NULL) || (tcontr == NULL))
04084     ANOVA_error ("unable to allocate sufficient memory");
04085   
04086   
04087   /*----- loop over user specified constrasts -----*/
04088   for (icontr = 0;  icontr < num_contr;  icontr++)
04089     {
04090       volume_zero (contr, nxyz);
04091       fval = 0.0;
04092       
04093       for (level = 0;  level < a;  level++)
04094         {
04095           coef = option_data->acontr[icontr][level]; 
04096           if (coef == 0.0) continue; 
04097           
04098           /*----- add coef * treatment level mean to contrast -----*/
04099           calculate_sum (option_data, level, -1, -1, tcontr);
04100           fval += coef * coef / (b*c*n);
04101           for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04102             contr[ixyz] += coef * tcontr[ixyz] / (b*c*n);
04103         }
04104 
04105       if (nvoxel > 0)
04106         printf ("No.%d contrast for factor A = %f \n", 
04107                 icontr+1, contr[nvoxel-1]);
04108       
04109       /*----- standard deviation depends on model type -----*/
04110       switch (option_data->model)
04111         {
04112         case 1:
04113           volume_read ("sse", tcontr, nxyz); 
04114           df = a * b * c * (n-1);
04115           break;
04116         case 4:
04117           volume_read ("ssac", tcontr, nxyz); 
04118           df = (a-1) * (c-1);
04119           break;
04120         case 5:
04121           volume_read ("ssca", tcontr, nxyz); 
04122           df = a * (c-1);
04123           break;
04124         }
04125 
04126       /*----- divide by estimated standard deviation of the contrast -----*/
04127       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04128         {
04129           stddev = sqrt ((tcontr[ixyz] / df) * fval);
04130           if (stddev < EPSILON)
04131             tcontr[ixyz] = 0.0;
04132           else
04133             tcontr[ixyz] = contr[ixyz] / stddev;
04134         }   
04135       
04136       if (nvoxel > 0)
04137         printf ("t of No.%d contrast for factor A = %f \n", 
04138                 icontr+1, tcontr[nvoxel-1]);
04139       
04140       /*----- write out afni data file -----*/
04141       write_afni_data (option_data, option_data->acname[icontr], 
04142                        contr, tcontr, df, 0);
04143       
04144     }
04145   
04146   /*----- release memory -----*/
04147   free (tcontr);   tcontr = NULL;
04148   free (contr);    contr = NULL;
04149   
04150 }

void calculate_adifferences anova_options   option_data
 

Definition at line 3646 of file 3dANOVA3.c.

References anova_options::a, a, anova_options::adiffs, anova_options::adname, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), 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().

Referenced by analyze_results().

03647 {
03648   const float  EPSILON = 1.0e-10;     /* protect against divide by zero */
03649   float * diff = NULL;                /* pointer to est. diff. in means */
03650   float * tdiff = NULL;               /* pointer to t-statistic data */
03651   int a;                              /* number of levels for factor A */
03652   int b;                              /* number of levels for factor B */
03653   int c;                              /* number of levels for factor C */
03654   int n;                              /* number of observations per cell */
03655   int ixyz, nxyz;                     /* voxel counters */
03656   int nvoxel;                         /* output voxel # */
03657   int num_diffs;                      /* number of user requested diffs. */
03658   int idiff;                          /* index for requested differences */
03659   int i, j;                           /* factor level indices */
03660   int df;                             /* degrees of freedom for t-test */
03661   float fval;                         /* for calculating std. dev. */
03662   float stddev;                       /* est. std. dev. of difference */
03663   char filename[MAX_NAME_LENGTH];     /* input file name */
03664   
03665   
03666   /*----- initialize local variables -----*/
03667   a = option_data->a;
03668   b = option_data->b;
03669   c = option_data->c;
03670   n = option_data->n;
03671   num_diffs = option_data->num_adiffs;
03672   nxyz = option_data->nxyz;
03673   nvoxel = option_data->nvoxel;
03674   
03675   /*----- allocate memory space for calculations -----*/
03676   diff = (float *) malloc(sizeof(float)*nxyz);
03677   tdiff = (float *) malloc(sizeof(float)*nxyz);
03678   if ((diff == NULL) || (tdiff == NULL))
03679     ANOVA_error ("unable to allocate sufficient memory");
03680   
03681   /*----- loop over user specified treatment differences -----*/
03682   for (idiff = 0;  idiff < num_diffs;  idiff++)
03683     {
03684 
03685       /*----- read first treatment level mean -----*/
03686       i = option_data->adiffs[idiff][0];
03687       calculate_sum (option_data, i, -1, -1, diff);
03688       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03689         diff[ixyz] = diff[ixyz] / (b*c*n);
03690       
03691       /*----- subtract second treatment level mean -----*/
03692       j = option_data->adiffs[idiff][1];
03693       calculate_sum (option_data, j, -1, -1, tdiff);
03694       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03695         diff[ixyz] -= tdiff[ixyz] / (b*c*n);
03696       if (nvoxel > 0)
03697         printf ("Difference of factor A level %d - level %d = %f \n", 
03698                 i+1, j+1, diff[nvoxel-1]);
03699 
03700       /*----- standard deviation depends on model type -----*/
03701       switch (option_data->model)
03702         {
03703         case 1:
03704           volume_read ("sse", tdiff, nxyz); 
03705           df = a * b * c * (n-1);
03706           break;
03707         case 4:
03708           volume_read ("ssac", tdiff, nxyz); 
03709           df = (a-1) * (c-1);
03710           break;
03711         case 5:
03712           volume_read ("ssca", tdiff, nxyz); 
03713           df = a * (c-1);
03714           break;
03715         }
03716       
03717       /*----- divide by estimated standard deviation of difference -----*/  
03718       fval = (1.0 / df) * (2.0 / (b*c*n));
03719       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03720         {
03721           stddev = sqrt (tdiff[ixyz] * fval);
03722           if (stddev < EPSILON)
03723             tdiff[ixyz] = 0.0;
03724           else
03725             tdiff[ixyz] = diff[ixyz] / stddev;
03726         } 
03727       
03728       if (nvoxel > 0)
03729         printf ("t for difference of factor A level %d - level %d = %f \n", 
03730                 i+1, j+1, tdiff[nvoxel-1]);
03731       
03732       /*----- write out afni data file -----*/
03733       write_afni_data (option_data, option_data->adname[idiff], 
03734                        diff, tdiff, df, 0);
03735       
03736     }
03737   
03738   /*----- release memory -----*/
03739   free (tdiff);   tdiff = NULL;
03740   free (diff);    diff = NULL;
03741   
03742 }

void calculate_ameans anova_options   option_data
 

Definition at line 3275 of file 3dANOVA3.c.

References anova_options::a, a, anova_options::ameans, anova_options::amname, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, malloc, anova_options::model, anova_options::n, anova_options::num_ameans, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

03276 {
03277   const float  EPSILON = 1.0e-10;    /* protect against divide by zero */
03278   float * mean = NULL;               /* pointer to treatment mean data */
03279   float * tmean = NULL;              /* pointer to t-statistic data */
03280   int a;                             /* number of levels for factor A */
03281   int b;                             /* number of levels for factor B */
03282   int c;                             /* number of levels for factor C */
03283   int n;                             /* number of observations per cell */
03284   int ixyz, nxyz;                    /* voxel counters */
03285   int nvoxel;                        /* output voxel # */
03286   int num_means;                     /* number of user requested means */
03287   int imean;                         /* output mean option index */
03288   int level;                         /* factor A level index */
03289   int df;                            /* degrees of freedom for t-test */
03290   float fval;                        /* for calculating std. dev. */
03291   float stddev;                      /* est. std. dev. of factor mean */
03292   char filename[MAX_NAME_LENGTH];    /* input data file name */
03293  
03294 
03295   /*----- initialize local variables -----*/
03296   a = option_data->a;
03297   b = option_data->b;
03298   c = option_data->c;
03299   n = option_data->n;
03300   num_means = option_data->num_ameans;
03301   nxyz = option_data->nxyz;
03302   nvoxel = option_data->nvoxel;
03303 
03304   /*----- allocate memory space for calculations -----*/
03305   mean = (float *) malloc(sizeof(float)*nxyz);
03306   tmean = (float *) malloc(sizeof(float)*nxyz);
03307   if ((mean == NULL) || (tmean == NULL))  
03308     ANOVA_error ("unable to allocate sufficient memory");
03309    
03310   /*----- loop over user specified treatment means -----*/ 
03311   for (imean = 0;  imean < num_means;  imean++)
03312     {
03313       level = option_data->ameans[imean];
03314       
03315       /*----- estimate factor mean for this treatment level -----*/
03316       calculate_sum (option_data, level, -1, -1, mean);
03317       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03318         mean[ixyz] = mean[ixyz] / (b*c*n);
03319       if (nvoxel > 0)
03320         printf ("Mean of factor A level %d = %f \n", level+1, mean[nvoxel-1]);
03321       
03322       /*----- standard deviation depends on model type -----*/
03323       switch (option_data->model)
03324         {
03325         case 1:
03326           volume_read ("sse", tmean, nxyz); 
03327           df = a * b * c * (n-1);
03328           break;
03329         case 4:
03330           volume_read ("ssac", tmean, nxyz); 
03331           df = (a-1) * (c-1);
03332           break;
03333         case 5:
03334           volume_read ("ssca", tmean, nxyz); 
03335           df = a * (c-1);
03336           break;
03337         }
03338 
03339       /*----- divide by estimated standard deviation of factor mean -----*/
03340       fval = (1.0 / df) * (1.0 / (b*c*n));
03341       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03342         {
03343           stddev =  sqrt(tmean[ixyz] * fval);
03344           if (stddev < EPSILON)
03345             tmean[ixyz] = 0.0;
03346           else
03347             tmean[ixyz] = mean[ixyz] / stddev;
03348         }
03349       
03350       if (nvoxel > 0)
03351         printf ("t for mean of factor A level %d = %f \n", 
03352                 level+1, tmean[nvoxel-1]);
03353       
03354       /*----- write out afni data file -----*/
03355       write_afni_data (option_data, option_data->amname[imean], 
03356                        mean, tmean, df, 0);
03357       
03358     }
03359   
03360   /*----- release memory -----*/
03361   free (tmean);   tmean = NULL;
03362   free (mean);    mean = NULL;
03363 }

void calculate_anova anova_options   option_data
 

Definition at line 4364 of file 3dANOVA3.c.

References calculate_ss0(), calculate_ssa(), calculate_ssab(), calculate_ssabc(), calculate_ssac(), calculate_ssb(), calculate_ssbc(), calculate_ssbca(), calculate_ssc(), calculate_ssca(), calculate_sse(), calculate_ssi(), calculate_ssij(), calculate_ssijk(), calculate_ssijkm(), calculate_ssik(), calculate_ssj(), calculate_ssjk(), calculate_ssk(), calculate_ssto(), anova_options::model, anova_options::n, and volume_delete().

Referenced by main().

04365 {
04366 
04367   /*----- calculate various sum and sums of squares -----*/
04368   calculate_ss0 (option_data);
04369   calculate_ssi (option_data);
04370   calculate_ssj (option_data);
04371   if (option_data->model != 5)  calculate_ssk (option_data);
04372   calculate_ssij (option_data);
04373   calculate_ssik (option_data);
04374   if (option_data->model != 5)  calculate_ssjk (option_data);
04375   calculate_ssijk (option_data);
04376   if (option_data->n != 1)  calculate_ssijkm (option_data);
04377 
04378 
04379   /*-----  calculate total (corrected for the mean) sum of squares  -----*/
04380   calculate_ssto (option_data);
04381   if (option_data->n != 1)  volume_delete ("ssijkm");
04382   
04383   /*-----  calculate error sum of squares  -----*/
04384   if (option_data->n != 1)  calculate_sse (option_data);
04385   volume_delete ("ssijk");
04386   
04387   /*-----  calculate sum of squares due to A effect  -----*/
04388   calculate_ssa (option_data);
04389   volume_delete ("ssi");
04390   
04391   /*-----  calculate sum of squares due to B effect  -----*/
04392   calculate_ssb (option_data);
04393   volume_delete ("ssj");
04394   
04395   if (option_data->model != 5)
04396     {
04397       /*-----  calculate sum of squares due to C effect  -----*/
04398       calculate_ssc (option_data);
04399       volume_delete ("ssk");
04400     }
04401   
04402   /*-----  calculate sum of squares due to A*B interaction  -----*/
04403   calculate_ssab (option_data);
04404   volume_delete ("ssij");
04405   
04406   if (option_data->model != 5)
04407     /*-----  calculate sum of squares due to A*C interaction  -----*/
04408     calculate_ssac (option_data);
04409   else
04410     /*-----  calculate sum of squares due to C(A) effect  -----*/
04411     calculate_ssca (option_data);
04412   volume_delete ("ssik");
04413   
04414   if (option_data->model != 5)
04415     {
04416       /*-----  calculate sum of squares due to B*C interaction  -----*/
04417       calculate_ssbc (option_data);
04418       volume_delete ("ssjk");
04419     }
04420   
04421   volume_delete ("ss0");
04422   
04423   if (option_data->model != 5)
04424     /*-----  calculate sum of squares due to A*B*C interaction  -----*/
04425     calculate_ssabc (option_data);
04426   else
04427     /*-----  calculate sum of squares due to B*C(A) interaction  -----*/
04428     calculate_ssbca (option_data);
04429   volume_delete ("ssto");
04430 }

void calculate_bcontrasts anova_options   option_data
 

Definition at line 4160 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bcname, anova_options::bcontr, anova_options::c, c, calculate_sum(), free, malloc, anova_options::model, anova_options::n, anova_options::num_bcontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_zero(), and write_afni_data().

Referenced by analyze_results().

04161 {
04162   const float  EPSILON = 1.0e-10;     /* protect against divide by zero */
04163   float * contr = NULL;               /* pointer to contrast estimate */
04164   float * tcontr = NULL;              /* pointer to t-statistic data */
04165   int a;                              /* number of levels for factor A */
04166   int b;                              /* number of levels for factor B */
04167   int c;                              /* number of levels for factor C */
04168   int n;                              /* number of observations per cell */
04169   int ixyz, nxyz;                     /* voxel counters */
04170   int nvoxel;                         /* output voxel # */
04171   int num_contr;                      /* number of user requested contrasts */
04172   int icontr;                         /* index of user requested contrast */
04173   int level;                          /* factor level index */
04174   int df;                             /* degrees of freedom for t-test */
04175   float fval;                         /* for calculating std. dev. */
04176   float coef;                         /* contrast coefficient */
04177   float stddev;                       /* est. std. dev. of contrast */
04178   char filename[MAX_NAME_LENGTH];     /* input data file name */
04179   
04180   
04181   /*----- initialize local variables -----*/
04182   a = option_data->a;
04183   b = option_data->b;
04184   c = option_data->c;
04185   n = option_data->n;
04186   num_contr = option_data->num_bcontr;
04187   nxyz = option_data->nxyz;
04188   nvoxel = option_data->nvoxel;
04189   
04190   /*----- allocate memory space for calculations -----*/
04191   contr  = (float *) malloc(sizeof(float)*nxyz);
04192   tcontr = (float *) malloc(sizeof(float)*nxyz);
04193   if ((contr == NULL) || (tcontr == NULL))
04194     ANOVA_error ("unable to allocate sufficient memory");
04195   
04196   
04197   /*----- loop over user specified constrasts -----*/
04198   for (icontr = 0;  icontr < num_contr;  icontr++)
04199     {
04200       volume_zero (contr, nxyz);
04201       fval = 0.0;
04202       
04203       for (level = 0;  level < b;  level++)
04204         {
04205           coef = option_data->bcontr[icontr][level]; 
04206           if (coef == 0.0) continue; 
04207           
04208           /*----- add coef * treatment level mean to contrast -----*/
04209           calculate_sum (option_data, -1, level, -1, tcontr);
04210           fval += coef * coef / (a*c*n);
04211           for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04212             contr[ixyz] += coef * tcontr[ixyz] / (a*c*n);
04213         }
04214 
04215       if (nvoxel > 0)
04216         printf ("No.%d contrast for factor B = %f \n", 
04217                 icontr+1, contr[nvoxel-1]);
04218       
04219       /*----- standard deviation depends on model type -----*/
04220       switch (option_data->model)
04221         {
04222         case 1:
04223           volume_read ("sse", tcontr, nxyz); 
04224           df = a * b * c * (n-1);
04225           break;
04226         case 4:
04227           volume_read ("ssbc", tcontr, nxyz); 
04228           df = (b-1) * (c-1);
04229           break;
04230         case 5:
04231           volume_read ("ssbca", tcontr, nxyz); 
04232           df = a * (b-1) * (c-1);
04233           break;
04234         }
04235 
04236       /*----- divide by estimated standard deviation of the contrast -----*/
04237       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04238         {
04239           stddev = sqrt ((tcontr[ixyz] / df) * fval);
04240           if (stddev < EPSILON)
04241             tcontr[ixyz] = 0.0;
04242           else
04243             tcontr[ixyz] = contr[ixyz] / stddev;
04244         }   
04245       
04246       if (nvoxel > 0)
04247         printf ("t of No.%d contrast for factor B = %f \n", 
04248                 icontr+1, tcontr[nvoxel-1]);
04249       
04250       /*----- write out afni data file -----*/
04251       write_afni_data (option_data, option_data->bcname[icontr], 
04252                        contr, tcontr, df, 0);
04253       
04254     }
04255   
04256   /*----- release memory -----*/
04257   free (tcontr);   tcontr = NULL;
04258   free (contr);    contr = NULL;
04259   
04260 }

void calculate_bdifferences anova_options   option_data
 

Definition at line 3753 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bdiffs, anova_options::bdname, anova_options::c, c, calculate_sum(), free, i, malloc, anova_options::model, anova_options::n, anova_options::num_bdiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

03754 {
03755   const float  EPSILON = 1.0e-10;     /* protect against divide by zero */
03756   float * diff = NULL;                /* pointer to est. diff. in means */
03757   float * tdiff = NULL;               /* pointer to t-statistic data */
03758   int a;                              /* number of levels for factor A */
03759   int b;                              /* number of levels for factor B */
03760   int c;                              /* number of levels for factor C */
03761   int n;                              /* number of observations per cell */
03762   int ixyz, nxyz;                     /* voxel counters */
03763   int nvoxel;                         /* output voxel # */
03764   int num_diffs;                      /* number of user requested diffs. */
03765   int idiff;                          /* index for requested differences */
03766   int i, j;                           /* factor level indices */
03767   int df;                             /* degrees of freedom for t-test */
03768   float fval;                         /* for calculating std. dev. */
03769   float stddev;                       /* est. std. dev. of difference */
03770   char filename[MAX_NAME_LENGTH];     /* input file name */
03771   
03772   
03773   /*----- initialize local variables -----*/
03774   a = option_data->a;
03775   b = option_data->b;
03776   c = option_data->c;
03777   n = option_data->n;
03778   num_diffs = option_data->num_bdiffs;
03779   nxyz = option_data->nxyz;
03780   nvoxel = option_data->nvoxel;
03781   
03782   /*----- allocate memory space for calculations -----*/
03783   diff = (float *) malloc(sizeof(float)*nxyz);
03784   tdiff = (float *) malloc(sizeof(float)*nxyz);
03785   if ((diff == NULL) || (tdiff == NULL))
03786     ANOVA_error ("unable to allocate sufficient memory");
03787   
03788   /*----- loop over user specified treatment differences -----*/
03789   for (idiff = 0;  idiff < num_diffs;  idiff++)
03790     {
03791 
03792       /*----- read first treatment level mean -----*/
03793       i = option_data->bdiffs[idiff][0];
03794       calculate_sum (option_data, -1, i, -1, diff);
03795       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03796         diff[ixyz] = diff[ixyz] / (a*c*n);
03797       
03798       /*----- subtract second treatment level mean -----*/
03799       j = option_data->bdiffs[idiff][1];
03800       calculate_sum (option_data, -1, j, -1, tdiff);
03801       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03802         diff[ixyz] -= tdiff[ixyz] / (a*c*n);
03803       if (nvoxel > 0)
03804         printf ("Difference of factor B level %d - level %d = %f \n", 
03805                 i+1, j+1, diff[nvoxel-1]);
03806 
03807       /*----- standard deviation depends on model type -----*/
03808       switch (option_data->model)
03809         {
03810         case 1:
03811           volume_read ("sse", tdiff, nxyz); 
03812           df = a * b * c * (n-1);
03813           break;
03814         case 4:
03815           volume_read ("ssbc", tdiff, nxyz); 
03816           df = (b-1) * (c-1);
03817           break;
03818         case 5:
03819           volume_read ("ssbca", tdiff, nxyz); 
03820           df = a * (b-1) * (c-1);
03821           break;
03822         }
03823 
03824       /*----- divide by estimated standard deviation of difference -----*/
03825       fval = (1.0 / df) * (2.0 / (a*c*n));
03826       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03827         {
03828           stddev = sqrt (tdiff[ixyz] * fval);
03829           if (stddev < EPSILON)
03830             tdiff[ixyz] = 0.0;
03831           else
03832             tdiff[ixyz] = diff[ixyz] / stddev;
03833         } 
03834       
03835       if (nvoxel > 0)
03836         printf ("t for difference of factor B level %d - level %d = %f \n", 
03837                 i+1, j+1, tdiff[nvoxel-1]);
03838       
03839       /*----- write out afni data file -----*/
03840       write_afni_data (option_data, option_data->bdname[idiff], 
03841                        diff, tdiff, df, 0);
03842       
03843     }
03844   
03845   /*----- release memory -----*/
03846   free (tdiff);   tdiff = NULL;
03847   free (diff);    diff = NULL;
03848   
03849 }

void calculate_bmeans anova_options   option_data
 

Definition at line 3373 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bmeans, anova_options::bmname, anova_options::c, c, calculate_sum(), free, malloc, anova_options::model, anova_options::n, anova_options::nt, anova_options::num_bmeans, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

03374 {
03375   const float  EPSILON = 1.0e-10;    /* protect against divide by zero */
03376   float * mean = NULL;               /* pointer to treatment mean data */
03377   float * tmean = NULL;              /* pointer to t-statistic data */
03378   int a;                             /* number of levels for factor A */
03379   int b;                             /* number of levels for factor B */
03380   int c;                             /* number of levels for factor C */
03381   int n;                             /* number of observations per cell */
03382   int ixyz, nxyz;                    /* voxel counters */
03383   int nvoxel;                        /* output voxel # */
03384   int nt;                            /* total number of observations */
03385   int num_means;                     /* number of user requested means */
03386   int imean;                         /* output mean option index */
03387   int level;                         /* factor B level index */
03388   int df;                            /* degrees of freedom for t-test */
03389   float fval;                        /* for calculating std. dev. */
03390   float stddev;                      /* est. std. dev. of factor mean */
03391   char filename[MAX_NAME_LENGTH];    /* input data file name */
03392  
03393 
03394   /*----- initialize local variables -----*/
03395   a = option_data->a;
03396   b = option_data->b;
03397   c = option_data->c;
03398   n = option_data->n;
03399   nt = option_data->nt;
03400   num_means = option_data->num_bmeans;
03401   nxyz = option_data->nxyz;
03402   nvoxel = option_data->nvoxel;
03403 
03404   /*----- allocate memory space for calculations -----*/
03405   mean = (float *) malloc(sizeof(float)*nxyz);
03406   tmean = (float *) malloc(sizeof(float)*nxyz);
03407   if ((mean == NULL) || (tmean == NULL))  
03408     ANOVA_error ("unable to allocate sufficient memory");
03409    
03410   /*----- loop over user specified treatment means -----*/ 
03411   for (imean = 0;  imean < num_means;  imean++)
03412     {
03413       level = option_data->bmeans[imean];
03414       
03415       /*----- estimate factor mean for this treatment level -----*/
03416       calculate_sum (option_data, -1, level, -1, mean);
03417       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03418         mean[ixyz] = mean[ixyz] / (a*c*n);
03419       if (nvoxel > 0)
03420         printf ("Mean of factor B level %d = %f \n", level+1, mean[nvoxel-1]);
03421       
03422       /*----- standard deviation depends on model type -----*/
03423       switch (option_data->model)
03424         {
03425         case 1:
03426           volume_read ("sse", tmean, nxyz); 
03427           df = a * b * c * (n-1);
03428           break;
03429         case 4:
03430           volume_read ("ssbc", tmean, nxyz); 
03431           df = (b-1) * (c-1);
03432           break;
03433         case 5:
03434           volume_read ("ssbca", tmean, nxyz); 
03435           df = a * (b-1) * (c-1);
03436           break;
03437         }
03438 
03439       /*----- divide by estimated standard deviation of factor mean -----*/
03440       fval = (1.0 / df) * (1.0 / (a*c*n));
03441       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03442         {
03443           stddev =  sqrt(tmean[ixyz] * fval);
03444           if (stddev < EPSILON)
03445             tmean[ixyz] = 0.0;
03446           else
03447             tmean[ixyz] = mean[ixyz] / stddev;
03448         }
03449       if (nvoxel > 0)
03450         printf ("t for mean of factor B level %d = %f \n", 
03451                 level+1, tmean[nvoxel-1]);
03452       
03453       /*----- write out afni data file -----*/
03454       write_afni_data (option_data, option_data->bmname[imean], 
03455                        mean, tmean, df, 0);
03456       
03457     }
03458   
03459   /*----- release memory -----*/
03460   free (tmean);   tmean = NULL;
03461   free (mean);    mean = NULL;
03462 }

void calculate_ccontrasts anova_options   option_data
 

Definition at line 4270 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), anova_options::ccname, anova_options::ccontr, free, malloc, anova_options::n, anova_options::num_ccontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_zero(), and write_afni_data().

Referenced by analyze_results().

04271 {
04272   const float  EPSILON = 1.0e-10;     /* protect against divide by zero */
04273   float * contr = NULL;               /* pointer to contrast estimate */
04274   float * tcontr = NULL;              /* pointer to t-statistic data */
04275   int a;                              /* number of levels for factor A */
04276   int b;                              /* number of levels for factor B */
04277   int c;                              /* number of levels for factor C */
04278   int n;                              /* number of observations per cell */
04279   int ixyz, nxyz;                     /* voxel counters */
04280   int nvoxel;                         /* output voxel # */
04281   int num_contr;                      /* number of user requested contrasts */
04282   int icontr;                         /* index of user requested contrast */
04283   int level;                          /* factor level index */
04284   int df;                             /* degrees of freedom for t-test */
04285   float fval;                         /* for calculating std. dev. */
04286   float coef;                         /* contrast coefficient */
04287   float stddev;                       /* est. std. dev. of contrast */
04288   char filename[MAX_NAME_LENGTH];     /* input data file name */
04289   
04290   
04291   /*----- initialize local variables -----*/
04292   a = option_data->a;
04293   b = option_data->b;
04294   c = option_data->c;
04295   n = option_data->n;
04296   num_contr = option_data->num_ccontr;
04297   nxyz = option_data->nxyz;
04298   nvoxel = option_data->nvoxel;
04299   
04300   /*----- allocate memory space for calculations -----*/
04301   contr  = (float *) malloc(sizeof(float)*nxyz);
04302   tcontr = (float *) malloc(sizeof(float)*nxyz);
04303   if ((contr == NULL) || (tcontr == NULL))
04304     ANOVA_error ("unable to allocate sufficient memory");
04305   
04306   
04307   /*----- loop over user specified constrasts -----*/
04308   for (icontr = 0;  icontr < num_contr;  icontr++)
04309     {
04310       volume_zero (contr, nxyz);
04311       fval = 0.0;
04312       
04313       for (level = 0;  level < c;  level++)
04314         {
04315           coef = option_data->ccontr[icontr][level]; 
04316           if (coef == 0.0) continue; 
04317           
04318           /*----- add coef * treatment level mean to contrast -----*/
04319           calculate_sum (option_data, -1, -1, level, tcontr);
04320           fval += coef * coef / (a*b*n);
04321           for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04322             contr[ixyz] += coef * tcontr[ixyz] / (a*b*n);
04323         }
04324 
04325       if (nvoxel > 0)
04326         printf ("No.%d contrast for factor C = %f \n", 
04327                 icontr+1, contr[nvoxel-1]);
04328       
04329       /*----- standard deviation -----*/
04330       volume_read ("sse", tcontr, nxyz); 
04331       df = a * b * c * (n-1);
04332 
04333       /*----- divide by estimated standard deviation of the contrast -----*/
04334       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04335         {
04336           stddev = sqrt ((tcontr[ixyz] / df) * fval);
04337           if (stddev < EPSILON)
04338             tcontr[ixyz] = 0.0;
04339           else
04340             tcontr[ixyz] = contr[ixyz] / stddev;
04341         }   
04342       
04343       if (nvoxel > 0)
04344         printf ("t of No.%d contrast for factor C = %f \n", 
04345                 icontr+1, tcontr[nvoxel-1]);
04346       
04347       /*----- write out afni data file -----*/
04348       write_afni_data (option_data, option_data->ccname[icontr], 
04349                        contr, tcontr, df, 0);
04350       
04351     }
04352   
04353   /*----- release memory -----*/
04354   free (tcontr);   tcontr = NULL;
04355   free (contr);    contr = NULL;
04356   
04357 }

void calculate_cdifferences anova_options   option_data
 

Definition at line 3860 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), anova_options::cdiffs, anova_options::cdname, free, i, malloc, anova_options::n, anova_options::num_cdiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

03861 {
03862   const float  EPSILON = 1.0e-10;     /* protect against divide by zero */
03863   float * diff = NULL;                /* pointer to est. diff. in means */
03864   float * tdiff = NULL;               /* pointer to t-statistic data */
03865   int a;                              /* number of levels for factor A */
03866   int b;                              /* number of levels for factor B */
03867   int c;                              /* number of levels for factor C */
03868   int n;                              /* number of observations per cell */
03869   int ixyz, nxyz;                     /* voxel counters */
03870   int nvoxel;                         /* output voxel # */
03871   int num_diffs;                      /* number of user requested diffs. */
03872   int idiff;                          /* index for requested differences */
03873   int i, j;                           /* factor level indices */
03874   int df;                             /* degrees of freedom for t-test */
03875   float fval;                         /* for calculating std. dev. */
03876   float stddev;                       /* est. std. dev. of difference */
03877   char filename[MAX_NAME_LENGTH];     /* input file name */
03878   
03879   
03880   /*----- initialize local variables -----*/
03881   a = option_data->a;
03882   b = option_data->b;
03883   c = option_data->c;
03884   n = option_data->n;
03885   num_diffs = option_data->num_cdiffs;
03886   nxyz = option_data->nxyz;
03887   nvoxel = option_data->nvoxel;
03888   
03889   /*----- allocate memory space for calculations -----*/
03890   diff = (float *) malloc(sizeof(float)*nxyz);
03891   tdiff = (float *) malloc(sizeof(float)*nxyz);
03892   if ((diff == NULL) || (tdiff == NULL))
03893     ANOVA_error ("unable to allocate sufficient memory");
03894   
03895   /*----- loop over user specified treatment differences -----*/
03896   for (idiff = 0;  idiff < num_diffs;  idiff++)
03897     {
03898 
03899       /*----- read first treatment level mean -----*/
03900       i = option_data->cdiffs[idiff][0];
03901       calculate_sum (option_data, -1, -1, i, diff);
03902       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03903         diff[ixyz] = diff[ixyz] / (a*b*n);
03904       
03905       /*----- subtract second treatment level mean -----*/
03906       j = option_data->cdiffs[idiff][1];
03907       calculate_sum (option_data, -1, -1, j, tdiff);
03908       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03909         diff[ixyz] -= tdiff[ixyz] / (a*b*n);
03910       if (nvoxel > 0)
03911         printf ("Difference of factor C level %d - level %d = %f \n", 
03912                 i+1, j+1, diff[nvoxel-1]);
03913 
03914       /*----- standard deviation -----*/
03915       volume_read ("sse", tdiff, nxyz); 
03916       df = a * b * c * (n-1);
03917       
03918       /*----- divide by estimated standard deviation of difference -----*/
03919       fval = (1.0 / df) * (2.0 / (a*b*n));
03920       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03921         {
03922           stddev = sqrt (tdiff[ixyz] * fval);
03923           if (stddev < EPSILON)
03924             tdiff[ixyz] = 0.0;
03925           else
03926             tdiff[ixyz] = diff[ixyz] / stddev;
03927         } 
03928       
03929       if (nvoxel > 0)
03930         printf ("t for difference of factor C level %d - level %d = %f \n", 
03931                 i+1, j+1, tdiff[nvoxel-1]);
03932       
03933       /*----- write out afni data file -----*/
03934       write_afni_data (option_data, option_data->cdname[idiff], 
03935                        diff, tdiff, df, 0);
03936       
03937     }
03938   
03939   /*----- release memory -----*/
03940   free (tdiff);   tdiff = NULL;
03941   free (diff);    diff = NULL;
03942   
03943 }

void calculate_cmeans anova_options   option_data
 

Definition at line 3473 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), anova_options::cmeans, anova_options::cmname, free, malloc, anova_options::n, anova_options::nt, anova_options::num_cmeans, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

03474 {
03475   const float  EPSILON = 1.0e-10;    /* protect against divide by zero */
03476   float * mean = NULL;               /* pointer to treatment mean data */
03477   float * tmean = NULL;              /* pointer to t-statistic data */
03478   int a;                             /* number of levels for factor A */
03479   int b;                             /* number of levels for factor B */
03480   int c;                             /* number of levels for factor C */
03481   int n;                             /* number of observations per cell */
03482   int ixyz, nxyz;                    /* voxel counters */
03483   int nvoxel;                        /* output voxel # */
03484   int nt;                            /* total number of observations */
03485   int num_means;                     /* number of user requested means */
03486   int imean;                         /* output mean option index */
03487   int level;                         /* factor C level index */
03488   int df;                            /* degrees of freedom for t-test */
03489   float fval;                        /* for calculating std. dev. */
03490   float stddev;                      /* est. std. dev. of factor mean */
03491   char filename[MAX_NAME_LENGTH];    /* input data file name */
03492  
03493 
03494   /*----- initialize local variables -----*/
03495   a = option_data->a;
03496   b = option_data->b;
03497   c = option_data->c;
03498   n = option_data->n;
03499   df = a * b * c * (n-1);
03500   nt = option_data->nt;
03501   num_means = option_data->num_cmeans;
03502   nxyz = option_data->nxyz;
03503   nvoxel = option_data->nvoxel;
03504 
03505   /*----- allocate memory space for calculations -----*/
03506   mean = (float *) malloc(sizeof(float)*nxyz);
03507   tmean = (float *) malloc(sizeof(float)*nxyz);
03508   if ((mean == NULL) || (tmean == NULL))  
03509     ANOVA_error ("unable to allocate sufficient memory");
03510    
03511   /*----- loop over user specified treatment means -----*/ 
03512   for (imean = 0;  imean < num_means;  imean++)
03513     {
03514       level = option_data->cmeans[imean];
03515       
03516       /*----- estimate factor mean for this treatment level -----*/
03517       calculate_sum (option_data, -1, -1, level, mean);
03518       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03519         mean[ixyz] = mean[ixyz] / (a*b*n);
03520       if (nvoxel > 0)
03521         printf ("Mean of factor C level %d = %f \n", level+1, mean[nvoxel-1]);
03522       
03523       /*----- divide by estimated standard deviation of factor mean -----*/
03524       volume_read ("sse", tmean, nxyz); 
03525       fval = (1.0 / df) * (1.0 / (a*b*n));
03526       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03527         {
03528           stddev =  sqrt(tmean[ixyz] * fval);
03529           if (stddev < EPSILON)
03530             tmean[ixyz] = 0.0;
03531           else
03532             tmean[ixyz] = mean[ixyz] / stddev;
03533         }
03534       if (nvoxel > 0)
03535         printf ("t for mean of factor C level %d = %f \n", 
03536                 level+1, tmean[nvoxel-1]);
03537       
03538       /*----- write out afni data file -----*/
03539       write_afni_data (option_data, option_data->cmname[imean], 
03540                        mean, tmean, df, 0);
03541       
03542     }
03543   
03544   /*----- release memory -----*/
03545   free (tmean);   tmean = NULL;
03546   free (mean);    mean = NULL;
03547 }

void calculate_fa anova_options   option_data
 

Definition at line 2552 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, fa, anova_options::faname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

02553 {
02554   const float  EPSILON = 1.0e-10;      /* protect against divide by zero */
02555   float * msa = NULL;                  /* pointer to MSA data */
02556   float * fa = NULL;                   /* pointer to F due to factor A */
02557   int a;                               /* number of levels for factor A */
02558   int b;                               /* number of levels for factor B */
02559   int c;                               /* number of levels for factor C */
02560   int n;                               /* number of observations per cell */
02561   int ixyz, nxyz;                      /* voxel counters */
02562   int nvoxel;                          /* output voxel # */
02563   int numdf;                           /* numerator degrees of freedom */
02564   int dendf;                           /* denominator degrees of freedom */
02565   float fval;                          /* denominator of F-statistic */
02566   
02567   
02568   /*----- initialize local variables -----*/
02569   a = option_data->a;
02570   b = option_data->b;
02571   c = option_data->c;
02572   n = option_data->n;
02573   nxyz = option_data->nxyz;
02574   nvoxel = option_data->nvoxel;
02575   
02576   /*----- allocate memory space for calculations -----*/
02577   fa = (float *) malloc(sizeof(float)*nxyz);
02578   msa = (float *) malloc(sizeof(float)*nxyz);
02579   if ((fa == NULL) || (msa == NULL))
02580     ANOVA_error ("unable to allocate sufficient memory");
02581   
02582   /*----- calculate mean SS due to factor A -----*/
02583   volume_read ("ssa", msa, nxyz); 
02584   numdf = a - 1; 
02585   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02586     msa[ixyz] = msa[ixyz] / numdf;             
02587   if (nvoxel > 0)
02588     printf ("MSA = %f \n", msa[nvoxel-1]);
02589   
02590   /*----- set up denominator of F-statistic    -----*/
02591   switch (option_data->model)
02592     {
02593     case 1:
02594       volume_read ("sse", fa, nxyz); 
02595       dendf = a * b * c * (n-1);
02596       break;
02597     case 4:
02598       volume_read ("ssac", fa, nxyz); 
02599       dendf = (a-1) * (c-1);
02600       break;
02601     case 5:
02602       volume_read ("ssca", fa, nxyz); 
02603       dendf = a * (c-1);
02604       break;
02605     }
02606 
02607   /*----- calculate F-statistic -----*/
02608   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02609     {
02610       fval = fa[ixyz] / dendf;         
02611       if (fval < EPSILON)
02612         fa[ixyz] = 0.0;
02613       else
02614         fa[ixyz] = msa[ixyz] / fval;            
02615     }
02616   
02617   if (nvoxel > 0)
02618     printf ("F(A) = %f \n", fa[nvoxel-1]);
02619 
02620   /*----- write out afni data file -----*/
02621   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02622     msa[ixyz] = sqrt(msa[ixyz]);        /*-- msa now holds square root --*/
02623   write_afni_data (option_data, option_data->faname, 
02624                    msa, fa, numdf, dendf);
02625 
02626   /*----- release memory -----*/
02627   free (msa);   msa = NULL;
02628   free (fa);    fa = NULL;
02629   
02630 }

void calculate_fab anova_options   option_data
 

Definition at line 2875 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, anova_options::fabname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

02876 {
02877   const float  EPSILON = 1.0e-10;      /* protect against divide by zero */
02878   float * msab = NULL;                 /* pointer to MSAB data */
02879   float * fab = NULL;                  /* pointer to F due to interaction */
02880   int a;                               /* number of levels for factor A */
02881   int b;                               /* number of levels for factor B */
02882   int c;                               /* number of levels for factor C */
02883   int n;                               /* number of observations per cell */
02884   int ixyz, nxyz;                      /* voxel counters */
02885   int nvoxel;                          /* output voxel # */
02886   int numdf;                           /* numerator degrees of freedom */
02887   int dendf;                           /* denominator degrees of freedom */
02888   float fval;                          /* denominator of F-statistic */
02889   
02890   
02891   /*----- initialize local variables -----*/
02892   a = option_data->a;
02893   b = option_data->b;
02894   c = option_data->c;
02895   n = option_data->n;
02896   nxyz = option_data->nxyz;
02897   nvoxel = option_data->nvoxel;
02898    
02899   /*----- allocate memory space for calculations -----*/
02900   fab = (float *) malloc(sizeof(float)*nxyz);
02901   msab = (float *) malloc(sizeof(float)*nxyz);
02902   if ((fab == NULL) || (msab == NULL))
02903     ANOVA_error ("unable to allocate sufficient memory");
02904   
02905   /*----- calculate mean SS due to A*B interaction -----*/
02906   volume_read ("ssab", msab, nxyz); 
02907   numdf = (a-1) * (b-1); 
02908   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02909     msab[ixyz] = msab[ixyz] / numdf;      
02910   if (nvoxel > 0)
02911     printf ("MSAB = %f \n", msab[nvoxel-1]);
02912 
02913   /*----- set up denominator of F-statistic    -----*/
02914   switch (option_data->model)
02915     {
02916     case 1:
02917       volume_read ("sse", fab, nxyz); 
02918       dendf = a * b * c * (n-1);
02919       break;
02920     case 2:
02921     case 3:
02922     case 4:
02923       volume_read ("ssabc", fab, nxyz); 
02924       dendf = (a-1) * (b-1) * (c-1);
02925       break;
02926     case 5:
02927       volume_read ("ssbca", fab, nxyz); 
02928       dendf = a * (b-1) * (c-1);
02929       break;
02930     }
02931 
02932   /*----- calculate F-statistic    -----*/
02933   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02934     {
02935       fval = fab[ixyz] / dendf;  
02936       if (fval < EPSILON)
02937         fab[ixyz] = 0.0;
02938       else
02939         fab[ixyz] = msab[ixyz] / fval;       
02940     }
02941   if (nvoxel > 0)
02942     printf ("F(AB) = %f \n", fab[nvoxel-1]);
02943   
02944   
02945   /*----- write out afni data file -----*/
02946   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02947     msab[ixyz] = sqrt(msab[ixyz]);      /*-- msab now holds square root --*/
02948   write_afni_data (option_data, option_data->fabname, 
02949                    msab, fab, numdf, dendf);
02950   
02951   
02952   /*----- release memory -----*/
02953   free (msab);   msab = NULL;
02954   free (fab);    fab  = NULL;
02955   
02956 }

void calculate_fabc anova_options   option_data
 

Definition at line 3192 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, anova_options::fabcname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

03193 {
03194   const float  EPSILON = 1.0e-10;      /* protect against divide by zero */
03195   float * msabc = NULL;                /* pointer to MSABC data */
03196   float * fabc = NULL;                 /* pointer to F for A*B*C interaction */
03197   int a;                               /* number of levels for factor A */
03198   int b;                               /* number of levels for factor B */
03199   int c;                               /* number of levels for factor C */
03200   int n;                               /* number of observations per cell */
03201   int ixyz, nxyz;                      /* voxel counters */
03202   int nvoxel;                          /* output voxel # */
03203   int numdf;                           /* numerator degrees of freedom */
03204   int dendf;                           /* denominator degrees of freedom */
03205   float fval;                          /* denominator of F-statistic */
03206   
03207   
03208   /*----- initialize local variables -----*/
03209   a = option_data->a;
03210   b = option_data->b;
03211   c = option_data->c;
03212   n = option_data->n;
03213   nxyz = option_data->nxyz;
03214   nvoxel = option_data->nvoxel;
03215    
03216   /*----- allocate memory space for calculations -----*/
03217   fabc = (float *) malloc(sizeof(float)*nxyz);
03218   msabc = (float *) malloc(sizeof(float)*nxyz);
03219   if ((fabc == NULL) || (msabc == NULL))
03220     ANOVA_error ("unable to allocate sufficient memory");
03221   
03222   /*----- calculate mean SS due to A*B*C interaction -----*/
03223   volume_read ("ssabc", msabc, nxyz); 
03224   numdf = (a-1) * (b-1) * (c-1);
03225   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03226     msabc[ixyz] = msabc[ixyz] / numdf; 
03227   if (nvoxel > 0)
03228     printf ("MSABC = %f \n", msabc[nvoxel-1]);
03229  
03230  /*----- set up denominator of F-statistic    -----*/
03231   switch (option_data->model)
03232     {
03233     case 1:
03234     case 2:
03235     case 3:
03236     case 4:
03237       volume_read ("sse", fabc, nxyz); 
03238       dendf = a * b * c * (n-1);
03239       break;
03240     }
03241  
03242   /*----- calculate F-statistic    -----*/
03243   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03244     {
03245       fval = fabc[ixyz] / dendf;              
03246       if (fval < EPSILON)
03247         fabc[ixyz] = 0.0;
03248       else
03249         fabc[ixyz] = msabc[ixyz] / fval;
03250     }
03251   if (nvoxel > 0)
03252     printf ("F(ABC) = %f \n", fabc[nvoxel-1]);
03253   
03254   /*----- write out afni data file -----*/
03255   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03256     msabc[ixyz] = sqrt(msabc[ixyz]);      /*-- msabc now holds square root --*/
03257   write_afni_data (option_data, option_data->fabcname, 
03258                    msabc, fabc, numdf, dendf);
03259   
03260   /*----- release memory -----*/
03261   free (msabc);   msabc = NULL;
03262   free (fabc);    fabc  = NULL;
03263   
03264 }

void calculate_fac anova_options   option_data
 

Definition at line 3097 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, anova_options::facname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

03098 {
03099   const float  EPSILON = 1.0e-10;      /* protect against divide by zero */
03100   float * msac = NULL;                 /* pointer to MSAC data */
03101   float * fac = NULL;                  /* pointer to F for A*C interaction */
03102   int a;                               /* number of levels for factor A */
03103   int b;                               /* number of levels for factor B */
03104   int c;                               /* number of levels for factor C */
03105   int n;                               /* number of observations per cell */
03106   int ixyz, nxyz;                      /* voxel counters */
03107   int nvoxel;                          /* output voxel # */
03108   int numdf;                           /* numerator degrees of freedom */
03109   int dendf;                           /* denominator degrees of freedom */
03110   float fval;                          /* denominator of F-statistic */
03111   
03112   
03113   /*----- initialize local variables -----*/
03114   a = option_data->a;
03115   b = option_data->b;
03116   c = option_data->c;
03117   n = option_data->n;
03118   nxyz = option_data->nxyz;
03119   nvoxel = option_data->nvoxel;
03120    
03121   /*----- allocate memory space for calculations -----*/
03122   fac = (float *) malloc(sizeof(float)*nxyz);
03123   msac = (float *) malloc(sizeof(float)*nxyz);
03124   if ((fac == NULL) || (msac == NULL))
03125     ANOVA_error ("unable to allocate sufficient memory");
03126   
03127   /*----- calculate mean SS due to A*C interaction -----*/
03128   volume_read ("ssac", msac, nxyz); 
03129   numdf = (a-1) * (c-1);
03130   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03131     msac[ixyz] = msac[ixyz] / numdf; 
03132   if (nvoxel > 0)
03133     printf ("MSAC = %f \n", msac[nvoxel-1]);
03134  
03135  /*----- set up denominator of F-statistic    -----*/
03136   switch (option_data->model)
03137     {
03138     case 1:
03139     case 4:
03140       volume_read ("sse", fac, nxyz); 
03141       dendf = a * b * c * (n-1);
03142       break;
03143     case 2:
03144     case 3:
03145       volume_read ("ssabc", fac, nxyz); 
03146       dendf = (a-1) * (b-1) * (c-1);
03147       break;
03148     }
03149  
03150   /*----- calculate F-statistic    -----*/
03151   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03152     {
03153       fval = fac[ixyz] / dendf;              
03154       if (fval < EPSILON)
03155         fac[ixyz] = 0.0;
03156       else
03157         fac[ixyz] = msac[ixyz] / fval;
03158     }
03159   if (nvoxel > 0)
03160     printf ("F(AC) = %f \n", fac[nvoxel-1]);
03161   
03162   /*----- write out afni data file -----*/
03163   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03164     msac[ixyz] = sqrt(msac[ixyz]);      /*-- msac now holds square root --*/
03165   write_afni_data (option_data, option_data->facname, 
03166                    msac, fac, numdf, dendf);
03167   
03168   /*----- release memory -----*/
03169   free (msac);   msac = NULL;
03170   free (fac);    fac  = NULL;
03171   
03172 }

void calculate_fb anova_options   option_data
 

Definition at line 2653 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, fb, anova_options::fbname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

02654 {
02655   const float  EPSILON = 1.0e-10;      /* protect against divide by zero */
02656   float * msb = NULL;                  /* pointer to MSB data */
02657   float * fb = NULL;                   /* pointer to F due to factor B */
02658   int a;                               /* number of levels for factor A */
02659   int b;                               /* number of levels for factor B */
02660   int c;                               /* number of levels for factor C */
02661   int n;                               /* number of observations per cell */
02662   int ixyz, nxyz;                      /* voxel counters */
02663   int nvoxel;                          /* output voxel # */
02664   int numdf;                           /* numerator degrees of freedom */
02665   int dendf;                           /* denominator degrees of freedom */
02666   float fval;                          /* denominator of F-statistic */
02667  
02668 
02669   /*----- initialize local variables -----*/
02670   a = option_data->a;
02671   b = option_data->b;
02672   c = option_data->c;
02673   n = option_data->n;
02674   nxyz = option_data->nxyz;
02675   nvoxel = option_data->nvoxel;
02676    
02677   /*----- allocate memory space for calculations -----*/
02678   fb = (float *) malloc(sizeof(float)*nxyz);
02679   msb = (float *) malloc(sizeof(float)*nxyz);
02680   if ((fb == NULL) || (msb == NULL))
02681     ANOVA_error ("unable to allocate sufficient memory");
02682   
02683   /*----- calculate mean SS due to factor B -----*/
02684   volume_read ("ssb", msb, nxyz); 
02685   numdf = b - 1; 
02686   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02687     msb[ixyz] = msb[ixyz] / numdf;             
02688   if (nvoxel > 0)
02689     printf ("MSB = %f \n", msb[nvoxel-1]);
02690   
02691   /*----- set up denominator of F-statistic    -----*/
02692   switch (option_data->model)
02693     {
02694     case 1:
02695       volume_read ("sse", fb, nxyz); 
02696       dendf = a * b * c * (n-1);
02697       break;
02698     case 3:
02699     case 4:
02700       volume_read ("ssbc", fb, nxyz); 
02701       dendf = (b-1) * (c-1);
02702       break;
02703     case 5:
02704       volume_read ("ssbca", fb, nxyz); 
02705       dendf = a * (b-1) * (c-1);
02706       break;
02707     }
02708 
02709   /*----- calculate F-statistic -----*/
02710   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02711     {
02712       fval = fb[ixyz] / dendf;   
02713       if (fval < EPSILON) 
02714         fb[ixyz] = 0.0;
02715       else
02716         fb[ixyz] = msb[ixyz] / fval;
02717     }
02718   
02719   if (nvoxel > 0)
02720     printf ("F(B) = %f \n", fb[nvoxel-1]);
02721   
02722   /*----- write out afni data file -----*/
02723   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02724     msb[ixyz] = sqrt(msb[ixyz]);        /*-- msb now holds square root --*/
02725   write_afni_data (option_data, option_data->fbname, 
02726                    msb, fb, numdf, dendf);
02727   
02728   /*----- release memory -----*/
02729   free (msb);    msb = NULL;
02730   free (fb);     fb  = NULL;
02731   
02732 }

void calculate_fbc anova_options   option_data
 

Definition at line 2980 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, fbc, anova_options::fbcname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

02981 {
02982   const float  EPSILON = 1.0e-10;      /* protect against divide by zero */
02983   float * msbc = NULL;                 /* pointer to MSBC data */
02984   float * fbc = NULL;                  /* pointer to F for B*C interaction */
02985   int a;                               /* number of levels for factor A */
02986   int b;                               /* number of levels for factor B */
02987   int c;                               /* number of levels for factor C */
02988   int n;                               /* number of observations per cell */
02989   int ixyz, nxyz;                      /* voxel counters */
02990   int nvoxel;                          /* output voxel # */
02991   int numdf;                           /* numerator degrees of freedom */
02992   int dendf;                           /* denominator degrees of freedom */
02993   float fval;                          /* denominator of F-statistic */
02994   
02995   
02996   /*----- initialize local variables -----*/
02997   a = option_data->a;
02998   b = option_data->b;
02999   c = option_data->c;
03000   n = option_data->n;
03001   nxyz = option_data->nxyz;
03002   nvoxel = option_data->nvoxel;
03003    
03004   /*----- allocate memory space for calculations -----*/
03005   fbc = (float *) malloc(sizeof(float)*nxyz);
03006   msbc = (float *) malloc(sizeof(float)*nxyz);
03007   if ((fbc == NULL) || (msbc == NULL))
03008     ANOVA_error ("unable to allocate sufficient memory");
03009 
03010   /*----- set up numerator of F-statistic    -----*/
03011   switch (option_data->model)
03012     {
03013     case 1:
03014     case 2:
03015     case 3:
03016     case 4:
03017       volume_read ("ssbc", msbc, nxyz); 
03018       numdf = (b-1) * (c-1);
03019       break;
03020     case 5:
03021       volume_read ("ssbca", msbc, nxyz); 
03022       numdf = a * (b-1) * (c-1);
03023       break;
03024     }
03025   
03026   /*----- calculate mean SS due to B*C interaction -----*/
03027   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03028     msbc[ixyz] = msbc[ixyz] / numdf; 
03029   if (nvoxel > 0)
03030     if (option_data->model != 5)
03031       printf ("MSBC = %f \n", msbc[nvoxel-1]);
03032     else
03033       printf ("MSBC(A) = %f \n", msbc[nvoxel-1]);
03034  
03035  /*----- set up denominator of F-statistic    -----*/
03036   switch (option_data->model)
03037     {
03038     case 1:
03039     case 3:
03040     case 4:
03041     case 5:
03042       volume_read ("sse", fbc, nxyz); 
03043       dendf = a * b * c * (n-1);
03044       break;
03045     case 2:
03046       volume_read ("ssabc", fbc, nxyz); 
03047       dendf = (a-1) * (b-1) * (c-1);
03048       break;
03049     }
03050  
03051   /*----- calculate F-statistic    -----*/
03052   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03053     {
03054       fval = fbc[ixyz] / dendf;              
03055       if (fval < EPSILON)
03056         fbc[ixyz] = 0.0;
03057       else
03058         fbc[ixyz] = msbc[ixyz] / fval;
03059     }
03060   if (nvoxel > 0)
03061     if (option_data->model != 5)
03062       printf ("F(BC) = %f \n", fbc[nvoxel-1]);
03063     else
03064       printf ("F(BC(A)) = %f \n", fbc[nvoxel-1]);
03065   
03066   /*----- write out afni data file -----*/
03067   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03068     msbc[ixyz] = sqrt(msbc[ixyz]);      /*-- msbc now holds square root --*/
03069   write_afni_data (option_data, option_data->fbcname, 
03070                    msbc, fbc, numdf, dendf);
03071   
03072   /*----- release memory -----*/
03073   free (msbc);   msbc = NULL;
03074   free (fbc);    fbc  = NULL;
03075   
03076 }

void calculate_fc anova_options   option_data
 

Definition at line 2755 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, anova_options::fcname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().

Referenced by analyze_results().

02756 {
02757   const float  EPSILON = 1.0e-10;      /* protect against divide by zero */
02758   float * msc = NULL;                  /* pointer to MSC(A) data */
02759   float * fc = NULL;                   /* pointer to F due to factor C */
02760   int a;                               /* number of levels for factor A */
02761   int b;                               /* number of levels for factor B */
02762   int c;                               /* number of levels for factor C */
02763   int n;                               /* number of observations per cell */
02764   int ixyz, nxyz;                      /* voxel counters */
02765   int nvoxel;                          /* output voxel # */
02766   int numdf;                           /* numerator degrees of freedom */
02767   int dendf;                           /* denominator degrees of freedom */
02768   float fval;                          /* denominator of F-statistic */
02769  
02770 
02771   /*----- initialize local variables -----*/
02772   a = option_data->a;
02773   b = option_data->b;
02774   c = option_data->c;
02775   n = option_data->n;
02776   nxyz = option_data->nxyz;
02777   nvoxel = option_data->nvoxel;
02778    
02779   /*----- allocate memory space for calculations -----*/
02780   fc = (float *) malloc(sizeof(float)*nxyz);
02781   msc = (float *) malloc(sizeof(float)*nxyz);
02782   if ((fc == NULL) || (msc == NULL))
02783     ANOVA_error ("unable to allocate sufficient memory");
02784   
02785   /*----- set up numerator of F-statistic    -----*/
02786   switch (option_data->model)
02787     {
02788     case 1:
02789     case 3:
02790     case 4:
02791       volume_read ("ssc", msc, nxyz); 
02792       numdf = c - 1;
02793       break;
02794     case 5:
02795       volume_read ("ssca", msc, nxyz); 
02796       numdf = a * (c-1);
02797       break;
02798     }
02799 
02800   /*----- calculate mean SS due to factor C -----*/
02801   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02802     msc[ixyz] = msc[ixyz] / numdf;       
02803   if (nvoxel > 0)
02804     if (option_data->model != 5)
02805       printf ("MSC = %f \n", msc[nvoxel-1]);
02806     else
02807       printf ("MSC(A) = %f \n", msc[nvoxel-1]);
02808       
02809 
02810   /*----- set up denominator of F-statistic    -----*/
02811   switch (option_data->model)
02812     {
02813     case 1:
02814     case 4:
02815     case 5:
02816       volume_read ("sse", fc, nxyz); 
02817       dendf = a * b * c * (n-1);
02818       break;
02819     case 3:
02820       volume_read ("ssbc", fc, nxyz); 
02821       dendf = (b-1) * (c-1);
02822       break;
02823     }
02824   
02825   /*----- calculate F-statistic    -----*/
02826   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02827     {
02828       fval = fc[ixyz] / dendf;               
02829       if (fval < EPSILON)
02830         fc[ixyz] = 0.0;
02831       else
02832         fc[ixyz] = msc[ixyz] / fval;          
02833     }
02834   
02835   if (nvoxel > 0)
02836     if (option_data->model != 5)
02837       printf ("F(C) = %f \n", fc[nvoxel-1]);
02838     else
02839       printf ("F(C(A)) = %f \n", fc[nvoxel-1]);
02840      
02841   /*----- write out afni data file -----*/
02842   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02843     msc[ixyz] = sqrt(msc[ixyz]);        /*-- msc now holds square root --*/
02844   write_afni_data (option_data, option_data->fcname, 
02845                    msc, fc, numdf, dendf);
02846   
02847   /*----- release memory -----*/
02848   free (msc);    msc = NULL;
02849   free (fc);     fc  = NULL;
02850   
02851 }

void calculate_ss0 anova_options   option_data
 

Definition at line 1318 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, and volume_write().

Referenced by calculate_anova().

01319 {
01320   float * ss0 = NULL;              /* pointer to output data */
01321   float * ysum = NULL;             /* pointer to sum over all observations */
01322   int a;                           /* number of levels for factor A */
01323   int b;                           /* number of levels for factor B */
01324   int c;                           /* number of levels for factor C */
01325   int n;                           /* number of observations per cell */
01326   int ixyz, nxyz;                  /* voxel counters */
01327   int nvoxel;                      /* output voxel # */
01328   int nval;                        /* divisor of sum */
01329   char filename[MAX_NAME_LENGTH];  /* name of output file */
01330   
01331   
01332   /*----- initialize local variables -----*/
01333   a = option_data->a;
01334   b = option_data->b;
01335   c = option_data->c;
01336   n = option_data->n;
01337   nxyz = option_data->nxyz;
01338   nvoxel = option_data->nvoxel;
01339   nval = a * b * c * n;
01340   
01341   /*----- allocate memory space for calculations -----*/
01342   ss0 = (float *) malloc(sizeof(float)*nxyz);
01343   ysum = (float *) malloc(sizeof(float)*nxyz);
01344   if ((ss0 == NULL) || (ysum == NULL))
01345     ANOVA_error ("unable to allocate sufficient memory");
01346   
01347   /*----- sum over all observations -----*/
01348   calculate_sum (option_data, -1, -1, -1, ysum);
01349 
01350   /*----- calculate ss0 -----*/
01351   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01352     ss0[ixyz] = ysum[ixyz] * ysum[ixyz] / nval;
01353   
01354 
01355   /*----- save the sum -----*/
01356   if (nvoxel > 0)
01357     printf ("SS0 = %f \n", ss0[nvoxel-1]); 
01358   strcpy (filename, "ss0");
01359   volume_write (filename, ss0, nxyz);
01360   
01361 
01362   /*----- release memory -----*/
01363   free (ysum);    ysum = NULL;
01364   free (ss0);     ss0 = NULL;
01365   
01366 }

void calculate_ssa anova_options   option_data
 

Definition at line 2024 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02025 {
02026   float * y = NULL;                   /* input data pointer */
02027   float * ssa = NULL;                 /* output data pointer */
02028   int ixyz, nxyz;                     /* voxel counters */
02029   int nvoxel;                         /* output voxel # */
02030 
02031 
02032   /*----- assign local variables -----*/
02033   nxyz = option_data->nxyz;
02034   nvoxel = option_data->nvoxel;
02035   
02036   /*----- allocate memory space for calculations -----*/
02037   ssa = (float *) malloc (sizeof(float)*nxyz);
02038   y = (float *) malloc (sizeof(float)*nxyz);
02039   if ((y == NULL) || (ssa == NULL))
02040     ANOVA_error ("unable to allocate sufficient memory");
02041 
02042  
02043   /*----- calculate SSA -----*/
02044   volume_read ("ssi", ssa, nxyz);
02045 
02046   volume_read ("ss0", y, nxyz);
02047   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02048     ssa[ixyz] -= y[ixyz]; 
02049   
02050   
02051   /*----- protection against round-off error -----*/
02052   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02053     if (ssa[ixyz] < 0.0)  ssa[ixyz] = 0.0; 
02054   
02055   /*----- save factor A sum of squares -----*/
02056   if (nvoxel > 0)
02057     printf ("SSA = %f \n", ssa[nvoxel-1]);
02058   volume_write ("ssa", ssa, nxyz);
02059   
02060   /*----- release memory -----*/
02061   free (y);     y = NULL;
02062   free (ssa);   ssa = NULL;
02063   
02064 }

void calculate_ssab anova_options   option_data
 

Definition at line 2171 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02172 {
02173   float * y = NULL;                   /* input data pointer */
02174   float * ssab = NULL;                /* output data pointer */
02175   int ixyz, nxyz;                     /* voxel counters */
02176   int nvoxel;                         /* output voxel # */
02177 
02178 
02179   /*----- assign local variables -----*/
02180   nxyz = option_data->nxyz;
02181   nvoxel = option_data->nvoxel;
02182   
02183   /*----- allocate memory space for calculations -----*/
02184   ssab = (float *) malloc (sizeof(float)*nxyz);
02185   y = (float *) malloc (sizeof(float)*nxyz);
02186   if ((y == NULL) || (ssab == NULL))
02187     ANOVA_error ("unable to allocate sufficient memory");
02188 
02189  
02190   /*----- calculate SSAB -----*/
02191   volume_read ("ssij", ssab, nxyz);
02192 
02193   volume_read ("ssa", y, nxyz);
02194   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02195     ssab[ixyz] -= y[ixyz];
02196 
02197   volume_read ("ssb", y, nxyz);
02198   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02199     ssab[ixyz] -= y[ixyz];
02200 
02201   volume_read ("ss0", y, nxyz);
02202   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02203     ssab[ixyz] -= y[ixyz]; 
02204   
02205   
02206   /*----- protection against round-off error -----*/
02207   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02208     if (ssab[ixyz] < 0.0)  ssab[ixyz] = 0.0; 
02209   
02210   /*----- save factor A*B sum of squares -----*/
02211   if (nvoxel > 0)
02212     printf ("SSAB = %f \n", ssab[nvoxel-1]);
02213   volume_write ("ssab", ssab, nxyz);
02214   
02215   /*----- release memory -----*/
02216   free (y);      y = NULL;
02217   free (ssab);   ssab = NULL;
02218   
02219 }

void calculate_ssabc anova_options   option_data
 

Definition at line 2395 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02396 {
02397   float * y = NULL;                   /* input data pointer */
02398   float * ssabc = NULL;               /* output data pointer */
02399   int ixyz, nxyz;                     /* voxel counters */
02400   int nvoxel;                         /* output voxel # */
02401   
02402   
02403   /*----- assign local variables -----*/
02404   nxyz = option_data->nxyz;
02405   nvoxel = option_data->nvoxel;
02406   
02407   /*----- allocate memory space for calculations -----*/
02408   ssabc = (float *) malloc (sizeof(float)*nxyz);
02409   y = (float *) malloc (sizeof(float)*nxyz);
02410   if ((y == NULL) || (ssabc == NULL))
02411     ANOVA_error ("unable to allocate sufficient memory");
02412 
02413 
02414   /*----- calculate SSABC -----*/
02415   volume_read ("ssto", ssabc, nxyz);
02416 
02417   if (option_data->n > 1)
02418     {
02419       volume_read ("sse", y, nxyz);
02420       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02421         ssabc[ixyz] -= y[ixyz];  
02422     }
02423 
02424   volume_read ("ssa", y, nxyz);
02425   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02426     ssabc[ixyz] -= y[ixyz];  
02427 
02428   volume_read ("ssb", y, nxyz);
02429   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02430     ssabc[ixyz] -= y[ixyz];  
02431 
02432   volume_read ("ssc", y, nxyz);
02433   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02434     ssabc[ixyz] -= y[ixyz];  
02435 
02436   volume_read ("ssab", y, nxyz);
02437   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02438     ssabc[ixyz] -= y[ixyz];  
02439 
02440   volume_read ("ssac", y, nxyz);
02441   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02442     ssabc[ixyz] -= y[ixyz];  
02443 
02444   volume_read ("ssbc", y, nxyz);
02445   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02446     ssabc[ixyz] -= y[ixyz];  
02447   
02448 
02449   /*----- protection against round-off error -----*/
02450   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02451     if (ssabc[ixyz] < 0.0)  ssabc[ixyz] = 0.0; 
02452   
02453   /*----- save A*B*C interaction sum of squares -----*/
02454   if (nvoxel > 0)
02455     printf ("SSABC = %f \n", ssabc[nvoxel-1]);
02456   volume_write ("ssabc", ssabc, nxyz);
02457   
02458   /*----- release memory -----*/
02459   free (y);     y = NULL;
02460   free (ssabc);   ssabc = NULL;
02461   
02462 }

void calculate_ssac anova_options   option_data
 

Definition at line 2228 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02229 {
02230   float * y = NULL;                   /* input data pointer */
02231   float * ssac = NULL;                /* output data pointer */
02232   int ixyz, nxyz;                     /* voxel counters */
02233   int nvoxel;                         /* output voxel # */
02234 
02235 
02236   /*----- assign local variables -----*/
02237   nxyz = option_data->nxyz;
02238   nvoxel = option_data->nvoxel;
02239   
02240   /*----- allocate memory space for calculations -----*/
02241   ssac = (float *) malloc (sizeof(float)*nxyz);
02242   y = (float *) malloc (sizeof(float)*nxyz);
02243   if ((y == NULL) || (ssac == NULL))
02244     ANOVA_error ("unable to allocate sufficient memory");
02245 
02246  
02247   /*----- calculate SSAC -----*/
02248   volume_read ("ssik", ssac, nxyz);
02249 
02250   volume_read ("ssa", y, nxyz);
02251   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02252     ssac[ixyz] -= y[ixyz];
02253 
02254   volume_read ("ssc", y, nxyz);
02255   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02256     ssac[ixyz] -= y[ixyz];
02257 
02258   volume_read ("ss0", y, nxyz);
02259   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02260     ssac[ixyz] -= y[ixyz]; 
02261   
02262   
02263   /*----- protection against round-off error -----*/
02264   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02265     if (ssac[ixyz] < 0.0)  ssac[ixyz] = 0.0; 
02266   
02267   /*----- save factor A*C sum of squares -----*/
02268   if (nvoxel > 0)
02269     printf ("SSAC = %f \n", ssac[nvoxel-1]);
02270   volume_write ("ssac", ssac, nxyz);
02271   
02272   /*----- release memory -----*/
02273   free (y);      y = NULL;
02274   free (ssac);   ssac = NULL;
02275   
02276 }

void calculate_ssb anova_options   option_data
 

Definition at line 2073 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02074 {
02075   float * y = NULL;                   /* input data pointer */
02076   float * ssb = NULL;                 /* output data pointer */
02077   int ixyz, nxyz;                     /* voxel counters */
02078   int nvoxel;                         /* output voxel # */
02079 
02080 
02081   /*----- assign local variables -----*/
02082   nxyz = option_data->nxyz;
02083   nvoxel = option_data->nvoxel;
02084   
02085   /*----- allocate memory space for calculations -----*/
02086   ssb = (float *) malloc (sizeof(float)*nxyz);
02087   y = (float *) malloc (sizeof(float)*nxyz);
02088   if ((y == NULL) || (ssb == NULL))
02089     ANOVA_error ("unable to allocate sufficient memory");
02090 
02091  
02092   /*----- calculate SSB -----*/
02093   volume_read ("ssj", ssb, nxyz);
02094 
02095   volume_read ("ss0", y, nxyz);
02096   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02097     ssb[ixyz] -= y[ixyz]; 
02098   
02099   
02100   /*----- protection against round-off error -----*/
02101   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02102     if (ssb[ixyz] < 0.0)  ssb[ixyz] = 0.0; 
02103   
02104   /*----- save factor B sum of squares -----*/
02105   if (nvoxel > 0)
02106     printf ("SSB = %f \n", ssb[nvoxel-1]);
02107   volume_write ("ssb", ssb, nxyz);
02108   
02109   /*----- release memory -----*/
02110   free (y);     y = NULL;
02111   free (ssb);   ssb = NULL;
02112   
02113 }

void calculate_ssbc anova_options   option_data
 

Definition at line 2338 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02339 {
02340   float * y = NULL;                   /* input data pointer */
02341   float * ssbc = NULL;                /* output data pointer */
02342   int ixyz, nxyz;                     /* voxel counters */
02343   int nvoxel;                         /* output voxel # */
02344 
02345 
02346   /*----- assign local variables -----*/
02347   nxyz = option_data->nxyz;
02348   nvoxel = option_data->nvoxel;
02349   
02350   /*----- allocate memory space for calculations -----*/
02351   ssbc = (float *) malloc (sizeof(float)*nxyz);
02352   y = (float *) malloc (sizeof(float)*nxyz);
02353   if ((y == NULL) || (ssbc == NULL))
02354     ANOVA_error ("unable to allocate sufficient memory");
02355 
02356  
02357   /*----- calculate SSBC -----*/
02358   volume_read ("ssjk", ssbc, nxyz);
02359 
02360   volume_read ("ssb", y, nxyz);
02361   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02362     ssbc[ixyz] -= y[ixyz];
02363 
02364   volume_read ("ssc", y, nxyz);
02365   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02366     ssbc[ixyz] -= y[ixyz];
02367 
02368   volume_read ("ss0", y, nxyz);
02369   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02370     ssbc[ixyz] -= y[ixyz]; 
02371   
02372   
02373   /*----- protection against round-off error -----*/
02374   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02375     if (ssbc[ixyz] < 0.0)  ssbc[ixyz] = 0.0; 
02376   
02377   /*----- save factor B*C sum of squares -----*/
02378   if (nvoxel > 0)
02379     printf ("SSBC = %f \n", ssbc[nvoxel-1]);
02380   volume_write ("ssbc", ssbc, nxyz);
02381   
02382   /*----- release memory -----*/
02383   free (y);      y = NULL;
02384   free (ssbc);   ssbc = NULL;
02385   
02386 }

void calculate_ssbca anova_options   option_data
 

Definition at line 2471 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02472 {
02473   float * y = NULL;                   /* input data pointer */
02474   float * ssbca = NULL;               /* output data pointer */
02475   int ixyz, nxyz;                     /* voxel counters */
02476   int nvoxel;                         /* output voxel # */
02477   
02478   
02479   /*----- assign local variables -----*/
02480   nxyz = option_data->nxyz;
02481   nvoxel = option_data->nvoxel;
02482   
02483   /*----- allocate memory space for calculations -----*/
02484   ssbca = (float *) malloc (sizeof(float)*nxyz);
02485   y = (float *) malloc (sizeof(float)*nxyz);
02486   if ((y == NULL) || (ssbca == NULL))
02487     ANOVA_error ("unable to allocate sufficient memory");
02488 
02489 
02490   /*----- calculate SSBC(A) -----*/
02491   volume_read ("ssto", ssbca, nxyz);
02492 
02493   if (option_data->n > 1)
02494     {
02495       volume_read ("sse", y, nxyz);
02496       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02497         ssbca[ixyz] -= y[ixyz];  
02498     }
02499 
02500   volume_read ("ssa", y, nxyz);
02501   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02502     ssbca[ixyz] -= y[ixyz];  
02503 
02504   volume_read ("ssb", y, nxyz);
02505   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02506     ssbca[ixyz] -= y[ixyz];  
02507 
02508   volume_read ("ssca", y, nxyz);
02509   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02510     ssbca[ixyz] -= y[ixyz];  
02511 
02512   volume_read ("ssab", y, nxyz);
02513   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02514     ssbca[ixyz] -= y[ixyz];  
02515   
02516 
02517   /*----- protection against round-off error -----*/
02518   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02519     if (ssbca[ixyz] < 0.0)  ssbca[ixyz] = 0.0; 
02520   
02521   /*----- save B*C(A) interaction sum of squares -----*/
02522   if (nvoxel > 0)
02523     printf ("SSBC(A) = %f \n", ssbca[nvoxel-1]);
02524   volume_write ("ssbca", ssbca, nxyz);
02525   
02526   /*----- release memory -----*/
02527   free (y);     y = NULL;
02528   free (ssbca);   ssbca = NULL;
02529   
02530 }

void calculate_ssc anova_options   option_data
 

Definition at line 2122 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02123 {
02124   float * y = NULL;                   /* input data pointer */
02125   float * ssc = NULL;                 /* output data pointer */
02126   int ixyz, nxyz;                     /* voxel counters */
02127   int nvoxel;                         /* output voxel # */
02128 
02129 
02130   /*----- assign local variables -----*/
02131   nxyz = option_data->nxyz;
02132   nvoxel = option_data->nvoxel;
02133   
02134   /*----- allocate memory space for calculations -----*/
02135   ssc = (float *) malloc (sizeof(float)*nxyz);
02136   y = (float *) malloc (sizeof(float)*nxyz);
02137   if ((y == NULL) || (ssc == NULL))
02138     ANOVA_error ("unable to allocate sufficient memory");
02139 
02140  
02141   /*----- calculate SSC -----*/
02142   volume_read ("ssk", ssc, nxyz);
02143 
02144   volume_read ("ss0", y, nxyz);
02145   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02146     ssc[ixyz] -= y[ixyz]; 
02147   
02148   
02149   /*----- protection against round-off error -----*/
02150   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02151     if (ssc[ixyz] < 0.0)  ssc[ixyz] = 0.0; 
02152   
02153   /*----- save factor C sum of squares -----*/
02154   if (nvoxel > 0)
02155     printf ("SSC = %f \n", ssc[nvoxel-1]);
02156   volume_write ("ssc", ssc, nxyz);
02157   
02158   /*----- release memory -----*/
02159   free (y);     y = NULL;
02160   free (ssc);   ssc = NULL;
02161   
02162 }

void calculate_ssca anova_options   option_data
 

Definition at line 2285 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

02286 {
02287   float * y = NULL;                   /* input data pointer */
02288   float * ssca = NULL;                /* output data pointer */
02289   int ixyz, nxyz;                     /* voxel counters */
02290   int nvoxel;                         /* output voxel # */
02291 
02292 
02293   /*----- assign local variables -----*/
02294   nxyz = option_data->nxyz;
02295   nvoxel = option_data->nvoxel;
02296   
02297   /*----- allocate memory space for calculations -----*/
02298   ssca = (float *) malloc (sizeof(float)*nxyz);
02299   y = (float *) malloc (sizeof(float)*nxyz);
02300   if ((y == NULL) || (ssca == NULL))
02301     ANOVA_error ("unable to allocate sufficient memory");
02302 
02303  
02304   /*----- calculate SSCA -----*/
02305   volume_read ("ssik", ssca, nxyz);
02306 
02307   volume_read ("ssa", y, nxyz);
02308   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02309     ssca[ixyz] -= y[ixyz];
02310 
02311   volume_read ("ss0", y, nxyz);
02312   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02313     ssca[ixyz] -= y[ixyz]; 
02314   
02315   
02316   /*----- protection against round-off error -----*/
02317   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02318     if (ssca[ixyz] < 0.0)  ssca[ixyz] = 0.0; 
02319   
02320   /*----- save factor C(A) sum of squares -----*/
02321   if (nvoxel > 0)
02322     printf ("SSC(A) = %f \n", ssca[nvoxel-1]);
02323   volume_write ("ssca", ssca, nxyz);
02324   
02325   /*----- release memory -----*/
02326   free (y);      y = NULL;
02327   free (ssca);   ssca = NULL;
02328   
02329 }

void calculate_sse anova_options   option_data
 

Definition at line 1971 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

01972 {
01973   float * y = NULL;                   /* input data pointer */
01974   float * sse = NULL;                 /* sse data pointer */
01975   int ixyz, nxyz;                     /* voxel counters */
01976   int nvoxel;                         /* output voxel # */
01977   
01978   
01979   /*----- assign local variables -----*/
01980   nxyz = option_data->nxyz;
01981   nvoxel = option_data->nvoxel;
01982   
01983   /*----- allocate memory space for calculations -----*/
01984   sse = (float *) malloc (sizeof(float)*nxyz);
01985   y = (float *) malloc (sizeof(float)*nxyz);
01986   if ((y == NULL) || (sse == NULL))
01987     ANOVA_error ("unable to allocate sufficient memory");
01988 
01989  
01990   /*----- calculate SSE -----*/
01991   volume_read ("ssto", sse, nxyz);
01992 
01993   volume_read ("ssijk", y, nxyz);
01994   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01995     sse[ixyz] -= y[ixyz]; 
01996   
01997   volume_read ("ss0", y, nxyz);
01998   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01999     sse[ixyz] += y[ixyz];
02000 
02001   
02002   /*----- protection against round-off error -----*/
02003   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
02004     if (sse[ixyz] < 0.0)  sse[ixyz] = 0.0; 
02005   
02006   /*----- save error sum of squares -----*/
02007   if (nvoxel > 0)
02008     printf ("SSE = %f \n", sse[nvoxel-1]);
02009   volume_write ("sse", sse, nxyz);
02010   
02011   /*----- release memory -----*/
02012   free (y);      y = NULL;
02013   free (sse);    sse = NULL;
02014   
02015 }

void calculate_ssi anova_options   option_data
 

Definition at line 1375 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().

Referenced by calculate_anova().

01376 {
01377   float * ssi = NULL;              /* pointer to output data */
01378   float * ysum = NULL;             /* pointer to sum over observations */
01379   int a;                           /* number of levels for factor A */
01380   int b;                           /* number of levels for factor B */
01381   int c;                           /* number of levels for factor C */
01382   int n;                           /* number of observations per cell */
01383   int i;                           /* index for factor A levels */
01384   int ixyz, nxyz;                  /* voxel counters */
01385   int nvoxel;                      /* output voxel # */
01386   int nval;                        /* divisor of sum */
01387   char filename[MAX_NAME_LENGTH];  /* name of output file */
01388   
01389   
01390   /*----- initialize local variables -----*/
01391   a = option_data->a;
01392   b = option_data->b;
01393   c = option_data->c;
01394   n = option_data->n;
01395   nxyz = option_data->nxyz;
01396   nvoxel = option_data->nvoxel;
01397   nval = b * c * n;
01398   
01399   /*----- allocate memory space for calculations -----*/
01400   ssi = (float *) malloc(sizeof(float)*nxyz);
01401   ysum = (float *) malloc(sizeof(float)*nxyz);
01402   if ((ssi == NULL) || (ysum == NULL))
01403     ANOVA_error ("unable to allocate sufficient memory");
01404   
01405   volume_zero (ssi, nxyz);
01406 
01407   /*----- loop over levels of factor A -----*/
01408   for (i = 0;  i < a;  i++)
01409     {
01410       /*----- sum over observations -----*/
01411       calculate_sum (option_data, i, -1, -1, ysum);
01412 
01413       /*----- add to ssi -----*/
01414       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01415         ssi[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01416     }
01417 
01418   /*----- save the sum -----*/
01419   if (nvoxel > 0)
01420     printf ("SSI = %f \n", ssi[nvoxel-1]); 
01421   strcpy (filename, "ssi");
01422   volume_write (filename, ssi, nxyz);
01423   
01424 
01425   /*----- release memory -----*/
01426   free (ysum);    ysum = NULL;
01427   free (ssi);     ssi = NULL;
01428   
01429 }

void calculate_ssij anova_options   option_data
 

Definition at line 1564 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().

Referenced by calculate_anova().

01565 {
01566   float * ssij = NULL;             /* pointer to output data */
01567   float * ysum = NULL;             /* pointer to sum over observations */
01568   int a;                           /* number of levels for factor A */
01569   int b;                           /* number of levels for factor B */
01570   int c;                           /* number of levels for factor C */
01571   int n;                           /* number of observations per cell */
01572   int i, j;                        /* indices for factor A and B levels */
01573   int ixyz, nxyz;                  /* voxel counters */
01574   int nvoxel;                      /* output voxel # */
01575   int nval;                        /* divisor of sum */
01576   char filename[MAX_NAME_LENGTH];  /* name of output file */
01577   
01578   
01579   /*----- initialize local variables -----*/
01580   a = option_data->a;
01581   b = option_data->b;
01582   c = option_data->c;
01583   n = option_data->n;
01584   nxyz = option_data->nxyz;
01585   nvoxel = option_data->nvoxel;
01586   nval = c * n;
01587   
01588   /*----- allocate memory space for calculations -----*/
01589   ssij = (float *) malloc(sizeof(float)*nxyz);
01590   ysum = (float *) malloc(sizeof(float)*nxyz);
01591   if ((ssij == NULL) || (ysum == NULL))
01592     ANOVA_error ("unable to allocate sufficient memory");
01593   
01594   volume_zero (ssij, nxyz);
01595 
01596   /*----- loop over levels of factor A -----*/
01597   for (i = 0;  i < a;  i++)
01598     {
01599       /*----- loop over levels of factor B -----*/
01600       for (j = 0;  j < b;  j++)
01601         {
01602           /*----- sum over observations -----*/
01603           calculate_sum (option_data, i, j, -1, ysum);
01604           
01605           /*----- add to ssij -----*/
01606           for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01607             ssij[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01608         }
01609     }
01610 
01611   /*----- save the sum -----*/
01612   if (nvoxel > 0)
01613     printf ("SSIJ = %f \n", ssij[nvoxel-1]); 
01614   strcpy (filename, "ssij");
01615   volume_write (filename, ssij, nxyz);
01616   
01617 
01618   /*----- release memory -----*/
01619   free (ysum);    ysum = NULL;
01620   free (ssij);    ssij = NULL;
01621   
01622 }

void calculate_ssijk anova_options   option_data
 

Definition at line 1765 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), volume_write(), volume_zero(), and anova_options::xname.

Referenced by calculate_anova().

01766 {
01767   float * ssijk = NULL;            /* pointer to output data */
01768   float * ysum = NULL;             /* pointer to sum over observations */
01769   int a;                           /* number of levels for factor A */
01770   int b;                           /* number of levels for factor B */
01771   int c;                           /* number of levels for factor C */
01772   int n;                           /* number of observations per cell */
01773   int i, j, k;                     /* indices for factor levels */
01774   int ixyz, nxyz;                  /* voxel counters */
01775   int nvoxel;                      /* output voxel # */
01776   int nval;                        /* divisor of sum */
01777   char filename[MAX_NAME_LENGTH];  /* name of output file */
01778   
01779   
01780   /*----- initialize local variables -----*/
01781   a = option_data->a;
01782   b = option_data->b;
01783   c = option_data->c;
01784   n = option_data->n;
01785   nxyz = option_data->nxyz;
01786   nvoxel = option_data->nvoxel;
01787   nval = n;
01788   
01789   /*----- allocate memory space for calculations -----*/
01790   ssijk = (float *) malloc(sizeof(float)*nxyz);
01791   ysum = (float *) malloc(sizeof(float)*nxyz);
01792   if ((ssijk == NULL) || (ysum == NULL))
01793     ANOVA_error ("unable to allocate sufficient memory");
01794   
01795   volume_zero (ssijk, nxyz);
01796 
01797   /*----- loop over levels of factor A -----*/
01798   for (i = 0;  i < a;  i++)
01799     {
01800       /*----- loop over levels of factor B -----*/
01801       for (j = 0;  j < b;  j++)
01802         {
01803           /*----- loop over levels of factor C -----*/
01804           for (k = 0;  k < c;  k++)
01805             {
01806               /*----- sum over observations -----*/
01807               if (n != 1)
01808                 calculate_sum (option_data, i, j, k, ysum);
01809               else
01810                 {
01811                   read_afni_data (option_data, 
01812                                   option_data->xname[i][j][k][0], ysum);
01813                   if (nvoxel > 0)
01814                     printf ("y[%d][%d][%d][.] = %f \n", 
01815                             i+1, j+1, k+1, ysum[nvoxel-1]);
01816                 }
01817               
01818               /*----- add to ssijk -----*/
01819               for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01820                 ssijk[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01821             }
01822         }
01823     }
01824 
01825   /*----- save the sum -----*/
01826   if (nvoxel > 0)
01827     printf ("SSIJK = %f \n", ssijk[nvoxel-1]); 
01828   strcpy (filename, "ssijk");
01829   volume_write (filename, ssijk, nxyz);
01830   
01831   
01832   /*----- release memory -----*/
01833   free (ysum);    ysum = NULL;
01834   free (ssijk);   ssijk = NULL;
01835   
01836 }

void calculate_ssijkm anova_options   option_data
 

Definition at line 1845 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), volume_write(), volume_zero(), and anova_options::xname.

Referenced by calculate_anova().

01846 {
01847   float * ssijkm = NULL;            /* pointer to output data */
01848   float * y = NULL;                 /* pointer to input data */
01849   int i;                            /* factor A level index */
01850   int j;                            /* factor B level index */
01851   int k;                            /* factor C level index */
01852   int m;                            /* observation number index */
01853   int a;                            /* number of levels for factor A */
01854   int b;                            /* number of levels for factor B */
01855   int c;                            /* number of levels for factor C */
01856   int n;                            /* number of observations per cell */
01857   int ixyz, nxyz;                   /* voxel counters */
01858   int nvoxel;                       /* output voxel # */
01859   float yval;                       /* temporary float value */
01860   
01861   
01862   /*----- initialize local variables -----*/
01863   a = option_data->a;
01864   b = option_data->b;
01865   c = option_data->c;
01866   n = option_data->n;
01867   nxyz = option_data->nxyz;
01868   nvoxel = option_data->nvoxel;
01869   
01870   /*----- allocate memory space for calculations -----*/
01871   ssijkm = (float *) malloc(sizeof(float)*nxyz);
01872   y = (float *) malloc(sizeof(float)*nxyz);
01873   if ((ssijkm == NULL) || (y == NULL))
01874     ANOVA_error ("unable to allocate sufficient memory");
01875 
01876 
01877   volume_zero (ssijkm, nxyz);
01878   
01879   for (i = 0;  i < a;  i++)
01880     {
01881       for (j = 0;  j < b;  j++)
01882         {
01883           for (k = 0;  k < c;  k++)
01884             {
01885               for (m = 0;  m < n;  m++)
01886                 {
01887                   read_afni_data (option_data, 
01888                                   option_data->xname[i][j][k][m], y);
01889                   if (nvoxel > 0)
01890                     printf ("y[%d][%d][%d][%d] = %f \n", 
01891                             i+1, j+1, k+1, m+1, y[nvoxel-1]);
01892           
01893                   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01894                       ssijkm[ixyz] += y[ixyz] * y[ixyz]; 
01895                 }
01896             }
01897         }
01898     }
01899   
01900 
01901   /*----- save the sum -----*/  
01902   if (nvoxel > 0)
01903     printf ("SSIJKM = %f \n", ssijkm[nvoxel-1]); 
01904   volume_write ("ssijkm", ssijkm, nxyz);
01905   
01906   /*----- release memory -----*/
01907   free (y);       y = NULL;
01908   free (ssijkm);  ssijkm = NULL;
01909   
01910 }

void calculate_ssik anova_options   option_data
 

Definition at line 1631 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().

Referenced by calculate_anova().

01632 {
01633   float * ssik = NULL;             /* pointer to output data */
01634   float * ysum = NULL;             /* pointer to sum over observations */
01635   int a;                           /* number of levels for factor A */
01636   int b;                           /* number of levels for factor B */
01637   int c;                           /* number of levels for factor C */
01638   int n;                           /* number of observations per cell */
01639   int i, k;                        /* indices for factor A and C levels */
01640   int ixyz, nxyz;                  /* voxel counters */
01641   int nvoxel;                      /* output voxel # */
01642   int nval;                        /* divisor of sum */
01643   char filename[MAX_NAME_LENGTH];  /* name of output file */
01644   
01645   
01646   /*----- initialize local variables -----*/
01647   a = option_data->a;
01648   b = option_data->b;
01649   c = option_data->c;
01650   n = option_data->n;
01651   nxyz = option_data->nxyz;
01652   nvoxel = option_data->nvoxel;
01653   nval = b * n;
01654   
01655   /*----- allocate memory space for calculations -----*/
01656   ssik = (float *) malloc(sizeof(float)*nxyz);
01657   ysum = (float *) malloc(sizeof(float)*nxyz);
01658   if ((ssik == NULL) || (ysum == NULL))
01659     ANOVA_error ("unable to allocate sufficient memory");
01660   
01661   volume_zero (ssik, nxyz);
01662 
01663   /*----- loop over levels of factor A -----*/
01664   for (i = 0;  i < a;  i++)
01665     {
01666       /*----- loop over levels of factor C -----*/
01667       for (k = 0;  k < c;  k++)
01668         {
01669           /*----- sum over observations -----*/
01670           calculate_sum (option_data, i, -1, k, ysum);
01671           
01672           /*----- add to ssij -----*/
01673           for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01674             ssik[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01675         }
01676     }
01677 
01678   /*----- save the sum -----*/
01679   if (nvoxel > 0)
01680     printf ("SSIK = %f \n", ssik[nvoxel-1]); 
01681   strcpy (filename, "ssik");
01682   volume_write (filename, ssik, nxyz);
01683   
01684 
01685   /*----- release memory -----*/
01686   free (ysum);    ysum = NULL;
01687   free (ssik);    ssik = NULL;
01688   
01689 }

void calculate_ssj anova_options   option_data
 

Definition at line 1438 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().

Referenced by calculate_anova().

01439 {
01440   float * ssj = NULL;              /* pointer to output data */
01441   float * ysum = NULL;             /* pointer to sum over observations */
01442   int a;                           /* number of levels for factor A */
01443   int b;                           /* number of levels for factor B */
01444   int c;                           /* number of levels for factor C */
01445   int n;                           /* number of observations per cell */
01446   int j;                           /* index for factor B levels */
01447   int ixyz, nxyz;                  /* voxel counters */
01448   int nvoxel;                      /* output voxel # */
01449   int nval;                        /* divisor of sum */
01450   char filename[MAX_NAME_LENGTH];  /* name of output file */
01451   
01452   
01453   /*----- initialize local variables -----*/
01454   a = option_data->a;
01455   b = option_data->b;
01456   c = option_data->c;
01457   n = option_data->n;
01458   nxyz = option_data->nxyz;
01459   nvoxel = option_data->nvoxel;
01460   nval = a * c * n;
01461   
01462   /*----- allocate memory space for calculations -----*/
01463   ssj = (float *) malloc(sizeof(float)*nxyz);
01464   ysum = (float *) malloc(sizeof(float)*nxyz);
01465   if ((ssj == NULL) || (ysum == NULL))
01466     ANOVA_error ("unable to allocate sufficient memory");
01467   
01468   volume_zero (ssj, nxyz);
01469 
01470   /*----- loop over levels of factor B -----*/
01471   for (j = 0;  j < b;  j++)
01472     {
01473       /*----- sum over observations -----*/
01474       calculate_sum (option_data, -1, j, -1, ysum);
01475 
01476       /*----- add to ssj -----*/
01477       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01478         ssj[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01479     }
01480 
01481   /*----- save the sum -----*/
01482   if (nvoxel > 0)
01483     printf ("SSJ = %f \n", ssj[nvoxel-1]); 
01484   strcpy (filename, "ssj");
01485   volume_write (filename, ssj, nxyz);
01486   
01487 
01488   /*----- release memory -----*/
01489   free (ysum);    ysum = NULL;
01490   free (ssj);     ssj = NULL;
01491   
01492 }

void calculate_ssjk anova_options   option_data
 

Definition at line 1698 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().

Referenced by calculate_anova().

01699 {
01700   float * ssjk = NULL;             /* pointer to output data */
01701   float * ysum = NULL;             /* pointer to sum over observations */
01702   int a;                           /* number of levels for factor A */
01703   int b;                           /* number of levels for factor B */
01704   int c;                           /* number of levels for factor C */
01705   int n;                           /* number of observations per cell */
01706   int j, k;                        /* indices for factor B and C levels */
01707   int ixyz, nxyz;                  /* voxel counters */
01708   int nvoxel;                      /* output voxel # */
01709   int nval;                        /* divisor of sum */
01710   char filename[MAX_NAME_LENGTH];  /* name of output file */
01711   
01712   
01713   /*----- initialize local variables -----*/
01714   a = option_data->a;
01715   b = option_data->b;
01716   c = option_data->c;
01717   n = option_data->n;
01718   nxyz = option_data->nxyz;
01719   nvoxel = option_data->nvoxel;
01720   nval = a * n;
01721   
01722   /*----- allocate memory space for calculations -----*/
01723   ssjk = (float *) malloc(sizeof(float)*nxyz);
01724   ysum = (float *) malloc(sizeof(float)*nxyz);
01725   if ((ssjk == NULL) || (ysum == NULL))
01726     ANOVA_error ("unable to allocate sufficient memory");
01727   
01728   volume_zero (ssjk, nxyz);
01729 
01730   /*----- loop over levels of factor B -----*/
01731   for (j = 0;  j < b;  j++)
01732     {
01733       /*----- loop over levels of factor C -----*/
01734       for (k = 0;  k < c;  k++)
01735         {
01736           /*----- sum over observations -----*/
01737           calculate_sum (option_data, -1, j, k, ysum);
01738           
01739           /*----- add to ssjk -----*/
01740           for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01741             ssjk[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01742         }
01743     }
01744 
01745   /*----- save the sum -----*/
01746   if (nvoxel > 0)
01747     printf ("SSJK = %f \n", ssjk[nvoxel-1]); 
01748   strcpy (filename, "ssjk");
01749   volume_write (filename, ssjk, nxyz);
01750   
01751 
01752   /*----- release memory -----*/
01753   free (ysum);    ysum = NULL;
01754   free (ssjk);    ssjk = NULL;
01755   
01756 }

void calculate_ssk anova_options   option_data
 

Definition at line 1501 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().

Referenced by calculate_anova().

01502 {
01503   float * ssk = NULL;              /* pointer to output data */
01504   float * ysum = NULL;             /* pointer to sum over observations */
01505   int a;                           /* number of levels for factor A */
01506   int b;                           /* number of levels for factor B */
01507   int c;                           /* number of levels for factor C */
01508   int n;                           /* number of observations per cell */
01509   int k;                           /* index for factor C levels */
01510   int ixyz, nxyz;                  /* voxel counters */
01511   int nvoxel;                      /* output voxel # */
01512   int nval;                        /* divisor of sum */
01513   char filename[MAX_NAME_LENGTH];  /* name of output file */
01514   
01515   
01516   /*----- initialize local variables -----*/
01517   a = option_data->a;
01518   b = option_data->b;
01519   c = option_data->c;
01520   n = option_data->n;
01521   nxyz = option_data->nxyz;
01522   nvoxel = option_data->nvoxel;
01523   nval = a * b * n;
01524   
01525   /*----- allocate memory space for calculations -----*/
01526   ssk = (float *) malloc(sizeof(float)*nxyz);
01527   ysum = (float *) malloc(sizeof(float)*nxyz);
01528   if ((ssk == NULL) || (ysum == NULL))
01529     ANOVA_error ("unable to allocate sufficient memory");
01530   
01531   volume_zero (ssk, nxyz);
01532 
01533   /*----- loop over levels of factor C -----*/
01534   for (k = 0;  k < c;  k++)
01535     {
01536       /*----- sum over observations -----*/
01537       calculate_sum (option_data, -1, -1, k, ysum);
01538 
01539       /*----- add to ssk -----*/
01540       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01541         ssk[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01542     }
01543 
01544   /*----- save the sum -----*/
01545   if (nvoxel > 0)
01546     printf ("SSK = %f \n", ssk[nvoxel-1]); 
01547   strcpy (filename, "ssk");
01548   volume_write (filename, ssk, nxyz);
01549   
01550 
01551   /*----- release memory -----*/
01552   free (ysum);    ysum = NULL;
01553   free (ssk);     ssk = NULL;
01554   
01555 }

void calculate_ssto anova_options   option_data
 

Definition at line 1919 of file 3dANOVA3.c.

References ANOVA_error(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().

Referenced by calculate_anova().

01920 {
01921   float * y = NULL;                   /* input data pointer */
01922   float * ssto = NULL;                /* ssto data pointer */
01923   int ixyz, nxyz;                     /* voxel counters */
01924   int nvoxel;                         /* output voxel # */
01925   
01926   
01927   /*----- assign local variables -----*/
01928   nxyz = option_data->nxyz;
01929   nvoxel = option_data->nvoxel;
01930   
01931   /*----- allocate memory space for calculations -----*/
01932   ssto = (float *) malloc (sizeof(float)*nxyz);
01933   y = (float *) malloc (sizeof(float)*nxyz);
01934   if ((y == NULL) || (ssto == NULL))
01935     ANOVA_error ("unable to allocate sufficient memory");
01936 
01937  
01938   /*----- calculate SSTO -----*/
01939   if (option_data->n != 1)
01940     volume_read ("ssijkm", ssto, nxyz);
01941   else
01942     volume_read ("ssijk", ssto, nxyz);
01943 
01944   volume_read ("ss0", y, nxyz);
01945   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01946     ssto[ixyz] -= y[ixyz];
01947     
01948   
01949   /*----- protection against round-off error -----*/
01950   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01951     if (ssto[ixyz] < 0.0)  ssto[ixyz] = 0.0; 
01952   
01953   /*----- save total sum of squares -----*/
01954   if (nvoxel > 0)
01955     printf ("SSTO = %f \n", ssto[nvoxel-1]);
01956   volume_write ("ssto", ssto, nxyz);
01957   
01958   /*----- release memory -----*/
01959   free (y);      y = NULL;
01960   free (ssto);    ssto = NULL;
01961   
01962 }

void calculate_sum anova_options   option_data,
int    ii,
int    jj,
int    kk,
float *    ysum
 

Definition at line 1203 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), volume_zero(), and anova_options::xname.

Referenced by calc_acontr_mean(), calculate_acontrasts(), calculate_adifferences(), calculate_ameans(), calculate_bcontrasts(), calculate_bdifferences(), calculate_bmeans(), calculate_ccontrasts(), calculate_cdifferences(), calculate_cmeans(), calculate_ss0(), calculate_ssi(), calculate_ssij(), calculate_ssijk(), calculate_ssik(), calculate_ssj(), calculate_ssjk(), calculate_ssk(), calculate_xcontrasts(), calculate_xdifferences(), and calculate_xmeans().

01205 {
01206   float * y = NULL;                /* pointer to input data */
01207   int i, itop, ibot;               /* factor A level index */
01208   int j, jtop, jbot;               /* factor B level index */
01209   int k, ktop, kbot;               /* factor C level index */
01210   int m;                           /* observation number index */
01211   int a;                           /* number of levels for factor A */
01212   int b;                           /* number of levels for factor B */
01213   int c;                           /* number of levels for factor C */
01214   int n;                           /* number of observations per cell */
01215   int ixyz, nxyz;                  /* voxel counters */
01216   int nvoxel;                      /* output voxel # */
01217   char sum_label[MAX_NAME_LENGTH]; /* name of sum for print to screen */
01218   char str[MAX_NAME_LENGTH];       /* temporary string */
01219   
01220   
01221   /*----- initialize local variables -----*/
01222   a = option_data->a;
01223   b = option_data->b;
01224   c = option_data->c;
01225   n = option_data->n;
01226   nxyz = option_data->nxyz;
01227   nvoxel = option_data->nvoxel;
01228   
01229   /*----- allocate memory space for calculations -----*/
01230   y = (float *) malloc(sizeof(float)*nxyz);
01231   if (y == NULL)  ANOVA_error ("unable to allocate sufficient memory");
01232 
01233 
01234   /*-----  set up summation limits -----*/
01235   if (ii < 0)
01236     { ibot = 0;   itop = a; }
01237   else
01238     { ibot = ii;  itop = ii+1; }
01239 
01240   if (jj < 0)
01241     { jbot = 0;   jtop = b; }
01242   else
01243     { jbot = jj;  jtop = jj+1; }
01244 
01245   if (kk < 0)
01246     { kbot = 0;   ktop = c; }
01247   else
01248     { kbot = kk;  ktop = kk+1; }
01249 
01250 
01251   volume_zero (ysum, nxyz);
01252 
01253   /*-----  loop over levels of factor A  -----*/
01254   for (i = ibot;  i < itop;  i++)
01255     {
01256       /*-----  loop over levels of factor B  -----*/
01257       for (j = jbot;  j < jtop;  j++)
01258         {
01259           /*-----  loop over levels of factor C  -----*/
01260           for (k = kbot;  k < ktop;  k++)
01261             {
01262               /*----- sum observations within this cell -----*/      
01263               for (m = 0;  m < n;  m++)
01264                 {  
01265                   read_afni_data (option_data, 
01266                                   option_data->xname[i][j][k][m], y);
01267                   if (nvoxel > 0)
01268                     printf ("y[%d][%d][%d][%d] = %f \n", 
01269                             i+1, j+1, k+1, m+1, y[nvoxel-1]);
01270                   for (ixyz = 0;  ixyz < nxyz;  ixyz++)
01271                     ysum[ixyz] += y[ixyz];
01272                 } /* m */
01273             }  /* k */
01274         }  /* j */ 
01275     }  /* i */
01276 
01277 
01278   /*----- print the sum for this cell -----*/
01279   if (nvoxel > 0)
01280     {
01281       strcpy (sum_label, "y");
01282       if (ii < 0)
01283         strcat (sum_label, "[.]");
01284       else
01285         {
01286           sprintf (str, "[%d]", ii+1);
01287           strcat (sum_label, str);
01288         }
01289       if (jj < 0)
01290         strcat (sum_label, "[.]");
01291       else
01292         {
01293           sprintf (str, "[%d]", jj+1);
01294           strcat (sum_label, str);
01295         }
01296       if (kk < 0)
01297         strcat (sum_label, "[.]");
01298       else
01299         {
01300           sprintf (str, "[%d]", kk+1);
01301           strcat (sum_label, str);
01302         }
01303       printf ("%s[.] = %f \n", sum_label, ysum[nvoxel-1]);
01304     }
01305  
01306   /*----- release memory -----*/
01307   free (y);     y = NULL;
01308   
01309 }

void calculate_xdifferences anova_options   option_data
 

Definition at line 3954 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, 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.

Referenced by analyze_results().

03955 {
03956   const float  EPSILON = 1.0e-10;     /* protect against divide by zero */
03957   float * diff = NULL;                /* pointer to est. diff. in means */
03958   float * tdiff = NULL;               /* pointer to t-statistic data */
03959   int a;                              /* number of levels for factor A */
03960   int b;                              /* number of levels for factor B */
03961   int c;                              /* number of levels for factor C */
03962   int n;                              /* number of observations per cell */
03963   int ixyz, nxyz;                     /* voxel counters */
03964   int nvoxel;                         /* output voxel # */
03965   int num_diffs;                      /* number of user requested diffs. */
03966   int idiff;                          /* index for requested differences */
03967   int ia, ib, ic, ja, jb, jc;         /* cell indices */
03968   int df;                             /* degrees of freedom for t-test */
03969   float fval;                         /* for calculating std. dev. */
03970   float stddev;                       /* est. std. dev. of difference */
03971   char filename[MAX_NAME_LENGTH];     /* input file name */
03972   
03973   
03974   /*----- initialize local variables -----*/
03975   a = option_data->a;
03976   b = option_data->b;
03977   c = option_data->c;
03978   n = option_data->n;
03979   df = a * b * c * (n-1);
03980   num_diffs = option_data->num_xdiffs;
03981   nxyz = option_data->nxyz;
03982   nvoxel = option_data->nvoxel;
03983   
03984   /*----- allocate memory space for calculations -----*/
03985   diff = (float *) malloc(sizeof(float)*nxyz);
03986   tdiff = (float *) malloc(sizeof(float)*nxyz);
03987   if ((diff == NULL) || (tdiff == NULL))
03988     ANOVA_error ("unable to allocate sufficient memory");
03989   
03990   /*----- loop over user specified treatment differences -----*/
03991   for (idiff = 0;  idiff < num_diffs;  idiff++)
03992     {
03993 
03994       /*----- read first treatment level mean -----*/
03995       ia = option_data->xdiffs[idiff][0][0];
03996       ib = option_data->xdiffs[idiff][0][1];
03997       ic = option_data->xdiffs[idiff][0][2];
03998       calculate_sum (option_data, ia, ib, ic, diff);
03999       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04000         diff[ixyz] = diff[ixyz] / n;
04001       
04002       /*----- subtract second treatment level mean -----*/
04003       ja = option_data->xdiffs[idiff][1][0];
04004       jb = option_data->xdiffs[idiff][1][1];
04005       jc = option_data->xdiffs[idiff][1][2];
04006       calculate_sum (option_data, ja, jb, jc, tdiff);
04007       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04008         diff[ixyz] -= tdiff[ixyz] / n;
04009       if (nvoxel > 0)
04010         printf ("Difference Cell[%d][%d][%d] - Cell[%d][%d][%d] = %f \n", 
04011                 ia+1, ib+1, ic+1, ja+1, jb+1, jc+1, diff[nvoxel-1]);
04012 
04013       /*----- divide by estimated standard deviation of difference -----*/
04014       volume_read ("sse", tdiff, nxyz); 
04015       fval = (1.0 / df) * (2.0 / n);
04016       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
04017         {
04018           stddev = sqrt (tdiff[ixyz] * fval);
04019           if (stddev < EPSILON)
04020             tdiff[ixyz] = 0.0;
04021           else
04022             tdiff[ixyz] = diff[ixyz] / stddev;
04023         } 
04024       
04025       if (nvoxel > 0)
04026         printf ("t-stat for Cell[%d][%d][%d] - Cell[%d][%d][%d] = %f \n", 
04027                 ia+1, ib+1, ic+1, ja+1, jb+1, jc+1, tdiff[nvoxel-1]);
04028       
04029       /*----- write out afni data file -----*/
04030       write_afni_data (option_data, option_data->xdname[idiff], 
04031                        diff, tdiff, df, 0);
04032       
04033     }
04034   
04035   /*----- release memory -----*/
04036   free (tdiff);   tdiff = NULL;
04037   free (diff);    diff = NULL;
04038   
04039 }

void calculate_xmeans anova_options   option_data
 

Definition at line 3558 of file 3dANOVA3.c.

References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::c, c, 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.

Referenced by analyze_results().

03559 {
03560   const float  EPSILON = 1.0e-10;    /* protect against divide by zero */
03561   float * mean = NULL;               /* pointer to treatment mean data */
03562   float * tmean = NULL;              /* pointer to t-statistic data */
03563   int a;                             /* number of levels for factor A */
03564   int b;                             /* number of levels for factor B */
03565   int c;                             /* number of levels for factor C */
03566   int n;                             /* number of observations per cell */
03567   int ixyz, nxyz;                    /* voxel counters */
03568   int nvoxel;                        /* output voxel # */
03569   int nt;                            /* total number of observations */
03570   int num_means;                     /* number of user requested means */
03571   int imean;                         /* output mean option index */
03572   int alevel, blevel, clevel;        /* factor level indices */
03573   int df;                            /* degrees of freedom for t-test */
03574   float fval;                        /* for calculating std. dev. */
03575   float stddev;                      /* est. std. dev. of cell mean */
03576   char filename[MAX_NAME_LENGTH];    /* input data file name */
03577  
03578 
03579   /*----- initialize local variables -----*/
03580   a = option_data->a;
03581   b = option_data->b;
03582   c = option_data->c;
03583   n = option_data->n;
03584   df = a * b * c * (n-1);
03585   nt = option_data->nt;
03586   num_means = option_data->num_xmeans;
03587   nxyz = option_data->nxyz;
03588   nvoxel = option_data->nvoxel;
03589 
03590   /*----- allocate memory space for calculations -----*/
03591   mean = (float *) malloc(sizeof(float)*nxyz);
03592   tmean = (float *) malloc(sizeof(float)*nxyz);
03593   if ((mean == NULL) || (tmean == NULL))  
03594     ANOVA_error ("unable to allocate sufficient memory");
03595    
03596   /*----- loop over user specified treatment means -----*/ 
03597   for (imean = 0;  imean < num_means;  imean++)
03598     {
03599       alevel = option_data->xmeans[imean][0];
03600       blevel = option_data->xmeans[imean][1];
03601       clevel = option_data->xmeans[imean][2];
03602       
03603       /*----- estimate factor mean for this treatment level -----*/
03604       calculate_sum (option_data, alevel, blevel, clevel, mean);
03605       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03606         mean[ixyz] = mean[ixyz] / n;
03607       if (nvoxel > 0)
03608         printf ("Mean of Cell[%d][%d][%d] = %f \n", 
03609                 alevel+1, blevel+1, clevel+1, mean[nvoxel-1]);
03610       
03611       /*----- divide by estimated standard deviation of factor mean -----*/
03612       volume_read ("sse", tmean, nxyz); 
03613       fval = (1.0 / df) * (1.0 / n);
03614       for (ixyz = 0;  ixyz < nxyz;  ixyz++)
03615         {
03616           stddev =  sqrt(tmean[ixyz] * fval);
03617           if (stddev < EPSILON)
03618             tmean[ixyz] = 0.0;
03619           else
03620             tmean[ixyz] = mean[ixyz] / stddev;
03621         }
03622       if (nvoxel > 0)
03623         printf ("t-stat for Mean of Cell[%d][%d][%d] = %f \n", 
03624                 alevel+1, blevel+1, clevel+1, tmean[nvoxel-1]);
03625       
03626       /*----- write out afni data file -----*/
03627       write_afni_data (option_data, option_data->xmname[imean], 
03628                        mean, tmean, df, 0);
03629       
03630     }
03631   
03632   /*----- release memory -----*/
03633   free (tmean);   tmean = NULL;
03634   free (mean);    mean = NULL;
03635 }

void check_for_valid_inputs anova_options   option_data
 

Definition at line 958 of file 3dANOVA3.c.

References anova_options::a, ANOVA_error(), anova_options::b, anova_options::c, anova_options::model, anova_options::n, anova_options::nfa, anova_options::nfabc, anova_options::nfac, anova_options::nfb, anova_options::nfbc, anova_options::nfc, 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_ccontr, anova_options::num_cdiffs, anova_options::num_cmeans, anova_options::num_xdiffs, and anova_options::num_xmeans.

00959 {
00960   int n;
00961 
00962   /*----- check for valid inputs -----*/
00963   if (option_data->a < 2)  
00964     ANOVA_error ("must specify number of factor A levels (a>1) ");
00965   if (option_data->b < 2) 
00966     ANOVA_error ("must specify number of factor B levels (b>1) ");
00967   if (option_data->c < 2)  
00968     ANOVA_error ("must specify number of factor C levels (c>1) ");
00969   if (option_data->n < 1)  ANOVA_error ("sample size is too small");
00970   
00971   n = option_data->n;
00972   
00973   switch (option_data->model)
00974     {
00975     case 1:
00976       if (n == 1)  ANOVA_error ("sample size is too small for Model 1");  
00977       break;
00978     case 2:
00979       if (option_data->nfa > 0) 
00980         ANOVA_error ("cannot calculate F(A) for Model 2");
00981       if (option_data->nfb > 0)
00982         ANOVA_error ("cannot calculate F(B) for Model 2"); 
00983       if (option_data->nfc > 0)  
00984         ANOVA_error ("cannot calculate F(C) for Model 2");
00985       if ((option_data->nfabc > 0) && (n == 1))
00986         ANOVA_error ("sample size is too small for calculating F(ABC)");
00987       if (option_data->num_ameans > 0)
00988         ANOVA_error ("-amean not allowed for Model 2");
00989       if (option_data->num_bmeans > 0)
00990         ANOVA_error ("-bmean not allowed for Model 2");
00991       if (option_data->num_cmeans > 0)  
00992         ANOVA_error ("-cmean not allowed for Model 2");
00993       if (option_data->num_xmeans > 0)  
00994         ANOVA_error ("-xmean not allowed for Model 2");
00995       if (option_data->num_adiffs > 0)
00996         ANOVA_error ("-adiff not allowed for Model 2");
00997       if (option_data->num_bdiffs > 0)
00998         ANOVA_error ("-bdiff not allowed for Model 2");
00999       if (option_data->num_cdiffs > 0)   
01000         ANOVA_error ("-cdiff not allowed for Model 2");
01001       if (option_data->num_xdiffs > 0)   
01002         ANOVA_error ("-xdiff not allowed for Model 2");
01003       if (option_data->num_acontr > 0) 
01004         ANOVA_error ("-acontr not allowed for Model 2");
01005       if (option_data->num_bcontr > 0) 
01006         ANOVA_error ("-bcontr not allowed for Model 2");
01007       if (option_data->num_ccontr > 0)   
01008         ANOVA_error ("-ccontr not allowed for Model 2");
01009       break;
01010     case 3:
01011       if (option_data->nfa > 0)   
01012         ANOVA_error ("cannot calculate F(A) for Model 3");
01013       if ((option_data->nfbc > 0) && (n == 1))
01014         ANOVA_error ("sample size is too small for calculating F(BC)");
01015       if ((option_data->nfabc > 0) && (n == 1))
01016         ANOVA_error ("sample size is too small for calculating F(ABC)");
01017       if (option_data->num_ameans > 0)
01018         ANOVA_error ("-amean not allowed for Model 3");
01019       if (option_data->num_bmeans > 0)
01020         ANOVA_error ("-bmean not allowed for Model 3");
01021       if (option_data->num_cmeans > 0)  
01022         ANOVA_error ("-cmean not allowed for Model 3");
01023       if (option_data->num_xmeans > 0)  
01024         ANOVA_error ("-xmean not allowed for Model 3");
01025       if (option_data->num_adiffs > 0)
01026         ANOVA_error ("-adiff not allowed for Model 3");
01027       if (option_data->num_bdiffs > 0)
01028         ANOVA_error ("-bdiff not allowed for Model 3");
01029       if (option_data->num_cdiffs > 0)   
01030         ANOVA_error ("-cdiff not allowed for Model 3");
01031       if (option_data->num_xdiffs > 0)   
01032         ANOVA_error ("-xdiff not allowed for Model 3");
01033       if (option_data->num_acontr > 0) 
01034         ANOVA_error ("-acontr not allowed for Model 3");
01035       if (option_data->num_bcontr > 0) 
01036         ANOVA_error ("-bcontr not allowed for Model 3");
01037       if (option_data->num_ccontr > 0)  
01038         ANOVA_error ("-ccontr not allowed for Model 3");
01039       break;
01040     case 4:
01041       if ((option_data->nfc > 0) && (n == 1))
01042         ANOVA_error ("sample size is too small for calculating F(C)");
01043       if ((option_data->nfac > 0) && (n == 1))
01044         ANOVA_error ("sample size is too small for calculating F(AC)");
01045       if ((option_data->nfbc > 0) && (n == 1))
01046         ANOVA_error ("sample size is too small for calculating F(BC)");
01047       if ((option_data->nfabc > 0) && (n == 1))
01048         ANOVA_error ("sample size is too small for calculating F(ABC)");
01049       if (option_data->num_cmeans > 0)  
01050         ANOVA_error ("-cmean not allowed for Model 4");
01051       if (option_data->num_xmeans > 0)  
01052         ANOVA_error ("-xmean not allowed for Model 4");
01053       if (option_data->num_cdiffs > 0)   
01054         ANOVA_error ("-cdiff not allowed for Model 4");
01055       if (option_data->num_xdiffs > 0)   
01056         ANOVA_error ("-xdiff not allowed for Model 4");
01057       if (option_data->num_ccontr > 0)  
01058         ANOVA_error ("-ccontr not allowed for Model 4");
01059       break;
01060     case 5:
01061       if ((option_data->nfc > 0) && (n == 1))
01062         ANOVA_error ("sample size is too small for calculating F(C(A))");
01063       if ((option_data->nfbc > 0) && (n == 1))
01064         ANOVA_error ("sample size is too small for calculating F(BC(A))");
01065       if (option_data->nfac > 0)
01066         ANOVA_error ("F(AC) is meaningless for Model 5");
01067       if (option_data->nfabc > 0)
01068         ANOVA_error ("F(ABC) is meaningless for Model 5");
01069       if (option_data->num_cmeans > 0)  
01070         ANOVA_error ("-cmean not allowed for Model 5");
01071       if (option_data->num_xmeans > 0)  
01072         ANOVA_error ("-xmean not allowed for Model 5");
01073       if (option_data->num_cdiffs > 0)   
01074         ANOVA_error ("-cdiff not allowed for Model 5");
01075       if (option_data->num_xdiffs > 0)   
01076         ANOVA_error ("-xdiff not allowed for Model 5");
01077       if (option_data->num_ccontr > 0)  
01078         ANOVA_error ("-ccontr not allowed for Model 5");
01079       break;
01080     }
01081   
01082 }

void check_output_files anova_options   option_data
 

Definition at line 878 of file 3dANOVA3.c.

References anova_options::acname, anova_options::adname, anova_options::amname, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, anova_options::ccname, anova_options::cdname, check_one_output_file(), anova_options::cmname, anova_options::fabcname, anova_options::fabname, anova_options::facname, anova_options::faname, anova_options::fbcname, anova_options::fbname, anova_options::fcname, i, anova_options::nfa, anova_options::nfab, anova_options::nfabc, anova_options::nfac, anova_options::nfb, anova_options::nfbc, anova_options::nfc, 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_ccontr, anova_options::num_cdiffs, anova_options::num_cmeans, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::xdname, and anova_options::xmname.

00879 {
00880   int i;       /* index */
00881   
00882   if (option_data->nfa > 0)   
00883     check_one_output_file (option_data, option_data->faname);
00884   
00885   if (option_data->nfb > 0)   
00886     check_one_output_file (option_data, option_data->fbname);
00887   
00888   if (option_data->nfc > 0)   
00889     check_one_output_file (option_data, option_data->fcname);
00890   
00891   if (option_data->nfab > 0)   
00892     check_one_output_file (option_data, option_data->fabname);
00893   
00894   if (option_data->nfac > 0)   
00895     check_one_output_file (option_data, option_data->facname);
00896   
00897  if (option_data->nfbc > 0)   
00898     check_one_output_file (option_data, option_data->fbcname);
00899   
00900  if (option_data->nfabc > 0)   
00901     check_one_output_file (option_data, option_data->fabcname);
00902   
00903   if (option_data->num_ameans > 0)
00904     for (i = 0;  i < option_data->num_ameans;  i++)
00905       check_one_output_file (option_data, option_data->amname[i]);
00906   
00907   if (option_data->num_bmeans > 0)
00908     for (i = 0;  i < option_data->num_bmeans;  i++)
00909       check_one_output_file (option_data, option_data->bmname[i]);
00910   
00911   if (option_data->num_cmeans > 0)
00912     for (i = 0;  i < option_data->num_cmeans;  i++)
00913       check_one_output_file (option_data, option_data->cmname[i]);
00914   
00915   if (option_data->num_xmeans > 0)
00916     for (i = 0;  i < option_data->num_xmeans;  i++)
00917       check_one_output_file (option_data, option_data->xmname[i]);
00918   
00919   if (option_data->num_adiffs > 0)
00920     for (i = 0;  i < option_data->num_adiffs;  i++)
00921       check_one_output_file (option_data, option_data->adname[i]);
00922   
00923   if (option_data->num_bdiffs > 0)
00924     for (i = 0;  i < option_data->num_bdiffs;  i++)
00925       check_one_output_file (option_data, option_data->bdname[i]);
00926   
00927   if (option_data->num_cdiffs > 0)
00928     for (i = 0;  i < option_data->num_cdiffs;  i++)
00929       check_one_output_file (option_data, option_data->cdname[i]);
00930   
00931   if (option_data->num_xdiffs > 0)
00932     for (i = 0;  i < option_data->num_xdiffs;  i++)
00933       check_one_output_file (option_data, option_data->xdname[i]);
00934   
00935   if (option_data->num_acontr > 0)
00936     for (i = 0;  i < option_data->num_acontr;  i++)
00937       check_one_output_file (option_data, option_data->acname[i]);
00938   
00939   if (option_data->num_bcontr > 0)
00940     for (i = 0;  i < option_data->num_bcontr;  i++)
00941       check_one_output_file (option_data, option_data->bcname[i]);
00942 
00943   if (option_data->num_ccontr > 0)
00944     for (i = 0;  i < option_data->num_ccontr;  i++)
00945       check_one_output_file (option_data, option_data->ccname[i]);
00946 
00947   if (option_data->bucket_filename != NULL)
00948     check_one_output_file (option_data, option_data->bucket_filename);
00949 
00950 }

void check_temporary_files anova_options   option_data
 

Definition at line 845 of file 3dANOVA3.c.

References check_one_temporary_file().

00846 {
00847   
00848   check_one_temporary_file ("ss0");
00849   check_one_temporary_file ("ssi");
00850   check_one_temporary_file ("ssj");
00851   check_one_temporary_file ("ssk");
00852   check_one_temporary_file ("ssij");
00853   check_one_temporary_file ("ssik");
00854   check_one_temporary_file ("ssjk");
00855   check_one_temporary_file ("ssijk");
00856   check_one_temporary_file ("ssijkm");
00857 
00858   check_one_temporary_file ("ssto");
00859   check_one_temporary_file ("sse");
00860   check_one_temporary_file ("ssa");
00861   check_one_temporary_file ("ssb");
00862   check_one_temporary_file ("ssc");
00863   check_one_temporary_file ("ssab");
00864   check_one_temporary_file ("ssac");
00865   check_one_temporary_file ("ssbc");
00866   check_one_temporary_file ("ssabc");
00867   check_one_temporary_file ("ssca");
00868   check_one_temporary_file ("ssbca");
00869 
00870 }

void create_bucket anova_options   option_data
 

Definition at line 4503 of file 3dANOVA3.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, anova_options::ccname, anova_options::cdname, anova_options::cmname, DSET_IS_1D, DSET_IS_3D, EDIT_dset_items(), EDIT_empty_copy(), anova_options::fabcname, anova_options::fabname, anova_options::facname, anova_options::faname, anova_options::fbcname, anova_options::fbname, anova_options::fcname, anova_options::first_dataset, i, ISVALID_3DIM_DATASET, anova_options::nfa, anova_options::nfab, anova_options::nfabc, anova_options::nfac, anova_options::nfb, anova_options::nfbc, anova_options::nfc, 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_ccontr, anova_options::num_cdiffs, anova_options::num_cmeans, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), anova_options::xdname, and anova_options::xmname.

Referenced by terminate().

04505 {
04506   char bucket_str[10000];             /* command line for program 3dbucket */
04507   char refit_str[10000];              /* command line for program 3drefit */
04508   THD_3dim_dataset * dset=NULL;       /* input afni data set pointer */
04509   THD_3dim_dataset * new_dset=NULL;   /* output afni data set pointer */
04510   int i;                              /* file index */
04511   int ibrick;                         /* sub-brick index number */
04512   char str[100];                      /* temporary character string */
04513 
04514 
04515   /*----- read first dataset -----*/
04516   dset = THD_open_dataset (option_data->first_dataset) ;
04517   if( ! ISVALID_3DIM_DATASET(dset) ){
04518     fprintf(stderr,"*** Unable to open dataset file %s\n",
04519             option_data->first_dataset);
04520     exit(1) ;
04521   }
04522 
04523        if( DSET_IS_1D(dset) ) USE_1D_filenames(1) ; /* 14 Mar 2003 */
04524   else if( DSET_IS_3D(dset) ) USE_1D_filenames(3) ; /* 21 Mar 2003 */
04525   
04526 
04527   /*----- make an empty copy of this dataset -----*/
04528   new_dset = EDIT_empty_copy( dset ) ;
04529   THD_delete_3dim_dataset (dset , False);   dset = NULL;
04530   EDIT_dset_items (new_dset, 
04531                    ADN_directory_name, option_data->session,
04532                    ADN_none);
04533 
04534   
04535   /*----- begin command line for program 3dbucket -----*/
04536   strcpy (bucket_str, "3dbucket");
04537   strcat (bucket_str, " -prefix ");
04538   strcat (bucket_str, option_data->bucket_filename);
04539 
04540 
04541   /*----- begin command line for program 3drefit -----*/
04542   strcpy (refit_str, "3drefit ");
04543   ibrick = -1;
04544 
04545  
04546   /*----- make F-stat for factor A data sub-bricks -----*/
04547   if (option_data->nfa != 0)
04548     {
04549       add_file_name (new_dset, option_data->faname, bucket_str);
04550 
04551       ibrick++;
04552       sprintf (str, " -sublabel %d %s:Inten ",
04553                ibrick, option_data->faname);
04554       strcat (refit_str, str);
04555 
04556       ibrick++;
04557       sprintf (str, " -sublabel %d %s:F-stat ", 
04558                ibrick, option_data->faname);
04559       strcat (refit_str, str);
04560     }
04561   
04562   
04563   /*----- make F-stat for factor B sub-bricks -----*/
04564   if (option_data->nfb != 0)
04565     {
04566       add_file_name (new_dset, option_data->fbname, bucket_str);
04567 
04568       ibrick++;
04569       sprintf (str, " -sublabel %d %s:Inten ",
04570                ibrick, option_data->fbname);
04571       strcat (refit_str, str);
04572 
04573       ibrick++;
04574       sprintf (str, " -sublabel %d %s:F-stat ", 
04575                ibrick, option_data->fbname);
04576       strcat (refit_str, str);
04577     }
04578   
04579   
04580   /*----- make F-stat for factor C sub-bricks -----*/
04581   if (option_data->nfc != 0)
04582     {
04583       add_file_name (new_dset, option_data->fcname, bucket_str);
04584 
04585       ibrick++;
04586       sprintf (str, " -sublabel %d %s:Inten ",
04587                ibrick, option_data->fcname);
04588       strcat (refit_str, str);
04589 
04590       ibrick++;
04591       sprintf (str, " -sublabel %d %s:F-stat ", 
04592                ibrick, option_data->fcname);
04593       strcat (refit_str, str);
04594     }
04595   
04596   
04597   /*----- make F-stat for A*B interaction sub-bricks -----*/
04598   if (option_data->nfab != 0)
04599     {
04600       add_file_name (new_dset, option_data->fabname, bucket_str);
04601 
04602       ibrick++;
04603       sprintf (str, " -sublabel %d %s:Inten ",
04604                ibrick, option_data->fabname);
04605       strcat (refit_str, str);
04606 
04607       ibrick++;
04608       sprintf (str, " -sublabel %d %s:F-stat ", 
04609                ibrick, option_data->fabname);
04610       strcat (refit_str, str);
04611     }
04612   
04613   
04614   /*----- make F-stat for A*C interaction sub-bricks -----*/
04615   if (option_data->nfac != 0)
04616     {
04617       add_file_name (new_dset, option_data->facname, bucket_str);
04618 
04619       ibrick++;
04620       sprintf (str, " -sublabel %d %s:Inten ",
04621                ibrick, option_data->facname);
04622       strcat (refit_str, str);
04623 
04624       ibrick++;
04625       sprintf (str, " -sublabel %d %s:F-stat ", 
04626                ibrick, option_data->facname);
04627       strcat (refit_str, str);
04628     }
04629   
04630   
04631   /*----- make F-stat for B*C interaction sub-bricks -----*/
04632   if (option_data->nfbc != 0)
04633     {
04634       add_file_name (new_dset, option_data->fbcname, bucket_str);
04635 
04636       ibrick++;
04637       sprintf (str, " -sublabel %d %s:Inten ",
04638                ibrick, option_data->fbcname);
04639       strcat (refit_str, str);
04640 
04641       ibrick++;
04642       sprintf (str, " -sublabel %d %s:F-stat ", 
04643                ibrick, option_data->fbcname);
04644       strcat (refit_str, str);
04645     }
04646   
04647   
04648   /*----- make F-stat for A*B*C interaction sub-bricks -----*/
04649   if (option_data->nfabc != 0)
04650     {
04651       add_file_name (new_dset, option_data->fabcname, bucket_str);
04652 
04653       ibrick++;
04654       sprintf (str, " -sublabel %d %s:Inten ",
04655                ibrick, option_data->fabcname);
04656       strcat (refit_str, str);
04657 
04658       ibrick++;
04659       sprintf (str, " -sublabel %d %s:F-stat ", 
04660                ibrick, option_data->fabcname);
04661       strcat (refit_str, str);
04662     }
04663   
04664   
04665   /*----- make factor A level mean sub-bricks -----*/
04666   if (option_data->num_ameans > 0)
04667     for (i = 0; i < option_data->num_ameans; i++)
04668       {
04669         add_file_name (new_dset, option_data->amname[i], bucket_str);
04670 
04671         ibrick++;
04672         sprintf (str, " -sublabel %d %s:Mean ", 
04673                  ibrick, option_data->amname[i]);
04674         strcat (refit_str, str);
04675 
04676         ibrick++;
04677         sprintf (str, " -sublabel %d %s:t-stat ", 
04678                  ibrick, option_data->amname[i]);
04679         strcat (refit_str, str);
04680       }
04681   
04682 
04683   /*----- make factor B level mean sub-bricks -----*/
04684   if (option_data->num_bmeans > 0)
04685     for (i = 0; i < option_data->num_bmeans; i++)
04686       {
04687         add_file_name (new_dset, option_data->bmname[i], bucket_str);
04688 
04689         ibrick++;
04690         sprintf (str, " -sublabel %d %s:Mean ", 
04691                  ibrick, option_data->bmname[i]);
04692         strcat (refit_str, str);
04693 
04694         ibrick++;
04695         sprintf (str, " -sublabel %d %s:t-stat ", 
04696                  ibrick, option_data->bmname[i]);
04697         strcat (refit_str, str);
04698       }
04699   
04700 
04701   /*----- make factor C level mean sub-bricks -----*/
04702   if (option_data->num_cmeans > 0)
04703     for (i = 0; i < option_data->num_cmeans; i++)
04704       {
04705         add_file_name (new_dset, option_data->cmname[i], bucket_str);
04706 
04707         ibrick++;
04708         sprintf (str, " -sublabel %d %s:Mean ", 
04709                  ibrick, option_data->cmname[i]);
04710         strcat (refit_str, str);
04711 
04712         ibrick++;
04713         sprintf (str, " -sublabel %d %s:t-stat ", 
04714                  ibrick, option_data->cmname[i]);
04715         strcat (refit_str, str);
04716       }
04717   
04718 
04719   /*----- make individual cell mean sub-bricks -----*/
04720   if (option_data->num_xmeans > 0)
04721     for (i = 0; i < option_data->num_xmeans; i++)
04722       {
04723         add_file_name (new_dset, option_data->xmname[i], bucket_str);
04724 
04725         ibrick++;
04726         sprintf (str, " -sublabel %d %s:Mean ", 
04727                  ibrick, option_data->xmname[i]);
04728         strcat (refit_str, str);
04729 
04730         ibrick++;
04731         sprintf (str, " -sublabel %d %s:t-stat ", 
04732                  ibrick, option_data->xmname[i]);
04733         strcat (refit_str, str);
04734       }
04735   
04736 
04737   /*----- make difference in factor A level means sub-bricks -----*/
04738   if (option_data->num_adiffs > 0)
04739     for (i = 0; i < option_data->num_adiffs; i++)
04740       {
04741         add_file_name (new_dset, option_data->adname[i], bucket_str);
04742 
04743         ibrick++;
04744         sprintf (str, " -sublabel %d %s:Diff ", 
04745                  ibrick, option_data->adname[i]);
04746         strcat (refit_str, str);
04747 
04748         ibrick++;
04749         sprintf (str, " -sublabel %d %s:t-stat ", 
04750                  ibrick, option_data->adname[i]);
04751         strcat (refit_str, str);
04752       }
04753   
04754 
04755   /*----- make difference in factor B level means sub-bricks -----*/
04756   if (option_data->num_bdiffs > 0)
04757     for (i = 0; i < option_data->num_bdiffs; i++)
04758       {
04759         add_file_name (new_dset, option_data->bdname[i], bucket_str);
04760 
04761         ibrick++;
04762         sprintf (str, " -sublabel %d %s:Diff ", 
04763                  ibrick, option_data->bdname[i]);
04764         strcat (refit_str, str);
04765 
04766         ibrick++;
04767         sprintf (str, " -sublabel %d %s:t-stat ", 
04768                  ibrick, option_data->bdname[i]);
04769         strcat (refit_str, str);
04770       }
04771   
04772 
04773   /*----- make difference in factor C level means sub-bricks -----*/
04774   if (option_data->num_cdiffs > 0)
04775     for (i = 0; i < option_data->num_cdiffs; i++)
04776       {
04777         add_file_name (new_dset, option_data->cdname[i], bucket_str);
04778 
04779         ibrick++;
04780         sprintf (str, " -sublabel %d %s:Diff ", 
04781                  ibrick, option_data->cdname[i]);
04782         strcat (refit_str, str);
04783 
04784         ibrick++;
04785         sprintf (str, " -sublabel %d %s:t-stat ", 
04786                  ibrick, option_data->cdname[i]);
04787         strcat (refit_str, str);
04788       }
04789   
04790 
04791   /*----- make difference in cell means sub-bricks -----*/
04792   if (option_data->num_xdiffs > 0)
04793     for (i = 0; i < option_data->num_xdiffs; i++)
04794       {
04795         add_file_name (new_dset, option_data->xdname[i], bucket_str);
04796 
04797         ibrick++;
04798         sprintf (str, " -sublabel %d %s:Diff ", 
04799                  ibrick, option_data->xdname[i]);
04800         strcat (refit_str, str);
04801 
04802         ibrick++;
04803         sprintf (str, " -sublabel %d %s:t-stat ", 
04804                  ibrick, option_data->xdname[i]);
04805         strcat (refit_str, str);
04806       }
04807   
04808 
04809   /*----- make contrast in factor A level means sub-brickss -----*/
04810   if (option_data->num_acontr > 0)
04811     for (i = 0; i < option_data->num_acontr; i++)
04812       {
04813         add_file_name (new_dset, option_data->acname[i], bucket_str);
04814 
04815         ibrick++;
04816         sprintf (str, " -sublabel %d %s:Contr ", 
04817                  ibrick, option_data->acname[i]);
04818         strcat (refit_str, str);
04819 
04820         ibrick++;
04821         sprintf (str, " -sublabel %d %s:t-stat ", 
04822                  ibrick, option_data->acname[i]);
04823         strcat (refit_str, str);
04824       }
04825 
04826 
04827   /*----- make contrast in factor B level means sub-bricks -----*/
04828   if (option_data->num_bcontr > 0)
04829     for (i = 0; i < option_data->num_bcontr; i++)
04830       {
04831         add_file_name (new_dset, option_data->bcname[i], bucket_str);
04832 
04833         ibrick++;
04834         sprintf (str, " -sublabel %d %s:Contr ", 
04835                  ibrick, option_data->bcname[i]);
04836         strcat (refit_str, str);
04837 
04838         ibrick++;
04839         sprintf (str, " -sublabel %d %s:t-stat ", 
04840                  ibrick, option_data->bcname[i]);
04841         strcat (refit_str, str);
04842       }
04843 
04844 
04845   /*----- make contrast in factor C level means sub-bricks -----*/
04846   if (option_data->num_ccontr > 0)
04847     for (i = 0; i < option_data->num_ccontr; i++)
04848       {
04849         add_file_name (new_dset, option_data->ccname[i], bucket_str);
04850 
04851         ibrick++;
04852         sprintf (str, " -sublabel %d %s:Contr ", 
04853                  ibrick, option_data->ccname[i]);
04854         strcat (refit_str, str);
04855 
04856         ibrick++;
04857         sprintf (str, " -sublabel %d %s:t-stat ", 
04858                  ibrick, option_data->ccname[i]);
04859         strcat (refit_str, str);
04860       }
04861 
04862 
04863   /*----- invoke program 3dbucket to generate bucket type output dataset
04864           by concatenating previous output files -----*/
04865   printf("Writing `bucket' dataset ");
04866   printf("into %s\n", option_data->bucket_filename);
04867   fprintf(stderr,"RUNNING COMMAND: %s\n",bucket_str) ;
04868   system (bucket_str);
04869 
04870 
04871   /*----- invoke program 3drefit to label individual sub-bricks -----*/
04872   add_file_name (new_dset, option_data->bucket_filename, refit_str);
04873   fprintf(stderr,"RUNNING COMMAND: %s\n",refit_str) ;
04874   system (refit_str);
04875 
04876 
04877   /*----- release memory -----*/
04878   THD_delete_3dim_dataset (new_dset , False);   new_dset = NULL;
04879 
04880 }

void display_help_menu  
 

Definition at line 68 of file 3dANOVA3.c.

References MASTER_SHORTHELP_STRING.

00069 {
00070   printf 
00071     (
00072      "This program performs three-factor ANOVA on 3D data sets.           \n\n"
00073      "Usage: \n"
00074      "3dANOVA3 \n"
00075      "-type  k          type of ANOVA model to be used:                     \n"
00076      "                         k = 1   A,B,C fixed;          AxBxC          \n"
00077      "                         k = 2   A,B,C random;         AxBxC          \n"
00078      "                         k = 3   A fixed; B,C random;  AxBxC          \n"
00079      "                         k = 4   A,B fixed; C random;  AxBxC          \n"
00080      "                         k = 5   A,B fixed; C random;  AxB,BxC,C(A)   \n"
00081      "                                                                      \n"
00082      "-alevels a                     a = number of levels of factor A       \n"
00083      "-blevels b                     b = number of levels of factor B       \n"
00084      "-clevels c                     c = number of levels of factor C       \n"
00085      "-dset 1 1 1 filename           data set for level 1 of factor A       \n"
00086      "                                        and level 1 of factor B       \n"
00087      "                                        and level 1 of factor C       \n"
00088      " . . .                           . . .                                \n"
00089      "                                                                      \n"
00090      "-dset i j k filename           data set for level i of factor A       \n"
00091      "                                        and level j of factor B       \n"
00092      "                                        and level k of factor C       \n"
00093      " . . .                           . . .                                \n"
00094      "                                                                      \n"
00095      "-dset a b c filename           data set for level a of factor A       \n"
00096      "                                        and level b of factor B       \n"
00097      "                                        and level c of factor C       \n"
00098      "                                                                      \n"
00099      "[-voxel num]                   screen output for voxel # num          \n"
00100      "[-diskspace]                   print out disk space required for      \n"
00101      "                                  program execution                   \n"
00102      "                                                                      \n"
00103      "                                                                      \n"
00104      "The following commands generate individual AFNI 2 sub-brick datasets: \n"
00105      "  (In each case, output is written to the file with the specified     \n"
00106      "   prefix file name.)                                                 \n"
00107      "                                                                      \n"
00108      "[-fa prefix]                F-statistic for factor A effect           \n"
00109      "[-fb prefix]                F-statistic for factor B effect           \n"
00110      "[-fc prefix]                F-statistic for factor C effect           \n"
00111      "[-fab prefix]               F-statistic for A*B interaction           \n"
00112      "[-fac prefix]               F-statistic for A*C interaction           \n"
00113      "[-fbc prefix]               F-statistic for B*C interaction           \n"
00114      "[-fabc prefix]              F-statistic for A*B*C interaction         \n"
00115      "                                                                      \n"
00116      "[-amean i prefix]           estimate of factor A level i mean         \n"
00117      "[-bmean i prefix]           estimate of factor B level i mean         \n"
00118      "[-cmean i prefix]           estimate of factor C level i mean         \n"
00119      "[-xmean i j k prefix]       estimate mean of cell at factor A level i,\n"
00120      "                               factor B level j, factor C level k     \n"
00121      "                                                                      \n"
00122      "[-adiff i j prefix]         difference between factor A levels i and j\n"
00123      "[-bdiff i j prefix]         difference between factor B levels i and j\n"
00124      "[-cdiff i j prefix]         difference between factor C levels i and j\n"
00125      "[-xdiff i j k l m n prefix] difference between cell mean at A=i,B=j,  \n"
00126      "                               C=k, and cell mean at A=l,B=m,C=n      \n"
00127      "                                                                      \n"
00128      "[-acontr c1...ca prefix]    contrast in factor A levels               \n"
00129      "[-bcontr c1...cb prefix]    contrast in factor B levels               \n"
00130      "[-ccontr c1...cc prefix]    contrast in factor C levels               \n"
00131      "                                                                      \n"
00132      "                                                                      \n"
00133      "The following command generates one AFNI 'bucket' type dataset:       \n"
00134      "                                                                      \n"
00135      "[-bucket prefix]         create one AFNI 'bucket' dataset whose       \n"
00136      "                           sub-bricks are obtained by concatenating   \n"
00137      "                           the above output files; the output 'bucket'\n"
00138      "                           is written to file with prefix file name   \n"
00139      "\n");
00140 
00141   printf
00142     (
00143      "\n"
00144      "N.B.: For this program, the user must specify 1 and only 1 sub-brick  \n"
00145      "      with each -dset command. That is, if an input dataset contains  \n"
00146      "      more than 1 sub-brick, a sub-brick selector must be used, e.g.: \n"
00147      "      -dset 2 4 5 'fred+orig[3]'                                      \n"
00148      );
00149           
00150   printf("\n" MASTER_SHORTHELP_STRING ) ;
00151   
00152   exit(0);
00153 }

void get_options int    argc,
char **    argv,
anova_options   option_data
 

Definition at line 163 of file 3dANOVA3.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::c, calloc, anova_options::ccname, anova_options::ccontr, anova_options::cdiffs, anova_options::cdname, anova_options::cmeans, anova_options::cmname, anova_options::datum, anova_options::diskspace, display_help_menu(), DSET_NVALS, anova_options::fabcname, anova_options::fabname, anova_options::facname, anova_options::faname, anova_options::fbcname, anova_options::fbname, anova_options::fcname, free, i, initialize_options(), ISVALID_3DIM_DATASET, malloc, MAX_CONTR, MAX_DIFFS, MAX_LEVELS, MAX_MEANS, anova_options::model, anova_options::n, N_INDEX, anova_options::nfa, anova_options::nfab, anova_options::nfabc, anova_options::nfac, anova_options::nfb, anova_options::nfbc, anova_options::nfc, 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_ccontr, anova_options::num_cdiffs, anova_options::num_cmeans, 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::xdiffs, anova_options::xdname, anova_options::xmeans, anova_options::xmname, and anova_options::xname.

00164 {
00165   int nopt = 1;                  /* input option argument counter */
00166   int ival, jval, kval;          /* integer input */
00167   int i, j, k;                   /* factor level counters */         
00168   int nijk;                      /* number of data files in cell i,j,k */     
00169   float fval;                    /* float input */
00170   THD_3dim_dataset * dset=NULL;             /* test whether data set exists */
00171   char message[MAX_NAME_LENGTH];            /* error message */
00172   /* int n[MAX_LEVELS][MAX_LEVELS][MAX_LEVELS];    data file counters       */
00173   int * n;                       /* save stack space    19 Jul 2004 [rickr] */
00174 
00175     
00176   /*----- does user request help menu? -----*/
00177   if (argc < 2 || strncmp(argv[1], "-help", 5) == 0)  display_help_menu();  
00178   
00179   /*----- add to program log -----*/
00180   AFNI_logger (PROGRAM_NAME,argc,argv); 
00181 
00182   /*----- initialize the input options -----*/
00183   initialize_options (option_data);
00184   
00185   /*----- initialize data file counters -----*/
00186   n = (int *)calloc(MAX_LEVELS*MAX_LEVELS*MAX_LEVELS, sizeof(int));
00187   if ( !n )
00188   {
00189     sprintf(message, "failed to allocate %u bytes for file counters\n",
00190             (unsigned int)(MAX_LEVELS*MAX_LEVELS*MAX_LEVELS * sizeof(int)) );
00191     ANOVA_error(message);
00192   }
00193 
00194 #if 0  /* replaced array and init with pointer and calloc() */
00195   for (i = 0;  i < MAX_LEVELS;  i++)
00196     for (j = 0;  j < MAX_LEVELS;  j++)
00197       for (k = 0;  k < MAX_LEVELS;  k++)
00198         n[i][j][k] = 0;
00199 #endif
00200   
00201 
00202   /*----- main loop over input options -----*/
00203   while (nopt < argc )
00204     {
00205 
00206       /*----- allocate memory for storing data file names -----*/
00207       if ((option_data->xname == NULL) && (option_data->a > 0) &&
00208           (option_data->b > 0) && (option_data->c > 0))
00209         {
00210           option_data->xname = 
00211             (char *****) malloc (sizeof(char ****) * option_data->a);
00212           for (i = 0;  i < option_data->a;  i++)
00213             {
00214               option_data->xname[i] =
00215                 (char ****) malloc (sizeof(char ***) * option_data->b);
00216               for (j = 0;  j < option_data->b;  j++)
00217                 {
00218                   option_data->xname[i][j] =
00219                     (char ***) malloc (sizeof(char **) * option_data->c);
00220                   for (k = 0;  k < option_data->c;  k++)
00221                     {
00222                       option_data->xname[i][j][k] =
00223                         (char **) malloc (sizeof(char *) * MAX_OBSERVATIONS);
00224                     }
00225                 }
00226             }
00227         }
00228           
00229 
00230       /*-----   -diskspace   -----*/
00231       if( strncmp(argv[nopt],"-diskspace",5) == 0 )
00232         {
00233           option_data->diskspace = 1;
00234           nopt++ ; continue ;  /* go to next arg */
00235         }
00236 
00237       
00238       /*-----    -datum type   -----*/
00239       if( strncmp(argv[nopt],"-datum",5) == 0 ){
00240         if( ++nopt >= argc ) ANOVA_error("need an argument after -datum!") ;
00241         
00242         if( strcmp(argv[nopt],"short") == 0 ){
00243           option_data->datum = MRI_short ;
00244         } else if( strcmp(argv[nopt],"float") == 0 ){
00245           option_data->datum = MRI_float ;
00246         } else {
00247           char buf[256] ;
00248           sprintf(buf,"-datum of type '%s' is not supported in 3dANOVA3!",
00249                   argv[nopt] ) ;
00250           ANOVA_error(buf) ;
00251         }
00252         nopt++ ; continue ;  /* go to next arg */
00253       }
00254       
00255       
00256       /*-----   -session dirname    -----*/
00257       if( strncmp(argv[nopt],"-session",5) == 0 ){
00258         nopt++ ;
00259         if( nopt >= argc ) ANOVA_error("need argument after -session!") ;
00260         strcpy(option_data->session , argv[nopt++]) ;
00261         continue ;
00262       }
00263       
00264 
00265       /*-----   -voxel num  -----*/
00266       if (strncmp(argv[nopt], "-voxel", 6) == 0)
00267         {
00268           nopt++;
00269           if (nopt >= argc)  ANOVA_error ("need argument after -voxel ");
00270           sscanf (argv[nopt], "%d", &ival);
00271           if (ival <= 0)
00272             ANOVA_error ("illegal argument after -voxel ");
00273           option_data->nvoxel = ival;
00274           nopt++;
00275           continue;
00276         }
00277 
00278 
00279       /*-----  -type k  -----*/
00280       if (strncmp(argv[nopt], "-type", 5) == 0)
00281       {
00282          nopt++;
00283          if (nopt >= argc)  ANOVA_error ("need argument after -type ");
00284          sscanf (argv[nopt], "%d", &ival);
00285          if ((ival < 1) || (ival > 5))
00286             ANOVA_error ("illegal argument after -type ");
00287          option_data->model = ival;
00288          nopt++;
00289          continue;
00290       }
00291       
00292       
00293       /*-----   -alevels a  -----*/
00294       if (strncmp(argv[nopt], "-alevels", 5) == 0)
00295         {
00296           nopt++;
00297           if (nopt >= argc)  ANOVA_error ("need argument after -alevels ");
00298           sscanf (argv[nopt], "%d", &ival);
00299           if ((ival <= 0) || (ival > MAX_LEVELS))
00300             ANOVA_error ("illegal argument after -alevels ");
00301           option_data->a = ival;
00302           nopt++;
00303           continue;
00304         }
00305 
00306       
00307       /*-----   -blevels b  -----*/
00308       if (strncmp(argv[nopt], "-blevels", 5) == 0)
00309         {
00310           nopt++;
00311           if (nopt >= argc)  ANOVA_error ("need argument after -blevels ");
00312           sscanf (argv[nopt], "%d", &ival);
00313           if ((ival <= 0) || (ival > MAX_LEVELS))
00314             ANOVA_error ("illegal argument after -blevels ");
00315           option_data->b = ival;
00316           nopt++;
00317           continue;
00318         }
00319       
00320       
00321       /*-----   -clevels c  -----*/
00322       if (strncmp(argv[nopt], "-clevels", 5) == 0)
00323         {
00324           nopt++;
00325           if (nopt >= argc)  ANOVA_error ("need argument after -clevels ");
00326           sscanf (argv[nopt], "%d", &ival);
00327           if ((ival <= 0) || (ival > MAX_LEVELS))
00328             ANOVA_error ("illegal argument after -clevels ");
00329           option_data->c = ival;
00330           nopt++;
00331           continue;
00332         }
00333       
00334       
00335       /*-----   -dset alevel blevel clevel filename   -----*/
00336       if (strncmp(argv[nopt], "-dset", 5) == 0)
00337         {
00338           nopt++;
00339           if (nopt+3 >= argc)  ANOVA_error ("need 4 arguments after -dset ");
00340           sscanf (argv[nopt], "%d", &ival);
00341           if ((ival <= 0) || (ival > option_data->a))
00342             ANOVA_error ("illegal argument after -dset ");
00343           
00344           nopt++;
00345           sscanf (argv[nopt], "%d", &jval);
00346           if ((jval <= 0) || (jval > option_data->b))
00347             ANOVA_error ("illegal argument after -dset ");
00348           
00349           nopt++;
00350           sscanf (argv[nopt], "%d", &kval);
00351           if ((kval <= 0) || (kval > option_data->c))
00352             ANOVA_error ("illegal argument after -dset ");
00353 
00354           N_INDEX(ival-1, jval-1, kval-1) += 1;
00355           nijk = N_INDEX(ival-1, jval-1, kval-1);
00356           if (nijk > MAX_OBSERVATIONS)
00357             ANOVA_error ("too many data files");
00358           
00359           /*--- check whether input files exist ---*/
00360           nopt++;
00361           dset = THD_open_dataset( argv[nopt] ) ;
00362           if( ! ISVALID_3DIM_DATASET(dset) )
00363             {
00364               sprintf(message,"Unable to open dataset file %s\n", 
00365                       argv[nopt]);
00366               ANOVA_error (message);
00367             }
00368 
00369           /*--- check number of selected sub-bricks ---*/
00370           if (DSET_NVALS(dset) != 1)
00371             {
00372              sprintf(message,"Must specify exactly 1 sub-brick for file %s\n",
00373                      argv[nopt]);
00374              ANOVA_error (message);
00375             }
00376 
00377           THD_delete_3dim_dataset( dset , False ) ; dset = NULL ;
00378           
00379           option_data->xname[ival-1][jval-1][kval-1][nijk-1] 
00380             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00381           strcpy (option_data->xname[ival-1][jval-1][kval-1][nijk-1], 
00382                   argv[nopt]);
00383           nopt++;
00384           continue;
00385         }
00386       
00387       
00388       /*-----   -fa filename   -----*/
00389       if (strncmp(argv[nopt], "-fa", 5) == 0)
00390         {
00391           nopt++;
00392           if (nopt >= argc)  ANOVA_error ("need argument after -fa ");
00393           option_data->nfa = 1;
00394           option_data->faname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00395           strcpy (option_data->faname, argv[nopt]);
00396           nopt++;
00397           continue;
00398         }
00399 
00400 
00401       /*-----   -fb filename   -----*/
00402       if (strncmp(argv[nopt], "-fb", 5) == 0)
00403         {
00404           nopt++;
00405           if (nopt >= argc)  ANOVA_error ("need argument after -fb ");
00406           option_data->nfb = 1;
00407           option_data->fbname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00408           strcpy (option_data->fbname, argv[nopt]);
00409           nopt++;
00410           continue;
00411         }
00412       
00413       
00414       /*-----   -fc filename   -----*/
00415       if (strncmp(argv[nopt], "-fc", 5) == 0)
00416         {
00417           nopt++;
00418           if (nopt >= argc)  ANOVA_error ("need argument after -fc ");
00419           option_data->nfc = 1;
00420           option_data->fcname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00421           strcpy (option_data->fcname, argv[nopt]);
00422           nopt++;
00423           continue;
00424         }
00425       
00426 
00427       /*-----   -fab filename   -----*/
00428       if (strncmp(argv[nopt], "-fab", 5) == 0)
00429         {
00430           nopt++;
00431           if (nopt >= argc)  ANOVA_error ("need argument after -fab ");
00432           option_data->nfab = 1;
00433           option_data->fabname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00434           strcpy (option_data->fabname, argv[nopt]);
00435           nopt++;
00436          continue;
00437         }
00438 
00439 
00440       /*-----   -fac filename   -----*/
00441       if (strncmp(argv[nopt], "-fac", 5) == 0)
00442         {
00443           nopt++;
00444           if (nopt >= argc)  ANOVA_error ("need argument after -fac ");
00445           option_data->nfac = 1;
00446           option_data->facname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00447           strcpy (option_data->facname, argv[nopt]);
00448           nopt++;
00449          continue;
00450         }
00451 
00452       
00453       /*-----   -fbc filename   -----*/
00454       if (strncmp(argv[nopt], "-fbc", 5) == 0)
00455         {
00456           nopt++;
00457           if (nopt >= argc)  ANOVA_error ("need argument after -fbc ");
00458           option_data->nfbc = 1;
00459           option_data->fbcname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00460           strcpy (option_data->fbcname, argv[nopt]);
00461           nopt++;
00462           continue;
00463         }
00464 
00465 
00466       /*-----   -fabc filename   -----*/
00467       if (strncmp(argv[nopt], "-fabc", 5) == 0)
00468         {
00469           nopt++;
00470           if (nopt >= argc)  ANOVA_error ("need argument after -fabc ");
00471           option_data->nfabc = 1;
00472           option_data->fabcname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00473           strcpy (option_data->fabcname, argv[nopt]);
00474           nopt++;
00475           continue;
00476         }
00477 
00478 
00479       /*-----   -amean level filename   -----*/
00480       if (strncmp(argv[nopt], "-amean", 5) == 0)
00481         {
00482           nopt++;
00483           if (nopt+1 >= argc)  ANOVA_error ("need 2 arguments after -amean ");
00484           
00485           option_data->num_ameans++;
00486           if (option_data->num_ameans > MAX_MEANS)
00487             ANOVA_error ("too many factor A level mean estimates");
00488           
00489           sscanf (argv[nopt], "%d", &ival);
00490           if ((ival <= 0) || (ival > option_data->a))
00491             ANOVA_error ("illegal argument after -amean ");
00492           option_data->ameans[option_data->num_ameans-1] = ival - 1;
00493           nopt++;
00494           
00495           option_data->amname[option_data->num_ameans-1] 
00496             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00497           strcpy (option_data->amname[option_data->num_ameans-1], argv[nopt]);
00498           nopt++;
00499           continue;
00500         }
00501 
00502 
00503       /*-----   -bmean level filename   -----*/
00504       if (strncmp(argv[nopt], "-bmean", 5) == 0)
00505         {
00506           nopt++;
00507           if (nopt+1 >= argc)  ANOVA_error ("need 2 arguments after -bmean ");
00508           
00509           option_data->num_bmeans++;
00510           if (option_data->num_bmeans > MAX_MEANS)
00511             ANOVA_error ("too many factor B level mean estimates");
00512           
00513           sscanf (argv[nopt], "%d", &ival);
00514           if ((ival <= 0) || (ival > option_data->b))
00515             ANOVA_error ("illegal argument after -bmean ");
00516           option_data->bmeans[option_data->num_bmeans-1] = ival - 1;
00517           nopt++;
00518           
00519           option_data->bmname[option_data->num_bmeans-1] 
00520             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00521           strcpy (option_data->bmname[option_data->num_bmeans-1], argv[nopt]);
00522           nopt++;
00523           continue;
00524         }
00525 
00526 
00527       /*-----   -cmean level filename   -----*/
00528       if (strncmp(argv[nopt], "-cmean", 5) == 0)
00529         {
00530           nopt++;
00531           if (nopt+1 >= argc)  ANOVA_error ("need 2 arguments after -cmean ");
00532           
00533           option_data->num_cmeans++;
00534           if (option_data->num_cmeans > MAX_MEANS)
00535             ANOVA_error ("too many factor C level mean estimates");
00536           
00537           sscanf (argv[nopt], "%d", &ival);
00538           if ((ival <= 0) || (ival > option_data->c))
00539             ANOVA_error ("illegal argument after -cmean ");
00540           option_data->cmeans[option_data->num_cmeans-1] = ival - 1;
00541           nopt++;
00542           
00543           option_data->cmname[option_data->num_cmeans-1] 
00544             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00545           strcpy (option_data->cmname[option_data->num_cmeans-1], argv[nopt]);
00546           nopt++;
00547           continue;
00548         }
00549 
00550 
00551       /*-----   -xmean i j k filename   -----*/
00552       if (strncmp(argv[nopt], "-xmean", 5) == 0)
00553         {
00554           nopt++;
00555           if (nopt+3 >= argc)  ANOVA_error ("need 4 arguments after -xmean ");
00556           
00557           option_data->num_xmeans++;
00558           if (option_data->num_xmeans > MAX_MEANS)
00559             ANOVA_error ("too many cell mean estimates");
00560           
00561           sscanf (argv[nopt], "%d", &ival);
00562           if ((ival <= 0) || (ival > option_data->a))
00563             ANOVA_error ("illegal argument after -xmean ");
00564           option_data->xmeans[option_data->num_xmeans-1][0] = ival - 1;
00565           nopt++;
00566           
00567           sscanf (argv[nopt], "%d", &ival);
00568           if ((ival <= 0) || (ival > option_data->b))
00569             ANOVA_error ("illegal argument after -xmean ");
00570           option_data->xmeans[option_data->num_xmeans-1][1] = ival - 1;
00571           nopt++;
00572           
00573           sscanf (argv[nopt], "%d", &ival);
00574           if ((ival <= 0) || (ival > option_data->c))
00575             ANOVA_error ("illegal argument after -xmean ");
00576           option_data->xmeans[option_data->num_xmeans-1][2] = ival - 1;
00577           nopt++;
00578           
00579           option_data->xmname[option_data->num_xmeans-1] 
00580             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00581           strcpy (option_data->xmname[option_data->num_xmeans-1], argv[nopt]);
00582           nopt++;
00583           continue;
00584         }
00585 
00586 
00587       /*-----   -adiff level1 level2 filename   -----*/
00588       if (strncmp(argv[nopt], "-adiff", 5) == 0)
00589         {
00590           nopt++;
00591           if (nopt+2 >= argc)  ANOVA_error ("need 3 arguments after -adiff ");
00592           
00593           option_data->num_adiffs++;
00594           if (option_data->num_adiffs > MAX_DIFFS)
00595             ANOVA_error ("too many factor A level differences");
00596           
00597           sscanf (argv[nopt], "%d", &ival);
00598           if ((ival <= 0) || (ival > option_data->a))
00599             ANOVA_error ("illegal argument after -adiff ");
00600           option_data->adiffs[option_data->num_adiffs-1][0] = ival - 1;
00601           nopt++;
00602           
00603           sscanf (argv[nopt], "%d", &ival);
00604           if ((ival <= 0) || (ival > option_data->a))
00605             ANOVA_error ("illegal argument after -adiff ");
00606           option_data->adiffs[option_data->num_adiffs-1][1] = ival - 1;
00607           nopt++;
00608           
00609           option_data->adname[option_data->num_adiffs-1] 
00610             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00611           strcpy (option_data->adname[option_data->num_adiffs-1], argv[nopt]);
00612           nopt++;
00613           continue;
00614         }
00615       
00616 
00617       /*-----   -bdiff level1 level2 filename   -----*/
00618       if (strncmp(argv[nopt], "-bdiff", 5) == 0)
00619         {
00620           nopt++;
00621           if (nopt+2 >= argc)  ANOVA_error ("need 3 arguments after -bdiff ");
00622           
00623           option_data->num_bdiffs++;
00624           if (option_data->num_bdiffs > MAX_DIFFS)
00625             ANOVA_error ("too many factor B level differences");
00626 
00627           sscanf (argv[nopt], "%d", &ival);
00628           if ((ival <= 0) || (ival > option_data->b))
00629             ANOVA_error ("illegal argument after -bdiff ");
00630           option_data->bdiffs[option_data->num_bdiffs-1][0] = ival - 1;
00631           nopt++;
00632    
00633           sscanf (argv[nopt], "%d", &ival);
00634           if ((ival <= 0) || (ival > option_data->b))
00635             ANOVA_error ("illegal argument after -bdiff ");
00636           option_data->bdiffs[option_data->num_bdiffs-1][1] = ival - 1;
00637           nopt++;
00638 
00639           option_data->bdname[option_data->num_bdiffs-1] 
00640             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00641           strcpy (option_data->bdname[option_data->num_bdiffs-1], argv[nopt]);
00642           nopt++;
00643           continue;
00644         }
00645       
00646       
00647       /*-----   -cdiff level1 level2 filename   -----*/
00648       if (strncmp(argv[nopt], "-cdiff", 5) == 0)
00649         {
00650           nopt++;
00651           if (nopt+2 >= argc)  ANOVA_error ("need 3 arguments after -cdiff ");
00652           
00653           option_data->num_cdiffs++;
00654           if (option_data->num_cdiffs > MAX_DIFFS)
00655             ANOVA_error ("too many factor C level differences");
00656 
00657           sscanf (argv[nopt], "%d", &ival);
00658           if ((ival <= 0) || (ival > option_data->c))
00659             ANOVA_error ("illegal argument after -cdiff ");
00660           option_data->cdiffs[option_data->num_cdiffs-1][0] = ival - 1;
00661           nopt++;
00662    
00663           sscanf (argv[nopt], "%d", &ival);
00664           if ((ival <= 0) || (ival > option_data->c))
00665             ANOVA_error ("illegal argument after -cdiff ");
00666           option_data->cdiffs[option_data->num_cdiffs-1][1] = ival - 1;
00667           nopt++;
00668 
00669           option_data->cdname[option_data->num_cdiffs-1] 
00670             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00671           strcpy (option_data->cdname[option_data->num_cdiffs-1], argv[nopt]);
00672           nopt++;
00673           continue;
00674         }
00675       
00676       
00677       /*-----   -xdiff i j k l m n filename   -----*/
00678       if (strncmp(argv[nopt], "-xdiff", 5) == 0)
00679         {
00680           nopt++;
00681           if (nopt+6 >= argc)  ANOVA_error ("need 7 arguments after -xdiff ");
00682           
00683           option_data->num_xdiffs++;
00684           if (option_data->num_xdiffs > MAX_DIFFS)
00685             ANOVA_error ("too many cell means differences");
00686 
00687           sscanf (argv[nopt], "%d", &ival);
00688           if ((ival <= 0) || (ival > option_data->a))
00689             ANOVA_error ("illegal argument after -xdiff ");
00690           option_data->xdiffs[option_data->num_xdiffs-1][0][0] = ival - 1;
00691           nopt++;
00692    
00693           sscanf (argv[nopt], "%d", &ival);
00694           if ((ival <= 0) || (ival > option_data->b))
00695             ANOVA_error ("illegal argument after -xdiff ");
00696           option_data->xdiffs[option_data->num_xdiffs-1][0][1] = ival - 1;
00697           nopt++;
00698    
00699           sscanf (argv[nopt], "%d", &ival);
00700           if ((ival <= 0) || (ival > option_data->c))
00701             ANOVA_error ("illegal argument after -xdiff ");
00702           option_data->xdiffs[option_data->num_xdiffs-1][0][2] = ival - 1;
00703           nopt++;
00704    
00705           sscanf (argv[nopt], "%d", &ival);
00706           if ((ival <= 0) || (ival > option_data->a))
00707             ANOVA_error ("illegal argument after -xdiff ");
00708           option_data->xdiffs[option_data->num_xdiffs-1][1][0] = ival - 1;
00709           nopt++;
00710 
00711           sscanf (argv[nopt], "%d", &ival);
00712           if ((ival <= 0) || (ival > option_data->b))
00713             ANOVA_error ("illegal argument after -xdiff ");
00714           option_data->xdiffs[option_data->num_xdiffs-1][1][1] = ival - 1;
00715           nopt++;
00716 
00717           sscanf (argv[nopt], "%d", &ival);
00718           if ((ival <= 0) || (ival > option_data->c))
00719             ANOVA_error ("illegal argument after -xdiff ");
00720           option_data->xdiffs[option_data->num_xdiffs-1][1][2] = ival - 1;
00721           nopt++;
00722 
00723           option_data->xdname[option_data->num_xdiffs-1] 
00724             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00725           strcpy (option_data->xdname[option_data->num_xdiffs-1], argv[nopt]);
00726           nopt++;
00727           continue;
00728         }
00729       
00730       
00731       /*-----   -acontr c1 ... cr filename   -----*/
00732       if (strncmp(argv[nopt], "-acontr", 5) == 0)
00733         {
00734           nopt++;
00735           if (nopt + option_data->a >= argc)  
00736             ANOVA_error ("need a+1 arguments after -acontr ");
00737           
00738           option_data->num_acontr++;
00739           if (option_data->num_acontr > MAX_CONTR)
00740             ANOVA_error ("too many factor A level contrasts");
00741           
00742           for (i = 0;  i < option_data->a;  i++)
00743             {
00744               sscanf (argv[nopt], "%f", &fval); 
00745               option_data->acontr[option_data->num_acontr - 1][i] = fval ;
00746               nopt++;
00747             }
00748           
00749           option_data->acname[option_data->num_acontr-1] 
00750             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00751           strcpy (option_data->acname[option_data->num_acontr-1], argv[nopt]);
00752           nopt++;
00753           continue;
00754         }
00755       
00756       
00757       /*-----   -bcontr c1 ... cr filename   -----*/
00758       if (strncmp(argv[nopt], "-bcontr", 5) == 0)
00759         {
00760           nopt++;
00761           if (nopt + option_data->b >= argc)  
00762             ANOVA_error ("need b+1 arguments after -bcontr ");
00763           
00764           option_data->num_bcontr++;
00765           if (option_data->num_bcontr > MAX_CONTR)
00766             ANOVA_error ("too many factor B level contrasts");
00767                   
00768           for (i = 0;  i < option_data->b;  i++)
00769             {
00770               sscanf (argv[nopt], "%f", &fval); 
00771               option_data->bcontr[option_data->num_bcontr - 1][i] = fval ;
00772               nopt++;
00773             }
00774           
00775           option_data->bcname[option_data->num_bcontr-1] 
00776             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00777           strcpy (option_data->bcname[option_data->num_bcontr-1], argv[nopt]);
00778           nopt++;
00779           continue;
00780         }
00781       
00782       
00783       /*-----   -ccontr c1 ... cr filename   -----*/
00784       if (strncmp(argv[nopt], "-ccontr", 5) == 0)
00785         {
00786           nopt++;
00787           if (nopt + option_data->c >= argc)  
00788             ANOVA_error ("need c+1 arguments after -ccontr ");
00789           
00790           option_data->num_ccontr++;
00791           if (option_data->num_ccontr > MAX_CONTR)
00792             ANOVA_error ("too many factor C level contrasts");
00793           
00794           
00795           for (i = 0;  i < option_data->c;  i++)
00796             {
00797               sscanf (argv[nopt], "%f", &fval); 
00798               option_data->ccontr[option_data->num_ccontr - 1][i] = fval ;
00799               nopt++;
00800             }
00801           
00802           option_data->ccname[option_data->num_ccontr-1] 
00803             =  malloc (sizeof(char) * MAX_NAME_LENGTH);
00804           strcpy (option_data->ccname[option_data->num_ccontr-1], argv[nopt]);
00805           nopt++;
00806           continue;
00807         }
00808       
00809       
00810       /*-----   -bucket filename   -----*/
00811       if (strncmp(argv[nopt], "-bucket", 4) == 0)
00812         {
00813           nopt++;
00814           if (nopt >= argc)  ANOVA_error ("need argument after -bucket ");
00815           option_data->bucket_filename = malloc (sizeof(char)*MAX_NAME_LENGTH);
00816           strcpy (option_data->bucket_filename, argv[nopt]);
00817           nopt++;
00818           continue;
00819         }
00820       
00821       
00822       /*----- unknown command -----*/
00823       sprintf (message,"Unrecognized command line option: %s\n", argv[nopt]);
00824       ANOVA_error (message);
00825     }
00826 
00827   
00828   /*----- check that all treatment sample sizes are equal -----*/
00829   option_data->n = N_INDEX(0, 0, 0);
00830   for (i = 0;  i < option_data->a;  i++)
00831     for (j = 0;  j < option_data->b;  j++)
00832       for (k = 0;  k < option_data->c;  k++)
00833         if (N_INDEX(i, j, k) != option_data->n)
00834           ANOVA_error ("must have equal sample sizes for 3dANOVA3");
00835 
00836   free(n);
00837 }

void initialize int    argc,
char **    argv,
anova_options **    option_data
 

Definition at line 1143 of file 3dANOVA3.c.

References a, ANOVA_error(), argc, c, check_disk_space(), check_for_valid_inputs(), check_output_files(), check_temporary_files(), get_dimensions(), get_options(), i, malloc, PROGRAM_NAME, and tross_commandline().

01144 {
01145   int i, j, k;                         /* factor level indices */
01146   int a, b, c;                         /* number of factor levels */
01147   int n;                               /* number of observations per cell */
01148   int nxyz;                            /* number of voxels */
01149   char message[MAX_NAME_LENGTH];       /* error message */
01150   
01151 
01152   /*----- save command line for history notes -----*/
01153   commandline = tross_commandline( PROGRAM_NAME , argc,argv ) ;
01154 
01155   
01156   /*----- allocate memory space for input data -----*/   
01157   *option_data = (anova_options *) malloc(sizeof(anova_options));
01158   if (*option_data == NULL)
01159     ANOVA_error ("memory allocation error");
01160 
01161   /*----- get command line inputs -----*/
01162   get_options(argc, argv, *option_data);
01163   
01164   /*----- use first data set to get data set dimensions -----*/
01165   (*option_data)->first_dataset = (*option_data)->xname[0][0][0][0];
01166   get_dimensions (*option_data);
01167   printf ("Data set dimensions:  nx = %d  ny = %d  nz = %d  nxyz = %d \n",
01168           (*option_data)->nx, (*option_data)->ny,
01169           (*option_data)->nz, (*option_data)->nxyz);
01170   if ((*option_data)->nvoxel > (*option_data)->nxyz)
01171     ANOVA_error ("argument of -voxel is too large");
01172   
01173   /*----- initialize local variables  -----*/
01174   a = (*option_data)->a;
01175   b = (*option_data)->b;
01176   c = (*option_data)->c;
01177   n = (*option_data)->n;
01178   
01179   /*----- total number of observations -----*/
01180   (*option_data)->nt = n * a * b * c;
01181   printf ("Number of input datasets = %d \n", (*option_data)->nt);
01182   
01183   /*----- check for valid inputs -----*/
01184   check_for_valid_inputs (*option_data);
01185   
01186   /*----- check whether temporary files already exist -----*/
01187   check_temporary_files (*option_data);
01188   
01189   /*----- check whether output files already exist -----*/
01190   check_output_files (*option_data);
01191 
01192   /*----- check whether there is sufficient disk space -----*/
01193   if ((*option_data)->diskspace)  check_disk_space (*option_data);
01194 }

int main int    argc,
char **    argv
 

Definition at line 5039 of file 3dANOVA3.c.

References addto_args(), analyze_results(), argc, calculate_anova(), display_help_menu(), free, initialize(), machdep(), mainENTRY, PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, and terminate().

05040 {
05041   anova_options * option_data = NULL;
05042   
05043    
05044   /*----- Identify software -----*/
05045   printf ("\n\n");
05046   printf ("Program:          %s \n", PROGRAM_NAME);
05047   printf ("Author:           %s \n", PROGRAM_AUTHOR); 
05048   printf ("Initial Release:  %s \n", PROGRAM_INITIAL);
05049   printf ("Latest Revision:  %s \n", PROGRAM_LATEST);
05050   printf ("\n");
05051     
05052   /*----- does user request help menu? -----*/
05053   if (argc < 2 || strncmp(argv[1], "-help", 5) == 0)  display_help_menu();  
05054   
05055   /*-- 20 Apr 2001: addto the arglist, if user wants to [RWCox] --*/
05056 
05057   mainENTRY("3dANOVA3 main") ; machdep() ;
05058    { int new_argc ; char ** new_argv ;
05059      addto_args( argc , argv , &new_argc , &new_argv ) ;
05060      if( new_argv != NULL ){ argc = new_argc ; argv = new_argv ; }
05061    }
05062 
05063    /*----- program initialization -----*/
05064    initialize (argc, argv, &option_data);
05065 
05066    /*----- calculate sums and sums of squares -----*/
05067    calculate_anova (option_data);
05068 
05069    /*----- generate requested output -----*/
05070    analyze_results (option_data);
05071 
05072    /*----- terminate program -----*/
05073    terminate (option_data);
05074    free (option_data);   option_data = NULL;
05075 
05076    exit(0);
05077 }

int required_data_files anova_options   option_data
 

Definition at line 1090 of file 3dANOVA3.c.

References anova_options::bucket_filename, max, anova_options::model, anova_options::n, anova_options::nfa, anova_options::nfab, anova_options::nfabc, anova_options::nfac, anova_options::nfb, anova_options::nfbc, anova_options::nfc, 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_ccontr, anova_options::num_cdiffs, anova_options::num_cmeans, anova_options::num_xdiffs, and anova_options::num_xmeans.

01091 {
01092   int now;                         /* current number of disk files */
01093   int nout;                        /* number of output files */
01094   int nmax;                        /* maximum number of disk files */
01095 
01096 
01097   /*----- maximum and current number of temporary data files -----*/
01098   if (option_data->model != 5)
01099     {
01100       nmax = 10;
01101       now = 8;
01102     }
01103   else
01104     {
01105       nmax = 8;
01106       now = 6;
01107     }
01108 
01109   if (option_data->n == 1)
01110     {
01111       nmax -= 1;
01112       now -= 1;
01113     }
01114 
01115 
01116   /*----- space for output files -----*/
01117   nout = option_data->nfa + option_data->nfb + option_data->nfc 
01118     + option_data->nfab + option_data->nfac + option_data->nfbc 
01119     + option_data->nfabc 
01120     + option_data->num_ameans + option_data->num_bmeans 
01121     + option_data->num_cmeans + option_data->num_xmeans 
01122     + option_data->num_adiffs + option_data->num_bdiffs 
01123     + option_data->num_cdiffs + option_data->num_xdiffs
01124     + option_data->num_acontr + option_data->num_bcontr
01125     + option_data->num_ccontr;
01126 
01127   now = now + nout;
01128 
01129   nmax = max (now, nmax);
01130 
01131   if (option_data->bucket_filename != NULL)
01132     nmax = max (nmax, 2*nout);
01133   
01134   return (nmax);
01135 }

void terminate anova_options   option_data
 

Definition at line 4890 of file 3dANOVA3.c.

References anova_options::acname, ADN_directory_name, ADN_none, anova_options::adname, anova_options::amname, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, anova_options::ccname, anova_options::cdname, anova_options::cmname, create_bucket(), destroy_anova_options(), EDIT_dset_items(), EDIT_empty_copy(), anova_options::fabcname, anova_options::fabname, anova_options::facname, anova_options::faname, anova_options::fbcname, anova_options::fbname, anova_options::fcname, anova_options::first_dataset, i, ISVALID_3DIM_DATASET, anova_options::model, anova_options::n, anova_options::nfa, anova_options::nfab, anova_options::nfabc, anova_options::nfac, anova_options::nfb, anova_options::nfbc, anova_options::nfc, 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_ccontr, anova_options::num_cdiffs, anova_options::num_cmeans, anova_options::num_xdiffs, anova_options::num_xmeans, remove_dataset(), anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), volume_delete(), anova_options::xdname, and anova_options::xmname.

04891 {
04892   int i;
04893   THD_3dim_dataset * dset=NULL;       /* input afni data set pointer */
04894   THD_3dim_dataset * new_dset=NULL;   /* output afni data set pointer */
04895 
04896 
04897   /*----- remove temporary data files -----*/
04898   if (option_data->n != 1)  volume_delete ("sse");
04899   volume_delete ("ssa");
04900   volume_delete ("ssb");
04901   volume_delete ("ssab");
04902   if (option_data->model != 5) 
04903     {
04904       volume_delete ("ssc");
04905       volume_delete ("ssac");
04906       volume_delete ("ssbc");
04907       volume_delete ("ssabc");
04908     }
04909   else
04910     {
04911       volume_delete ("ssca");
04912       volume_delete ("ssbca");
04913     }
04914 
04915 
04916   /*----- create bucket dataset -----*/
04917   if (option_data->bucket_filename != NULL)
04918     create_bucket (option_data);
04919   
04920 
04921   /*----- if 'bucket' datset was created, remove the individual 2-subbrick
04922           data files -----*/
04923   if (option_data->bucket_filename != NULL)
04924     {
04925 
04926       /*----- read first dataset -----*/
04927       dset = THD_open_dataset (option_data->first_dataset) ;
04928       if( ! ISVALID_3DIM_DATASET(dset) ){
04929         fprintf(stderr,"*** Unable to open dataset file %s\n",
04930                 option_data->first_dataset);
04931         exit(1) ;
04932       }
04933       
04934       /*----- make an empty copy of this dataset -----*/
04935       new_dset = EDIT_empty_copy (dset);
04936       THD_delete_3dim_dataset (dset , False);   dset = NULL;
04937       EDIT_dset_items (new_dset, 
04938                        ADN_directory_name, option_data->session,
04939                        ADN_none);
04940       
04941       /*----- remove F-stat for factor A main effect data file -----*/
04942       if (option_data->nfa != 0)
04943         remove_dataset (new_dset, option_data->faname);
04944       
04945       /*----- remove F-stat for factor B main effect data file -----*/
04946       if (option_data->nfb != 0)
04947         remove_dataset (new_dset, option_data->fbname);
04948       
04949       /*----- remove F-stat for factor C main effect data file -----*/
04950       if (option_data->nfc != 0)
04951         remove_dataset (new_dset, option_data->fcname);
04952       
04953       /*----- remove F-stat for A*B interaction data file -----*/
04954       if (option_data->nfab != 0)
04955         remove_dataset (new_dset, option_data->fabname);
04956       
04957       /*----- remove F-stat for A*C interaction data file -----*/
04958       if (option_data->nfac != 0)
04959         remove_dataset (new_dset, option_data->facname);
04960       
04961       /*----- remove F-stat for B*C interaction data file -----*/
04962       if (option_data->nfbc != 0)
04963         remove_dataset (new_dset, option_data->fbcname);
04964       
04965       /*----- remove F-stat for A*B*C interaction data file -----*/
04966       if (option_data->nfabc != 0)
04967         remove_dataset (new_dset, option_data->fabcname);
04968       
04969      /*----- remove factor A level mean data files -----*/
04970       if (option_data->num_ameans > 0)
04971         for (i = 0; i < option_data->num_ameans; i++)
04972           remove_dataset (new_dset, option_data->amname[i]);
04973       
04974       /*----- remove factor B level mean data files -----*/
04975       if (option_data->num_bmeans > 0)
04976         for (i = 0; i < option_data->num_bmeans; i++)
04977           remove_dataset (new_dset, option_data->bmname[i]);
04978       
04979       /*----- remove factor C level mean data files -----*/
04980       if (option_data->num_cmeans > 0)
04981         for (i = 0; i < option_data->num_cmeans; i++)
04982           remove_dataset (new_dset, option_data->cmname[i]);
04983       
04984       /*----- remove individual cell mean data files -----*/
04985       if (option_data->num_xmeans > 0)
04986         for (i = 0; i < option_data->num_xmeans; i++)
04987           remove_dataset (new_dset, option_data->xmname[i]);
04988       
04989       /*----- remove difference in factor A levels data files -----*/
04990       if (option_data->num_adiffs > 0)
04991         for (i = 0; i < option_data->num_adiffs; i++)
04992           remove_dataset (new_dset, option_data->adname[i]);
04993       
04994       /*----- remove difference in factor B levels data files -----*/
04995       if (option_data->num_bdiffs > 0)
04996         for (i = 0; i < option_data->num_bdiffs; i++)
04997           remove_dataset (new_dset, option_data->bdname[i]);
04998       
04999       /*----- remove difference in factor C levels data files -----*/
05000       if (option_data->num_cdiffs > 0)
05001         for (i = 0; i < option_data->num_cdiffs; i++)
05002           remove_dataset (new_dset, option_data->cdname[i]);
05003       
05004       /*----- remove difference in cell means data files -----*/
05005       if (option_data->num_xdiffs > 0)
05006         for (i = 0; i < option_data->num_xdiffs; i++)
05007           remove_dataset (new_dset, option_data->xdname[i]);
05008       
05009       /*----- remove contrast in factor A levels data files -----*/
05010       if (option_data->num_acontr > 0)
05011         for (i = 0; i < option_data->num_acontr; i++)
05012           remove_dataset (new_dset, option_data->acname[i]);
05013       
05014       /*----- remove contrast in factor B levels data files -----*/
05015       if (option_data->num_bcontr > 0)
05016         for (i = 0; i < option_data->num_bcontr; i++)
05017           remove_dataset (new_dset, option_data->bcname[i]);
05018       
05019       /*----- remove contrast in factor C levels data files -----*/
05020       if (option_data->num_ccontr > 0)
05021         for (i = 0; i < option_data->num_ccontr; i++)
05022           remove_dataset (new_dset, option_data->ccname[i]);
05023       
05024       THD_delete_3dim_dataset (new_dset , False);   new_dset = NULL;
05025     }
05026 
05027 
05028   /*----- deallocate memory -----*/
05029   destroy_anova_options (option_data);
05030 
05031 }
 

Powered by Plone

This site conforms to the following standards: