Doxygen Source Code Documentation
3dNLfim.c File Reference
#include <stdio.h>#include <math.h>#include <stdlib.h>#include "mrilib.h"#include "thd_iochan.h"#include "matrix.h"#include "simplex.h"#include "NLfit.h"#include "matrix.c"#include "simplex.c"#include "NLfit.c"#include <signal.h>Go to the source code of this file.
Data Structures | |
| struct | NL_options |
Defines | |
| #define | PROGRAM_NAME "3dNLfim" |
| #define | PROGRAM_AUTHOR "B. Douglas Ward" |
| #define | PROGRAM_INITIAL "19 June 1997" |
| #define | PROGRAM_LATEST "07 May 2003" |
| #define | PROC_MAX 32 |
| #define | MTEST(ptr) |
| #define | free proc_free |
| #define | TOP_SS 32700 |
Typedefs | |
| typedef NL_options | NL_options |
Functions | |
| void | display_help_menu () |
| void | initialize_options (int *ignore, vfp *nmodel, vfp *smodel, int *r, int *p, char ***npname, char ***spname, float **min_nconstr, float **max_nconstr, float **min_sconstr, float **max_sconstr, int *nabs, int *nrand, int *nbest, float *rms_min, float *fdisp, char **input_filename, char **tfilename, char **freg_filename, char **frsqr_filename, char ***fncoef_filename, char ***fscoef_filename, char ***tncoef_filename, char ***tscoef_filename, char **sfit_filename, char **snfit_filename, NL_options *option_data) |
| void | get_options (int argc, char **argv, int *ignore, char **nname, char **sname, vfp *nmodel, vfp *smodel, int *r, int *p, char ***npname, char ***spname, float **min_nconstr, float **max_nconstr, float **min_sconstr, float **max_sconstr, int *nabs, int *nrand, int *nbest, float *rms_min, float *fdisp, char **input_filename, char **tfilename, char **freg_filename, char **frsqr_filename, char **fsmax_filename, char **ftmax_filename, char **fpmax_filename, char **farea_filename, char **fparea_filename, char ***fncoef_filename, char ***fscoef_filename, char ***tncoef_filename, char ***tscoef_filename, char **sfit_filename, char **snfit_filename, THD_3dim_dataset **dset_time, int *nxyz, int *ts_length, NL_options *option_data) |
| void | check_one_output_file (THD_3dim_dataset *dset_time, char *filename) |
| void | check_output_files (char *freg_filename, char *frsqr_filename, char *fsmax_filename, char *ftmax_filename, char *fpmax_filename, char *farea_filename, char *fparea_filename, char **fncoef_filename, char **fscoef_filename, char **tncoef_filename, char **tscoef_filename, char *bucket_filename, char *sfit_filename, char *snfit_filename, THD_3dim_dataset *dset_time) |
| void | check_for_valid_inputs (int nxyz, int r, int p, float *min_nconstr, float *max_nconstr, float *min_sconstr, float *max_sconstr, int nrand, int nbest, char *freg_filename, char *frsqr_filename, char *fsmax_filename, char *ftmax_filename, char *fpmax_filename, char *farea_filename, char *fparea_filename, char **fncoef_filename, char **fscoef_filename, char **tncoef_filename, char **tscoef_filename, char *bucket_filename, char *sfit_filename, char *snfit_filename, THD_3dim_dataset *dset_time) |
| void | zero_fill_volume (float **fvol, int nxyz) |
| void | proc_sigfunc (int sig) |
| void | proc_atexit (void) |
| void | proc_finalize_shm_volumes (void) |
| void | proc_free (void *ptr) |
| void | initialize_program (int argc, char **argv, int *ignore, char **nname, char **sname, vfp *nmodel, vfp *smodel, int *r, int *p, char ***npname, char ***spname, float **min_nconstr, float **max_nconstr, float **min_sconstr, float **max_sconstr, int *nabs, int *nrand, int *nbest, float *rms_min, float *fdisp, char **input_filename, char **tfilename, char **freg_filename, char **frsqr_filename, char **fsmax_filename, char **ftmax_filename, char **fpmax_filename, char **farea_filename, char **fparea_filename, char ***fncoef_filename, char ***fscoef_filename, char ***tncoef_filename, char ***tscoef_filename, char **sfit_filename, char **snfit_filename, THD_3dim_dataset **dset_time, int *nxyz, int *ts_length, float ***x_array, float **ts_array, float **par_rdcd, float **par_full, float **tpar_full, float **rmsreg_vol, float **freg_vol, float **rsqr_vol, float **smax_vol, float **tmax_vol, float **pmax_vol, float **area_vol, float **parea_vol, float ***ncoef_vol, float ***scoef_vol, float ***tncoef_vol, float ***tscoef_vol, float ***sfit_vol, float ***snfit_vol, NL_options *option_data) |
| void | read_ts_array (THD_3dim_dataset *dset_time, int iv, int ts_length, int ignore, float *ts_array) |
| void | write_ts_array (int ts_length, float *ts_array) |
| void | save_results (int iv, vfp nmodel, vfp smodel, int r, int p, int novar, int ts_length, float **x_array, float *par_full, float *tpar_full, float rmsreg, float freg, float rsqr, float smax, float tmax, float pmax, float area, float parea, float *rmsreg_vol, float *freg_vol, float *rsqr_vol, float *smax_vol, float *tmax_vol, float *pmax_vol, float *area_vol, float *parea_vol, float **ncoef_vol, float **scoef_vol, float **tncoef_vol, float **tscoef_vol, float **sfit_vol, float **snfit_vol) |
| float | EDIT_coerce_autoscale_new (int nxyz, int itype, void *ivol, int otype, void *ovol) |
| void | write_afni_data (char *input_filename, int nxyz, char *filename, float *ffim, float *ftr, int numdof, int dendof) |
| void | write_bucket_data (int q, int p, int numdof, int dendof, int nxyz, int n, float *rmsreg_vol, float *freg_vol, float *rsqr_vol, float *smax_vol, float *tmax_vol, float *pmax_vol, float *area_vol, float *parea_vol, float **ncoef_vol, float **scoef_vol, float **tncoef_vol, float **tscoef_vol, char *input_filename, NL_options *option_data) |
| void | write_3dtime (char *input_filename, int ts_length, float **vol_array, char *output_filename) |
| void | output_results (int r, int p, float *min_nconstr, float *max_nconstr, float *min_sconstr, float *max_sconstr, int nxyz, int ts_length, float *rmsreg_vol, float *freg_vol, float *rsqr_vol, float *smax_vol, float *tmax_vol, float *pmax_vol, float *area_vol, float *parea_vol, float **ncoef_vol, float **scoef_vol, float **tncoef_vol, float **tscoef_vol, float **sfit_vol, float **snfit_vol, char *input_filename, char *freg_filename, char *frsqr_filename, char *fsmax_filename, char *ftmax_filename, char *fpmax_filename, char *farea_filename, char *fparea_filename, char **fncoef_filename, char **fscoef_filename, char **tncoef_filename, char **tscoef_filename, char *sfit_filename, char *snfit_filename, NL_options *option_data) |
| void | terminate_program (int r, int p, int ts_length, float ***x_array, float **ts_array, char **nname, char ***npname, float **par_rdcd, float **min_nconstr, float **max_nconstr, char **sname, char ***spname, float **par_full, float **tpar_full, float **min_sconstr, float **max_sconstr, float **rmsreg_vol, float **freg_vol, float **rsqr_vol, float **smax_vol, float **tmax_vol, float **pmax_vol, float **area_vol, float **parea_vol, float ***ncoef_vol, float ***scoef_vol, float ***tncoef_vol, float ***tscoef_vol, float ***sfit_vol, float ***snfit_vol, char **input_filename, char **freg_filename, char **frsqr_filename, char **fsmax_filename, char **ftmax_filename, char **fpmax_filename, char **farea_filename, char **fparea_filename, char ***fncoef_filename, char ***fscoef_filename, char ***tncoef_filename, char ***tscoef_filename, char **sfit_filename, char **snfit_filename) |
| int | main (int argc, char **argv) |
Variables | |
| int | proc_numjob = 1 |
| pid_t | proc_pid [PROC_MAX] |
| int | proc_shmid = 0 |
| char * | proc_shmptr = NULL |
| int | proc_shmsize = 0 |
| int | proc_shm_arnum = 0 |
| float *** | proc_shm_ar = NULL |
| int * | proc_shm_arsiz = NULL |
| int | proc_vox_bot [PROC_MAX] |
| int | proc_vox_top [PROC_MAX] |
| int | proc_ind |
| float | DELT = 1.0 |
| int | inTR = 0 |
| float | dsTR = 0.0 |
| char * | commandline = NULL |
| byte * | mask_vol = NULL |
| int | mask_nvox = 0 |
Define Documentation
|
|
|
|
|
Value: if((ptr)==NULL) \ ( NLfit_error ("Cannot allocate memory") ) |
|
|
Definition at line 103 of file 3dNLfim.c. Referenced by display_help_menu(), and get_options(). |
|
|
Definition at line 83 of file 3dNLfim.c. Referenced by main(). |
|
|
Definition at line 84 of file 3dNLfim.c. Referenced by main(). |
|
|
Definition at line 85 of file 3dNLfim.c. Referenced by main(). |
|
|
Definition at line 82 of file 3dNLfim.c. Referenced by get_options(), initialize_program(), and main(). |
|
|
|
Typedef Documentation
|
|
|
Function Documentation
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1375 of file 3dNLfim.c. References check_output_files(), mask_nvox, mask_vol, NLfit_error(), p, and r.
01403 {
01404 int ip; /* parameter index */
01405
01406
01407 /*----- check if mask is right size -----*/
01408 if (mask_vol != NULL)
01409 if (mask_nvox != nxyz)
01410 NLfit_error ("mask and input dataset bricks don't match in size");
01411
01412
01413 /*----- check for valid constraints -----*/
01414 for (ip = 0; ip < r; ip++)
01415 if (min_nconstr[ip] > max_nconstr[ip])
01416 NLfit_error ("Must have minimum constraints <= maximum constraints");
01417 for (ip = 0; ip < p; ip++)
01418 if (min_sconstr[ip] > max_sconstr[ip])
01419 NLfit_error("Must have mininum constraints <= maximum constraints");
01420
01421
01422 /*----- must have nbest <= nrand -----*/
01423 if (nrand < nbest)
01424 NLfit_error ("Must have nbest <= nrand");
01425
01426
01427 /*----- check whether any of the output files already exist -----*/
01428 check_output_files (freg_filename, frsqr_filename,
01429 fsmax_filename, ftmax_filename,
01430 fpmax_filename, farea_filename, fparea_filename,
01431 fncoef_filename, fscoef_filename,
01432 tncoef_filename, tscoef_filename, bucket_filename,
01433 sfit_filename, snfit_filename, dset_time);
01434
01435 }
|
|
||||||||||||
|
Definition at line 1252 of file 3dNLfim.c. References ADN_label1, ADN_none, ADN_prefix, ADN_self_name, ADN_type, THD_3dim_dataset::dblk, THD_datablock::diskptr, EDIT_dset_items(), EDIT_empty_copy(), GEN_FUNC_TYPE, HEAD_FUNC_TYPE, THD_diskptr::header_name, ISHEAD, NLfit_error(), THD_delete_3dim_dataset(), and THD_is_file().
01257 {
01258 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */
01259 int ierror; /* number of errors in editing data */
01260 char message[MAX_NAME_LENGTH]; /* error message */
01261
01262
01263 /*----- make an empty copy of input dataset -----*/
01264 new_dset = EDIT_empty_copy( dset_time ) ;
01265
01266
01267 ierror = EDIT_dset_items( new_dset ,
01268 ADN_prefix , filename ,
01269 ADN_label1 , filename ,
01270 ADN_self_name , filename ,
01271 ADN_type , ISHEAD(dset_time) ? HEAD_FUNC_TYPE :
01272 GEN_FUNC_TYPE ,
01273 ADN_none ) ;
01274
01275 if( ierror > 0 )
01276 {
01277 fprintf(stderr,
01278 "*** %d errors in attempting to create output dataset!\n",
01279 ierror ) ;
01280 exit(1) ;
01281 }
01282
01283 if( THD_is_file(new_dset->dblk->diskptr->header_name) )
01284 {
01285 sprintf (message, "Output dataset file %s already exists",
01286 new_dset->dblk->diskptr->header_name ) ;
01287 NLfit_error (message);
01288 }
01289
01290 /*----- deallocate memory -----*/
01291 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ;
01292
01293 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1302 of file 3dNLfim.c. References check_one_output_file().
01320 {
01321 int ip; /* parameter index */
01322
01323 if (freg_filename != NULL)
01324 check_one_output_file (dset_time, freg_filename);
01325
01326 if (frsqr_filename != NULL)
01327 check_one_output_file (dset_time, frsqr_filename);
01328
01329 if (fsmax_filename != NULL)
01330 check_one_output_file (dset_time, fsmax_filename);
01331
01332 if (ftmax_filename != NULL)
01333 check_one_output_file (dset_time, ftmax_filename);
01334
01335 if (fpmax_filename != NULL)
01336 check_one_output_file (dset_time, fpmax_filename);
01337
01338 if (farea_filename != NULL)
01339 check_one_output_file (dset_time, farea_filename);
01340
01341 if (fparea_filename != NULL)
01342 check_one_output_file (dset_time, fparea_filename);
01343
01344 for (ip = 0; ip < MAX_PARAMETERS; ip++)
01345 {
01346 if (fncoef_filename[ip] != NULL)
01347 check_one_output_file (dset_time, fncoef_filename[ip]);
01348 if (fscoef_filename[ip] != NULL)
01349 check_one_output_file (dset_time, fscoef_filename[ip]);
01350 if (tncoef_filename[ip] != NULL)
01351 check_one_output_file (dset_time, tncoef_filename[ip]);
01352 if (tscoef_filename[ip] != NULL)
01353 check_one_output_file (dset_time, tscoef_filename[ip]);
01354 }
01355
01356 if (bucket_filename != NULL)
01357 check_one_output_file (dset_time, bucket_filename);
01358
01359
01360 if (sfit_filename != NULL)
01361 check_one_output_file (dset_time, sfit_filename);
01362 if (snfit_filename != NULL)
01363 check_one_output_file (dset_time, snfit_filename);
01364
01365
01366 }
|
|
|
Definition at line 169 of file 3dNLfim.c. References PROC_MAX.
00170 {
00171 printf
00172 (
00173 "This program calculates a nonlinear regression for each voxel of the \n"
00174 "input AFNI 3d+time data set. The nonlinear regression is calculated \n"
00175 "by means of a least squares fit to the signal plus noise models which \n"
00176 "are specified by the user. \n"
00177 " \n"
00178 "Usage: \n"
00179 "3dNLfim \n"
00180 "-input fname fname = filename of 3d + time data file for input \n"
00181 "[-mask mset] Use the 0 sub-brick of dataset 'mset' as a mask \n"
00182 " to indicate which voxels to analyze (a sub-brick \n"
00183 " selector is allowed) [default = use all voxels] \n"
00184 "[-ignore num] num = skip this number of initial images in the \n"
00185 " time series for regresion analysis; default = 3 \n"
00186 "[-inTR] set delt = TR of the input 3d+time dataset \n"
00187 " [The default is to compute with delt = 1.0 ] \n"
00188 " [The model functions are calculated using a \n"
00189 " time grid of: 0, delt, 2*delt, 3*delt, ... ] \n"
00190 "[-time fname] fname = ASCII file containing each time point \n"
00191 " in the time series. Defaults to even spacing \n"
00192 " given by TR (this option overrides -inTR). \n"
00193 "-signal slabel slabel = name of (non-linear) signal model \n"
00194 "-noise nlabel nlabel = name of (linear) noise model \n"
00195 "-sconstr k c d constraints for kth signal parameter: \n"
00196 " c <= gs[k] <= d \n"
00197 "-nconstr k c d constraints for kth noise parameter: \n"
00198 " c+b[k] <= gn[k] <= d+b[k] \n"
00199 "[-nabs] use absolute constraints for noise parameters: \n"
00200 " c <= gn[k] <= d \n"
00201 "[-nrand n] n = number of random test points \n"
00202 "[-nbest b] b = find opt. soln. for b best test points \n"
00203 "[-rmsmin r] r = minimum rms error to reject reduced model \n"
00204 "[-fdisp fval] display (to screen) results for those voxels \n"
00205 " whose f-statistic is > fval \n"
00206 " \n"
00207 " \n"
00208 "The following commands generate individual AFNI 2 sub-brick datasets: \n"
00209 " \n"
00210 "[-freg fname] perform f-test for significance of the regression; \n"
00211 " output 'fift' is written to prefix filename fname\n"
00212 "[-frsqr fname] calculate R^2 (coef. of multiple determination); \n"
00213 " store along with f-test for regression; \n"
00214 " output 'fift' is written to prefix filename fname\n"
00215 "[-fsmax fname] estimate signed maximum of signal; store along \n"
00216 " with f-test for regression; output 'fift' is \n"
00217 " written to prefix filename fname \n"
00218 "[-ftmax fname] estimate time of signed maximum; store along \n"
00219 " with f-test for regression; output 'fift' is \n"
00220 " written to prefix filename fname \n"
00221 "[-fpsmax fname] calculate (signed) maximum percentage change of \n"
00222 " signal from baseline; output 'fift' is \n"
00223 " written to prefix filename fname \n"
00224 "[-farea fname] calculate area between signal and baseline; store \n"
00225 " with f-test for regression; output 'fift' is \n"
00226 " written to prefix filename fname \n"
00227 "[-fparea fname] percentage area of signal relative to baseline; \n"
00228 " store with f-test for regression; output 'fift' \n"
00229 " is written to prefix filename fname \n"
00230 "[-fscoef k fname] estimate kth signal parameter gs[k]; store along \n"
00231 " with f-test for regression; output 'fift' is \n"
00232 " written to prefix filename fname \n"
00233 "[-fncoef k fname] estimate kth noise parameter gn[k]; store along \n"
00234 " with f-test for regression; output 'fift' is \n"
00235 " written to prefix filename fname \n"
00236 "[-tscoef k fname] perform t-test for significance of the kth signal \n"
00237 " parameter gs[k]; output 'fitt' is written \n"
00238 " to prefix filename fname \n"
00239 "[-tncoef k fname] perform t-test for significance of the kth noise \n"
00240 " parameter gn[k]; output 'fitt' is written \n"
00241 " to prefix filename fname \n"
00242 " \n"
00243 " \n"
00244 "The following commands generate one AFNI 'bucket' type dataset: \n"
00245 " \n"
00246 "[-bucket n prefixname] create one AFNI 'bucket' dataset containing \n"
00247 " n sub-bricks; n=0 creates default output; \n"
00248 " output 'bucket' is written to prefixname \n"
00249 "The mth sub-brick will contain: \n"
00250 "[-brick m scoef k label] kth signal parameter regression coefficient\n"
00251 "[-brick m ncoef k label] kth noise parameter regression coefficient \n"
00252 "[-brick m tmax label] time at max. abs. value of signal \n"
00253 "[-brick m smax label] signed max. value of signal \n"
00254 "[-brick m psmax label] signed max. value of signal as percent \n"
00255 " above baseline level \n"
00256 "[-brick m area label] area between signal and baseline \n"
00257 "[-brick m parea label] signed area between signal and baseline \n"
00258 " as percent of baseline area \n"
00259 "[-brick m tscoef k label] t-stat for kth signal parameter coefficient\n"
00260 "[-brick m tncoef k label] t-stat for kth noise parameter coefficient \n"
00261 "[-brick m resid label] std. dev. of the full model fit residuals \n"
00262 "[-brick m rsqr label] R^2 (coefficient of multiple determination)\n"
00263 "[-brick m fstat label] F-stat for significance of the regression \n"
00264 " \n"
00265 " \n"
00266 "The following commands write the time series fit for each voxel \n"
00267 "to an AFNI 3d+time dataset: \n"
00268 "[-sfit fname] fname = prefix for output 3d+time signal model fit \n"
00269 "[-snfit fname] fname = prefix for output 3d+time signal+noise fit \n"
00270 " \n"
00271 );
00272
00273
00274 #ifdef PROC_MAX
00275 printf( "\n"
00276 " -jobs J Run the program with 'J' jobs (sub-processes).\n"
00277 " On a multi-CPU machine, this can speed the\n"
00278 " program up considerably. On a single CPU\n"
00279 " machine, using this option is silly.\n"
00280 " J should be a number from 1 up to the\n"
00281 " number of CPU sharing memory on the system.\n"
00282 " J=1 is normal (single process) operation.\n"
00283 " The maximum allowed value of J is %d.\n"
00284 " * For more information on parallelizing, see\n"
00285 " http://afni.nimh.nih.gov/afni/doc/misc/parallize.html\n"
00286 " * Use -mask to get more speed; cf. 3dAutomask.\n"
00287 , PROC_MAX ) ;
00288 #endif
00289
00290 exit(0);
00291 }
|
|
||||||||||||||||||||||||
|
compute start time of this timeseries * Definition at line 2092 of file 3dNLfim.c. References EDIT_coerce_scale_type(), MCW_vol_amax(), MRI_IS_INT_TYPE, and top.
02094 {
02095 float fac=0.0 , top ;
02096
02097 if( MRI_IS_INT_TYPE(otype) ){
02098 top = MCW_vol_amax( nxyz,1,1 , itype,ivol ) ;
02099 if (top == 0.0) fac = 0.0;
02100 else fac = MRI_TYPE_maxval[otype]/top;
02101 }
02102
02103 EDIT_coerce_scale_type( nxyz , fac , itype,ivol , otype,ovol ) ;
02104 return ( fac );
02105 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 427 of file 3dNLfim.c. References AFNI_logger(), argc, DESTROY_MODEL_ARRAY, display_help_menu(), DSET_delete, DSET_NUM_TIMES, DSET_NVOX, DSET_TIMESTEP, DSET_TIMEUNITS, dsTR, FUNC_FIM_TYPE, initialize_noise_model(), initialize_options(), initialize_signal_model(), inTR, malloc, mask_nvox, mask_vol, mc, MTEST, NLfit_error(), NLFIT_get_many_MODELs(), NLFIT_MODEL_array::num, p, PROC_MAX, proc_numjob, PROGRAM_NAME, r, THD_load_datablock(), THD_makemask(), THD_open_dataset(), THD_open_one_dataset(), UNITS_MSEC_TYPE, and vfp.
00470 {
00471 const MAX_BRICKS = 100; /* max. number of bricks in the bucket */
00472 int nopt = 1; /* input option argument counter */
00473 int ival, index; /* integer input */
00474 float fval; /* float input */
00475 char message[MAX_NAME_LENGTH]; /* error message */
00476 int ok; /* boolean for specified model exists */
00477
00478 NLFIT_MODEL_array * model_array = NULL; /* array of SO models */
00479 int im; /* model index */
00480 int ibrick; /* sub-brick index */
00481 int nbricks; /* number of bricks in the bucket */
00482
00483
00484 /*----- does user request help menu? -----*/
00485 if (argc < 2 || strcmp(argv[1], "-help") == 0) display_help_menu();
00486
00487
00488 /*----- add to program log -----*/
00489 AFNI_logger (PROGRAM_NAME,argc,argv);
00490
00491
00492 /*----- initialize the model array -----*/
00493 model_array = NLFIT_get_many_MODELs ();
00494 if ((model_array == NULL) || (model_array->num == 0))
00495 NLfit_error ("Unable to locate any models");
00496
00497 /*----- initialize the input options -----*/
00498 initialize_options (ignore, nmodel, smodel, r, p, npname, spname,
00499 min_nconstr, max_nconstr, min_sconstr, max_sconstr, nabs,
00500 nrand, nbest, rms_min, fdisp,
00501 input_filename, tfilename, freg_filename,
00502 frsqr_filename, fncoef_filename, fscoef_filename,
00503 tncoef_filename, tscoef_filename,
00504 sfit_filename, snfit_filename, option_data);
00505
00506
00507 /*----- main loop over input options -----*/
00508 while (nopt < argc )
00509 {
00510
00511 /*----- -input filename -----*/
00512 if (strcmp(argv[nopt], "-input") == 0)
00513 {
00514 nopt++;
00515 if (nopt >= argc) NLfit_error ("need argument after -input ");
00516 *input_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00517 MTEST (*input_filename);
00518 strcpy (*input_filename, argv[nopt]);
00519 *dset_time = THD_open_one_dataset (*input_filename);
00520 if ((*dset_time) == NULL)
00521 {
00522 sprintf (message,
00523 "Unable to open data file: %s", *input_filename);
00524 NLfit_error (message);
00525 }
00526
00527 THD_load_datablock ((*dset_time)->dblk);
00528
00529 *nxyz = (*dset_time)->dblk->diskptr->dimsizes[0]
00530 * (*dset_time)->dblk->diskptr->dimsizes[1]
00531 * (*dset_time)->dblk->diskptr->dimsizes[2] ;
00532 *ts_length = DSET_NUM_TIMES(*dset_time);
00533
00534 dsTR = DSET_TIMESTEP(*dset_time) ;
00535 if( DSET_TIMEUNITS(*dset_time) == UNITS_MSEC_TYPE ) dsTR *= 0.001 ;
00536
00537 nopt++;
00538 continue;
00539 }
00540
00541
00542 /**** -mask mset [18 May 2000] ****/
00543
00544 if( strcmp(argv[nopt],"-mask") == 0 ){
00545 THD_3dim_dataset * mset ; int ii,mc ;
00546 nopt++ ;
00547 if (nopt >= argc) NLfit_error ("need argument after -mask!") ;
00548 mset = THD_open_dataset( argv[nopt] ) ;
00549 if (mset == NULL) NLfit_error ("can't open -mask dataset!") ;
00550
00551 mask_vol = THD_makemask( mset , 0 , 1.0,0.0 ) ;
00552 mask_nvox = DSET_NVOX(mset) ;
00553 DSET_delete(mset) ;
00554
00555 if (mask_vol == NULL ) NLfit_error ("can't use -mask dataset!") ;
00556 for( ii=mc=0 ; ii < mask_nvox ; ii++ ) if (mask_vol[ii]) mc++ ;
00557 if (mc == 0) NLfit_error ("mask is all zeros!") ;
00558 printf("++ %d voxels in mask %s\n",mc,argv[nopt]) ;
00559 nopt++ ; continue ;
00560 }
00561
00562
00563 /*----- 22 July 1998: the -inTR option -----*/
00564
00565 if( strcmp(argv[nopt],"-inTR") == 0 ){
00566 inTR = 1 ;
00567 nopt++ ; continue ;
00568 }
00569
00570 /*----- -ignore num -----*/
00571 if (strcmp(argv[nopt], "-ignore") == 0)
00572 {
00573 nopt++;
00574 if (nopt >= argc) NLfit_error ("need argument after -ignore ");
00575 sscanf (argv[nopt], "%d", &ival);
00576 if (ival < 0)
00577 NLfit_error ("illegal argument after -ignore ");
00578 *ignore = ival;
00579 nopt++;
00580 continue;
00581 }
00582
00583 /*----- -time filename -----*/
00584 if (strcmp(argv[nopt], "-time") == 0)
00585 {
00586 nopt++;
00587 if (nopt >= argc) NLfit_error ("need argument after -time ");
00588 *tfilename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00589 MTEST (*tfilename);
00590 strcpy (*tfilename, argv[nopt]);
00591 nopt++;
00592 continue;
00593 }
00594
00595
00596 /*----- -signal slabel -----*/
00597 if (strcmp(argv[nopt], "-signal") == 0)
00598 {
00599 nopt++;
00600 if (nopt >= argc) NLfit_error ("need argument after -signal ");
00601 *sname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00602 MTEST (*sname);
00603 strcpy (*sname, argv[nopt]);
00604 initialize_signal_model (model_array, *sname,
00605 smodel, p, *spname,
00606 *min_sconstr, *max_sconstr);
00607 nopt++;
00608 continue;
00609 }
00610
00611
00612 /*----- -noise nlabel -----*/
00613 if (strcmp(argv[nopt], "-noise") == 0)
00614 {
00615 nopt++;
00616 if (nopt >= argc) NLfit_error ("need argument after -noise ");
00617 *nname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00618 MTEST (*nname);
00619 strcpy (*nname, argv[nopt]);
00620 initialize_noise_model (model_array, *nname,
00621 nmodel, r, *npname,
00622 *min_nconstr, *max_nconstr);
00623 nopt++;
00624 continue;
00625 }
00626
00627
00628 /*----- check that user has specified the signal and noise models -----*/
00629 if ((*smodel) == NULL) NLfit_error ("Must specify signal model");
00630 if ((*nmodel) == NULL) NLfit_error ("Must specify noise model");
00631
00632
00633 /*----- -sconstr k min max -----*/
00634 if (strcmp(argv[nopt], "-sconstr") == 0)
00635 {
00636 nopt++;
00637 if (nopt+2 >= argc) NLfit_error("need 3 arguments after -sconstr ");
00638
00639 sscanf (argv[nopt], "%d", &ival);
00640 if ((ival < 0) || (ival >= *p))
00641 NLfit_error ("illegal argument after -sconstr ");
00642 index = ival;
00643 nopt++;
00644
00645 sscanf (argv[nopt], "%f", &fval);
00646 (*min_sconstr)[index] = fval;
00647 nopt++;
00648
00649 sscanf (argv[nopt], "%f", &fval);
00650 (*max_sconstr)[index] = fval;
00651 nopt++;
00652 continue;
00653 }
00654
00655
00656 /*----- -nconstr k min max -----*/
00657 if (strcmp(argv[nopt], "-nconstr") == 0)
00658 {
00659 nopt++;
00660 if (nopt+2 >= argc) NLfit_error("need 3 arguments after -nconstr ");
00661
00662 sscanf (argv[nopt], "%d", &ival);
00663 if ((ival < 0) || (ival >= *r))
00664 NLfit_error ("illegal argument after -nconstr ");
00665 index = ival;
00666 nopt++;
00667
00668 sscanf (argv[nopt], "%f", &fval);
00669 (*min_nconstr)[index] = fval;
00670 nopt++;
00671
00672 sscanf (argv[nopt], "%f", &fval);
00673 (*max_nconstr)[index] = fval;
00674 nopt++;
00675 continue;
00676 }
00677
00678
00679 /*----- -nabs -----*/
00680 if (strcmp(argv[nopt], "-nabs") == 0)
00681 {
00682 *nabs = 1;
00683 nopt++;
00684 continue;
00685 }
00686
00687
00688 /*----- -nrand n -----*/
00689 if (strcmp(argv[nopt], "-nrand") == 0)
00690 {
00691 nopt++;
00692 if (nopt >= argc) NLfit_error ("need argument after -nrand ");
00693 sscanf (argv[nopt], "%d", &ival);
00694 if (ival <= 0)
00695 NLfit_error ("illegal argument after -nrand ");
00696 *nrand = ival;
00697 nopt++;
00698 continue;
00699 }
00700
00701
00702 /*----- -nbest n -----*/
00703 if (strcmp(argv[nopt], "-nbest") == 0)
00704 {
00705 nopt++;
00706 if (nopt >= argc) NLfit_error ("need argument after -nbest ");
00707 sscanf (argv[nopt], "%d", &ival);
00708 if (ival <= 0)
00709 NLfit_error ("illegal argument after -nbest ");
00710 *nbest = ival;
00711 nopt++;
00712 continue;
00713 }
00714
00715
00716 /*----- -rmsmin r -----*/
00717 if (strcmp(argv[nopt], "-rmsmin") == 0)
00718 {
00719 nopt++;
00720 if (nopt >= argc) NLfit_error ("need argument after -rmsmin ");
00721 sscanf (argv[nopt], "%f", &fval);
00722 if (fval < 0.0)
00723 NLfit_error ("illegal argument after -rmsmin ");
00724 *rms_min = fval;
00725 nopt++;
00726 continue;
00727 }
00728
00729
00730 /*----- -fdisp fval -----*/
00731 if (strcmp(argv[nopt], "-fdisp") == 0)
00732 {
00733 nopt++;
00734 if (nopt >= argc) NLfit_error ("need argument after -fdisp ");
00735 sscanf (argv[nopt], "%f", &fval);
00736 *fdisp = fval;
00737 nopt++;
00738 continue;
00739 }
00740
00741
00742 /*----- -freg filename -----*/
00743 if (strcmp(argv[nopt], "-freg") == 0)
00744 {
00745 nopt++;
00746 if (nopt >= argc) NLfit_error ("need argument after -freg ");
00747 *freg_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00748 MTEST (*freg_filename);
00749 strcpy (*freg_filename, argv[nopt]);
00750 nopt++;
00751 continue;
00752 }
00753
00754
00755 /*----- -frsqr filename -----*/
00756 if (strcmp(argv[nopt], "-frsqr") == 0)
00757 {
00758 nopt++;
00759 if (nopt >= argc) NLfit_error ("need argument after -frsqr ");
00760 *frsqr_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00761 MTEST (*frsqr_filename);
00762 strcpy (*frsqr_filename, argv[nopt]);
00763 nopt++;
00764 continue;
00765 }
00766
00767
00768 /*----- -fsmax filename -----*/
00769 if (strcmp(argv[nopt], "-fsmax") == 0)
00770 {
00771 nopt++;
00772 if (nopt >= argc) NLfit_error ("need argument after -fsmax ");
00773 *fsmax_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00774 MTEST (*fsmax_filename);
00775 strcpy (*fsmax_filename, argv[nopt]);
00776 nopt++;
00777 continue;
00778 }
00779
00780
00781 /*----- -ftmax filename -----*/
00782 if (strcmp(argv[nopt], "-ftmax") == 0)
00783 {
00784 nopt++;
00785 if (nopt >= argc) NLfit_error ("need argument after -ftmax ");
00786 *ftmax_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00787 MTEST (*ftmax_filename);
00788 strcpy (*ftmax_filename, argv[nopt]);
00789 nopt++;
00790 continue;
00791 }
00792
00793
00794 /*----- -fpmax filename -----*/
00795 if (strcmp(argv[nopt], "-fpmax") == 0)
00796 {
00797 nopt++;
00798 if (nopt >= argc) NLfit_error ("need argument after -fpmax ");
00799 *fpmax_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00800 MTEST (*fpmax_filename);
00801 strcpy (*fpmax_filename, argv[nopt]);
00802 nopt++;
00803 continue;
00804 }
00805
00806
00807 /*----- -farea filename -----*/
00808 if (strcmp(argv[nopt], "-farea") == 0)
00809 {
00810 nopt++;
00811 if (nopt >= argc) NLfit_error ("need argument after -farea ");
00812 *farea_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00813 MTEST (*farea_filename);
00814 strcpy (*farea_filename, argv[nopt]);
00815 nopt++;
00816 continue;
00817 }
00818
00819
00820 /*----- -fparea filename -----*/
00821 if (strcmp(argv[nopt], "-fparea") == 0)
00822 {
00823 nopt++;
00824 if (nopt >= argc) NLfit_error ("need argument after -fparea ");
00825 *fparea_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00826 MTEST (*fparea_filename);
00827 strcpy (*fparea_filename, argv[nopt]);
00828 nopt++;
00829 continue;
00830 }
00831
00832
00833 /*----- -fscoef k filename -----*/
00834 if (strcmp(argv[nopt], "-fscoef") == 0)
00835 {
00836 nopt++;
00837 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -fscoef ");
00838 sscanf (argv[nopt], "%d", &ival);
00839 if ((ival < 0) || (ival >= *p))
00840 NLfit_error ("illegal argument after -fscoef ");
00841 index = ival;
00842 nopt++;
00843
00844 (*fscoef_filename)[index] = malloc (sizeof(char) * MAX_NAME_LENGTH);
00845 MTEST ((*fscoef_filename)[index]);
00846 strcpy ((*fscoef_filename)[index], argv[nopt]);
00847
00848 nopt++;
00849 continue;
00850 }
00851
00852
00853 /*----- -fncoef k filename -----*/
00854 if (strcmp(argv[nopt], "-fncoef") == 0)
00855 {
00856 nopt++;
00857 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -fncoef ");
00858 sscanf (argv[nopt], "%d", &ival);
00859 if ((ival < 0) || (ival >= *r))
00860 NLfit_error ("illegal argument after -fncoef ");
00861 index = ival;
00862 nopt++;
00863
00864 (*fncoef_filename)[index] = malloc (sizeof(char) * MAX_NAME_LENGTH);
00865 MTEST ((*fncoef_filename)[index]);
00866 strcpy ((*fncoef_filename)[index], argv[nopt]);
00867
00868 nopt++;
00869 continue;
00870 }
00871
00872
00873 /*----- -tscoef k filename -----*/
00874 if (strcmp(argv[nopt], "-tscoef") == 0)
00875 {
00876 nopt++;
00877 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -tscoef ");
00878 sscanf (argv[nopt], "%d", &ival);
00879 if ((ival < 0) || (ival >= *p))
00880 NLfit_error ("illegal argument after -tscoef ");
00881 index = ival;
00882 nopt++;
00883
00884 (*tscoef_filename)[index] = malloc (sizeof(char) * MAX_NAME_LENGTH);
00885 MTEST ((*tscoef_filename)[index]);
00886 strcpy ((*tscoef_filename)[index], argv[nopt]);
00887
00888 calc_tstats = 1;
00889
00890 nopt++;
00891 continue;
00892 }
00893
00894
00895 /*----- -tncoef k filename -----*/
00896 if (strcmp(argv[nopt], "-tncoef") == 0)
00897 {
00898 nopt++;
00899 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -tncoef ");
00900 sscanf (argv[nopt], "%d", &ival);
00901 if ((ival < 0) || (ival >= *r))
00902 NLfit_error ("illegal argument after -tncoef ");
00903 index = ival;
00904 nopt++;
00905
00906 (*tncoef_filename)[index] = malloc (sizeof(char) * MAX_NAME_LENGTH);
00907 MTEST ((*tncoef_filename)[index]);
00908 strcpy ((*tncoef_filename)[index], argv[nopt]);
00909
00910 calc_tstats = 1;
00911
00912 nopt++;
00913 continue;
00914 }
00915
00916
00917 /*----- -bucket n prefixname -----*/
00918 if (strcmp(argv[nopt], "-bucket") == 0)
00919 {
00920 nopt++;
00921 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -bucket ");
00922 sscanf (argv[nopt], "%d", &ival);
00923 if ((ival < 0) || (ival > MAX_BRICKS))
00924 NLfit_error ("illegal argument after -bucket ");
00925 nopt++;
00926
00927 option_data->bucket_filename =
00928 malloc (sizeof(char) * MAX_NAME_LENGTH);
00929 MTEST (option_data->bucket_filename);
00930 strcpy (option_data->bucket_filename, argv[nopt]);
00931
00932 /*----- set number of sub-bricks in the bucket -----*/
00933 if (ival == 0)
00934 nbricks = (*p) + (*r) + 8;
00935 else
00936 nbricks = ival;
00937 option_data->numbricks = nbricks;
00938
00939 /*----- allocate memory and initialize bucket dataset options -----*/
00940 option_data->brick_type = malloc (sizeof(int) * nbricks);
00941 MTEST (option_data->brick_type);
00942 option_data->brick_coef = malloc (sizeof(int) * nbricks);
00943 MTEST (option_data->brick_coef);
00944 option_data->brick_label = malloc (sizeof(char *) * nbricks);
00945 MTEST (option_data->brick_label);
00946 for (ibrick = 0; ibrick < nbricks; ibrick++)
00947 {
00948 option_data->brick_type[ibrick] = -1;
00949 option_data->brick_coef[ibrick] = -1;
00950 option_data->brick_label[ibrick] =
00951 malloc (sizeof(char) * MAX_NAME_LENGTH);
00952 MTEST (option_data->brick_label[ibrick]);
00953 }
00954
00955
00956 if (ival == 0)
00957 /*----- throw (almost) everything into the bucket -----*/
00958 {
00959 for (ibrick = 0; ibrick < (*r); ibrick++)
00960 {
00961 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00962 option_data->brick_coef[ibrick] = ibrick;
00963 strcpy (option_data->brick_label[ibrick], (*npname)[ibrick]);
00964 }
00965
00966 for (ibrick = (*r); ibrick < (*p) + (*r); ibrick++)
00967 {
00968 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00969 option_data->brick_coef[ibrick] = ibrick;
00970 strcpy (option_data->brick_label[ibrick],
00971 (*spname)[ibrick-(*r)]);
00972 }
00973
00974 ibrick = (*p) + (*r);
00975 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00976 option_data->brick_coef[ibrick] = ibrick;
00977 strcpy (option_data->brick_label[ibrick], "Signal TMax");
00978
00979 ibrick++;
00980 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00981 option_data->brick_coef[ibrick] = ibrick;
00982 strcpy (option_data->brick_label[ibrick], "Signal SMax");
00983
00984 ibrick++;
00985 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00986 option_data->brick_coef[ibrick] = ibrick;
00987 strcpy (option_data->brick_label[ibrick], "Signal % SMax");
00988
00989 ibrick++;
00990 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00991 option_data->brick_coef[ibrick] = ibrick;
00992 strcpy (option_data->brick_label[ibrick], "Signal Area");
00993
00994 ibrick++;
00995 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00996 option_data->brick_coef[ibrick] = ibrick;
00997 strcpy (option_data->brick_label[ibrick], "Signal % Area");
00998
00999 ibrick++;
01000 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01001 option_data->brick_coef[ibrick] = ibrick;
01002 strcpy (option_data->brick_label[ibrick], "Sigma Resid");
01003
01004 ibrick++;
01005 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01006 option_data->brick_coef[ibrick] = ibrick;
01007 strcpy (option_data->brick_label[ibrick], "R^2");
01008
01009 ibrick++;
01010 option_data->brick_type[ibrick] = FUNC_FT_TYPE;
01011 option_data->brick_coef[ibrick] = ibrick;
01012 strcpy (option_data->brick_label[ibrick], "F-stat Regression");
01013
01014 }
01015
01016 nopt++;
01017 continue;
01018 }
01019
01020
01021 /*----- -brick m type k label -----*/
01022 if (strcmp(argv[nopt], "-brick") == 0)
01023 {
01024 nopt++;
01025 if (nopt+2 >= argc)
01026 NLfit_error ("need more arguments after -brick ");
01027 sscanf (argv[nopt], "%d", &ibrick);
01028 if ((ibrick < 0) || (ibrick >= option_data->numbricks))
01029 NLfit_error ("illegal argument after -brick ");
01030 nopt++;
01031
01032 if (strcmp(argv[nopt], "scoef") == 0)
01033 {
01034 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01035
01036 nopt++;
01037 sscanf (argv[nopt], "%d", &ival);
01038 if ((ival < 0) || (ival > (*p)))
01039 NLfit_error ("illegal argument after scoef ");
01040 option_data->brick_coef[ibrick] = ival + (*r);
01041
01042 nopt++;
01043 if (nopt >= argc)
01044 NLfit_error ("need more arguments after -brick ");
01045 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01046 }
01047
01048 else if (strcmp(argv[nopt], "ncoef") == 0)
01049 {
01050 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01051
01052 nopt++;
01053 sscanf (argv[nopt], "%d", &ival);
01054 if ((ival < 0) || (ival > (*r)))
01055 NLfit_error ("illegal argument after ncoef ");
01056 option_data->brick_coef[ibrick] = ival;
01057
01058 nopt++;
01059 if (nopt >= argc)
01060 NLfit_error ("need more arguments after -brick ");
01061 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01062 }
01063
01064 else if (strcmp(argv[nopt], "tmax") == 0)
01065 {
01066 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01067 option_data->brick_coef[ibrick] = (*r) + (*p);
01068 nopt++;
01069 if (nopt >= argc)
01070 NLfit_error ("need more arguments after -brick ");
01071 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01072 }
01073
01074 else if (strcmp(argv[nopt], "smax") == 0)
01075 {
01076 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01077 option_data->brick_coef[ibrick] = (*r) + (*p) + 1;
01078 nopt++;
01079 if (nopt >= argc)
01080 NLfit_error ("need more arguments after -brick ");
01081 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01082 }
01083
01084 else if (strcmp(argv[nopt], "psmax") == 0)
01085 {
01086 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01087 option_data->brick_coef[ibrick] = (*r) + (*p) + 2;
01088 nopt++;
01089 if (nopt >= argc)
01090 NLfit_error ("need more arguments after -brick ");
01091 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01092 }
01093
01094 else if (strcmp(argv[nopt], "area") == 0)
01095 {
01096 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01097 option_data->brick_coef[ibrick] = (*r) + (*p) + 3;
01098 nopt++;
01099 if (nopt >= argc)
01100 NLfit_error ("need more arguments after -brick ");
01101 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01102 }
01103
01104 else if (strcmp(argv[nopt], "parea") == 0)
01105 {
01106 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01107 option_data->brick_coef[ibrick] = (*r) + (*p) + 4;
01108 nopt++;
01109 if (nopt >= argc)
01110 NLfit_error ("need more arguments after -brick ");
01111 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01112 }
01113
01114 else if (strcmp(argv[nopt], "resid") == 0)
01115 {
01116 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01117 option_data->brick_coef[ibrick] = (*r) + (*p) + 5;
01118 nopt++;
01119 if (nopt >= argc)
01120 NLfit_error ("need more arguments after -brick ");
01121 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01122 }
01123
01124 else if (strcmp(argv[nopt], "rsqr") == 0)
01125 {
01126 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
01127 option_data->brick_coef[ibrick] = (*r) + (*p) + 6;
01128 nopt++;
01129 if (nopt >= argc)
01130 NLfit_error ("need more arguments after -brick ");
01131 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01132 }
01133
01134 else if (strcmp(argv[nopt], "fstat") == 0)
01135 {
01136 option_data->brick_type[ibrick] = FUNC_FT_TYPE;
01137 option_data->brick_coef[ibrick] = (*r) + (*p) + 7;
01138 nopt++;
01139 if (nopt >= argc)
01140 NLfit_error ("need more arguments after -brick ");
01141 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01142 }
01143
01144 else if (strcmp(argv[nopt], "tscoef") == 0)
01145 {
01146 option_data->brick_type[ibrick] = FUNC_TT_TYPE;
01147
01148 nopt++;
01149 sscanf (argv[nopt], "%d", &ival);
01150 if ((ival < 0) || (ival > (*p)))
01151 NLfit_error ("illegal argument after tscoef ");
01152 option_data->brick_coef[ibrick] = ival + (*r);
01153
01154 nopt++;
01155 if (nopt >= argc)
01156 NLfit_error ("need more arguments after -brick ");
01157 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01158
01159 calc_tstats = 1;
01160 }
01161
01162 else if (strcmp(argv[nopt], "tncoef") == 0)
01163 {
01164 option_data->brick_type[ibrick] = FUNC_TT_TYPE;
01165
01166 nopt++;
01167 sscanf (argv[nopt], "%d", &ival);
01168 if ((ival < 0) || (ival > (*r)))
01169 NLfit_error ("illegal argument after tncoef ");
01170 option_data->brick_coef[ibrick] = ival;
01171
01172 nopt++;
01173 if (nopt >= argc)
01174 NLfit_error ("need more arguments after -brick ");
01175 strcpy (option_data->brick_label[ibrick], argv[nopt]);
01176
01177 calc_tstats = 1;
01178 }
01179
01180 else NLfit_error ("unable to interpret options after -brick ");
01181
01182 nopt++;
01183 continue;
01184 }
01185
01186
01187 /*----- -sfit filename -----*/
01188 if (strcmp(argv[nopt], "-sfit") == 0)
01189 {
01190 nopt++;
01191 if (nopt >= argc) NLfit_error ("need argument after -sfit ");
01192 *sfit_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
01193 MTEST (*sfit_filename);
01194 strcpy (*sfit_filename, argv[nopt]);
01195 nopt++;
01196 continue;
01197 }
01198
01199
01200 /*----- -snfit filename -----*/
01201 if (strcmp(argv[nopt], "-snfit") == 0)
01202 {
01203 nopt++;
01204 if (nopt >= argc) NLfit_error ("need argument after -snfit ");
01205 *snfit_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
01206 MTEST (*snfit_filename);
01207 strcpy (*snfit_filename, argv[nopt]);
01208 nopt++;
01209 continue;
01210 }
01211
01212
01213 /*----- -jobs J -----*/
01214 if( strcmp(argv[nopt],"-jobs") == 0 ){ /* RWCox */
01215 nopt++ ;
01216 if (nopt >= argc) NLfit_error ("need J parameter after -jobs ");
01217 #ifdef PROC_MAX
01218 proc_numjob = strtol(argv[nopt],NULL,10) ;
01219 if( proc_numjob < 1 ){
01220 fprintf(stderr,"** setting number of processes to 1!\n") ;
01221 proc_numjob = 1 ;
01222 } else if( proc_numjob > PROC_MAX ){
01223 fprintf(stderr,"** setting number of processes to %d!\n",PROC_MAX);
01224 proc_numjob = PROC_MAX ;
01225 }
01226 #else
01227 fprintf(stderr,"** -jobs not supported in this version\n") ;
01228 #endif
01229 nopt++; continue;
01230 }
01231
01232
01233 /*----- unknown command -----*/
01234 sprintf(message,"Unrecognized command line option: %s\n", argv[nopt]);
01235 NLfit_error (message);
01236
01237 }
01238
01239
01240 /*----- discard the model array -----*/
01241 DESTROY_MODEL_ARRAY (model_array) ;
01242
01243 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 309 of file 3dNLfim.c. References malloc, MTEST, p, r, and vfp.
00339 {
00340 int ip; /* parameter index */
00341
00342
00343 /*----- initialize default values -----*/
00344 *ignore = 3;
00345 *nabs = 0;
00346 *nrand = 100;
00347 *nbest = 5;
00348 *rms_min = 0.0;
00349 *fdisp = 10.0;
00350 *smodel = NULL;
00351 *nmodel = NULL;
00352 *r = -1;
00353 *p = -1;
00354
00355
00356 /*----- allocate memory for noise parameter names -----*/
00357 *npname = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00358 MTEST (*npname);
00359 for (ip = 0; ip < MAX_PARAMETERS; ip++)
00360 {
00361 (*npname)[ip] = (char *) malloc (sizeof(char) * MAX_NAME_LENGTH);
00362 MTEST ((*npname)[ip]);
00363 }
00364
00365
00366 /*----- allocate memory for signal parameter names -----*/
00367 *spname = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00368 MTEST (*spname);
00369 for (ip = 0; ip < MAX_PARAMETERS; ip++)
00370 {
00371 (*spname)[ip] = (char *) malloc (sizeof(char) * MAX_NAME_LENGTH);
00372 MTEST ((*spname)[ip]);
00373 }
00374
00375
00376 /*----- allocate memory for parameter constraints -----*/
00377 *min_nconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00378 MTEST (*min_nconstr);
00379 *max_nconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00380 MTEST (*max_nconstr);
00381 *min_sconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00382 MTEST (*min_sconstr);
00383 *max_sconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00384 MTEST (*max_sconstr);
00385
00386
00387 /*----- allocate memory space and initialize pointers for filenames -----*/
00388 *input_filename = NULL;
00389 *tfilename = NULL;
00390 *freg_filename = NULL;
00391 *frsqr_filename = NULL;
00392 *fncoef_filename = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00393 MTEST (*fncoef_filename);
00394 *fscoef_filename = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00395 MTEST (*fscoef_filename);
00396 *tncoef_filename = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00397 MTEST (*tncoef_filename);
00398 *tscoef_filename = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00399 MTEST (*tscoef_filename);
00400 for (ip = 0; ip < MAX_PARAMETERS; ip++)
00401 {
00402 (*fncoef_filename)[ip] = NULL;
00403 (*fscoef_filename)[ip] = NULL;
00404 (*tncoef_filename)[ip] = NULL;
00405 (*tscoef_filename)[ip] = NULL;
00406 }
00407 *sfit_filename = NULL;
00408 *snfit_filename = NULL;
00409
00410
00411 /*----- initialize bucket dataset options -----*/
00412 option_data->bucket_filename = NULL;
00413 option_data->numbricks = -1;
00414 option_data->brick_type = NULL;
00415 option_data->brick_coef = NULL;
00416 option_data->brick_label = NULL;
00417
00418 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1626 of file 3dNLfim.c. References argc, check_for_valid_inputs(), commandline, DELT, dsTR, get_options(), inTR, malloc, MRI_FLOAT_PTR, mri_free(), mri_read_1D(), MTEST, NLfit_error(), p, proc_finalize_shm_volumes(), proc_numjob, PROGRAM_NAME, r, tross_commandline(), vfp, and zero_fill_volume().
01694 {
01695 int dimension; /* dimension of full model */
01696 int ip; /* parameter index */
01697 int it; /* time index */
01698 MRI_IMAGE * im, * flim; /* pointers to image structures
01699 -- used to read 1D ASCII */
01700 int nt; /* number of points in 1D x data file */
01701 float * tar;
01702 int ixyz; /* voxel index */
01703
01704
01705 /*----- save command line for history notes -----*/
01706 commandline = tross_commandline( PROGRAM_NAME , argc,argv ) ;
01707
01708
01709 /*----- get command line inputs -----*/
01710 get_options(argc, argv, ignore, nname, sname, nmodel, smodel,
01711 r, p, npname, spname,
01712 min_nconstr, max_nconstr, min_sconstr, max_sconstr, nabs,
01713 nrand, nbest, rms_min, fdisp, input_filename, tfilename,
01714 freg_filename, frsqr_filename, fsmax_filename,
01715 ftmax_filename, fpmax_filename, farea_filename, fparea_filename,
01716 fncoef_filename, fscoef_filename,
01717 tncoef_filename, tscoef_filename, sfit_filename, snfit_filename,
01718 dset_time, nxyz, ts_length, option_data);
01719
01720
01721 /*----- check for valid inputs -----*/
01722 check_for_valid_inputs (*nxyz, *r, *p, *min_nconstr, *max_nconstr,
01723 *min_sconstr, *max_sconstr, *nrand, *nbest,
01724 *freg_filename, *frsqr_filename,
01725 *fsmax_filename, *ftmax_filename,
01726 *fpmax_filename, *farea_filename, *fparea_filename,
01727 *fncoef_filename, *fscoef_filename,
01728 *tncoef_filename, *tscoef_filename,
01729 *sfit_filename, *snfit_filename,
01730 option_data->bucket_filename, *dset_time);
01731
01732
01733 /*----- allocate space for input time series -----*/
01734 *ts_length = *ts_length - *ignore;
01735 *ts_array = (float *) malloc (sizeof(float) * (*ts_length));
01736 MTEST (*ts_array);
01737
01738
01739 /*----- allocate space for independent variable matrix -----*/
01740 *x_array = (float **) malloc (sizeof(float *) * (*ts_length));
01741 MTEST (*x_array);
01742 for (it = 0; it < (*ts_length); it++)
01743 {
01744 (*x_array)[it] = (float *) malloc (sizeof(float) * 3);
01745 MTEST ((*x_array)[it]);
01746 }
01747
01748
01749 /*----- initialize independent variable matrix -----*/
01750 if (*tfilename == NULL)
01751 {
01752 if( inTR && dsTR > 0.0 ){ /* 22 July 1998 */
01753 DELT = dsTR ;
01754 fprintf(stderr,"--- computing with TR = %g\n",DELT) ;
01755 }
01756 for (it = 0; it < (*ts_length); it++)
01757 {
01758 (*x_array)[it][0] = 1.0;
01759 (*x_array)[it][1] = it * DELT;
01760 (*x_array)[it][2] = (it * DELT) * (it * DELT);
01761 }
01762 }
01763 else
01764 {
01765 flim = mri_read_1D(*tfilename) ;
01766 if (flim == NULL)
01767 NLfit_error ("Unable to read time reference file \n");
01768 nt = flim -> nx;
01769 if (nt < (*ts_length))
01770 NLfit_error ("Time reference array is too short");
01771 tar = MRI_FLOAT_PTR(flim) ;
01772 for (it = 0; it < (*ts_length); it++)
01773 {
01774 (*x_array)[it][0] = 1.0;
01775 (*x_array)[it][1] = tar[it] ;
01776 (*x_array)[it][2] = tar[it] * tar[it];
01777 }
01778 mri_free (flim);
01779 }
01780
01781 /*----- allocate memory space for parameters -----*/
01782 dimension = (*r) + (*p);
01783 *par_rdcd = (float *) malloc (sizeof(float) * dimension);
01784 MTEST (*par_rdcd);
01785 *par_full = (float *) malloc (sizeof(float) * dimension);
01786 MTEST (*par_full);
01787 *tpar_full = (float *) malloc (sizeof(float) * dimension);
01788 MTEST (*tpar_full);
01789
01790
01791 /*----- allocate memory space for volume data -----*/
01792 zero_fill_volume( freg_vol , *nxyz ) ;
01793
01794 if ((*freg_filename != NULL) || (option_data->bucket_filename != NULL))
01795 zero_fill_volume( rmsreg_vol , *nxyz ) ;
01796
01797 if ((*frsqr_filename != NULL) || (option_data->bucket_filename != NULL))
01798 zero_fill_volume( rsqr_vol , *nxyz ) ;
01799
01800 if ((*fsmax_filename != NULL) || (option_data->bucket_filename != NULL))
01801 zero_fill_volume( smax_vol , *nxyz ) ;
01802
01803 if ((*ftmax_filename != NULL) || (option_data->bucket_filename != NULL))
01804 zero_fill_volume( tmax_vol , *nxyz ) ;
01805
01806
01807 if ((*fpmax_filename != NULL) || (option_data->bucket_filename != NULL))
01808 zero_fill_volume( pmax_vol , *nxyz ) ;
01809
01810 if ((*farea_filename != NULL) || (option_data->bucket_filename != NULL))
01811 zero_fill_volume( area_vol , *nxyz ) ;
01812
01813 if ((*fparea_filename != NULL) || (option_data->bucket_filename != NULL))
01814 zero_fill_volume( parea_vol , *nxyz ) ;
01815
01816
01817 *ncoef_vol = (float **) malloc (sizeof(float *) * (*r));
01818 MTEST (*ncoef_vol);
01819 *tncoef_vol = (float **) malloc (sizeof(float *) * (*r));
01820 MTEST (*tncoef_vol);
01821
01822 for (ip = 0; ip < (*r); ip++)
01823 {
01824 if (((*fncoef_filename)[ip] != NULL) || ((*tncoef_filename)[ip] != NULL)
01825 || (option_data->bucket_filename != NULL))
01826 zero_fill_volume( &((*ncoef_vol)[ip]) , *nxyz ) ;
01827 else
01828 (*ncoef_vol)[ip] = NULL;
01829
01830 if (((*tncoef_filename)[ip] != NULL)
01831 || (option_data->bucket_filename != NULL))
01832 zero_fill_volume( &((*tncoef_vol)[ip]) , *nxyz ) ;
01833 else
01834 (*tncoef_vol)[ip] = NULL;
01835 }
01836
01837
01838 *scoef_vol = (float **) malloc (sizeof(float *) * (*p));
01839 MTEST (*scoef_vol);
01840 *tscoef_vol = (float **) malloc (sizeof(float *) * (*p));
01841 MTEST (*tscoef_vol);
01842
01843 for (ip = 0; ip < (*p); ip++)
01844 {
01845 if (((*fscoef_filename)[ip] != NULL) || ((*tscoef_filename)[ip] != NULL)
01846 || (option_data->bucket_filename != NULL))
01847 zero_fill_volume( &((*scoef_vol)[ip]) , *nxyz ) ;
01848 else
01849 (*scoef_vol)[ip] = NULL;
01850
01851 if (((*tscoef_filename)[ip] != NULL)
01852 || (option_data->bucket_filename != NULL))
01853 zero_fill_volume( &((*tscoef_vol)[ip]) , *nxyz ) ;
01854 else
01855 (*tscoef_vol)[ip] = NULL;
01856 }
01857
01858
01859 /*----- Allocate memory space for 3d+time fitted signal model -----*/
01860 if (*sfit_filename != NULL)
01861 {
01862 *sfit_vol = (float **) malloc (sizeof(float *) * (*ts_length));
01863 MTEST(*sfit_vol);
01864
01865 for (it = 0; it < *ts_length; it++)
01866 zero_fill_volume( &((*sfit_vol)[it]) , *nxyz ) ;
01867 }
01868
01869 /*----- Allocate memory space for 3d+time fitted signal+noise model -----*/
01870 if (*snfit_filename != NULL)
01871 {
01872 *snfit_vol = (float **) malloc (sizeof(float *) * (*ts_length));
01873 MTEST(*snfit_vol);
01874
01875 for (it = 0; it < *ts_length; it++)
01876 zero_fill_volume( &((*snfit_vol)[it]) , *nxyz ) ;
01877 }
01878
01879 #ifdef PROC_MAX
01880 if( proc_numjob > 1 ) proc_finalize_shm_volumes() ; /* RWCox */
01881 #endif
01882
01883 }
|
|
||||||||||||
|
Definition at line 2955 of file 3dNLfim.c. References addto_args(), analyze_results(), argc, calc_full_model(), calc_reduced_model(), COX_clock_time(), DSET_load, initialize_program(), iochan_sleep(), machdep(), mask_vol, output_results(), p, pmax, proc_ind, proc_numjob, proc_pid, proc_vox_bot, proc_vox_top, PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, r, RAN_setup(), read_ts_array(), report_results(), save_results(), terminate_program(), THD_delete_3dim_dataset(), and vfp.
02960 {
02961 /*----- declare input option variables -----*/
02962 NL_options option_data; /* bucket dataset options */
02963 int nabs; /* use absolute constraints for noise parameters */
02964 int nrand; /* number of random vectors to generate */
02965 int nbest; /* number of random vectors to keep */
02966 float rms_min; /* minimum rms error to reject reduced model */
02967 float fdisp; /* minimum f-statistic for display */
02968
02969 /*----- declare time series variables -----*/
02970 THD_3dim_dataset * dset_time = NULL; /* input 3d+time data set */
02971 int ts_length; /* length of time series data */
02972 int ignore; /* delete this number of points from time series */
02973 float ** x_array = NULL; /* independent variable matrix */
02974 float * ts_array = NULL; /* input time series array */
02975 int nxyz; /* number of voxels in image */
02976 int iv; /* voxel counter */
02977
02978 /*----- declare reduced (noise) model variables -----*/
02979 char * nname = NULL; /* noise model name */
02980 vfp nmodel; /* pointer to noise model */
02981 int r; /* number of parameters in the noise model */
02982 char ** npname = NULL; /* noise parameter labels */
02983 float * par_rdcd = NULL; /* estimated parameters for the reduced model */
02984 float sse_rdcd; /* error sum of squares for the reduced model */
02985 float * min_nconstr = NULL; /* min parameter constraints for noise model */
02986 float * max_nconstr = NULL; /* max parameter constraints for noise model */
02987
02988 /*----- declare full (signal+noise) model variables -----*/
02989 char * sname = NULL; /* signal model name */
02990 vfp smodel; /* pointer to signal model */
02991 int p; /* number of parameters in the signal model */
02992 char ** spname = NULL; /* signal parameter labels */
02993 float * par_full = NULL; /* estimated parameters for the full model */
02994 float sse_full; /* error sum of squares for the full model */
02995 float * tpar_full = NULL; /* t-statistic of parameters in full model */
02996 float freg; /* f-statistic for the full regression model */
02997 float rmsreg; /* rms error for the full regression model */
02998 float rsqr; /* R^2 (coef. of multiple determination) */
02999 float smax; /* signed maximum of signal */
03000 float tmax; /* epoch of signed maximum of signal */
03001 float pmax; /* percentage change due to signal */
03002 float area; /* area between signal and baseline */
03003 float parea; /* percent area between signal and baseline */
03004 float * min_sconstr = NULL; /* min parameter constraints for signal model */
03005 float * max_sconstr = NULL; /* max parameter constraints for signal model */
03006
03007 /*----- declare output volume data -----*/
03008 float * rmsreg_vol = NULL; /* rms error for the full regression model */
03009 float * freg_vol = NULL; /* f-statistic for the full regression model */
03010 float * rsqr_vol = NULL; /* R^2 volume data */
03011 float * smax_vol = NULL; /* signed max. of signal volume data */
03012 float * tmax_vol = NULL; /* epoch of signed max. volume data */
03013 float * pmax_vol = NULL; /* max. percentage change due to signal */
03014 float * area_vol = NULL; /* area between signal and baseline */
03015 float * parea_vol = NULL; /* percent area between signal and baseline */
03016 float ** ncoef_vol = NULL; /* noise model parameters volume data */
03017 float ** scoef_vol = NULL; /* signal model parameters volume data */
03018 float ** tncoef_vol = NULL; /* noise model t-statistics volume data */
03019 float ** tscoef_vol = NULL; /* signal model t-statistics volume data */
03020 float ** sfit_vol = NULL; /* voxelwise 3d+time fitted signal model */
03021 float ** snfit_vol = NULL; /* voxelwise 3d+time fitted signal+noise */
03022
03023 /*----- declare file name variables -----*/
03024 char * input_filename = NULL; /* file name of input 3d+time dataset */
03025 char * tfilename = NULL; /* file name of time points */
03026 char * freg_filename = NULL; /* file name for regression f-statistics */
03027 char * frsqr_filename= NULL; /* file name for R^2 statistics */
03028 char * fsmax_filename = NULL; /* file name for signal signed maximum */
03029 char * ftmax_filename = NULL; /* file name for time of signed maximum */
03030 char * fpmax_filename = NULL; /* file name for max. percentage change */
03031 char * farea_filename = NULL; /* file name for area under the signal */
03032 char * fparea_filename = NULL; /* file name for % area under the signal */
03033 char ** fncoef_filename = NULL; /* file name for noise model parameters */
03034 char ** fscoef_filename = NULL; /* file name for signal model parameters */
03035 char ** tncoef_filename = NULL; /* file name for noise model t-statistics */
03036 char ** tscoef_filename = NULL; /* file name for signal model t-statistics */
03037 char * sfit_filename = NULL; /* file name for fitted signal model */
03038 char * snfit_filename = NULL; /* file name for fitted signal+noise model */
03039
03040 char * label; /* report results for one voxel */
03041 int novar; /* flag for insufficient variation in the data */
03042
03043 int ixyz_bot , ixyz_top ;
03044
03045 /*----- start the elapsed time counter -----*/
03046 (void) COX_clock_time() ;
03047
03048 /*----- Identify software -----*/
03049 printf ("\n\n");
03050 printf ("Program: %s \n", PROGRAM_NAME);
03051 printf ("Author: %s \n", PROGRAM_AUTHOR);
03052 printf ("Initial Release: %s \n", PROGRAM_INITIAL);
03053 printf ("Latest Revision: %s \n", PROGRAM_LATEST);
03054 printf ("\n");
03055
03056
03057 /*-- 20 Apr 2001: addto the arglist, if user wants to [RWCox] --*/
03058 machdep() ;
03059 {
03060 int new_argc ; char ** new_argv ;
03061 addto_args( argc , argv , &new_argc , &new_argv ) ;
03062 if( new_argv != NULL ){ argc = new_argc ; argv = new_argv ; }
03063 }
03064
03065
03066 /*----- program initialization -----*/
03067 initialize_program (argc, argv, &ignore,
03068 &nname, &sname, &nmodel, &smodel,
03069 &r, &p, &npname, &spname,
03070 &min_nconstr, &max_nconstr, &min_sconstr, &max_sconstr,
03071 &nabs, &nrand, &nbest, &rms_min, &fdisp,
03072 &input_filename, &tfilename,
03073 &freg_filename, &frsqr_filename,
03074 &fsmax_filename, &ftmax_filename, &fpmax_filename,
03075 &farea_filename, &fparea_filename, &fncoef_filename,
03076 &fscoef_filename, &tncoef_filename, &tscoef_filename,
03077 &sfit_filename, &snfit_filename,
03078 &dset_time, &nxyz, &ts_length, &x_array, &ts_array,
03079 &par_rdcd, &par_full, &tpar_full,
03080 &rmsreg_vol, &freg_vol, &rsqr_vol,
03081 &smax_vol, &tmax_vol, &pmax_vol, &area_vol, &parea_vol,
03082 &ncoef_vol, &scoef_vol, &tncoef_vol, &tscoef_vol,
03083 &sfit_vol, &snfit_vol, &option_data);
03084
03085 #if 0
03086 #ifdef SAVE_RAN
03087 RAN_setup( nmodel , smodel , r , p , nabs ,
03088 min_nconstr, max_nconstr,
03089 min_sconstr, max_sconstr,
03090 ts_length, x_array, nrand ) ;
03091 #endif
03092 #endif
03093
03094 ixyz_bot = 0 ; ixyz_top = nxyz ; /* RWCox */
03095
03096 #ifdef PROC_MAX
03097 if( proc_numjob > 1 ){ /*---- set up multiple processes ----*/
03098 int vv , nvox=nxyz , nper , pp , nv ;
03099 pid_t newpid ;
03100
03101 /* count number of voxels to compute with into nvox */
03102
03103 if( mask_vol != NULL ){
03104 for( vv=nvox=0 ; vv < nxyz ; vv++ )
03105 if( mask_vol[vv] != 0 ) nvox++ ;
03106 }
03107
03108 if( nvox < proc_numjob ){ /* too few voxels for multiple jobs? */
03109
03110 proc_numjob = 1 ;
03111
03112 } else { /* prepare jobs */
03113
03114 /* split voxels between jobs evenly */
03115
03116 nper = nvox / proc_numjob ; /* # voxels per job */
03117 if( mask_vol == NULL ){
03118 proc_vox_bot[0] = 0 ;
03119 for( pp=0 ; pp < proc_numjob ; pp++ ){
03120 proc_vox_top[pp] = proc_vox_bot[pp] + nper ;
03121 if( pp < proc_numjob-1 ) proc_vox_bot[pp+1] = proc_vox_top[pp] ;
03122 }
03123 proc_vox_top[proc_numjob-1] = nxyz ;
03124 } else {
03125 proc_vox_bot[0] = 0 ;
03126 for( pp=0 ; pp < proc_numjob ; pp++ ){
03127 for( nv=0,vv=proc_vox_bot[pp] ; /* count ahead until */
03128 nv < nper && vv < nxyz ; vv++ ){ /* find nper voxels */
03129 if( mask_vol[vv] != 0 ) nv++ ; /* inside the mask */
03130 }
03131 proc_vox_top[pp] = vv ;
03132 if( pp < proc_numjob-1 ) proc_vox_bot[pp+1] = proc_vox_top[pp] ;
03133 }
03134 proc_vox_top[proc_numjob-1] = nxyz ;
03135 }
03136
03137 /* make sure dataset is in memory before forks */
03138
03139 DSET_load(dset_time) ; /* so dataset will be common */
03140
03141 /* start processes */
03142
03143 fprintf(stderr,"++ Voxels in dataset: %d\n",nxyz) ;
03144 if( nvox < nxyz )
03145 fprintf(stderr,"++ Voxels in mask: %d\n",nvox) ;
03146 fprintf(stderr,"++ Voxels per job: %d\n",nper) ;
03147
03148 for( pp=1 ; pp < proc_numjob ; pp++ ){
03149 ixyz_bot = proc_vox_bot[pp] ; /* these 3 variables */
03150 ixyz_top = proc_vox_top[pp] ; /* are for the process */
03151 proc_ind = pp ; /* we're about to fork */
03152 newpid = fork() ;
03153 if( newpid == -1 ){
03154 fprintf(stderr,"** Can't fork job #%d! Error exit!\n",pp);
03155 exit(1) ;
03156 }
03157 if( newpid == 0 ) break ; /* I'm the child */
03158 proc_pid[pp] = newpid ; /* I'm the parent */
03159 iochan_sleep(10) ;
03160 }
03161 if( pp == proc_numjob ){ /* only in the parent */
03162 ixyz_bot = proc_vox_bot[0] ; /* set the 3 control */
03163 ixyz_top = proc_vox_top[0] ; /* variables needed */
03164 proc_ind = 0 ; /* below */
03165 }
03166 fprintf(stderr,"++ Job #%d: processing voxels %d to %d; elapsed time=%.3f\n",
03167 proc_ind,ixyz_bot,ixyz_top-1,COX_clock_time()) ;
03168 }
03169 }
03170 #endif /* PROC_MAX */
03171
03172 if( proc_numjob == 1 )
03173 fprintf(stderr,"++ Calculations starting; elapsed time=%.3f\n",COX_clock_time()) ;
03174
03175
03176 /*----- loop over voxels in the data set -----*/
03177 for (iv = ixyz_bot; iv < ixyz_top; iv++)
03178 {
03179 /*----- check for mask -----*/
03180 if (mask_vol != NULL)
03181 if (mask_vol[iv] == 0) continue;
03182
03183
03184 /*----- read the time series for voxel iv -----*/
03185 read_ts_array (dset_time, iv, ts_length, ignore, ts_array);
03186
03187
03188 /*----- calculate the reduced (noise) model -----*/
03189 calc_reduced_model (ts_length, r, x_array, ts_array,
03190 par_rdcd, &sse_rdcd);
03191
03192
03193 /*----- calculate the full (signal+noise) model -----*/
03194 calc_full_model (nmodel, smodel, r, p,
03195 min_nconstr, max_nconstr, min_sconstr, max_sconstr,
03196 ts_length, x_array, ts_array, par_rdcd, sse_rdcd, nabs,
03197 nrand, nbest, rms_min, par_full, &sse_full, &novar);
03198
03199
03200 /*----- calculate statistics for the full model -----*/
03201 analyze_results (nmodel, smodel, r, p, novar,
03202 min_nconstr, max_nconstr, min_sconstr, max_sconstr,
03203 ts_length, x_array,
03204 par_rdcd, sse_rdcd, par_full, sse_full,
03205 &rmsreg, &freg, &rsqr, &smax, &tmax, &pmax,
03206 &area, &parea, tpar_full);
03207
03208
03209 /*----- report results for this voxel -----*/
03210 if (freg >= fdisp && proc_ind == 0 )
03211 {
03212 report_results (nname, sname, r, p, npname, spname, ts_length,
03213 par_rdcd, sse_rdcd, par_full, sse_full, tpar_full,
03214 rmsreg, freg, rsqr, smax, tmax, pmax,
03215 area, parea, &label);
03216 printf ("\n\nVoxel #%d\n", iv);
03217 printf ("%s \n", label);
03218 }
03219
03220
03221 /*----- save results for this voxel into volume data -----*/
03222 save_results (iv, nmodel, smodel, r, p, novar, ts_length, x_array,
03223 par_full, tpar_full, rmsreg, freg, rsqr, smax,
03224 tmax, pmax, area, parea, rmsreg_vol,
03225 freg_vol, rsqr_vol, smax_vol,
03226 tmax_vol, pmax_vol, area_vol, parea_vol,ncoef_vol,
03227 scoef_vol, tncoef_vol, tscoef_vol, sfit_vol, snfit_vol);
03228 }
03229
03230
03231 /*-- if this is a child process, we're done.
03232 if this is the parent process, wait for the children --*/
03233
03234 #ifdef PROC_MAX
03235 if( proc_numjob > 1 ){
03236 if( proc_ind > 0 ){ /* death of child */
03237 fprintf(stderr,"++ Job #%d finished; elapsed time=%.3f\n",proc_ind,COX_clock_time()) ;
03238 _exit(0) ;
03239
03240 } else { /* parent waits for children */
03241 int pp ;
03242 fprintf(stderr,"++ Job #0 waiting for children to finish; elapsed time=%.3f\n",COX_clock_time()) ;
03243 for( pp=1 ; pp < proc_numjob ; pp++ )
03244 waitpid( proc_pid[pp] , NULL , 0 ) ;
03245 fprintf(stderr,"++ Job #0 now finishing up; elapsed time=%.3f\n",COX_clock_time()) ;
03246 }
03247
03248 /* when get to here, only parent process is left alive,
03249 and all the results are in the shared memory segment arrays */
03250 }
03251 #endif
03252 if( proc_numjob == 1 )
03253 fprintf(stderr,"++ Calculations finished; elapsed time=%.3f\n",COX_clock_time()) ;
03254
03255
03256 /*----- delete input dataset -----*/
03257 THD_delete_3dim_dataset( dset_time , False ) ; dset_time = NULL ;
03258
03259
03260 /*----- write requested output files -----*/
03261 output_results (r, p, min_nconstr, max_nconstr, min_sconstr, max_sconstr,
03262 nxyz, ts_length, rmsreg_vol, freg_vol, rsqr_vol,
03263 smax_vol, tmax_vol, pmax_vol, area_vol, parea_vol,
03264 ncoef_vol, scoef_vol, tncoef_vol, tscoef_vol,
03265 sfit_vol, snfit_vol,
03266 input_filename, freg_filename, frsqr_filename,
03267 fsmax_filename, ftmax_filename,
03268 fpmax_filename, farea_filename, fparea_filename,
03269 fncoef_filename, fscoef_filename,
03270 tncoef_filename, tscoef_filename,
03271 sfit_filename, snfit_filename, &option_data);
03272
03273
03274 /*----- end of program -----*/
03275 terminate_program (r, p, ts_length, &x_array, &ts_array,
03276 &nname, &npname, &par_rdcd, &min_nconstr, &max_nconstr,
03277 &sname, &spname, &par_full, &tpar_full,
03278 &min_sconstr, &max_sconstr,
03279 &rmsreg_vol, &freg_vol, &rsqr_vol,
03280 &smax_vol, &tmax_vol, &pmax_vol, &area_vol, &parea_vol,
03281 &ncoef_vol, &scoef_vol, &tncoef_vol, &tscoef_vol,
03282 &sfit_vol, &snfit_vol, &input_filename,
03283 &freg_filename, &frsqr_filename,
03284 &fsmax_filename, &ftmax_filename,
03285 &fpmax_filename, &farea_filename, &fparea_filename,
03286 &fncoef_filename, &fscoef_filename,
03287 &tncoef_filename, &tscoef_filename,
03288 &sfit_filename, &snfit_filename);
03289
03290 fprintf(stderr,"++ Program finished; elapsed time=%.3f\n",COX_clock_time()) ;
03291 exit (0);
03292 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 2582 of file 3dNLfim.c. References p, r, write_3dtime(), write_afni_data(), and write_bucket_data().
02626 {
02627 int ip; /* parameter index */
02628 int dimension; /* dimension of full model = r + p */
02629 int numdof, dendof; /* numerator and denominator degrees of freedom */
02630
02631
02632 /*----- Initialization -----*/
02633 dimension = r + p;
02634 numdof = p;
02635 dendof = ts_length - dimension;
02636
02637
02638 /*----- Adjust dof if constraints force a parameter to be a constant -----*/
02639 for (ip = 0; ip < r; ip++)
02640 if (min_nconstr[ip] == max_nconstr[ip])
02641 dendof++;
02642
02643 for (ip = 0; ip < p; ip++)
02644 if (min_sconstr[ip] == max_sconstr[ip])
02645 {
02646 numdof--;
02647 dendof++;
02648 }
02649
02650
02651 /*----- write the bucket dataset -----*/
02652 if (option_data->numbricks > 0)
02653 write_bucket_data (r, p, numdof, dendof, nxyz, ts_length, rmsreg_vol,
02654 freg_vol, rsqr_vol, smax_vol, tmax_vol, pmax_vol,
02655 area_vol, parea_vol, ncoef_vol, scoef_vol,
02656 tncoef_vol, tscoef_vol, input_filename, option_data);
02657
02658
02659 /*----- write out the f-statistics for the regression -----*/
02660 if (freg_filename != NULL)
02661 write_afni_data (input_filename, nxyz, freg_filename,
02662 rmsreg_vol, freg_vol, numdof, dendof);
02663
02664
02665 /*----- write out the R^2 (coefficient of multiple determination) -----*/
02666 if (frsqr_filename != NULL)
02667 write_afni_data (input_filename, nxyz, frsqr_filename,
02668 rsqr_vol, freg_vol, numdof, dendof);
02669
02670
02671 /*----- write out the signed maximum of signal estimates -----*/
02672 if (fsmax_filename != NULL)
02673 write_afni_data (input_filename, nxyz, fsmax_filename,
02674 smax_vol, freg_vol, numdof, dendof);
02675
02676
02677 /*----- write out the epoch of signed maximum of signal estimates -----*/
02678 if (ftmax_filename != NULL)
02679 write_afni_data (input_filename, nxyz, ftmax_filename,
02680 tmax_vol, freg_vol, numdof, dendof);
02681
02682
02683 /*----- write out the max. percentage change due to signal -----*/
02684 if (fpmax_filename != NULL)
02685 write_afni_data (input_filename, nxyz, fpmax_filename,
02686 pmax_vol, freg_vol, numdof, dendof);
02687
02688
02689 /*----- write out the area between the signal and baseline -----*/
02690 if (farea_filename != NULL)
02691 write_afni_data (input_filename, nxyz, farea_filename,
02692 area_vol, freg_vol, numdof, dendof);
02693
02694
02695 /*----- write out the percentage area between the signal and baseline -----*/
02696 if (fparea_filename != NULL)
02697 write_afni_data (input_filename, nxyz, fparea_filename,
02698 parea_vol, freg_vol, numdof, dendof);
02699
02700
02701 /*----- write noise model parameters -----*/
02702 for (ip = 0; ip < r; ip++)
02703 {
02704 if (tncoef_filename[ip] != NULL)
02705 write_afni_data (input_filename, nxyz, tncoef_filename[ip],
02706 ncoef_vol[ip], tncoef_vol[ip], dendof, 0);
02707
02708 if (fncoef_filename[ip] != NULL)
02709 write_afni_data (input_filename, nxyz, fncoef_filename[ip],
02710 ncoef_vol[ip], freg_vol, numdof, dendof);
02711 }
02712
02713
02714 /*----- write signal model parameters -----*/
02715 for (ip = 0; ip < p; ip++)
02716 {
02717 if (tscoef_filename[ip] != NULL)
02718 write_afni_data (input_filename, nxyz, tscoef_filename[ip],
02719 scoef_vol[ip], tscoef_vol[ip], dendof, 0);
02720
02721 if (fscoef_filename[ip] != NULL)
02722 write_afni_data (input_filename, nxyz, fscoef_filename[ip],
02723 scoef_vol[ip], freg_vol, numdof, dendof);
02724 }
02725
02726
02727 /*----- write the fitted 3d+time signal model -----*/
02728 if (sfit_filename != NULL)
02729 {
02730 write_3dtime (input_filename, ts_length, sfit_vol, sfit_filename);
02731 }
02732
02733
02734 /*----- write the fitted 3d+time signal+noise model -----*/
02735 if (snfit_filename != NULL)
02736 {
02737 write_3dtime (input_filename, ts_length, snfit_vol, snfit_filename);
02738 }
02739
02740 }
|
|
|
Definition at line 1505 of file 3dNLfim.c. References proc_shmid. Referenced by proc_finalize_shm_volumes().
01506 {
01507 if( proc_shmid > 0 )
01508 shmctl( proc_shmid , IPC_RMID , NULL ) ;
01509 }
|
|
|
Definition at line 1515 of file 3dNLfim.c. References atexit(), pclose, popen, proc_atexit(), proc_shm_ar, proc_shm_arnum, proc_shm_arsiz, proc_shmid, proc_shmptr, proc_shmsize, proc_sigfunc(), shm_attach(), shm_create(), SIGHUP, and UNIQ_idcode_fill().
01516 {
01517 char kstr[32] ; int ii ;
01518
01519 if( proc_shm_arnum == 0 ) return ; /* should never happen */
01520
01521 proc_shmsize = 0 ; /* add up sizes of */
01522 for( ii=0 ; ii < proc_shm_arnum ; ii++ ) /* all arrays for */
01523 proc_shmsize += proc_shm_arsiz[ii] ; /* shared memory */
01524
01525 proc_shmsize *= sizeof(float) ; /* convert to byte count */
01526
01527 /* create shared memory segment */
01528
01529 UNIQ_idcode_fill( kstr ) ; /* unique string "key" */
01530 proc_shmid = shm_create( kstr , proc_shmsize ) ; /* thd_iochan.c */
01531 if( proc_shmid < 0 ){
01532 fprintf(stderr,"\n** Can't create shared memory of size %d!\n"
01533 "** Try re-running without -jobs option!\n" ,
01534 proc_shmsize ) ;
01535
01536 /** if failed, print out some advice on how to tune SHMMAX **/
01537
01538 { char *cmd=NULL ;
01539 #if defined(LINUX)
01540 cmd = "cat /proc/sys/kernel/shmmax" ;
01541 #elif defined(SOLARIS)
01542 cmd = "/usr/sbin/sysdef | grep SHMMAX" ;
01543 #elif defined(DARWIN)
01544 cmd = "sysctl -n kern.sysv.shmmax" ;
01545 #endif
01546 if( cmd != NULL ){
01547 FILE *fp = popen( cmd , "r" ) ;
01548 if( fp != NULL ){
01549 unsigned int smax=0 ;
01550 fscanf(fp,"%u",&smax) ; pclose(fp) ;
01551 if( smax > 0 )
01552 fprintf(stderr ,
01553 "\n"
01554 "** POSSIBLY USEFUL ADVICE:\n"
01555 "** Current max shared memory size = %u bytes.\n"
01556 "** For information on how to change this, see\n"
01557 "** http://afni.nimh.nih.gov/afni/parallize.htm\n"
01558 "** and also contact your system administrator.\n"
01559 , smax ) ;
01560 }
01561 }
01562 }
01563 exit(1) ;
01564 }
01565
01566 /* set a signal handler to catch most fatal errors and
01567 delete the shared memory segment if program crashes */
01568
01569 signal(SIGPIPE,proc_sigfunc) ; signal(SIGSEGV,proc_sigfunc) ;
01570 signal(SIGINT ,proc_sigfunc) ; signal(SIGFPE ,proc_sigfunc) ;
01571 signal(SIGBUS ,proc_sigfunc) ; signal(SIGHUP ,proc_sigfunc) ;
01572 signal(SIGTERM,proc_sigfunc) ; signal(SIGILL ,proc_sigfunc) ;
01573 signal(SIGKILL,proc_sigfunc) ; signal(SIGPIPE,proc_sigfunc) ;
01574 atexit(proc_atexit) ; /* or when the program exits */
01575
01576 fprintf(stderr , "++ Shared memory: %d bytes at id=%d\n" ,
01577 proc_shmsize , proc_shmid ) ;
01578
01579 /* get pointer to shared memory segment we just created */
01580
01581 proc_shmptr = shm_attach( proc_shmid ) ; /* thd_iochan.c */
01582 if( proc_shmptr == NULL ){
01583 fprintf(stderr,"\n** Can't attach to shared memory!?\n"
01584 "** This is bizarre.\n" ) ;
01585 shmctl( proc_shmid , IPC_RMID , NULL ) ;
01586 exit(1) ;
01587 }
01588
01589 /* clear all shared memory */
01590
01591 memset( proc_shmptr , 0 , proc_shmsize ) ;
01592
01593 /* fix the local pointers to arrays in shared memory */
01594
01595 *proc_shm_ar[0] = (float *) proc_shmptr ;
01596 for( ii=1 ; ii < proc_shm_arnum ; ii++ )
01597 *proc_shm_ar[ii] = *proc_shm_ar[ii-1] + proc_shm_arsiz[ii] ;
01598 }
|
|
|
if failed, print out some advice on how to tune SHMMAX * Definition at line 1604 of file 3dNLfim.c. References free, proc_shm_ar, proc_shm_arnum, and proc_shmid.
01605 {
01606 int ii ;
01607
01608 if( ptr == NULL ) return ;
01609 if( proc_shmid == 0 ){ free(ptr); return; } /* no shm */
01610 for( ii=0 ; ii < proc_shm_arnum ; ii++ )
01611 if( ((float *)ptr) == *proc_shm_ar[ii] ) return;
01612 free(ptr); return;
01613 }
|
|
|
Definition at line 1480 of file 3dNLfim.c. References proc_ind, proc_shmid, and SIGHUP. Referenced by proc_finalize_shm_volumes().
01481 {
01482 char * sname ; int ii ;
01483 static volatile int fff=0 ;
01484 if( fff ) _exit(1); else fff=1 ;
01485 switch(sig){
01486 default: sname = "unknown" ; break ;
01487 case SIGHUP: sname = "SIGHUP" ; break ;
01488 case SIGTERM: sname = "SIGTERM" ; break ;
01489 case SIGILL: sname = "SIGILL" ; break ;
01490 case SIGKILL: sname = "SIGKILL" ; break ;
01491 case SIGPIPE: sname = "SIGPIPE" ; break ;
01492 case SIGSEGV: sname = "SIGSEGV" ; break ;
01493 case SIGBUS: sname = "SIGBUS" ; break ;
01494 case SIGINT: sname = "SIGINT" ; break ;
01495 case SIGFPE: sname = "SIGFPE" ; break ;
01496 }
01497 if( proc_shmid > 0 ){
01498 shmctl( proc_shmid , IPC_RMID , NULL ) ; proc_shmid = 0 ;
01499 }
01500 fprintf(stderr,"Fatal Signal %d (%s) received in job #%d\n",
01501 sig,sname,proc_ind) ;
01502 exit(1) ;
01503 }
|
|
||||||||||||||||||||||||
|
Definition at line 1892 of file 3dNLfim.c. References MRI_FLOAT_PTR, mri_free(), NLfit_error(), and THD_extract_series(). Referenced by main().
01900 {
01901 MRI_IMAGE * im; /* intermediate float data */
01902 float * ar; /* pointer to float data */
01903 int it; /* time index */
01904
01905
01906 /*----- Extract time series from 3d+time data set into MRI_IMAGE -----*/
01907 im = THD_extract_series (iv, dset_time, 0);
01908
01909
01910 /*----- Verify extraction -----*/
01911 if (im == NULL) NLfit_error ("Unable to extract data from 3d+time dataset");
01912
01913
01914 /*----- Now extract time series from MRI_IMAGE -----*/
01915 ar = MRI_FLOAT_PTR (im);
01916 for (it = 0; it < ts_length; it++)
01917 {
01918 ts_array[it] = ar[it+ignore];
01919 }
01920
01921
01922 /*----- Release memory -----*/
01923 mri_free (im); im = NULL;
01924
01925 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1953 of file 3dNLfim.c. References free, malloc, MTEST, p, pmax, r, and vfp. Referenced by main().
01989 {
01990 int ip; /* parameter index */
01991 int it; /* time index */
01992 float * s_array; /* fitted signal model time series */
01993 float * n_array; /* fitted noise model time series */
01994
01995
01996 /*----- save regression results into volume data -----*/
01997 if (freg_vol != NULL) freg_vol[iv] = freg;
01998 if (rmsreg_vol != NULL) rmsreg_vol[iv] = rmsreg;
01999 if (rsqr_vol != NULL) rsqr_vol[iv] = rsqr;
02000
02001 /*----- save signed maximum and epoch of signed maximum of signal -----*/
02002 if (smax_vol != NULL) smax_vol[iv] = smax;
02003 if (tmax_vol != NULL) tmax_vol[iv] = tmax;
02004
02005 /*----- save percentage change and area beneath the signal -----*/
02006 if (pmax_vol != NULL) pmax_vol[iv] = pmax;
02007 if (area_vol != NULL) area_vol[iv] = area;
02008 if (parea_vol != NULL) parea_vol[iv] = parea;
02009
02010 /*----- save noise parameter estimates -----*/
02011 for (ip = 0; ip < r; ip++)
02012 {
02013 if (ncoef_vol[ip] != NULL) ncoef_vol[ip][iv] = par_full[ip];
02014 if (tncoef_vol[ip] != NULL) tncoef_vol[ip][iv] = tpar_full[ip];
02015 }
02016
02017 /*----- save signal parameter estimates -----*/
02018 for (ip = 0; ip < p; ip++)
02019 {
02020 if (scoef_vol[ip] != NULL) scoef_vol[ip][iv] = par_full[ip+r];
02021 if (tscoef_vol[ip] != NULL) tscoef_vol[ip][iv] = tpar_full[ip+r];
02022 }
02023
02024
02025 /*----- save fitted signal model time series -----*/
02026 if (sfit_vol != NULL)
02027 {
02028 if (novar)
02029 {
02030 for (it = 0; it < ts_length; it++)
02031 sfit_vol[it][iv] = 0.0;
02032 }
02033 else
02034 {
02035 s_array = (float *) malloc (sizeof(float) * (ts_length));
02036 MTEST (s_array);
02037
02038 smodel (par_full + r, ts_length, x_array, s_array);
02039
02040 for (it = 0; it < ts_length; it++)
02041 sfit_vol[it][iv] = s_array[it];
02042
02043 free (s_array); s_array = NULL;
02044 }
02045 }
02046
02047
02048 /*----- save fitted signal+noise model time series -----*/
02049 if (snfit_vol != NULL)
02050 {
02051 n_array = (float *) malloc (sizeof(float) * (ts_length));
02052 MTEST (n_array);
02053 nmodel (par_full, ts_length, x_array, n_array);
02054
02055 for (it = 0; it < ts_length; it++)
02056 {
02057 snfit_vol[it][iv] = n_array[it];
02058 }
02059
02060 free (n_array); n_array = NULL;
02061
02062
02063 if (! novar)
02064 {
02065 s_array = (float *) malloc (sizeof(float) * (ts_length));
02066 MTEST (s_array);
02067 smodel (par_full + r, ts_length, x_array, s_array);
02068
02069 for (it = 0; it < ts_length; it++)
02070 {
02071 snfit_vol[it][iv] += s_array[it];
02072 }
02073
02074 free (s_array); s_array = NULL;
02075 }
02076 }
02077
02078 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 2749 of file 3dNLfim.c.
02798 {
02799 int ip; /* parameter index */
02800 int it; /* time index */
02801
02802
02803 /*----- deallocate space for model names and parameters labels -----*/
02804 if (*nname != NULL)
02805 { free (*nname); *nname = NULL; }
02806 if (*sname != NULL)
02807 { free (*sname); *sname = NULL; }
02808 for (ip = 0; ip < MAX_PARAMETERS; ip++)
02809 {
02810 if ((*npname)[ip] != NULL)
02811 { free ((*npname)[ip]); (*npname)[ip] = NULL; }
02812 if ((*spname)[ip] != NULL)
02813 { free ((*spname)[ip]); (*spname)[ip] = NULL; }
02814 }
02815
02816 if (*npname != NULL)
02817 { free (*npname); *npname = NULL; }
02818 if (*spname != NULL)
02819 { free (*spname); *spname = NULL; }
02820
02821
02822 /*----- deallocate memory for parameter constraints -----*/
02823 if (*min_nconstr != NULL) { free (*min_nconstr); *min_nconstr = NULL; }
02824 if (*max_nconstr != NULL) { free (*max_nconstr); *max_nconstr = NULL; }
02825 if (*min_sconstr != NULL) { free (*min_sconstr); *min_sconstr = NULL; }
02826 if (*max_sconstr != NULL) { free (*max_sconstr); *max_sconstr = NULL; }
02827
02828
02829 /*----- deallocate memory space for filenames -----*/
02830 if (*input_filename != NULL)
02831 { free (*input_filename); *input_filename = NULL; }
02832 if (*freg_filename != NULL)
02833 { free (*freg_filename); *freg_filename = NULL; }
02834 if (*frsqr_filename != NULL)
02835 { free (*frsqr_filename); *frsqr_filename = NULL; }
02836 if (*fsmax_filename != NULL)
02837 { free (*fsmax_filename); *fsmax_filename = NULL; }
02838 if (*ftmax_filename != NULL)
02839 { free (*ftmax_filename); *ftmax_filename = NULL; }
02840 if (*fpmax_filename != NULL)
02841 { free (*fpmax_filename); *fpmax_filename = NULL; }
02842 if (*farea_filename != NULL)
02843 { free (*farea_filename); *farea_filename = NULL; }
02844 if (*fparea_filename != NULL)
02845 { free (*fparea_filename); *fparea_filename = NULL; }
02846
02847 for (ip = 0; ip < MAX_PARAMETERS; ip++)
02848 {
02849 if ((*fncoef_filename)[ip] != NULL)
02850 { free ((*fncoef_filename)[ip]); (*fncoef_filename)[ip] = NULL; }
02851 if ((*fscoef_filename)[ip] != NULL)
02852 { free ((*fscoef_filename)[ip]); (*fscoef_filename)[ip] = NULL; }
02853 if ((*tncoef_filename)[ip] != NULL)
02854 { free ((*tncoef_filename)[ip]); (*tncoef_filename)[ip] = NULL; }
02855 if ((*tscoef_filename)[ip] != NULL)
02856 { free ((*tscoef_filename)[ip]); (*tscoef_filename)[ip] = NULL; }
02857 }
02858
02859 if (*fncoef_filename != NULL)
02860 { free (*fncoef_filename); *fncoef_filename = NULL; }
02861 if (*fscoef_filename != NULL)
02862 { free (*fscoef_filename); *fscoef_filename = NULL; }
02863 if (*tncoef_filename != NULL)
02864 { free (*tncoef_filename); *tncoef_filename = NULL; }
02865 if (*tscoef_filename != NULL)
02866 { free (*tscoef_filename); *tscoef_filename = NULL; }
02867
02868 if (*sfit_filename != NULL)
02869 { free (*sfit_filename); *sfit_filename = NULL; }
02870 if (*snfit_filename != NULL)
02871 { free (*snfit_filename); *snfit_filename = NULL; }
02872
02873
02874 /*----- deallocate space for input time series -----*/
02875 if (*ts_array != NULL) { free (*ts_array); *ts_array = NULL; }
02876
02877
02878 /*----- deallocate space for independent variable matrix -----*/
02879 for (it = 0; it < ts_length; it++)
02880 if ((*x_array)[it] != NULL)
02881 { free ((*x_array)[it]); (*x_array)[it] = NULL; }
02882 if (*x_array != NULL) { free (*x_array); *x_array = NULL; }
02883
02884
02885 /*----- deallocate space for parameters -----*/
02886 if (*par_rdcd != NULL) { free (*par_rdcd); *par_rdcd = NULL; }
02887 if (*par_full != NULL) { free (*par_full); *par_full = NULL; }
02888 if (*tpar_full != NULL) { free (*tpar_full); *tpar_full = NULL; }
02889
02890
02891 /*----- deallocate space for volume data -----*/
02892 if (*rmsreg_vol != NULL) { free (*rmsreg_vol); *rmsreg_vol = NULL; }
02893 if (*freg_vol != NULL) { free (*freg_vol); *freg_vol = NULL; }
02894 if (*rsqr_vol != NULL) { free (*rsqr_vol); *rsqr_vol = NULL; }
02895 if (*smax_vol != NULL) { free (*smax_vol); *smax_vol = NULL; }
02896 if (*tmax_vol != NULL) { free (*tmax_vol); *tmax_vol = NULL; }
02897 if (*pmax_vol != NULL) { free (*pmax_vol); *pmax_vol = NULL; }
02898 if (*area_vol != NULL) { free (*area_vol); *area_vol = NULL; }
02899 if (*parea_vol != NULL) { free (*parea_vol); *parea_vol = NULL; }
02900
02901 if (*ncoef_vol != NULL)
02902 {
02903 for (ip = 0; ip < r; ip++)
02904 if ((*ncoef_vol)[ip] != NULL)
02905 { free ((*ncoef_vol)[ip]); (*ncoef_vol)[ip] = NULL; }
02906 free (*ncoef_vol); *ncoef_vol = NULL;
02907 }
02908
02909 if (*tncoef_vol != NULL)
02910 {
02911 for (ip = 0; ip < r; ip++)
02912 if ((*tncoef_vol)[ip] != NULL)
02913 { free ((*tncoef_vol)[ip]); (*tncoef_vol)[ip] = NULL; }
02914 free (*tncoef_vol); *tncoef_vol = NULL;
02915 }
02916
02917 if (*scoef_vol != NULL)
02918 {
02919 for (ip = 0; ip < p; ip++)
02920 if ((*scoef_vol)[ip] != NULL)
02921 { free ((*scoef_vol)[ip]); (*scoef_vol)[ip] = NULL; }
02922 free (*scoef_vol); *scoef_vol = NULL;
02923 }
02924
02925 if (*tscoef_vol != NULL)
02926 {
02927 for (ip = 0; ip < p; ip++)
02928 if ((*tscoef_vol)[ip] != NULL)
02929 { free ((*tscoef_vol)[ip]); (*tscoef_vol)[ip] = NULL; }
02930 free (*tscoef_vol); *tscoef_vol = NULL;
02931 }
02932
02933 if (*sfit_vol != NULL)
02934 {
02935 for (it = 0; it < ts_length; it++)
02936 if ((*sfit_vol)[it] != NULL)
02937 { free ((*sfit_vol)[it]); (*sfit_vol)[it] = NULL; }
02938 free (*sfit_vol); *sfit_vol = NULL;
02939 }
02940
02941 if (*snfit_vol != NULL)
02942 {
02943 for (it = 0; it < ts_length; it++)
02944 if ((*snfit_vol)[it] != NULL)
02945 { free ((*snfit_vol)[it]); (*snfit_vol)[it] = NULL; }
02946 free (*snfit_vol); *snfit_vol = NULL;
02947 }
02948
02949 }
|
|
||||||||||||||||||||
|
Definition at line 2464 of file 3dNLfim.c. References ADN_brick_fac, ADN_datum_all, ADN_label1, ADN_malloc_type, ADN_none, ADN_ntt, ADN_nvals, ADN_prefix, ADN_self_name, commandline, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, THD_datablock::diskptr, DSET_BRICK, DSET_BRIKNAME, EDIT_coerce_autoscale_new(), EDIT_dset_items(), EDIT_empty_copy(), free, THD_diskptr::header_name, malloc, mri_fix_data_pointer(), MTEST, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, THD_delete_3dim_dataset(), THD_is_file(), THD_load_statistics(), THD_open_one_dataset(), THD_write_3dim_dataset(), tross_Append_History(), and tross_Copy_History(). Referenced by output_results().
02471 {
02472 const float EPSILON = 1.0e-10;
02473
02474 THD_3dim_dataset * dset = NULL; /* input afni data set pointer */
02475 THD_3dim_dataset * new_dset = NULL; /* output afni data set pointer */
02476 int ib; /* sub-brick index */
02477 int ierror; /* number of errors in editing data */
02478 int nxyz; /* total number of voxels */
02479 float factor; /* factor is new scale factor for sub-brick #ib */
02480 short ** bar = NULL; /* bar[ib] points to data for sub-brick #ib */
02481 float * fbuf; /* float buffer */
02482 float * volume; /* pointer to volume of data */
02483 char label[80]; /* label for output file history */
02484
02485
02486 /*----- Initialize local variables -----*/
02487 dset = THD_open_one_dataset (input_filename);
02488 nxyz = dset->daxes->nxx * dset->daxes->nyy * dset->daxes->nzz;
02489
02490
02491 /*----- allocate memory -----*/
02492 bar = (short **) malloc (sizeof(short *) * ts_length); MTEST (bar);
02493 fbuf = (float *) malloc (sizeof(float) * ts_length); MTEST (fbuf);
02494 for (ib = 0; ib < ts_length; ib++) fbuf[ib] = 0.0;
02495
02496
02497 /*-- make an empty copy of the prototype dataset, for eventual output --*/
02498 new_dset = EDIT_empty_copy (dset);
02499
02500
02501 /*----- Record history of dataset -----*/
02502 tross_Copy_History( dset , new_dset ) ;
02503 if( commandline != NULL )
02504 tross_Append_History( new_dset , commandline ) ;
02505 sprintf (label, "Output prefix: %s", output_filename);
02506 tross_Append_History ( new_dset, label);
02507
02508
02509 /*----- delete prototype dataset -----*/
02510 THD_delete_3dim_dataset (dset, False); dset = NULL ;
02511
02512
02513 ierror = EDIT_dset_items (new_dset,
02514 ADN_prefix, output_filename,
02515 ADN_label1, output_filename,
02516 ADN_self_name, output_filename,
02517 ADN_malloc_type, DATABLOCK_MEM_MALLOC,
02518 ADN_datum_all, MRI_short,
02519 ADN_nvals, ts_length,
02520 ADN_ntt, ts_length,
02521 ADN_none);
02522
02523 if( ierror > 0 ){
02524 fprintf(stderr,
02525 "*** %d errors in attempting to create output dataset!\n", ierror ) ;
02526 exit(1) ;
02527 }
02528
02529 if( THD_is_file(new_dset->dblk->diskptr->header_name) ){
02530 fprintf(stderr,
02531 "*** Output dataset file %s already exists--cannot continue!\a\n",
02532 new_dset->dblk->diskptr->header_name ) ;
02533 exit(1) ;
02534 }
02535
02536
02537 /*----- attach bricks to new data set -----*/
02538 for (ib = 0; ib < ts_length; ib++)
02539 {
02540
02541 /*----- Set pointer to appropriate volume -----*/
02542 volume = vol_array[ib];
02543
02544 /*----- Allocate memory for output sub-brick -----*/
02545 bar[ib] = (short *) malloc (sizeof(short) * nxyz);
02546 MTEST (bar[ib]);
02547
02548 /*----- Convert data type to short for this sub-brick -----*/
02549 factor = EDIT_coerce_autoscale_new (nxyz, MRI_float, volume,
02550 MRI_short, bar[ib]);
02551 if (factor < EPSILON) factor = 0.0;
02552 else factor = 1.0 / factor;
02553 fbuf[ib] = factor;
02554
02555 /*----- attach bar[ib] to be sub-brick #ib -----*/
02556 mri_fix_data_pointer (bar[ib], DSET_BRICK(new_dset,ib));
02557 }
02558
02559
02560 /*----- write afni data set -----*/
02561
02562 (void) EDIT_dset_items( new_dset , ADN_brick_fac , fbuf , ADN_none ) ;
02563
02564 THD_load_statistics (new_dset);
02565 THD_write_3dim_dataset (NULL, NULL, new_dset, True);
02566 fprintf (stderr,"++ Wrote 3D+time dataset %s\n",DSET_BRIKNAME(new_dset)) ;
02567
02568
02569 /*----- deallocate memory -----*/
02570 THD_delete_3dim_dataset (new_dset, False); new_dset = NULL ;
02571 free (fbuf); fbuf = NULL;
02572
02573 }
|
|
||||||||||||||||||||||||||||||||
|
Definition at line 2123 of file 3dNLfim.c. References ADN_brick_fac, ADN_datum_array, ADN_func_type, ADN_label1, ADN_malloc_type, ADN_none, ADN_ntt, ADN_nvals, ADN_prefix, ADN_self_name, ADN_stat_aux, ADN_type, commandline, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::dblk, THD_datablock::diskptr, DSET_BRICK, DSET_BRICK_TYPE, DSET_BRIKNAME, DSET_PRINCIPAL_VALUE, EDIT_coerce_autoscale_new(), EDIT_dset_items(), EDIT_empty_copy(), FUNC_FT_SCALE_SHORT, FUNC_TT_SCALE_SHORT, GEN_FUNC_TYPE, HEAD_FUNC_TYPE, THD_diskptr::header_name, ISHEAD, ISVALID_3DIM_DATASET, malloc, MAX_STAT_AUX, mri_datum_size(), mri_fix_data_pointer(), NLfit_error(), THD_delete_3dim_dataset(), THD_is_file(), THD_load_statistics(), THD_open_one_dataset(), THD_write_3dim_dataset(), top, tross_Append_History(), tross_Copy_History(), and tross_multi_Append_History().
02125 {
02126 int ii; /* voxel index */
02127 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */
02128 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */
02129 int iv; /* sub-brick index */
02130 int ierror; /* number of errors in editing data */
02131 int ibuf[32]; /* integer buffer */
02132 float fbuf[MAX_STAT_AUX]; /* float buffer */
02133 float fimfac; /* scale factor for short data */
02134 int output_datum; /* data type for output data */
02135 short * tsp; /* 2nd sub-brick data pointer */
02136 void * vdif; /* 1st sub-brick data pointer */
02137 int func_type; /* afni data set type */
02138 float top, func_scale_short; /* parameters for scaling data */
02139 char label[80]; /* label for output file history */
02140
02141
02142 /*----- read input dataset -----*/
02143 dset = THD_open_one_dataset (input_filename) ;
02144 if( ! ISVALID_3DIM_DATASET(dset) ){
02145 fprintf(stderr,"*** Unable to open dataset file %s\n",
02146 input_filename);
02147 exit(1) ;
02148 }
02149
02150 /*-- make an empty copy of this dataset, for eventual output --*/
02151 new_dset = EDIT_empty_copy( dset ) ;
02152
02153
02154 /*----- Record history of dataset -----*/
02155 tross_Copy_History( dset , new_dset ) ;
02156 sprintf (label, "Output prefix: %s", filename);
02157 if( commandline != NULL )
02158 tross_multi_Append_History( new_dset , commandline,label,NULL ) ;
02159 else
02160 tross_Append_History ( new_dset, label);
02161
02162
02163 iv = DSET_PRINCIPAL_VALUE(dset) ;
02164 output_datum = DSET_BRICK_TYPE(dset,iv) ;
02165 if( output_datum == MRI_byte ) output_datum = MRI_short ;
02166
02167
02168 ibuf[0] = output_datum ; ibuf[1] = MRI_short ;
02169
02170 if (dendof == 0) func_type = FUNC_TT_TYPE;
02171 else func_type = FUNC_FT_TYPE;
02172
02173 ierror = EDIT_dset_items( new_dset ,
02174 ADN_prefix , filename ,
02175 ADN_label1 , filename ,
02176 ADN_self_name , filename ,
02177 ADN_type , ISHEAD(dset) ? HEAD_FUNC_TYPE :
02178 GEN_FUNC_TYPE ,
02179 ADN_func_type , func_type ,
02180 ADN_nvals , FUNC_nvals[func_type] ,
02181 ADN_datum_array , ibuf ,
02182 ADN_ntt , 0 ,
02183 ADN_malloc_type, DATABLOCK_MEM_MALLOC ,
02184 ADN_none ) ;
02185
02186 if( ierror > 0 ){
02187 fprintf(stderr,
02188 "*** %d errors in attempting to create output dataset!\n", ierror ) ;
02189 exit(1) ;
02190 }
02191
02192 if( THD_is_file(new_dset->dblk->diskptr->header_name) ){
02193 fprintf(stderr,
02194 "*** Output dataset file %s already exists--cannot continue!\a\n",
02195 new_dset->dblk->diskptr->header_name ) ;
02196 exit(1) ;
02197 }
02198
02199 /*----- deleting exemplar dataset -----*/
02200 THD_delete_3dim_dataset( dset , False ) ; dset = NULL ;
02201
02202
02203 /*----- allocate memory for output data -----*/
02204 vdif = (void *) malloc( mri_datum_size(output_datum) * nxyz );
02205 if (vdif == NULL) NLfit_error ("Unable to allocate memory for vdif");
02206 tsp = (short *) malloc( sizeof(short) * nxyz );
02207 if (tsp == NULL) NLfit_error ("Unable to allocate memory for tsp");
02208
02209 /*----- attach bricks to new data set -----*/
02210 mri_fix_data_pointer (vdif, DSET_BRICK(new_dset,0));
02211 mri_fix_data_pointer (tsp, DSET_BRICK(new_dset,1));
02212
02213
02214 /*----- convert data type to output specification -----*/
02215 fimfac = EDIT_coerce_autoscale_new (nxyz,
02216 MRI_float, ffim,
02217 output_datum, vdif);
02218 if (fimfac != 0.0) fimfac = 1.0 / fimfac;
02219
02220 #define TOP_SS 32700
02221
02222 if (dendof == 0) /* t-statistic */
02223 {
02224 top = TOP_SS/FUNC_TT_SCALE_SHORT;
02225 func_scale_short = FUNC_TT_SCALE_SHORT;
02226 }
02227 else /* F-statistic */
02228 {
02229 top = TOP_SS/FUNC_FT_SCALE_SHORT;
02230 func_scale_short = FUNC_FT_SCALE_SHORT;
02231 }
02232
02233 for (ii = 0; ii < nxyz; ii++)
02234 {
02235 if (ftr[ii] > top)
02236 tsp[ii] = TOP_SS;
02237 else if (ftr[ii] < -top)
02238 tsp[ii] = -TOP_SS;
02239 else if (ftr[ii] >= 0.0)
02240 tsp[ii] = (short) (func_scale_short * ftr[ii] + 0.5);
02241 else
02242 tsp[ii] = (short) (func_scale_short * ftr[ii] - 0.5);
02243
02244 }
02245
02246
02247 /*----- write afni data set -----*/
02248 printf("++ Writing combined dataset into %s\n",DSET_BRIKNAME(new_dset)) ;
02249
02250 fbuf[0] = numdof;
02251 fbuf[1] = dendof;
02252 for( ii=2 ; ii < MAX_STAT_AUX ; ii++ ) fbuf[ii] = 0.0 ;
02253 (void) EDIT_dset_items( new_dset , ADN_stat_aux , fbuf , ADN_none ) ;
02254
02255 fbuf[0] = (output_datum == MRI_short && fimfac != 1.0 ) ? fimfac : 0.0 ;
02256 fbuf[1] = 1.0 / func_scale_short ;
02257 (void) EDIT_dset_items( new_dset , ADN_brick_fac , fbuf , ADN_none ) ;
02258
02259 THD_load_statistics( new_dset ) ;
02260 THD_write_3dim_dataset( NULL,NULL , new_dset , True ) ;
02261
02262 /*----- deallocate memory -----*/
02263 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ;
02264
02265 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 2274 of file 3dNLfim.c. References ADN_directory_name, ADN_func_type, ADN_malloc_type, ADN_none, ADN_ntt, ADN_nvals, ADN_prefix, ADN_type, commandline, DATABLOCK_MEM_MALLOC, DSET_BRIKNAME, DSET_HEADNAME, EDIT_BRICK_FACTOR, EDIT_BRICK_LABEL, EDIT_BRICK_TO_FIFT, EDIT_BRICK_TO_FITT, EDIT_coerce_autoscale_new(), EDIT_dset_items(), EDIT_empty_copy(), EDIT_substitute_brick(), FUNC_BUCK_TYPE, FUNC_FIM_TYPE, HEAD_FUNC_TYPE, malloc, MTEST, p, q, THD_delete_3dim_dataset(), THD_is_file(), THD_load_statistics(), THD_open_one_dataset(), THD_write_3dim_dataset(), tross_Append_History(), and tross_Copy_History().
02300 {
02301 const float EPSILON = 1.0e-10;
02302
02303 THD_3dim_dataset * old_dset = NULL; /* prototype dataset */
02304 THD_3dim_dataset * new_dset = NULL; /* output bucket dataset */
02305 char * output_prefix; /* prefix name for bucket dataset */
02306 char * output_session; /* directory for bucket dataset */
02307 int nbricks, ib; /* number of sub-bricks in bucket dataset */
02308 short ** bar = NULL; /* bar[ib] points to data for sub-brick #ib */
02309 float factor; /* factor is new scale factor for sub-brick #ib */
02310 int brick_type; /* indicates statistical type of sub-brick */
02311 int brick_coef; /* regression coefficient index for sub-brick */
02312 char * brick_label; /* character string label for sub-brick */
02313 int ierror; /* number of errors in editing data */
02314 float * volume; /* volume of floating point data */
02315 int dimension; /* dimension of full model = p + q */
02316 char label[80]; /* label for output file history */
02317
02318
02319 /*----- initialize local variables -----*/
02320 nbricks = option_data->numbricks;
02321 output_prefix = option_data->bucket_filename;
02322 output_session = (char *) malloc (sizeof(char) * MAX_NAME_LENGTH);
02323 strcpy (output_session, "./");
02324 dimension = p + q;
02325
02326
02327 /*----- allocate memory -----*/
02328 bar = (short **) malloc (sizeof(short *) * nbricks);
02329 MTEST (bar);
02330
02331
02332 /*----- read first dataset -----*/
02333 old_dset = THD_open_one_dataset (input_filename);
02334
02335
02336 /*-- make an empty copy of this dataset, for eventual output --*/
02337 new_dset = EDIT_empty_copy (old_dset);
02338
02339
02340 /*----- Record history of dataset -----*/
02341 tross_Copy_History( old_dset , new_dset ) ;
02342 if( commandline != NULL )
02343 tross_Append_History( new_dset , commandline ) ;
02344 sprintf (label, "Output prefix: %s", output_prefix);
02345 tross_Append_History ( new_dset, label);
02346
02347
02348 /*----- Modify some structural properties. Note that the nbricks
02349 just make empty sub-bricks, without any data attached. -----*/
02350 ierror = EDIT_dset_items (new_dset,
02351 ADN_prefix, output_prefix,
02352 ADN_directory_name, output_session,
02353 ADN_type, HEAD_FUNC_TYPE,
02354 ADN_func_type, FUNC_BUCK_TYPE,
02355 ADN_ntt, 0, /* no time */
02356 ADN_nvals, nbricks,
02357 ADN_malloc_type, DATABLOCK_MEM_MALLOC ,
02358 ADN_none ) ;
02359
02360 if( ierror > 0 )
02361 {
02362 fprintf(stderr,
02363 "*** %d errors in attempting to create output dataset!\n",
02364 ierror);
02365 exit(1);
02366 }
02367
02368 if (THD_is_file(DSET_HEADNAME(new_dset)))
02369 {
02370 fprintf(stderr,
02371 "*** Output dataset file %s already exists--cannot continue!\n",
02372 DSET_HEADNAME(new_dset));
02373 exit(1);
02374 }
02375
02376
02377 /*----- deleting exemplar dataset -----*/
02378 THD_delete_3dim_dataset( old_dset , False ); old_dset = NULL ;
02379
02380
02381 /*----- loop over new sub-brick index, attach data array with
02382 EDIT_substitute_brick then put some strings into the labels and
02383 keywords, and modify the sub-brick scaling factor -----*/
02384 for (ib = 0; ib < nbricks; ib++)
02385 {
02386 /*----- get information about this sub-brick -----*/
02387 brick_type = option_data->brick_type[ib];
02388 brick_coef = option_data->brick_coef[ib];
02389 brick_label = option_data->brick_label[ib];
02390
02391 if (brick_type == FUNC_FIM_TYPE)
02392 {
02393 if (brick_coef < q)
02394 volume = ncoef_vol[brick_coef];
02395 else if (brick_coef < p+q)
02396 volume = scoef_vol[brick_coef-q];
02397 else if (brick_coef == p+q)
02398 volume = tmax_vol;
02399 else if (brick_coef == p+q+1)
02400 volume = smax_vol;
02401 else if (brick_coef == p+q+2)
02402 volume = pmax_vol;
02403 else if (brick_coef == p+q+3)
02404 volume = area_vol;
02405 else if (brick_coef == p+q+4)
02406 volume = parea_vol;
02407 else if (brick_coef == p+q+5)
02408 volume = rmsreg_vol;
02409 else if (brick_coef == p+q+6)
02410 volume = rsqr_vol;
02411 }
02412 else if (brick_type == FUNC_TT_TYPE)
02413 {
02414 if (brick_coef < q)
02415 volume = tncoef_vol[brick_coef];
02416 else if (brick_coef < p+q)
02417 volume = tscoef_vol[brick_coef-q];
02418 EDIT_BRICK_TO_FITT (new_dset, ib, dendof);
02419 }
02420 else if (brick_type == FUNC_FT_TYPE)
02421 {
02422 volume = freg_vol;
02423 EDIT_BRICK_TO_FIFT (new_dset, ib, numdof, dendof);
02424 }
02425
02426 /*----- allocate memory for output sub-brick -----*/
02427 bar[ib] = (short *) malloc (sizeof(short) * nxyz);
02428 MTEST (bar[ib]);
02429 factor = EDIT_coerce_autoscale_new (nxyz, MRI_float, volume,
02430 MRI_short, bar[ib]);
02431
02432 if (factor < EPSILON) factor = 0.0;
02433 else factor = 1.0 / factor;
02434
02435 /*----- edit the sub-brick -----*/
02436 EDIT_BRICK_LABEL (new_dset, ib, brick_label);
02437 EDIT_BRICK_FACTOR (new_dset, ib, factor);
02438
02439
02440 /*----- attach bar[ib] to be sub-brick #ib -----*/
02441 EDIT_substitute_brick (new_dset, ib, MRI_short, bar[ib]);
02442
02443 }
02444
02445
02446 /*----- write bucket data set -----*/
02447 THD_load_statistics (new_dset);
02448 THD_write_3dim_dataset( NULL,NULL , new_dset , True ) ;
02449 fprintf(stderr,"++ Wrote bucket dataset: %s\n",DSET_BRIKNAME(new_dset)) ;
02450
02451 /*----- deallocate memory -----*/
02452 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ;
02453
02454 }
|
|
||||||||||||
|
Definition at line 1934 of file 3dNLfim.c.
01939 {
01940 int it; /* time index */
01941
01942 for (it = 0; it < ts_length; it++)
01943 printf ("%d %f \n", it, ts_array[it]);
01944 }
|
|
||||||||||||
|
Definition at line 1442 of file 3dNLfim.c. References malloc, MTEST, proc_numjob, proc_shm_ar, proc_shm_arnum, proc_shm_arsiz, and realloc. Referenced by allocate_memory(), and initialize_program().
01443 {
01444 int ixyz;
01445
01446 if( proc_numjob == 1 ){ /* 1 process ==> allocate locally */
01447
01448 *fvol = (float *) malloc (sizeof(float) * nxyz); MTEST(*fvol);
01449 for (ixyz = 0; ixyz < nxyz; ixyz++)
01450 (*fvol)[ixyz] = 0.0;
01451
01452 }
01453 #ifdef PROC_MAX
01454 else { /* multiple processes ==> prepare for shared memory */
01455 /* by remembering what to do */
01456
01457 proc_shm_arnum++ ;
01458 proc_shm_arsiz = (int *) realloc( proc_shm_arsiz ,
01459 sizeof(int) *proc_shm_arnum ) ;
01460 proc_shm_ar = (float ***) realloc( proc_shm_ar ,
01461 sizeof(float **)*proc_shm_arnum ) ;
01462 proc_shm_arsiz[proc_shm_arnum-1] = nxyz ;
01463 proc_shm_ar[proc_shm_arnum-1] = fvol ;
01464
01465 /* actual allocation and pointer assignment (to *fvol)
01466 will take place in function proc_finalize_shm_volumes() */
01467 }
01468 #endif
01469 }
|
Variable Documentation
|
|
Definition at line 158 of file 3dNLfim.c. Referenced by initialize_program(), write_3dtime(), write_afni_data(), and write_bucket_data(). |
|
|
Definition at line 154 of file 3dNLfim.c. Referenced by initialize_program(). |
|
|
Definition at line 156 of file 3dNLfim.c. Referenced by get_options(), and initialize_program(). |
|
|
Definition at line 155 of file 3dNLfim.c. Referenced by get_options(), and initialize_program(). |
|
|
Definition at line 161 of file 3dNLfim.c. Referenced by check_for_valid_inputs(), and get_options(). |
|
|
Definition at line 160 of file 3dNLfim.c. Referenced by check_for_valid_inputs(), get_options(), and main(). |
|
|
Definition at line 118 of file 3dNLfim.c. Referenced by main(), and proc_sigfunc(). |
|
|
Definition at line 105 of file 3dNLfim.c. Referenced by get_options(), initialize_program(), main(), and zero_fill_volume(). |
|
|
Definition at line 106 of file 3dNLfim.c. Referenced by main(). |
|
|
Definition at line 112 of file 3dNLfim.c. Referenced by proc_finalize_shm_volumes(), proc_free(), and zero_fill_volume(). |
|
|
Definition at line 111 of file 3dNLfim.c. Referenced by proc_finalize_shm_volumes(), proc_free(), and zero_fill_volume(). |
|
|
Definition at line 113 of file 3dNLfim.c. Referenced by proc_finalize_shm_volumes(), and zero_fill_volume(). |
|
|
Definition at line 107 of file 3dNLfim.c. Referenced by proc_atexit(), proc_finalize_shm_volumes(), proc_free(), and proc_sigfunc(). |
|
|
Definition at line 108 of file 3dNLfim.c. Referenced by proc_finalize_shm_volumes(). |
|
|
Definition at line 109 of file 3dNLfim.c. Referenced by proc_finalize_shm_volumes(). |
|
|
Definition at line 115 of file 3dNLfim.c. Referenced by main(). |
|
|
Definition at line 116 of file 3dNLfim.c. Referenced by main(). |