Doxygen Source Code Documentation
3dTSgen.c File Reference
#include <stdio.h>#include <math.h>#include <stdlib.h>#include "mrilib.h"#include "matrix.h"#include "simplex.h"#include "NLfit.h"#include "matrix.c"#include "simplex.c"#include "NLfit.c"Go to the source code of this file.
Data Structures | |
| struct | NL_options |
Defines | |
| #define | PROGRAM_NAME "3dTSgen" |
| #define | PROGRAM_AUTHOR "B. Douglas Ward" |
| #define | PROGRAM_DATE "09 September 1999" |
| #define | MTEST(ptr) |
Typedefs | |
| typedef NL_options | NL_options |
Functions | |
| void | display_help_menu () |
| void | initialize_options (vfp *nmodel, vfp *smodel, char ***npname, char ***spname, float **min_nconstr, float **max_nconstr, float **min_sconstr, float **max_sconstr, float *sigma, int *nvoxel, char **input_filename, char **output_filename, char ***ncoef_filename, char ***scoef_filename, NL_options *option_data) |
| void | get_options (int argc, char **argv, 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, float *sigma, int *nvoxel, char **input_filename, char **output_filename, char ***ncoef_filename, char ***scoef_filename, int *nxyz, int *ts_length, NL_options *option_data) |
| void | check_one_output_file (THD_3dim_dataset *dset, char *filename) |
| void | check_output_files (char *input_filename, char *output_filename, char **ncoef_filename, char **scoef_filename, char *bucket_filename) |
| void | check_for_valid_inputs (int r, int p, float *min_nconstr, float *max_nconstr, float *min_sconstr, float *max_sconstr, char *input_filename, char *output_filename, char **ncoef_filename, char **scoef_filename, char *bucket_filename) |
| void | initialize_program (int argc, char **argv, 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, float *sigma, int *nvoxel, char **input_filename, char **output_filename, char ***ncoef_filename, char ***scoef_filename, int *nxyz, int *ts_length, float ***x_array, float **ts_array, short ***d_array, float **par_full, float ***ncoef_vol, float ***scoef_vol, NL_options *option_data) |
| void | generate_ts_array (vfp nmodel, vfp smodel, int r, int p, float *min_nconstr, float *max_nconstr, float *min_sconstr, float *max_sconstr, int ts_length, float **x_array, float sigma, float *par_true, float *ts_array) |
| void | save_ts_array (int iv, int ts_length, float *ts_array, short **d_array) |
| void | write_ts_array (int iv, int ts_length, float *ts_array, short **d_array) |
| void | write_parameters (int iv, char *nname, char *sname, int r, int p, char **npname, char **spname, float *par_full) |
| void | save_parameters (int iv, int r, int p, float *par_full, float **ncoef_vol, float **scoef_vol) |
| float | EDIT_coerce_autoscale_new (int nxyz, int itype, void *ivol, int otype, void *ovol) |
| void | output_ts_array (short **d_array, int ts_length, char *input_filename, char *filename) |
| void | write_afni_data (char *input_filename, int nxyz, char *filename, float *ffim) |
| void | write_bucket_data (int q, int p, int nxyz, int n, float **ncoef_vol, float **scoef_vol, char *input_filename, NL_options *option_data) |
| void | output_parameters (int r, int p, int nxyz, int ts_length, float **ncoef_vol, float **scoef_vol, char *input_filename, char **ncoef_filename, char **scoef_filename, NL_options *option_data) |
| void | terminate_program (int r, int p, int ts_length, float ***x_array, float **ts_array, short ***d_array, char **nname, char ***npname, float **min_nconstr, float **max_nconstr, char **sname, char ***spname, float **par_full, float **min_sconstr, float **max_sconstr, float ***ncoef_vol, float ***scoef_vol, char **input_filename, char **output_filename, char ***ncoef_filename, char ***scoef_filename) |
| int | main (int argc, char **argv) |
Variables | |
| float | DELT = 1.0 |
| int | inTR = 0 |
| float | dsTR = 0.0 |
| char * | commandline = NULL |
Define Documentation
|
|
Value: if((ptr)==NULL) \ ( fprintf(stderr,"*** Cannot allocate memory for statistics!\n" \ "*** Try using the -workmem option to reduce memory needs,\n" \ "*** or create more swap space in the operating system.\n" \ ), exit(0) ) |
|
|
Definition at line 37 of file 3dTSgen.c. Referenced by main(). |
|
|
Definition at line 38 of file 3dTSgen.c. Referenced by main(). |
|
|
Definition at line 36 of file 3dTSgen.c. Referenced by initialize_program(), and main(). |
Typedef Documentation
|
|
|
Function Documentation
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 739 of file 3dTSgen.c. References check_output_files(), NLfit_error(), p, and r.
00754 {
00755 int ip; /* parameter index */
00756
00757
00758 /*----- check for valid constraints -----*/
00759 for (ip = 0; ip < r; ip++)
00760 if (min_nconstr[ip] > max_nconstr[ip])
00761 NLfit_error ("Must have minimum constraints <= maximum constraints");
00762 for (ip = 0; ip < p; ip++)
00763 if (min_sconstr[ip] > max_sconstr[ip])
00764 NLfit_error("Must have mininum constraints <= maximum constraints");
00765
00766
00767 /*----- check whether any of the output files already exist -----*/
00768 check_output_files (input_filename, output_filename,
00769 ncoef_filename, scoef_filename, bucket_filename);
00770
00771 }
|
|
||||||||||||
|
Definition at line 648 of file 3dTSgen.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, THD_delete_3dim_dataset(), and THD_is_file().
00653 {
00654 THD_3dim_dataset * new_dset = NULL; /* output afni data set pointer */
00655 int ierror; /* number of errors in editing data */
00656
00657
00658 /*----- make an empty copy of input dataset -----*/
00659 new_dset = EDIT_empty_copy (dset);
00660
00661 ierror = EDIT_dset_items( new_dset,
00662 ADN_prefix, filename ,
00663 ADN_label1, filename ,
00664 ADN_self_name, filename ,
00665 ADN_type, ISHEAD(dset) ? HEAD_FUNC_TYPE :
00666 GEN_FUNC_TYPE ,
00667 ADN_none ) ;
00668
00669 if( ierror > 0 )
00670 {
00671 fprintf(stderr,
00672 "*** %d errors in attempting to create output dataset!\n",
00673 ierror ) ;
00674 exit(1) ;
00675 }
00676
00677 if( THD_is_file(new_dset->dblk->diskptr->header_name) )
00678 {
00679 fprintf(stderr,
00680 "*** Output dataset file %s already exists"
00681 "--cannot continue!\a\n",
00682 new_dset->dblk->diskptr->header_name ) ;
00683 exit(1) ;
00684 }
00685
00686 /*----- deallocate memory -----*/
00687 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ;
00688
00689 }
|
|
||||||||||||||||||||||||
|
Definition at line 698 of file 3dTSgen.c. References check_one_output_file(), THD_delete_3dim_dataset(), and THD_open_one_dataset().
00706 {
00707 THD_3dim_dataset * dset_time; /* prototype 3d+time data set */
00708 int ip; /* parameter index */
00709
00710
00711 dset_time = THD_open_one_dataset (input_filename);
00712
00713
00714 if (output_filename != NULL)
00715 check_one_output_file (dset_time, output_filename);
00716
00717 for (ip = 0; ip < MAX_PARAMETERS; ip++)
00718 {
00719 if (ncoef_filename[ip] != NULL)
00720 check_one_output_file (dset_time, ncoef_filename[ip]);
00721 if (scoef_filename[ip] != NULL)
00722 check_one_output_file (dset_time, scoef_filename[ip]);
00723 }
00724
00725
00726 if (bucket_filename != NULL)
00727 check_one_output_file (dset_time, bucket_filename);
00728
00729 THD_delete_3dim_dataset (dset_time, False); dset_time = NULL ;
00730 }
|
|
|
Definition at line 82 of file 3dTSgen.c.
00083 {
00084 printf
00085 (
00086 "This program generates an AFNI 3d+time data set. The time series for \n"
00087 "each voxel is generated according to a user specified signal + noise \n"
00088 "model. \n\n"
00089 "Usage: \n"
00090 "3dTSgen \n"
00091 "-input fname fname = filename of prototype 3d + time data file \n"
00092 "[-inTR] set the TR of the created timeseries to be the TR \n"
00093 " of the prototype dataset \n"
00094 " [The default is to compute with TR = 1.] \n"
00095 " [The model functions are called for a ] \n"
00096 " [time grid of 0, TR, 2*TR, 3*TR, .... ] \n"
00097 "-signal slabel slabel = name of (non-linear) signal model \n"
00098 "-noise nlabel nlabel = name of (linear) noise model \n"
00099 "-sconstr k c d constraints for kth signal parameter: \n"
00100 " c <= gs[k] <= d \n"
00101 "-nconstr k c d constraints for kth noise parameter: \n"
00102 " c+b[k] <= gn[k] <= d+b[k] \n"
00103 "-sigma s s = std. dev. of additive Gaussian noise \n"
00104 "[-voxel num] screen output for voxel #num \n"
00105 "-output fname fname = filename of output 3d + time data file \n"
00106 " \n"
00107 " \n"
00108 "The following commands generate individual AFNI 1 sub-brick datasets: \n"
00109 " \n"
00110 "[-scoef k fname] write kth signal parameter gs[k]; \n"
00111 " output 'fim' is written to prefix filename fname \n"
00112 "[-ncoef k fname] write kth noise parameter gn[k]; \n"
00113 " output 'fim' is written to prefix filename fname \n"
00114 " \n"
00115 " \n"
00116 "The following commands generate one AFNI 'bucket' type dataset: \n"
00117 " \n"
00118 "[-bucket n prefixname] create one AFNI 'bucket' dataset containing \n"
00119 " n sub-bricks; n=0 creates default output; \n"
00120 " output 'bucket' is written to prefixname \n"
00121 "The mth sub-brick will contain: \n"
00122 "[-brick m scoef k label] kth signal parameter regression coefficient\n"
00123 "[-brick m ncoef k label] kth noise parameter regression coefficient \n"
00124 );
00125
00126 exit(0);
00127 }
|
|
||||||||||||||||||||||||
|
compute start time of this timeseries * Definition at line 1104 of file 3dTSgen.c. References EDIT_coerce_scale_type(), MCW_vol_amax(), MRI_IS_INT_TYPE, and top.
01106 {
01107 float fac=0.0 , top ;
01108
01109 if( MRI_IS_INT_TYPE(otype) ){
01110 top = MCW_vol_amax( nxyz,1,1 , itype,ivol ) ;
01111 if (top == 0.0) fac = 0.0;
01112 else fac = MRI_TYPE_maxval[otype]/top;
01113 }
01114
01115 EDIT_coerce_scale_type( nxyz , fac , itype,ivol , otype,ovol ) ;
01116 return ( fac );
01117 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 925 of file 3dTSgen.c. References full_model(), get_random_value(), n1, n2, normal(), p, r, and vfp. Referenced by main().
00943 {
00944 int ip; /* parameter index */
00945 int it; /* time index */
00946 float n1, n2; /* normal random variates */
00947
00948
00949 /*----- select 'true' noise parameters -----*/
00950 for (ip = 0; ip < r; ip++)
00951 par_true[ip] = get_random_value (min_nconstr[ip], max_nconstr[ip]);
00952
00953 /*----- select 'true' signal parameters -----*/
00954 for (ip = 0; ip < p; ip++)
00955 par_true[ip+r] = get_random_value (min_sconstr[ip], max_sconstr[ip]);
00956
00957 /*----- calculate the 'true' time series using the 'true' parameters -----*/
00958 full_model (nmodel, smodel, par_true, par_true + r,
00959 ts_length, x_array, ts_array);
00960
00961 /*----- add Gaussian noise -----*/
00962 for (it = 0; it < ts_length; it++)
00963 {
00964 normal (&n1, &n2);
00965 ts_array[it] += n1*sigma;
00966 }
00967
00968 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 246 of file 3dTSgen.c. References argc, THD_3dim_dataset::dblk, DESTROY_MODEL_ARRAY, THD_diskptr::dimsizes, THD_datablock::diskptr, display_help_menu(), DSET_NUM_TIMES, DSET_TIMESTEP, DSET_TIMEUNITS, dsTR, FUNC_FIM_TYPE, initialize_noise_model(), initialize_options(), initialize_signal_model(), inTR, malloc, NLfit_error(), NLFIT_get_many_MODELs(), NLFIT_MODEL_array::num, p, r, THD_delete_3dim_dataset(), THD_open_one_dataset(), UNITS_MSEC_TYPE, and vfp.
00273 {
00274 const MAX_BRICKS = 100; /* max. number of bricks in the bucket */
00275 int nopt = 1; /* input option argument counter */
00276 int ival, index; /* integer input */
00277 float fval; /* float input */
00278 char message[MAX_NAME_LENGTH]; /* error message */
00279 int ok; /* boolean for specified model exists */
00280 THD_3dim_dataset * dset_time; /* prototype 3d+time data set */
00281
00282 NLFIT_MODEL_array * model_array = NULL; /* array of SO models */
00283 int im; /* model index */
00284 int ibrick; /* sub-brick index */
00285 int nbricks; /* number of bricks in the bucket */
00286
00287
00288 /*----- does user request help menu? -----*/
00289 if (argc < 2 || strncmp(argv[1], "-help", 5) == 0) display_help_menu();
00290
00291
00292 /*----- initialize the model array -----*/
00293 model_array = NLFIT_get_many_MODELs ();
00294 if ((model_array == NULL) || (model_array->num == 0))
00295 NLfit_error ("Unable to locate any models");
00296
00297
00298 /*----- initialize the input options -----*/
00299 initialize_options (nmodel, smodel, npname, spname,
00300 min_nconstr, max_nconstr, min_sconstr, max_sconstr,
00301 sigma, nvoxel, input_filename,
00302 output_filename, ncoef_filename, scoef_filename,
00303 option_data);
00304
00305 /*----- main loop over input options -----*/
00306 while (nopt < argc )
00307 {
00308
00309 /*----- -input filename -----*/
00310 if (strncmp(argv[nopt], "-input", 6) == 0)
00311 {
00312 nopt++;
00313 if (nopt >= argc) NLfit_error ("need argument after -input ");
00314 *input_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00315 if (*input_filename == NULL)
00316 NLfit_error ("Unable to allocate memory for input_filename");
00317 strcpy (*input_filename, argv[nopt]);
00318
00319 /*----- initialize data set parameters -----*/
00320 dset_time = THD_open_one_dataset (*input_filename);
00321 if (dset_time == NULL)
00322 {
00323 sprintf (message,
00324 "Unable to open data file: %s", *input_filename);
00325 NLfit_error (message);
00326 }
00327 *nxyz = dset_time->dblk->diskptr->dimsizes[0]
00328 * dset_time->dblk->diskptr->dimsizes[1]
00329 * dset_time->dblk->diskptr->dimsizes[2] ;
00330 *ts_length = DSET_NUM_TIMES(dset_time);
00331
00332 dsTR = DSET_TIMESTEP(dset_time) ;
00333 if( DSET_TIMEUNITS(dset_time) == UNITS_MSEC_TYPE ) dsTR *= 0.001 ;
00334
00335 THD_delete_3dim_dataset(dset_time, False); dset_time = NULL ;
00336
00337 nopt++;
00338 continue;
00339 }
00340
00341 /*----- 22 July 1998: the -inTR option -----*/
00342
00343 if( strncmp(argv[nopt],"-inTR",5) == 0 ){
00344 inTR = 1 ;
00345 nopt++ ; continue ;
00346 }
00347
00348 /*----- -signal slabel -----*/
00349 if (strncmp(argv[nopt], "-signal", 7) == 0)
00350 {
00351 nopt++;
00352 if (nopt >= argc) NLfit_error ("need argument after -signal ");
00353 *sname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00354 if (*sname == NULL)
00355 NLfit_error ("Unable to allocate memory for signal model name");
00356 strcpy (*sname, argv[nopt]);
00357 initialize_signal_model (model_array, *sname,
00358 smodel, p, *spname,
00359 *min_sconstr, *max_sconstr);
00360 nopt++;
00361 continue;
00362 }
00363
00364
00365 /*----- -noise nlabel -----*/
00366 if (strncmp(argv[nopt], "-noise", 6) == 0)
00367 {
00368 nopt++;
00369 if (nopt >= argc) NLfit_error ("need argument after -noise ");
00370 *nname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00371 if (*nname == NULL)
00372 NLfit_error ("Unable to allocate memory for noise model name");
00373 strcpy (*nname, argv[nopt]);
00374 initialize_noise_model (model_array, *nname,
00375 nmodel, r, *npname,
00376 *min_nconstr, *max_nconstr);
00377 nopt++;
00378 continue;
00379 }
00380
00381
00382 /*----- -sconstr k min max -----*/
00383 if (strncmp(argv[nopt], "-sconstr", 8) == 0 || strncmp(argv[nopt],"-scnstr",8) == 0 )
00384 {
00385 nopt++;
00386 if (nopt+2 >= argc) NLfit_error("need 3 arguments after -sconstr ");
00387
00388 sscanf (argv[nopt], "%d", &ival);
00389 if ((ival < 0) || (ival >= *p))
00390 NLfit_error ("illegal argument after -sconstr ");
00391 index = ival;
00392 nopt++;
00393
00394 sscanf (argv[nopt], "%f", &fval);
00395 (*min_sconstr)[index] = fval;
00396 nopt++;
00397
00398 sscanf (argv[nopt], "%f", &fval);
00399 (*max_sconstr)[index] = fval;
00400 nopt++;
00401 continue;
00402 }
00403
00404
00405 /*----- -nconstr k min max -----*/
00406 if (strncmp(argv[nopt], "-nconstr", 8) == 0 || strncmp(argv[nopt],"-ncnstr",8) == 0 )
00407 {
00408 nopt++;
00409 if (nopt+2 >= argc) NLfit_error("need 3 arguments after -nconstr ");
00410
00411 sscanf (argv[nopt], "%d", &ival);
00412 if ((ival < 0) || (ival >= *r))
00413 NLfit_error ("illegal argument after -nconstr ");
00414 index = ival;
00415 nopt++;
00416
00417 sscanf (argv[nopt], "%f", &fval);
00418 (*min_nconstr)[index] = fval;
00419 nopt++;
00420
00421 sscanf (argv[nopt], "%f", &fval);
00422 (*max_nconstr)[index] = fval;
00423 nopt++;
00424 continue;
00425 }
00426
00427
00428 /*----- -sigma s -----*/
00429 if (strncmp(argv[nopt], "-sigma", 6) == 0)
00430 {
00431 nopt++;
00432 if (nopt >= argc) NLfit_error ("need argument after -sigma ");
00433 sscanf (argv[nopt], "%f", &fval);
00434 if (fval < 0.0)
00435 NLfit_error ("illegal argument after -sigma ");
00436 *sigma = fval;
00437 nopt++;
00438 continue;
00439 }
00440
00441
00442 /*----- -voxel num -----*/
00443 if (strncmp(argv[nopt], "-voxel", 6) == 0)
00444 {
00445 nopt++;
00446 if (nopt >= argc) NLfit_error ("need argument after -voxel ");
00447 sscanf (argv[nopt], "%d", &ival);
00448 if (ival <= 0)
00449 NLfit_error ("illegal argument after -voxel ");
00450 *nvoxel = ival;
00451 nopt++;
00452 continue;
00453 }
00454
00455
00456 /*----- -output filename -----*/
00457 if (strncmp(argv[nopt], "-output", 7) == 0)
00458 {
00459 nopt++;
00460 if (nopt >= argc) NLfit_error ("need argument after -output ");
00461 *output_filename = malloc (sizeof(char) * MAX_NAME_LENGTH);
00462 if (*output_filename == NULL)
00463 NLfit_error ("Unable to allocate memory for output_filename");
00464 strcpy (*output_filename, argv[nopt]);
00465 nopt++;
00466 continue;
00467 }
00468
00469
00470 /*----- -scoef k filename -----*/
00471 if (strncmp(argv[nopt], "-scoef", 6) == 0)
00472 {
00473 nopt++;
00474 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -scoef ");
00475 sscanf (argv[nopt], "%d", &ival);
00476 if ((ival < 0) || (ival >= *p))
00477 NLfit_error ("illegal argument after -scoef ");
00478 index = ival;
00479 nopt++;
00480
00481 (*scoef_filename)[index] = malloc (sizeof(char) * MAX_NAME_LENGTH);
00482 if ((*scoef_filename)[index] == NULL)
00483 NLfit_error ("Unable to allocate memory for scoef_filename");
00484 strcpy ((*scoef_filename)[index], argv[nopt]);
00485
00486 nopt++;
00487 continue;
00488 }
00489
00490
00491 /*----- -ncoef k filename -----*/
00492 if (strncmp(argv[nopt], "-ncoef", 7) == 0)
00493 {
00494 nopt++;
00495 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -ncoef ");
00496 sscanf (argv[nopt], "%d", &ival);
00497 if ((ival < 0) || (ival >= *r))
00498 NLfit_error ("illegal argument after -ncoef ");
00499 index = ival;
00500 nopt++;
00501
00502 (*ncoef_filename)[index] = malloc (sizeof(char) * MAX_NAME_LENGTH);
00503 if ((*ncoef_filename)[index] == NULL)
00504 NLfit_error ("Unable to allocate memory for ncoef_filename");
00505 strcpy ((*ncoef_filename)[index], argv[nopt]);
00506
00507 nopt++;
00508 continue;
00509 }
00510
00511
00512 /*----- -bucket n prefixname -----*/
00513 if (strncmp(argv[nopt], "-bucket", 7) == 0)
00514 {
00515 nopt++;
00516 if (nopt+1 >= argc) NLfit_error ("need 2 arguments after -bucket ");
00517 sscanf (argv[nopt], "%d", &ival);
00518 if ((ival < 0) || (ival > MAX_BRICKS))
00519 NLfit_error ("illegal argument after -bucket ");
00520 nopt++;
00521
00522 option_data->bucket_filename =
00523 malloc (sizeof(char) * MAX_NAME_LENGTH);
00524 if (option_data->bucket_filename == NULL)
00525 NLfit_error ("Unable to allocate memory for bucket_filename");
00526 strcpy (option_data->bucket_filename, argv[nopt]);
00527
00528 /*----- set number of sub-bricks in the bucket -----*/
00529 if (ival == 0)
00530 nbricks = (*p) + (*r);
00531 else
00532 nbricks = ival;
00533 option_data->numbricks = nbricks;
00534
00535 /*----- allocate memory and initialize bucket dataset options -----*/
00536 option_data->brick_type = malloc (sizeof(int) * nbricks);
00537 option_data->brick_coef = malloc (sizeof(int) * nbricks);
00538 option_data->brick_label = malloc (sizeof(char *) * nbricks);
00539 for (ibrick = 0; ibrick < nbricks; ibrick++)
00540 {
00541 option_data->brick_type[ibrick] = -1;
00542 option_data->brick_coef[ibrick] = -1;
00543 option_data->brick_label[ibrick] =
00544 malloc (sizeof(char) * MAX_NAME_LENGTH);
00545 }
00546
00547
00548 if (ival == 0)
00549 /*----- throw (almost) everything into the bucket -----*/
00550 {
00551 for (ibrick = 0; ibrick < (*r); ibrick++)
00552 {
00553 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00554 option_data->brick_coef[ibrick] = ibrick;
00555 strcpy (option_data->brick_label[ibrick], (*npname)[ibrick]);
00556 }
00557
00558 for (ibrick = (*r); ibrick < (*p) + (*r); ibrick++)
00559 {
00560 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00561 option_data->brick_coef[ibrick] = ibrick;
00562 strcpy (option_data->brick_label[ibrick],
00563 (*spname)[ibrick-(*r)]);
00564 }
00565 }
00566
00567 nopt++;
00568 continue;
00569 }
00570
00571
00572 /*----- -brick m type k label -----*/
00573 if (strncmp(argv[nopt], "-brick", 6) == 0)
00574 {
00575 nopt++;
00576 if (nopt+2 >= argc)
00577 NLfit_error ("need more arguments after -brick ");
00578 sscanf (argv[nopt], "%d", &ibrick);
00579 if ((ibrick < 0) || (ibrick >= option_data->numbricks))
00580 NLfit_error ("illegal argument after -brick ");
00581 nopt++;
00582
00583 if (strncmp(argv[nopt], "scoef", 4) == 0)
00584 {
00585 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00586
00587 nopt++;
00588 sscanf (argv[nopt], "%d", &ival);
00589 if ((ival < 0) || (ival > (*p)))
00590 NLfit_error ("illegal argument after scoef ");
00591 option_data->brick_coef[ibrick] = ival + (*r);
00592
00593 nopt++;
00594 if (nopt >= argc)
00595 NLfit_error ("need more arguments after -brick ");
00596 strcpy (option_data->brick_label[ibrick], argv[nopt]);
00597 }
00598
00599 else if (strncmp(argv[nopt], "ncoef", 4) == 0)
00600 {
00601 option_data->brick_type[ibrick] = FUNC_FIM_TYPE;
00602
00603 nopt++;
00604 sscanf (argv[nopt], "%d", &ival);
00605 if ((ival < 0) || (ival > (*r)))
00606 NLfit_error ("illegal argument after ncoef ");
00607 option_data->brick_coef[ibrick] = ival;
00608
00609 nopt++;
00610 if (nopt >= argc)
00611 NLfit_error ("need more arguments after -brick ");
00612 strcpy (option_data->brick_label[ibrick], argv[nopt]);
00613 }
00614
00615 else NLfit_error ("unable to interpret options after -brick ");
00616
00617 printf ("ibrick = %d \n", ibrick);
00618 printf ("brick_type = %d \n", option_data->brick_type[ibrick]);
00619 printf ("brick_coef = %d \n", option_data->brick_coef[ibrick]);
00620 printf ("brick_label = %s \n", option_data->brick_label[ibrick]);
00621
00622 nopt++;
00623 continue;
00624 }
00625
00626
00627 /*----- unknown command -----*/
00628
00629 { char buf[256] ;
00630 sprintf(buf,"unrecognized command line option: %s",argv[nopt]) ;
00631 NLfit_error (buf);
00632 }
00633 }
00634
00635
00636 /*----- discard the model array -----*/
00637 DESTROY_MODEL_ARRAY (model_array) ;
00638
00639 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 148 of file 3dTSgen.c. References malloc, NLfit_error(), and vfp.
00166 {
00167 int ip; /* parameter index */
00168
00169
00170 /*----- initialize default values -----*/
00171 *sigma = 0.0;
00172 *nvoxel = -1;
00173 *smodel = NULL;
00174 *nmodel = NULL;
00175
00176
00177 /*----- allocate memory for parameter names -----*/
00178 *npname = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00179 if (*npname == NULL)
00180 NLfit_error ("Unable to allocate memory for noise parameter names");
00181 for (ip = 0; ip < MAX_PARAMETERS; ip++)
00182 {
00183 (*npname)[ip] = (char *) malloc (sizeof(char) * MAX_NAME_LENGTH);
00184 if ((*npname)[ip] == NULL)
00185 NLfit_error ("Unable to allocate memory for noise parameter names");
00186 }
00187
00188 *spname = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00189 if (*spname == NULL)
00190 NLfit_error ("Unable to allocate memory for signal parameter names");
00191 for (ip = 0; ip < MAX_PARAMETERS; ip++)
00192 {
00193 (*spname)[ip] = (char *) malloc (sizeof(char) * MAX_NAME_LENGTH);
00194 if ((*spname)[ip] == NULL)
00195 NLfit_error ("Unable to allocate memory for signal parameter names");
00196 }
00197
00198
00199 /*----- allocate memory for parameter constraints -----*/
00200 *min_nconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00201 if (*min_nconstr == NULL)
00202 NLfit_error ("Unable to allocate memory for min_nconstr");
00203 *max_nconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00204 if (*max_nconstr == NULL)
00205 NLfit_error ("Unable to allocate memory for max_nconstr");
00206 *min_sconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00207 if (*min_sconstr == NULL)
00208 NLfit_error ("Unable to allocate memory for min_sconstr");
00209 *max_sconstr = (float *) malloc (sizeof(float) * MAX_PARAMETERS);
00210 if (*max_sconstr == NULL)
00211 NLfit_error ("Unable to allocate memory for max_sconstr");
00212
00213
00214 /*----- allocate memory space and initialize pointers for filenames -----*/
00215 *input_filename = NULL;
00216 *output_filename = NULL;
00217 *ncoef_filename = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00218 if (*ncoef_filename == NULL)
00219 NLfit_error ("Unable to allocate memory for ncoef_filename");
00220 *scoef_filename = (char **) malloc (sizeof(char *) * MAX_PARAMETERS);
00221 if (*scoef_filename == NULL)
00222 NLfit_error ("Unable to allocate memory for scoef_filename");
00223 for (ip = 0; ip < MAX_PARAMETERS; ip++)
00224 {
00225 (*ncoef_filename)[ip] = NULL;
00226 (*scoef_filename)[ip] = NULL;
00227 }
00228
00229
00230 /*----- initialize bucket dataset options -----*/
00231 option_data->bucket_filename = NULL;
00232 option_data->numbricks = -1;
00233 option_data->brick_type = NULL;
00234 option_data->brick_coef = NULL;
00235 option_data->brick_label = NULL;
00236
00237 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 780 of file 3dTSgen.c. References argc, check_for_valid_inputs(), commandline, DELT, dsTR, get_options(), inTR, malloc, NLfit_error(), p, PROGRAM_NAME, r, tross_commandline(), and vfp.
00819 {
00820 int dimension; /* dimension of full model */
00821 int ip; /* parameter index */
00822 int it; /* time index */
00823
00824
00825 /*----- save command line for history notes -----*/
00826 commandline = tross_commandline( PROGRAM_NAME , argc,argv ) ;
00827
00828
00829 /*----- get command line inputs -----*/
00830 get_options (argc, argv, nname, sname, nmodel, smodel,
00831 r, p, npname, spname,
00832 min_nconstr, max_nconstr, min_sconstr, max_sconstr,
00833 sigma, nvoxel,
00834 input_filename, output_filename, ncoef_filename, scoef_filename,
00835 nxyz, ts_length, option_data);
00836
00837 /*----- check for valid inputs -----*/
00838 check_for_valid_inputs (*r, *p, *min_nconstr, *max_nconstr,
00839 *min_sconstr, *max_sconstr, *input_filename,
00840 *output_filename, *ncoef_filename, *scoef_filename,
00841 option_data->bucket_filename);
00842
00843 /*----- allocate space for input time series -----*/
00844 *ts_array = (float *) malloc (sizeof(float) * (*ts_length));
00845 if (*ts_array == NULL)
00846 NLfit_error ("Unable to allocate memory for ts_array");
00847
00848
00849 /*----- allocate space for independent variable matrix -----*/
00850 *x_array = (float **) malloc (sizeof(float *) * (*ts_length));
00851 if (*x_array == NULL)
00852 NLfit_error ("Unable to allocate memory for x_array");
00853 for (it = 0; it < (*ts_length); it++)
00854 {
00855 (*x_array)[it] = (float *) malloc (sizeof(float) * 3);
00856 if ((*x_array)[it] == NULL)
00857 NLfit_error ("Unable to allocate memory for x_array[it]");
00858 }
00859
00860 /*----- initialize independent variable matrix -----*/
00861
00862 if( inTR && dsTR > 0.0 ){ /* 22 July 1998 */
00863 DELT = dsTR ;
00864 fprintf(stderr,"--- computing with TR = %g\n",DELT) ;
00865 }
00866
00867 for (it = 0; it < (*ts_length); it++)
00868 {
00869 (*x_array)[it][0] = 1.0;
00870 (*x_array)[it][1] = it * DELT;
00871 (*x_array)[it][2] = (it * DELT) * (it * DELT);
00872 }
00873
00874 /*----- allocate memory space for parameters -----*/
00875 dimension = (*r) + (*p);
00876 *par_full = (float *) malloc (sizeof(float) * dimension);
00877 if (*par_full == NULL)
00878 NLfit_error ("Unable to allocate memory for par_full");
00879
00880 *ncoef_vol = (float **) malloc (sizeof(float *) * (*r));
00881 if (*ncoef_vol == NULL)
00882 NLfit_error ("Unable to allocate memory for ncoef_vol");
00883 for (ip = 0; ip < (*r); ip++)
00884 {
00885 (*ncoef_vol)[ip] = (float *) malloc (sizeof(float) * (*nxyz));
00886 if ((*ncoef_vol)[ip] == NULL)
00887 NLfit_error ("Unable to allocate memory for ncoef_vol[ip]");
00888 }
00889
00890 *scoef_vol = (float **) malloc (sizeof(float *) * (*p));
00891 if (*scoef_vol == NULL)
00892 NLfit_error ("Unable to allocate memory for scoef_vol");
00893 for (ip = 0; ip < (*p); ip++)
00894 {
00895 (*scoef_vol)[ip] = (float *) malloc (sizeof(float) * (*nxyz));
00896 if ((*scoef_vol)[ip] == NULL)
00897 NLfit_error ("Unable to allocate memory for scoef_vol[ip]");
00898 }
00899
00900
00901 /*----- allocate space for output time series volume -----*/
00902 *d_array = (short **) malloc (sizeof(short *) * (*ts_length));
00903 if (*d_array == NULL)
00904 NLfit_error ("Unable to allocate memory for d_array");
00905 for (it = 0; it < *ts_length; it++)
00906 {
00907 (*d_array)[it] = (short *) malloc (sizeof(short) * (*nxyz));
00908 if ((*d_array)[it] == NULL)
00909 NLfit_error ("Unable to allocate memory for d_array[it]");
00910 }
00911
00912
00913 /*----- initialize random number generator -----*/
00914 srand48 (1234567);
00915
00916 }
|
|
||||||||||||
|
Definition at line 1671 of file 3dTSgen.c. References argc, generate_ts_array(), initialize_program(), output_parameters(), output_ts_array(), p, PROGRAM_AUTHOR, PROGRAM_DATE, PROGRAM_NAME, r, save_parameters(), save_ts_array(), terminate_program(), vfp, write_parameters(), and write_ts_array().
01676 {
01677 NL_options option_data; /* bucket dataset options */
01678
01679 /*----- declare time series variables -----*/
01680 int ts_length; /* length of time series data */
01681 float ** x_array = NULL; /* independent variable matrix */
01682 float * ts_array = NULL; /* generated time series array */
01683 int nxyz; /* number of voxels in image */
01684 int iv; /* voxel counter */
01685 int nvoxel; /* screen output for voxel #nvoxel */
01686 short ** d_array = NULL; /* output time series volume */
01687
01688 /*----- declare reduced (noise) model variables -----*/
01689 char * nname = NULL; /* noise model name */
01690 vfp nmodel; /* pointer to noise model */
01691 int r; /* number of parameters in the noise model */
01692 char ** npname = NULL; /* noise parameter labels */
01693 float * min_nconstr = NULL; /* min parameter constraints for noise model */
01694 float * max_nconstr = NULL; /* max parameter constraints for noise model */
01695
01696 /*----- declare full (signal+noise) model variables -----*/
01697 char * sname = NULL; /* signal model name */
01698 vfp smodel; /* pointer to signal model */
01699 int p; /* number of parameters in the signal model */
01700 float * par_full = NULL; /* estimated parameters for the full model */
01701 char ** spname = NULL; /* signal parameter labels */
01702 float * min_sconstr = NULL; /* min parameter constraints for signal model */
01703 float * max_sconstr = NULL; /* max parameter constraints for signal model */
01704
01705 /*----- declare statistical test variables -----*/
01706 float sigma; /* std. dev. of additive Gaussian noise */
01707
01708 /*----- declare output volume data -----*/
01709 float ** ncoef_vol = NULL; /* noise model parameters volume data */
01710 float ** scoef_vol = NULL; /* signal model parameters volume data */
01711
01712 /*----- declare file name variables -----*/
01713 char * input_filename = NULL; /* file name of prototype 3d+time dataset */
01714 char * output_filename = NULL; /* file name for output 3d+time dataset */
01715 char ** ncoef_filename = NULL; /* file name for noise model parameters */
01716 char ** scoef_filename = NULL; /* file name for signal model parameters */
01717
01718 /*----- Identify software -----*/
01719 printf ("\n\n");
01720 printf ("Program: %s \n", PROGRAM_NAME);
01721 printf ("Author: %s \n", PROGRAM_AUTHOR);
01722 printf ("Date: %s \n", PROGRAM_DATE);
01723 printf ("\n");
01724
01725
01726 /*----- program initialization -----*/
01727 initialize_program (argc, argv,
01728 &nname, &sname, &nmodel, &smodel,
01729 &r, &p, &npname, &spname,
01730 &min_nconstr, &max_nconstr, &min_sconstr, &max_sconstr,
01731 &sigma, &nvoxel,
01732 &input_filename, &output_filename, &ncoef_filename,
01733 &scoef_filename,
01734 &nxyz, &ts_length, &x_array, &ts_array, &d_array,
01735 &par_full,
01736 &ncoef_vol, &scoef_vol, &option_data);
01737
01738
01739 /*----- loop over voxels in the data set -----*/
01740 for (iv = 0; iv < nxyz; iv++)
01741 {
01742
01743 /*----- generate artificial time series for voxel iv -----*/
01744 generate_ts_array (nmodel, smodel, r, p,
01745 min_nconstr, max_nconstr, min_sconstr, max_sconstr,
01746 ts_length, x_array, sigma,
01747 par_full, ts_array);
01748
01749
01750 /*----- save time series into data set -----*/
01751 save_ts_array (iv, ts_length, ts_array, d_array);
01752
01753
01754 /*----- write time series for this voxel -----*/
01755 if (iv == nvoxel-1)
01756 write_ts_array (iv, ts_length, ts_array, d_array);
01757
01758
01759 /*----- save parameters for this voxel into volume data -----*/
01760 save_parameters (iv, r, p, par_full, ncoef_vol, scoef_vol);
01761
01762
01763 /*----- write parameters for this voxel -----*/
01764 if (iv == nvoxel-1)
01765 write_parameters (iv, nname, sname, r, p, npname, spname, par_full);
01766
01767 }
01768
01769
01770 /*----- save time series into data set -----*/
01771 output_ts_array (d_array, ts_length, input_filename, output_filename);
01772
01773
01774 /*----- output the parameter files -----*/
01775 output_parameters (r, p, nxyz, ts_length, ncoef_vol, scoef_vol,
01776 input_filename,
01777 ncoef_filename, scoef_filename, &option_data);
01778
01779
01780 /*----- end of program -----*/
01781 terminate_program (r, p, ts_length, &x_array, &ts_array, &d_array,
01782 &nname, &npname, &min_nconstr, &max_nconstr,
01783 &sname, &spname, &par_full, &min_sconstr, &max_sconstr,
01784 &ncoef_vol, &scoef_vol,
01785 &input_filename, &output_filename,
01786 &ncoef_filename, &scoef_filename);
01787 }
|
|
||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1485 of file 3dTSgen.c. References p, r, write_afni_data(), and write_bucket_data(). Referenced by main().
01501 {
01502 int ip; /* parameter index */
01503 int dimension; /* dimension of full model = r + p */
01504 int numdof, dendof; /* numerator and denominator degrees of freedom */
01505
01506
01507 dimension = r + p;
01508
01509
01510 /*----- write the bucket dataset -----*/
01511 if (option_data->numbricks > 0)
01512 write_bucket_data (r, p, nxyz, ts_length, ncoef_vol, scoef_vol,
01513 input_filename, option_data);
01514
01515
01516 /*----- write noise model parameters -----*/
01517 for (ip = 0; ip < r; ip++)
01518 {
01519 if (ncoef_filename[ip] != NULL)
01520 {
01521 write_afni_data (input_filename, nxyz, ncoef_filename[ip],
01522 ncoef_vol[ip]);
01523 }
01524 }
01525
01526 /*----- write signal model parameters -----*/
01527 for (ip = 0; ip < p; ip++)
01528 {
01529 if (scoef_filename[ip] != NULL)
01530 {
01531 write_afni_data (input_filename, nxyz, scoef_filename[ip],
01532 scoef_vol[ip]);
01533 }
01534 }
01535 }
|
|
||||||||||||||||||||
|
Definition at line 1127 of file 3dTSgen.c. References ADN_brick_fac, ADN_label1, ADN_malloc_type, ADN_none, ADN_nvals, ADN_prefix, ADN_self_name, commandline, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::dblk, THD_datablock::diskptr, DSET_BRICK, DSET_BRIKNAME, EDIT_dset_items(), EDIT_empty_copy(), free, THD_diskptr::header_name, malloc, mri_fix_data_pointer(), MTEST, THD_delete_3dim_dataset(), THD_is_file(), THD_load_statistics(), THD_open_one_dataset(), THD_write_3dim_dataset(), tross_Append_History(), and tross_multi_Append_History(). Referenced by main().
01134 {
01135 THD_3dim_dataset * dset = NULL; /* input afni data set pointer */
01136 THD_3dim_dataset * new_dset = NULL; /* output afni data set pointer */
01137 int ib; /* sub-brick index */
01138 int ierror; /* number of errors in editing data */
01139 float * fbuf; /* float buffer */
01140 float fimfac; /* scale factor for short data */
01141 char label[80]; /* label for output file history */
01142
01143
01144 /*----- allocate memory -----*/
01145 fbuf = (float *) malloc (sizeof(float) * ts_length); MTEST (fbuf);
01146 for (ib = 0; ib < ts_length; ib++) fbuf[ib] = 0.0;
01147
01148
01149 /*-- make an empty copy of the prototype dataset, for eventual output --*/
01150 dset = THD_open_one_dataset (input_filename);
01151 new_dset = EDIT_empty_copy (dset);
01152
01153
01154 /*----- Record history of dataset -----*/
01155
01156 sprintf (label, "Output prefix: %s", filename);
01157 if( commandline != NULL )
01158 tross_multi_Append_History( new_dset , commandline,label,NULL ) ;
01159 else
01160 tross_Append_History ( new_dset, label);
01161
01162
01163 /*----- delete prototype dataset -----*/
01164 THD_delete_3dim_dataset (dset, False); dset = NULL ;
01165
01166
01167 ierror = EDIT_dset_items( new_dset ,
01168 ADN_prefix , filename ,
01169 ADN_label1 , filename ,
01170 ADN_self_name , filename ,
01171 ADN_malloc_type, DATABLOCK_MEM_MALLOC ,
01172 ADN_nvals , ts_length ,
01173 ADN_none ) ;
01174
01175 if( ierror > 0 ){
01176 fprintf(stderr,
01177 "*** %d errors in attempting to create output dataset!\n", ierror ) ;
01178 exit(1) ;
01179 }
01180
01181 if( THD_is_file(new_dset->dblk->diskptr->header_name) ){
01182 fprintf(stderr,
01183 "*** Output dataset file %s already exists--cannot continue!\a\n",
01184 new_dset->dblk->diskptr->header_name ) ;
01185 exit(1) ;
01186 }
01187
01188
01189 /*----- attach bricks to new data set -----*/
01190 for (ib = 0; ib < ts_length; ib++)
01191 mri_fix_data_pointer (d_array[ib], DSET_BRICK(new_dset,ib));
01192
01193
01194 /*----- write afni data set -----*/
01195
01196 (void) EDIT_dset_items( new_dset , ADN_brick_fac , fbuf , ADN_none ) ;
01197
01198 THD_load_statistics( new_dset ) ;
01199 THD_write_3dim_dataset( NULL,NULL , new_dset , True ) ;
01200 fprintf(stderr,"--- Wrote combined dataset into %s\n",DSET_BRIKNAME(new_dset)) ;
01201
01202
01203 /*----- deallocate memory -----*/
01204 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ;
01205 free (fbuf); fbuf = NULL;
01206
01207 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 1063 of file 3dTSgen.c. Referenced by main().
01073 {
01074 int ip; /* parameter index */
01075
01076
01077 /*----- save noise parameter estimates -----*/
01078 for (ip = 0; ip < r; ip++)
01079 {
01080 ncoef_vol[ip][iv] = par_full[ip];
01081 }
01082
01083 /*----- save signal parameter estimates -----*/
01084 for (ip = 0; ip < p; ip++)
01085 {
01086 scoef_vol[ip][iv] = par_full[ip+r];
01087 }
01088
01089 }
|
|
||||||||||||||||||||
|
Definition at line 977 of file 3dTSgen.c. Referenced by main().
00984 {
00985 int it;
00986
00987
00988 for (it = 0; it < ts_length; it++)
00989 {
00990 d_array[it][iv] = (short) ts_array[it];
00991 }
00992
00993 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1544 of file 3dTSgen.c.
01568 {
01569 int ip; /* parameter index */
01570 int it; /* time index */
01571
01572
01573 /*----- deallocate space for model names and parameters labels -----*/
01574 if (*nname != NULL)
01575 { free (*nname); *nname = NULL; }
01576 if (*sname != NULL)
01577 { free (*sname); *sname = NULL; }
01578 for (ip = 0; ip < MAX_PARAMETERS; ip++)
01579 {
01580 if ((*npname)[ip] != NULL)
01581 { free ((*npname)[ip]); (*npname)[ip] = NULL; }
01582 if ((*spname)[ip] != NULL)
01583 { free ((*spname)[ip]); (*spname)[ip] = NULL; }
01584 }
01585
01586 if (*npname != NULL)
01587 { free (*npname); *npname = NULL; }
01588 if (*spname != NULL)
01589 { free (*spname); *spname = NULL; }
01590
01591
01592 /*----- deallocate memory for parameter constraints -----*/
01593 if (*min_nconstr != NULL) { free (*min_nconstr); *min_nconstr = NULL; }
01594 if (*max_nconstr != NULL) { free (*max_nconstr); *max_nconstr = NULL; }
01595 if (*min_sconstr != NULL) { free (*min_sconstr); *min_sconstr = NULL; }
01596 if (*max_sconstr != NULL) { free (*max_sconstr); *max_sconstr = NULL; }
01597
01598
01599 /*----- deallocate memory space for filenames -----*/
01600 if (*input_filename != NULL)
01601 { free (*input_filename); *input_filename = NULL; }
01602 if (*output_filename != NULL)
01603 { free (*output_filename); *output_filename = NULL; }
01604
01605 if (*ncoef_filename != NULL)
01606 {
01607 for (ip = 0; ip < MAX_PARAMETERS; ip++)
01608 {
01609 if ((*ncoef_filename)[ip] != NULL)
01610 { free ((*ncoef_filename)[ip]); (*ncoef_filename)[ip] = NULL; }
01611 }
01612 free (*ncoef_filename); *ncoef_filename = NULL;
01613 }
01614
01615 if (*scoef_filename != NULL)
01616 {
01617 for (ip = 0; ip < MAX_PARAMETERS; ip++)
01618 {
01619 if ((*scoef_filename)[ip] != NULL)
01620 { free ((*scoef_filename)[ip]); (*scoef_filename)[ip] = NULL; }
01621 }
01622 free (*scoef_filename); *scoef_filename = NULL;
01623 }
01624
01625
01626 /*----- deallocate space for input time series -----*/
01627 if (*ts_array != NULL) { free (*ts_array); *ts_array = NULL; }
01628
01629
01630 /*----- deallocate space for independent variable matrix -----*/
01631 if (*x_array != NULL)
01632 {
01633 for (it = 0; it < ts_length; it++)
01634 if ((*x_array)[it] != NULL)
01635 { free ((*x_array)[it]); (*x_array)[it] = NULL; }
01636 free (*x_array); *x_array = NULL;
01637 }
01638
01639
01640 /*----- deallocate space for parameters -----*/
01641 if (*par_full != NULL) { free (*par_full); *par_full = NULL; }
01642
01643
01644 /*----- deallocate space for volume data -----*/
01645 if (*ncoef_vol != NULL)
01646 {
01647 for (ip = 0; ip < r; ip++)
01648 {
01649 if ((*ncoef_vol)[ip] != NULL)
01650 { free ((*ncoef_vol)[ip]); (*ncoef_vol)[ip] = NULL; }
01651 }
01652 free (*ncoef_vol); *ncoef_vol = NULL;
01653 }
01654
01655 if (*scoef_vol != NULL)
01656 {
01657 for (ip = 0; ip < p; ip++)
01658 {
01659 if ((*scoef_vol)[ip] != NULL)
01660 { free ((*scoef_vol)[ip]); (*scoef_vol)[ip] = NULL; }
01661 }
01662 free (*scoef_vol); *scoef_vol = NULL;
01663 }
01664
01665 }
|
|
||||||||||||||||||||
|
Definition at line 1217 of file 3dTSgen.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_FIM_TYPE, 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, and tross_Append_History().
01219 {
01220 int ii; /* voxel index */
01221 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */
01222 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */
01223 int iv; /* sub-brick index */
01224 int ierror; /* number of errors in editing data */
01225 int ibuf[32]; /* integer buffer */
01226 float fbuf[MAX_STAT_AUX]; /* float buffer */
01227 float fimfac; /* scale factor for short data */
01228 int output_datum; /* data type for output data */
01229 void * vdif; /* 1st sub-brick data pointer */
01230 int func_type; /* afni data set type */
01231 float top, func_scale_short; /* parameters for scaling data */
01232 char label[80]; /* label for output file history */
01233
01234
01235 /*----- read input dataset -----*/
01236 dset = THD_open_one_dataset (input_filename) ;
01237 if( ! ISVALID_3DIM_DATASET(dset) ){
01238 fprintf(stderr,"*** Unable to open dataset file %s\n",
01239 input_filename);
01240 exit(1) ;
01241 }
01242
01243 /*-- make an empty copy of this dataset, for eventual output --*/
01244 new_dset = EDIT_empty_copy( dset ) ;
01245
01246
01247 /*----- Record history of dataset -----*/
01248 if( commandline != NULL )
01249 tross_Append_History( new_dset , commandline ) ;
01250 sprintf (label, "Output prefix: %s", filename);
01251 tross_Append_History ( new_dset, label);
01252
01253
01254 iv = DSET_PRINCIPAL_VALUE(dset) ;
01255 output_datum = DSET_BRICK_TYPE(dset,iv) ;
01256 if( output_datum == MRI_byte ) output_datum = MRI_short ;
01257
01258
01259 ibuf[0] = output_datum ;
01260
01261 func_type = FUNC_FIM_TYPE;
01262
01263 ierror = EDIT_dset_items( new_dset ,
01264 ADN_prefix , filename ,
01265 ADN_label1 , filename ,
01266 ADN_self_name , filename ,
01267 ADN_type , ISHEAD(dset) ? HEAD_FUNC_TYPE :
01268 GEN_FUNC_TYPE ,
01269 ADN_func_type , func_type ,
01270 ADN_nvals , FUNC_nvals[func_type] ,
01271 ADN_datum_array , ibuf ,
01272 ADN_ntt , 0 ,
01273 ADN_malloc_type, DATABLOCK_MEM_MALLOC ,
01274 ADN_none ) ;
01275
01276 if( ierror > 0 ){
01277 fprintf(stderr,
01278 "*** %d errors in attempting to create output dataset!\n", ierror ) ;
01279 exit(1) ;
01280 }
01281
01282 if( THD_is_file(new_dset->dblk->diskptr->header_name) ){
01283 fprintf(stderr,
01284 "*** Output dataset file %s already exists--cannot continue!\a\n",
01285 new_dset->dblk->diskptr->header_name ) ;
01286 exit(1) ;
01287 }
01288
01289
01290 /*----- deleting exemplar dataset -----*/
01291 THD_delete_3dim_dataset( dset , False ) ; dset = NULL ;
01292
01293
01294 /*----- allocate memory for output data -----*/
01295 vdif = (void *) malloc( mri_datum_size(output_datum) * nxyz );
01296 if (vdif == NULL) NLfit_error ("Unable to allocate memory for vdif");
01297
01298
01299 /*----- attach bricks to new data set -----*/
01300 mri_fix_data_pointer (vdif, DSET_BRICK(new_dset,0));
01301
01302
01303 /*----- convert data type to output specification -----*/
01304 fimfac = EDIT_coerce_autoscale_new (nxyz,
01305 MRI_float, ffim,
01306 output_datum, vdif);
01307 if (fimfac != 0.0) fimfac = 1.0 / fimfac;
01308
01309
01310 /*----- write afni data set -----*/
01311 printf("--- Writing combined dataset into %s\n",DSET_BRIKNAME(new_dset)) ;
01312
01313 for( ii=0 ; ii < MAX_STAT_AUX ; ii++ ) fbuf[ii] = 0.0 ;
01314 (void) EDIT_dset_items( new_dset , ADN_stat_aux , fbuf , ADN_none ) ;
01315
01316 fbuf[0] = (output_datum == MRI_short && fimfac != 1.0 ) ? fimfac : 0.0 ;
01317 (void) EDIT_dset_items( new_dset , ADN_brick_fac , fbuf , ADN_none ) ;
01318
01319 THD_load_statistics( new_dset ) ;
01320 THD_write_3dim_dataset( NULL,NULL , new_dset , True ) ;
01321
01322 /*----- deallocate memory -----*/
01323 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ;
01324
01325 }
|
|
||||||||||||||||||||||||||||||||||||
|
Definition at line 1334 of file 3dTSgen.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_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(), and tross_Append_History().
01348 {
01349 const float EPSILON = 1.0e-10;
01350
01351 THD_3dim_dataset * old_dset = NULL; /* prototype dataset */
01352 THD_3dim_dataset * new_dset = NULL; /* output bucket dataset */
01353 char * output_prefix; /* prefix name for bucket dataset */
01354 char * output_session; /* directory for bucket dataset */
01355 int nbricks, ib; /* number of sub-bricks in bucket dataset */
01356 short ** bar = NULL; /* bar[ib] points to data for sub-brick #ib */
01357 float factor; /* factor is new scale factor for sub-brick #ib */
01358 int brick_type; /* indicates statistical type of sub-brick */
01359 int brick_coef; /* regression coefficient index for sub-brick */
01360 char * brick_label; /* character string label for sub-brick */
01361 int ierror; /* number of errors in editing data */
01362 float * volume; /* volume of floating point data */
01363 int dimension; /* dimension of full model = p + q */
01364 char label[80]; /* label for output file history */
01365
01366
01367 /*----- initialize local variables -----*/
01368 nbricks = option_data->numbricks;
01369 output_prefix = option_data->bucket_filename;
01370 output_session = (char *) malloc (sizeof(char) * MAX_NAME_LENGTH);
01371 strcpy (output_session, "./");
01372 dimension = p + q;
01373
01374
01375 /*----- allocate memory -----*/
01376 bar = (short **) malloc (sizeof(short *) * nbricks);
01377 MTEST (bar);
01378
01379
01380 /*----- read first dataset -----*/
01381 old_dset = THD_open_one_dataset (input_filename);
01382
01383
01384 /*-- make an empty copy of this dataset, for eventual output --*/
01385 new_dset = EDIT_empty_copy (old_dset);
01386
01387
01388 /*----- Record history of dataset -----*/
01389 if( commandline != NULL )
01390 tross_Append_History( new_dset , commandline ) ;
01391 sprintf (label, "Output prefix: %s", output_prefix);
01392 tross_Append_History ( new_dset, label);
01393
01394
01395 /*----- Modify some structural properties. Note that the nbricks
01396 just make empty sub-bricks, without any data attached. -----*/
01397 ierror = EDIT_dset_items (new_dset,
01398 ADN_prefix, output_prefix,
01399 ADN_directory_name, output_session,
01400 ADN_type, HEAD_FUNC_TYPE,
01401 ADN_func_type, FUNC_BUCK_TYPE,
01402 ADN_ntt, 0, /* no time */
01403 ADN_nvals, nbricks,
01404 ADN_malloc_type, DATABLOCK_MEM_MALLOC ,
01405 ADN_none ) ;
01406
01407 if( ierror > 0 )
01408 {
01409 fprintf(stderr,
01410 "*** %d errors in attempting to create output dataset!\n",
01411 ierror);
01412 exit(1);
01413 }
01414
01415 if (THD_is_file(DSET_HEADNAME(new_dset)))
01416 {
01417 fprintf(stderr,
01418 "*** Output dataset file %s already exists--cannot continue!\n",
01419 DSET_HEADNAME(new_dset));
01420 exit(1);
01421 }
01422
01423
01424 /*----- deleting exemplar dataset -----*/
01425 THD_delete_3dim_dataset( old_dset , False ); old_dset = NULL ;
01426
01427
01428 /*----- loop over new sub-brick index, attach data array with
01429 EDIT_substitute_brick then put some strings into the labels and
01430 keywords, and modify the sub-brick scaling factor -----*/
01431 for (ib = 0; ib < nbricks; ib++)
01432 {
01433 /*----- get information about this sub-brick -----*/
01434 brick_type = option_data->brick_type[ib];
01435 brick_coef = option_data->brick_coef[ib];
01436 brick_label = option_data->brick_label[ib];
01437
01438 if (brick_type == FUNC_FIM_TYPE)
01439 {
01440 if (brick_coef < q)
01441 volume = ncoef_vol[brick_coef];
01442 else if (brick_coef < p+q)
01443 volume = scoef_vol[brick_coef-q];
01444 }
01445
01446 /*----- allocate memory for output sub-brick -----*/
01447 bar[ib] = (short *) malloc (sizeof(short) * nxyz);
01448 MTEST (bar[ib]);
01449 factor = EDIT_coerce_autoscale_new (nxyz, MRI_float, volume,
01450 MRI_short, bar[ib]);
01451
01452 if (factor < EPSILON) factor = 0.0;
01453 else factor = 1.0 / factor;
01454
01455 /*----- edit the sub-brick -----*/
01456 EDIT_BRICK_LABEL (new_dset, ib, brick_label);
01457 EDIT_BRICK_FACTOR (new_dset, ib, factor);
01458
01459
01460 /*----- attach bar[ib] to be sub-brick #ib -----*/
01461 EDIT_substitute_brick (new_dset, ib, MRI_short, bar[ib]);
01462
01463 }
01464
01465
01466 /*----- write bucket data set -----*/
01467 THD_load_statistics (new_dset);
01468 THD_write_3dim_dataset( NULL,NULL , new_dset , True ) ;
01469 fprintf(stderr,"Wrote bucket dataset ");
01470 fprintf(stderr,"into %s\n", DSET_BRIKNAME(new_dset));
01471
01472
01473 /*----- deallocate memory -----*/
01474 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ;
01475
01476 }
|
|
||||||||||||||||||||||||||||||||||||
|
Definition at line 1025 of file 3dTSgen.c. Referenced by main().
01036 {
01037 int ip; /* parameter index */
01038
01039
01040 if (iv < 0)
01041 printf ("\n\nVoxel Results: \n");
01042 else
01043 printf ("\n\nVoxel #%d\n", iv+1);
01044
01045
01046 /*----- write full model parameters -----*/
01047 printf ("\nFull (%s + %s) Model: \n", nname, sname);
01048
01049 for (ip = 0; ip < r; ip++)
01050 printf ("gn[%d]=%12.6f %s \n", ip, par_full[ip], npname[ip]);
01051
01052 for (ip = 0; ip < p; ip++)
01053 printf ("gs[%d]=%12.6f %s \n", ip, par_full[ip+r], spname[ip]);
01054 }
|
|
||||||||||||||||||||
|
Definition at line 1002 of file 3dTSgen.c.
01009 {
01010 int it; /* time index */
01011
01012 for (it = 0; it < ts_length; it++)
01013 printf ("ts_array[%d] = %9.3f d_array[%d][%d] = %d \n",
01014 it, ts_array[it], it, iv+1, d_array[it][iv]);
01015
01016 }
|
Variable Documentation
|
|
Definition at line 74 of file 3dTSgen.c. Referenced by initialize_program(), output_ts_array(), write_afni_data(), and write_bucket_data(). |
|
|
Definition at line 69 of file 3dTSgen.c. Referenced by initialize_program(). |
|
|
Definition at line 71 of file 3dTSgen.c. Referenced by get_options(), and initialize_program(). |
|
|
Definition at line 70 of file 3dTSgen.c. Referenced by get_options(), and initialize_program(). |