Doxygen Source Code Documentation
dsetdup.c File Reference
#include "mrilib.h"Go to the source code of this file.
Defines | |
| #define | DUPERR(str) do{ fprintf(stderr,"ERROR: %s\n",(str)) ; exit(1) ; } while(1) |
Functions | |
| THD_3dim_dataset * | duplicate_dataset (THD_3dim_dataset *parent) |
| int | main (int argc, char *argv[]) |
Variables | |
| char | DUP_session [THD_MAX_NAME] = "./" |
| char | DUP_prefix [THD_MAX_PREFIX] = "dup" |
| char | DUP_label [THD_MAX_LABEL] = "\0" |
| char | DUP_dname [THD_MAX_NAME] = "\0" |
| int | anatomy_type = ILLEGAL_TYPE |
| int | function_type = ILLEGAL_TYPE |
| int | dataset_type = ILLEGAL_TYPE |
Define Documentation
|
|
|
Function Documentation
|
|
scan command line options * Definition at line 201 of file dsetdup.c. References ADDTO_KILL, THD_3dim_dataset::anat_parent, THD_3dim_dataset::anat_parent_name, THD_datablock::atr, THD_datablock::brick, THD_datablock::brick_bytes, THD_diskptr::byte_order, DATABLOCK_MEM_UNDEFINED, DATABLOCK_TYPE, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, DBLK_unlock, THD_3dim_dataset::death_mark, THD_diskptr::dimsizes, THD_diskptr::directory_name, THD_datablock::diskptr, DISKPTR_TYPE, THD_3dim_dataset::func_type, IDENTITY_WARP, INIT_KILL, ISVALID_3DIM_DATASET, THD_datablock::kl, THD_3dim_dataset::kl, THD_3dim_dataset::label1, THD_3dim_dataset::label2, THD_datablock::malloc_type, THD_3dim_dataset::markers, MCW_strncpy, myXtNew, THD_datablock::natr, THD_datablock::natr_alloc, THD_diskptr::nvals, THD_datablock::nvals, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, THD_statistics::parent, THD_datablock::parent, THD_dataxes::parent, THD_diskptr::prefix, THD_diskptr::rank, THD_3dim_dataset::self_name, THD_3dim_dataset::self_warp, THD_3dim_dataset::stats, THD_diskptr::storage_mode, STORAGE_UNDEFINED, THD_3dim_dataset::tcat_len, THD_3dim_dataset::tcat_list, THD_3dim_dataset::tcat_num, THD_get_write_order(), THD_init_diskptr_names(), THD_MAX_LABEL, THD_MAX_NAME, THD_datablock::total_bytes, THD_diskptr::type, THD_datablock::type, THD_warp::type, THD_3dim_dataset::type, THD_3dim_dataset::view_type, THD_3dim_dataset::vox_warp, THD_3dim_dataset::warp, THD_3dim_dataset::warp_parent, THD_3dim_dataset::warp_parent_name, THD_3dim_dataset::wod_daxes, and THD_3dim_dataset::wod_flag. Referenced by main().
00202 {
00203 THD_3dim_dataset * new_dset ;
00204 int ii ;
00205
00206 /* sanity checks */
00207
00208 if( ! ISVALID_3DIM_DATASET(parent) ) return NULL ;
00209
00210 /* make new dataset, copying appropriate fields from its various parents */
00211
00212 new_dset = myXtNew( THD_3dim_dataset ) ; INIT_KILL( new_dset->kl ) ;
00213
00214 new_dset->type = parent->type ;
00215 new_dset->func_type = parent->func_type ;
00216 new_dset->view_type = parent->view_type ;
00217
00218 new_dset->anat_parent = NULL ; /* no anat parent */
00219 new_dset->anat_parent_name[0] = '\0' ;
00220
00221 new_dset->warp_parent = parent ; /* yes warp parent */
00222 MCW_strncpy( new_dset->warp_parent_name , parent->self_name , THD_MAX_NAME ) ;
00223
00224 /* make the actual warp from the warp_parent to this dataset */
00225
00226 new_dset->vox_warp = myXtNew( THD_warp ) ;
00227 new_dset->vox_warp->type = ILLEGAL_TYPE ; /* created when needed */
00228 new_dset->warp = myXtNew( THD_warp ) ;
00229 *(new_dset->warp) = IDENTITY_WARP ;
00230
00231 /* make up some names for this new dataset */
00232
00233 MCW_strncpy( new_dset->self_name , parent->self_name , THD_MAX_NAME-5 ) ;
00234 ii = strlen( new_dset->self_name ) ;
00235 MCW_strncpy( &(new_dset->self_name[ii]) , "%duplicate" , THD_MAX_NAME-ii ) ;
00236
00237 MCW_strncpy( new_dset->label1 , parent->label1 , THD_MAX_LABEL ) ;
00238 MCW_strncpy( new_dset->label2 , parent->label2 , THD_MAX_LABEL ) ;
00239
00240 /* set the axes for this new dataset
00241 (same as parent, since that's the meaning of this routine) */
00242
00243 new_dset->daxes = myXtNew( THD_dataxes ) ; /* copy data axes of */
00244 *(new_dset->daxes) = *(parent->daxes) ; /* parent */
00245 new_dset->daxes->parent = (XtPointer) new_dset ; /* reset parent */
00246
00247 new_dset->wod_daxes = myXtNew( THD_dataxes ) ; /* warp-on-demand */
00248 *(new_dset->wod_daxes) = *(new_dset->daxes) ;
00249 new_dset->wod_flag = True ;
00250
00251 /* create a datablock and diskptr, in case the data is ever
00252 filled into memory (instead of wod) and written to disk */
00253
00254 new_dset->dblk = myXtNew( THD_datablock ) ; INIT_KILL( new_dset->dblk->kl ) ;
00255
00256 new_dset->dblk->type = DATABLOCK_TYPE ;
00257 new_dset->dblk->nvals = parent->dblk->nvals ;
00258 new_dset->dblk->brick = NULL ;
00259 new_dset->dblk->malloc_type = DATABLOCK_MEM_UNDEFINED ;
00260 new_dset->dblk->total_bytes = 0 ;
00261 new_dset->dblk->brick_bytes = 0 ;
00262 new_dset->dblk->natr = new_dset->dblk->natr_alloc = 0 ;
00263 new_dset->dblk->atr = NULL ;
00264 new_dset->dblk->parent = (XtPointer) new_dset ;
00265
00266 DBLK_unlock(new_dset->dblk) ;
00267
00268 new_dset->dblk->diskptr = myXtNew( THD_diskptr ) ;
00269 new_dset->dblk->diskptr->type = DISKPTR_TYPE ;
00270 new_dset->dblk->diskptr->nvals = parent->dblk->nvals ;
00271 new_dset->dblk->diskptr->rank = 3 ;
00272 new_dset->dblk->diskptr->storage_mode = STORAGE_UNDEFINED ;
00273 new_dset->dblk->diskptr->byte_order = THD_get_write_order() ; /* 25 April 1998 */
00274 new_dset->dblk->diskptr->dimsizes[0] = new_dset->daxes->nxx ;
00275 new_dset->dblk->diskptr->dimsizes[1] = new_dset->daxes->nyy ;
00276 new_dset->dblk->diskptr->dimsizes[2] = new_dset->daxes->nzz ;
00277
00278 /* create the names for storage on disk (if ever)
00279 -- note we put it in the same directory as the parent */
00280
00281 THD_init_diskptr_names( new_dset->dblk->diskptr ,
00282 parent->dblk->diskptr->directory_name , NULL ,
00283 parent->dblk->diskptr->prefix ,
00284 new_dset->view_type , True ) ;
00285
00286 ADDTO_KILL( new_dset->dblk->kl , new_dset->dblk->diskptr ) ;
00287
00288 /* oh yeah, set the new_dset kill list,
00289 copy statistics if available, and NULL out any unused stuff */
00290
00291 ADDTO_KILL( new_dset->kl , new_dset->warp ) ;
00292 ADDTO_KILL( new_dset->kl , new_dset->vox_warp ) ;
00293 ADDTO_KILL( new_dset->kl , new_dset->daxes ) ;
00294 ADDTO_KILL( new_dset->kl , new_dset->wod_daxes ) ;
00295 ADDTO_KILL( new_dset->kl , new_dset->dblk ) ;
00296
00297 new_dset->self_warp = NULL ; /* 26 Aug 2002 */
00298
00299 if( parent->stats != NULL ){
00300 new_dset->stats = myXtNew( THD_statistics ) ; /* copy statistics */
00301 *(new_dset->stats) = *(parent->stats) ; /* of parent */
00302 new_dset->stats->parent = (XtPointer) new_dset ;
00303 ADDTO_KILL( new_dset->kl , new_dset->stats ) ;
00304 } else {
00305 new_dset->stats = NULL ;
00306 }
00307
00308 new_dset->markers = NULL ; /* no markers */
00309 new_dset->death_mark = 0 ; /* don't kill me! */
00310 new_dset->tcat_list = 0 ;
00311 new_dset->tcat_num = 0 ;
00312 new_dset->tcat_len = NULL ;
00313
00314 return(new_dset) ;
00315 }
|
|
||||||||||||
|
convert DTIStudio fiber format data to SUMA segment data Definition at line 30 of file dsetdup.c. References anatomy_type, argc, dataset_type, THD_3dim_dataset::dblk, DUP_dname, DUP_label, DUP_prefix, DUP_session, duplicate_dataset(), FIRST_3DIM_TYPE, FIRST_ANAT_TYPE, FIRST_FUNC_TYPE, THD_3dim_dataset::func_type, function_type, HEAD_ANAT_TYPE, HEAD_FUNC_TYPE, ISANAT, ISFUNCTYPE, ISVALID_3DIM_DATASET, THD_3dim_dataset::label1, LAST_3DIM_TYPE, LAST_ANAT_TYPE, LAST_FUNC_TYPE, MCW_strncpy, THD_datablock::nvals, THD_3dim_dataset::self_name, THD_MAX_LABEL, THD_MAX_NAME, THD_MAX_PREFIX, THD_open_one_dataset(), THD_write_3dim_dataset(), and THD_3dim_dataset::type.
00031 {
00032 int nopt , ii ;
00033 THD_3dim_dataset * dset_in , * dset_out ;
00034
00035 /** check for help **/
00036
00037 if( argc < 2 || strncmp(argv[1],"-help",3) == 0 ){
00038 printf(
00039 "Usage: dsetdup [options] dataset\n"
00040 " 'Duplicates' a dataset by making a warp-on-demand copy.\n"
00041 " Applications:\n"
00042 " - allows AFNI to resample a dataset to a new grid without\n"
00043 " destroying an existing data .BRIK\n"
00044 " - change a functional dataset to anatomical, or vice-versa\n"
00045 "\n"
00046 "OPTIONS:\n"
00047 " -type = convert to the given 'type', which must be\n"
00048 " chosen from the same list as in to3d\n"
00049 " -session dirname = write output into given directory (default=./)\n"
00050 " -prefix pname = use 'pname' for the output directory prefix\n"
00051 " (default=dup)\n"
00052 " -label string = use 'string' for the label in the output\n"
00053 " dataset (default = pname)\n"
00054 " -dname name = will make 3D dataset's name = 'name'\n"
00055 "\n"
00056 "N.B.: Even if the new dataset is anatomical, it will not contain\n"
00057 " any markers, duplicated from the original, or otherwise.\n"
00058 ) ;
00059 exit(0) ;
00060 }
00061
00062 /** scan command line options **/
00063
00064 #define DUPERR(str) \
00065 do{ fprintf(stderr,"ERROR: %s\n",(str)) ; exit(1) ; } while(1)
00066
00067 nopt = 1 ;
00068 while( nopt < argc && argv[nopt][0] == '-' ){
00069
00070 /*** the following code is borrowed from to3d ***/
00071
00072 /* -type from the anatomy prefixes */
00073
00074 for( ii=FIRST_ANAT_TYPE ; ii <= LAST_ANAT_TYPE ; ii++ )
00075 if( strncmp( &(argv[nopt][1]) ,
00076 ANAT_prefixstr[ii] , THD_MAX_PREFIX ) == 0 ) break ;
00077
00078 if( ii <= LAST_ANAT_TYPE ){
00079 anatomy_type = ii ;
00080 dataset_type = HEAD_ANAT_TYPE ;
00081 nopt++ ; continue ;
00082 }
00083
00084 /* -type from the function prefixes */
00085
00086 for( ii=FIRST_FUNC_TYPE ; ii <= LAST_FUNC_TYPE ; ii++ )
00087 if( strncmp( &(argv[nopt][1]) ,
00088 FUNC_prefixstr[ii] , THD_MAX_PREFIX ) == 0 ) break ;
00089
00090 if( ii <= LAST_FUNC_TYPE ){
00091 function_type = ii ;
00092 dataset_type = HEAD_FUNC_TYPE ;
00093 nopt++ ; continue ;
00094 }
00095
00096 /**** -session dirname ****/
00097
00098 if( strncmp(argv[nopt],"-session",6) == 0 ){
00099 nopt++ ;
00100 if( nopt >= argc ) DUPERR("need argument after -session!") ;
00101 MCW_strncpy( DUP_session , argv[nopt++] , THD_MAX_NAME ) ;
00102 continue ;
00103 }
00104
00105 /**** -prefix prefix ****/
00106
00107 if( strncmp(argv[nopt],"-prefix",6) == 0 ){
00108 nopt++ ;
00109 if( nopt >= argc ) DUPERR("need argument after -prefix!") ;
00110 MCW_strncpy( DUP_prefix , argv[nopt++] , THD_MAX_PREFIX ) ;
00111 continue ;
00112 }
00113
00114 /**** -label string ****/
00115
00116 if( strncmp(argv[nopt],"-label",6) == 0 ){
00117 nopt++ ;
00118 if( nopt >= argc ) DUPERR("need argument after -label!") ;
00119 MCW_strncpy( DUP_label , argv[nopt++] , THD_MAX_LABEL ) ;
00120 continue ;
00121 }
00122
00123 /**** -dname string ****/
00124
00125 if( strncmp(argv[nopt],"-dname",6) == 0 ){
00126 nopt++ ;
00127 if( nopt >= argc ) DUPERR("need argument after -dname!") ;
00128 MCW_strncpy( DUP_dname , argv[nopt++] , THD_MAX_NAME ) ;
00129 continue ;
00130 }
00131
00132 /**** unknown switch ****/
00133
00134 fprintf(stderr,"*** unrecognized option %s\n",argv[nopt]) ;
00135 exit(1) ;
00136 } /* end of loop over options */
00137
00138 if( strlen(DUP_label) == 0 ){
00139 MCW_strncpy(DUP_label,DUP_prefix,THD_MAX_LABEL) ;
00140 }
00141
00142 if( nopt >= argc ) DUPERR("no dataset name given!") ;
00143
00144 /*** read input dataset ***/
00145
00146 dset_in = THD_open_one_dataset( argv[nopt] ) ;
00147 if( ! ISVALID_3DIM_DATASET(dset_in) ) DUPERR("cannot read dataset!\n") ;
00148
00149 /*** copy header info ***/
00150
00151 dset_out = duplicate_dataset( dset_in ) ;
00152 if( ! ISVALID_3DIM_DATASET(dset_out) ) DUPERR("cannot make duplicate!\n") ;
00153
00154 /*** rewrite some strings ***/
00155
00156 strcpy( dset_out->label1 , DUP_label ) ;
00157 if( strlen(DUP_dname) > 0 ) strcpy( dset_out->self_name , DUP_dname ) ;
00158
00159 /*** change of type? ***/
00160
00161 if( dataset_type >= FIRST_3DIM_TYPE && dataset_type <= LAST_3DIM_TYPE ){
00162
00163 int isfunc , new_nvals ;
00164
00165 isfunc = ISFUNCTYPE(dataset_type) ;
00166 new_nvals = (isfunc) ? FUNC_nvals[function_type]
00167 : ANAT_nvals[anatomy_type] ;
00168
00169 if( new_nvals > dset_in->dblk->nvals ){
00170 fprintf(stderr,
00171 "ERROR: new dataset type has %d values per voxel, but old has %d!\n"
00172 " ==> cannot make duplicate!\n" ,
00173 new_nvals , dset_in->dblk->nvals ) ;
00174 exit(1) ;
00175
00176 } else if( new_nvals < dset_in->dblk->nvals ){
00177 fprintf(stderr,
00178 "WARNING: new dataset type has %d values per voxel, but old has %d!\n"
00179 " ==> new dataset will not access all data in old!\n",
00180 new_nvals , dset_in->dblk->nvals ) ;
00181 }
00182
00183 dset_out->type = dataset_type ;
00184 dset_out->func_type = ISANAT(dset_out) ? (anatomy_type)
00185 : (function_type) ;
00186 }
00187
00188 /*** done! ***/
00189
00190 THD_write_3dim_dataset( DUP_session , DUP_prefix , dset_out , False ) ;
00191
00192 exit(0) ;
00193 }
|
Variable Documentation
|
|
Definition at line 24 of file dsetdup.c. Referenced by main(). |
|
|
Definition at line 26 of file dsetdup.c. Referenced by main(). |
|
|
Definition at line 22 of file dsetdup.c. Referenced by main(). |
|
|
Definition at line 21 of file dsetdup.c. Referenced by main(). |
|
|
Definition at line 20 of file dsetdup.c. Referenced by main(). |
|
|
Definition at line 19 of file dsetdup.c. Referenced by main(). |
|
|
Definition at line 25 of file dsetdup.c. Referenced by main(). |