Doxygen Source Code Documentation
from3d.c File Reference
#include "mrilib.h"Go to the source code of this file.
Defines | |
| #define | PROGRAM_NAME "from3d" |
| #define | PROGRAM_AUTHOR "B. Douglas Ward" |
| #define | PROGRAM_INITIAL "30 August 1996" |
| #define | PROGRAM_LATEST "15 August 2001" |
| #define | FatalError(str) ( fprintf(stderr,"\nError: %s\n\r try 'from3d -help'\n",(str)) , exit(1) ) |
Functions | |
| void | Syntax (void) |
| void | F3D_initialize_user_data (int Argc, char *Argv[], Boolean *verbose, Boolean *nsize, Boolean *raw, Boolean *do_floats, int *zfirst, int *zlast, int *tfirst, int *tlast, char *input_filename, char *prefix_filename) |
| int | main (int argc, char *argv[]) |
Define Documentation
|
|
|
|
|
Definition at line 22 of file from3d.c. Referenced by main(). |
|
|
Definition at line 23 of file from3d.c. Referenced by main(). |
|
|
Definition at line 24 of file from3d.c. Referenced by main(). |
|
|
Definition at line 21 of file from3d.c. Referenced by F3D_initialize_user_data(), and main(). |
Function Documentation
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 81 of file from3d.c. References AFNI_logger(), FatalError, machdep(), PROGRAM_NAME, strtod(), and Syntax(). Referenced by main().
00085 {
00086 const int BIGNUMBER = 100000;
00087 int nopt;
00088 float ftemp;
00089
00090 /*----- Does user request help menu? -----*/
00091 if (Argc < 2 || strncmp(Argv[1],"-help",4) == 0) Syntax();
00092
00093 /*----- Add to program log -----*/
00094 machdep(); AFNI_logger (PROGRAM_NAME,Argc,Argv);
00095
00096 /* --- set default values --- */
00097 *verbose = FALSE;
00098 *nsize = FALSE;
00099 *raw = FALSE; /* 05 Jan 2000 */
00100 *do_floats = FALSE ; /* 05 Jan 2000 */
00101 *zfirst = 1;
00102 *zlast = BIGNUMBER;
00103 *tfirst = 1;
00104 *tlast = BIGNUMBER;
00105 strcpy(input_filename, "");
00106 strcpy(prefix_filename, "");
00107
00108
00109 /* --- scan options --- */
00110 nopt = 1 ;
00111 while ( nopt < Argc && Argv[nopt][0] == '-' )
00112 {
00113
00114 /* --- verbose option --- */
00115 if ( strncmp(Argv[nopt],"-v",2) == 0 )
00116 {
00117 *verbose = TRUE;
00118 nopt++ ;
00119 continue;
00120 }
00121
00122 /* --- nsize option --- */
00123 if ( strncmp(Argv[nopt],"-nsize",4) == 0 )
00124 {
00125 *nsize = TRUE;
00126 nopt++ ;
00127 continue;
00128 }
00129
00130 /* --- raw option [05 Jan 2000]--- */
00131 if ( strncmp(Argv[nopt],"-raw",4) == 0 )
00132 {
00133 *raw = TRUE;
00134 nopt++ ;
00135 continue;
00136 }
00137
00138 /* --- float option [05 Jan 2000]--- */
00139 if ( strncmp(Argv[nopt],"-float",4) == 0 )
00140 {
00141 *do_floats = TRUE;
00142 nopt++ ;
00143 continue;
00144 }
00145
00146 /* --- zfirst option --- */
00147 if ( strncmp(Argv[nopt],"-zfirst",4) == 0 )
00148 {
00149 if( ++nopt >= Argc ) FatalError("-zfirst needs an argument") ;
00150 ftemp = strtod( Argv[nopt] , NULL ) ;
00151 *zfirst = (int) ftemp ;
00152 nopt++ ;
00153 continue ;
00154 }
00155
00156 /* --- zlast option --- */
00157 if ( strncmp(Argv[nopt],"-zlast",4) == 0 )
00158 {
00159 if( ++nopt >= Argc ) FatalError("-zlast needs an argument") ;
00160 ftemp = strtod( Argv[nopt] , NULL ) ;
00161 *zlast = (int) ftemp ;
00162 nopt++ ;
00163 continue ;
00164 }
00165
00166 /* --- tfirst option --- */
00167 if ( strncmp(Argv[nopt],"-tfirst",4) == 0 )
00168 {
00169 if( ++nopt >= Argc ) FatalError("-tfirst needs an argument") ;
00170 ftemp = strtod( Argv[nopt] , NULL ) ;
00171 *tfirst = (int) ftemp ;
00172 nopt++ ;
00173 continue ;
00174 }
00175
00176 /* --- tlast option --- */
00177 if ( strncmp(Argv[nopt],"-tlast",4) == 0 )
00178 {
00179 if( ++nopt >= Argc ) FatalError("-tlast needs an argument") ;
00180 ftemp = strtod( Argv[nopt] , NULL ) ;
00181 *tlast = (int) ftemp ;
00182 nopt++ ;
00183 continue ;
00184 }
00185
00186 /* --- input file name --- */
00187 if ( strncmp(Argv[nopt],"-input",4) == 0 )
00188 {
00189 if ( ++nopt >= Argc ) FatalError("-input needs a name") ;
00190 strcpy ( input_filename , Argv[nopt] ) ;
00191 nopt++ ; continue ;
00192 }
00193
00194 /* --- prefix name --- */
00195 if ( strncmp(Argv[nopt],"-prefix",4) == 0 )
00196 {
00197 if ( ++nopt >= Argc ) FatalError("-prefix needs a name") ;
00198 strcpy ( prefix_filename , Argv[nopt] ) ;
00199 nopt++ ; continue ;
00200 }
00201
00202 /* --- exception --- */
00203 FatalError ("Illegal input");
00204
00205 } /* nopt */
00206
00207 /* --- check for valid inputs --- */
00208 if (*zfirst > *zlast)
00209 FatalError ("Cannot have zfirst > zlast");
00210 if (*tfirst > *tlast)
00211 FatalError ("Cannot have tfirst > tlast");
00212 if (!strcmp(input_filename,""))
00213 FatalError ("Must specify input file name. ");
00214 if (!strcmp(prefix_filename,""))
00215 FatalError ("Must specify prefix file name.");
00216
00217 return;
00218 }
|
|
||||||||||||
|
\** File : SUMA.c
Input paramters :
Definition at line 222 of file from3d.c. References argc, THD_datablock::brick, MRI_DATA::byte_data, MRI_DATA::complex_data, THD_3dim_dataset::dblk, THD_diskptr::dimsizes, THD_datablock::diskptr, MRI_DATA::double_data, F3D_initialize_user_data(), FatalError, MRI_DATA::float_data, free, MRI_IMAGE::im, IMAGE_IN_IMARR, MRI_DATA::int_data, mri_free(), mri_new_vol_empty(), mri_nsize(), mri_to_float(), mri_write(), mri_write_raw(), THD_diskptr::nvals, nz, PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, MRI_DATA::rgb_data, MRI_DATA::short_data, THD_delete_3dim_dataset(), THD_load_datablock(), THD_MAX_NAME, and THD_open_dataset().
00223 {
00224 /* --- variable declarations --- */
00225 THD_3dim_dataset * dset ;
00226 THD_diskptr * dskptr;
00227 int nx, ny, nz, nv;
00228 Boolean verbose, nsize, raw, do_floats;
00229 int ok;
00230 MRI_IMAGE * im, * im2d, * tim2d , * fim2d ;
00231 MRI_TYPE kind;
00232 int ibr, iz, count;
00233 int zfirst, zlast, tfirst, tlast;
00234 char input_filename[THD_MAX_NAME],
00235 prefix_filename[THD_MAX_NAME],
00236 output_filename[THD_MAX_NAME],
00237 str[THD_MAX_NAME];
00238
00239
00240 /*----- Identify software -----*/
00241 printf ("\n\n");
00242 printf ("Program: %s \n", PROGRAM_NAME);
00243 printf ("Author: %s \n", PROGRAM_AUTHOR);
00244 printf ("Initial Release: %s \n", PROGRAM_INITIAL);
00245 printf ("Latest Revision: %s \n", PROGRAM_LATEST);
00246 printf ("\n");
00247
00248 /* --- get user command line inputs --- */
00249 F3D_initialize_user_data (argc, argv,
00250 &verbose, &nsize,&raw,&do_floats,
00251 &zfirst, &zlast, &tfirst, &tlast,
00252 input_filename, prefix_filename );
00253
00254 /* --- open 3D dataset --- */
00255 dset = THD_open_dataset( input_filename ) ;
00256 if( dset == NULL ) FatalError ("Unable to open input file") ;
00257 if ( verbose ) printf("\n" "3D Dataset File: %s\n" , input_filename ) ;
00258
00259 /* --- load data block --- */
00260 ok = THD_load_datablock( dset->dblk );
00261 if ( !ok ) FatalError ("Unable to load data block") ;
00262
00263 /* --- get data dimensions --- */
00264 dskptr = dset->dblk->diskptr;
00265 nx = dskptr->dimsizes[0];
00266 ny = dskptr->dimsizes[1];
00267 nz = dskptr->dimsizes[2];
00268 nv = dskptr->nvals;
00269 if ( verbose )
00270 printf ("nx = %d ny = %d nz = %d nv = %d\n", nx, ny, nz, nv);
00271
00272 /* --- check for valid user inputs --- */
00273 if (zfirst < 1) zfirst = 1;
00274 if (zlast > nz) zlast = nz;
00275 if (tfirst < 1) tfirst = 1;
00276 if (tlast > nv) tlast = nv;
00277 if (zfirst > nz) FatalError ("No data selected -- zfirst too large.");
00278 if (zlast < 1) FatalError ("No data selected -- zlast too small.");
00279 if (tfirst > nv) FatalError ("No data selected -- tfirst too large.");
00280 if (tlast < 1) FatalError ("No data selected -- tlast too small.");
00281
00282 /* --- get data type --- */
00283 kind = IMAGE_IN_IMARR ( dset->dblk->brick, 0 ) -> kind;
00284 if ( verbose ){
00285 printf ("Input data type : %s\n", MRI_TYPE_name[kind]);
00286 if( do_floats && kind != MRI_float )
00287 printf ("Output data type: float\n") ;
00288 }
00289
00290 /* --- create 2D data pointer --- */
00291 im2d = mri_new_vol_empty ( nx, ny, 1, kind );
00292
00293 count = 0;
00294 for ( ibr = tfirst-1 ; ibr < tlast ; ibr++ )
00295 {
00296 for ( iz = zfirst-1 ; iz < zlast ; iz++ )
00297 {
00298 /* --- set 2D data pointer into 3D dataset --- */
00299 im = IMAGE_IN_IMARR ( dset->dblk->brick, ibr );
00300 switch ( kind )
00301 {
00302 case MRI_byte :
00303 im2d->im.byte_data = im->im.byte_data + iz * nx * ny ;
00304 break;
00305 case MRI_short :
00306 im2d->im.short_data = im->im.short_data + iz * nx * ny ;
00307 break;
00308 case MRI_int :
00309 im2d->im.int_data = im->im.int_data + iz * nx * ny ;
00310 break;
00311 case MRI_float :
00312 im2d->im.float_data = im->im.float_data + iz * nx * ny ;
00313 break;
00314 case MRI_double :
00315 im2d->im.double_data = im->im.double_data + iz * nx * ny ;
00316 break;
00317 case MRI_complex :
00318 im2d->im.complex_data = im->im.complex_data + iz * nx * ny ;
00319 break;
00320 case MRI_rgb :
00321 im2d->im.rgb_data = im->im.rgb_data + iz * nx * ny ;
00322 break;
00323 default :
00324 FatalError ("Illegal data type encountered.");
00325 }
00326
00327 /* --- create 2D data file name --- */
00328 strcpy ( output_filename, prefix_filename );
00329 if ( nv > 1 )
00330 sprintf ( str, "%02d.%04d", iz+1, ibr+1 );
00331 else
00332 if ( nz > 999 )
00333 sprintf ( str, ".%04d", iz+1 );
00334 else
00335 sprintf ( str, ".%03d", iz+1 );
00336 strcat ( output_filename, str );
00337
00338 /* --- write 2D data file --- */
00339 if ( verbose )
00340 printf ( "Writing%s2D image: %s\n",
00341 (raw) ? " raw " : " " , output_filename );
00342
00343 fim2d = (nsize) ? mri_nsize(im2d) : im2d ;
00344
00345 if( do_floats ){
00346 tim2d = mri_to_float(fim2d) ;
00347 if( fim2d != im2d ) mri_free(fim2d) ;
00348 fim2d = tim2d ;
00349 }
00350
00351 ok = (raw)? mri_write_raw( output_filename, fim2d )
00352 : mri_write ( output_filename, fim2d ) ;
00353
00354 if( fim2d != im2d ) mri_free(fim2d) ;
00355
00356 count += ok ;
00357
00358 } /* --- iz --- */
00359 } /* --- ibr --- */
00360
00361 if ( verbose ) printf ("Created %d 2D image files.\n", count);
00362
00363 /* --- clean up --- */
00364 free ( im2d );
00365 THD_delete_3dim_dataset( dset , False ) ;
00366
00367 exit(0) ;
00368 }
|
|
|
31 July 1996: be more specific about errors * Definition at line 35 of file from3d.c.
00036 {
00037 printf(
00038 "Usage: from3d [options] -input fname -prefix rname\n"
00039 "Purpose: Extract 2D image files from a 3D AFNI dataset.\n"
00040 "Options:\n"
00041 "-v Print out verbose information during the run.\n"
00042 "-nsize Adjust size of 2D data file to be NxN, by padding\n"
00043 " with zeros, where N is a power of 2.\n"
00044 "-raw Write images in 'raw' format (just the data bytes)\n"
00045 " N.B.: there will be no header information saying\n"
00046 " what the image dimensions are - you'll have\n"
00047 " to get that information from the x and y\n"
00048 " axis information output by 3dinfo.\n"
00049 "-float Write images as floats, no matter what they are in\n"
00050 " the dataset itself.\n"
00051 "-zfirst num Set 'num' = number of first z slice to be extracted.\n"
00052 " (default = 1)\n"
00053 "-zlast num Set 'num' = number of last z slice to be extracted.\n"
00054 " (default = largest)\n"
00055 "-tfirst num Set 'num' = number of first time slice to be extracted.\n"
00056 " (default = 1)\n"
00057 "-tlast num Set 'num' = number of last time slice to be extracted.\n"
00058 " (default = largest)\n"
00059 "-input fname Read 3D dataset from file 'fname'.\n"
00060 " 'fname' may include a sub-brick selector list.\n"
00061 "-prefix rname Write 2D images using prefix 'rname'.\n"
00062 "\n"
00063 " (-input and -prefix are non-optional options: they)\n"
00064 " (must be present or the program will not execute. )\n"
00065 "\n"
00066 "N.B.: * Image data is extracted directly from the dataset bricks.\n"
00067 " If a brick has a floating point scaling factor, it will NOT\n"
00068 " be applied.\n"
00069 " * Images are extracted parallel to the xy-plane of the dataset\n"
00070 " orientation (which can be determined by program 3dinfo).\n"
00071 " This is the order in which the images were input to the\n"
00072 " dataset originally, via to3d.\n"
00073 " * If either of these conditions is unacceptable, you can also\n"
00074 " try to use the Save:bkg function from an AFNI image window.\n"
00075 ) ;
00076 exit(0) ;
00077 }
|