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(). |