Doxygen Source Code Documentation
edt_dsetitems.c File Reference
#include "mrilib.h"Go to the source code of this file.
Defines | |
| #define | EDERR(str) do{ fprintf(stderr,"*** EDIT_dset_items: %s\n",str) ; errnum++ ; } while(0) |
Functions | |
| int | EDIT_dset_items (THD_3dim_dataset *dset,...) |
| char * | THD_deplus_prefix (char *prefix) |
Define Documentation
|
|
Definition at line 31 of file edt_dsetitems.c. Referenced by EDIT_dset_items(). |
Function Documentation
|
||||||||||||
|
Definition at line 34 of file edt_dsetitems.c. References ADN_anat_parent, ADN_anatpar_idcode, ADN_brick_fac, ADN_brick_fac_one, ADN_brick_keywords_append_one, ADN_brick_keywords_replace_one, ADN_brick_label_one, ADN_brick_stataux_one, ADN_datum_all, ADN_datum_array, ADN_directory_name, ADN_dz_sl, ADN_func_type, ADN_keywords_append, ADN_keywords_replace, ADN_label1, ADN_label2, ADN_malloc_type, ADN_none, ADN_nsl, ADN_ntt, ADN_nvals, ADN_nxyz, ADN_ONE_STEP, ADN_prefix, ADN_self_name, ADN_stat_aux, ADN_to_dicomm, ADN_toff_sl, ADN_ttdel, ADN_ttdur, ADN_ttorg, ADN_tunits, ADN_type, ADN_view_type, ADN_warp, ADN_warp_parent, ADN_xyzdel, ADN_xyzorg, ADN_xyzorient, ADN_zorg_sl, AFNI_GOOD_DTYPE, THD_3dim_dataset::anat_parent, THD_3dim_dataset::anat_parent_idcode, THD_3dim_dataset::anat_parent_name, THD_datablock::brick_bytes, THD_datablock::brick_fac, THD_diskptr::brick_name, datum_all, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, THD_diskptr::dimsizes, THD_datablock::diskptr, DSET_BRICK_TYPE, DSET_IS_1D, DSET_IS_3D, DSET_NY, DSET_NZ, dummy, THD_timeaxis::dz_sl, EDERR, ENTRY, FIRST_3DIM_TYPE, FIRST_ORIENT_TYPE, FIRST_VIEW_TYPE, free, THD_3dim_dataset::func_type, THD_3dim_dataset::idcode, THD_ivec3::ijk, ISANAT, ISFUNC, ISVALID_3DIM_DATASET, ISVALID_MEM_CODE, ISVALID_TIMEAXIS, ISVALID_WARP, THD_3dim_dataset::label1, THD_3dim_dataset::label2, LAST_3DIM_TYPE, LAST_ANAT_TYPE, LAST_FUNC_TYPE, LAST_ORIENT_TYPE, LAST_VIEW_TYPE, LOAD_ZERO_MAT, THD_mat33::mat, MAX_STAT_AUX, MCW_strncpy, myXtFree, myXtNew, THD_timeaxis::nsl, THD_timeaxis::ntt, THD_diskptr::nvals, THD_datablock::nvals, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, ORI_A2P_TYPE, ORI_I2S_TYPE, ORI_L2R_TYPE, ORI_P2A_TYPE, ORI_R2L_TYPE, ORI_S2I_TYPE, RETURN, THD_3dim_dataset::self_name, THD_3dim_dataset::stat_aux, STRING_HAS_SUFFIX, THD_3dim_dataset::taxis, THD_append_datablock_keywords(), THD_append_dataset_keywords(), THD_copy_datablock_auxdata(), THD_count_databricks(), THD_deplus_prefix(), THD_force_malloc_type(), THD_init_datablock_brick(), THD_init_diskptr_names(), THD_MAX_LABEL, THD_MAX_NAME, THD_store_datablock_keywords(), THD_store_datablock_label(), THD_store_datablock_stataux(), THD_store_dataset_keywords(), TIMEAXIS_TYPE, THD_dataxes::to_dicomm, THD_timeaxis::toff_sl, THD_timeaxis::ttdel, THD_timeaxis::ttdur, THD_timeaxis::ttorg, THD_3dim_dataset::type, THD_timeaxis::type, THD_timeaxis::units_type, THD_3dim_dataset::view_type, THD_3dim_dataset::warp, THD_3dim_dataset::warp_parent, THD_3dim_dataset::warp_parent_idcode, THD_3dim_dataset::warp_parent_name, XtMalloc, XtRealloc, THD_dataxes::xxdel, THD_dataxes::xxmax, THD_dataxes::xxmin, THD_dataxes::xxorg, THD_dataxes::xxorient, THD_fvec3::xyz, THD_dataxes::yydel, THD_dataxes::yymax, THD_dataxes::yymin, THD_dataxes::yyorg, THD_dataxes::yyorient, THD_timeaxis::zorg_sl, THD_dataxes::zzdel, THD_dataxes::zzmax, THD_dataxes::zzmin, THD_dataxes::zzorg, and THD_dataxes::zzorient. Referenced by AFNI_fimmer_compute(), AFNI_read_images(), AFNI_read_inputs(), apply_dataxes(), apply_orientation(), applyMask(), basis_write_iresp(), basis_write_sresp(), check_one_output_file(), check_output_file(), copy_dset(), COPY_main(), create_bucket(), do_xrestore_stuff(), DRAW_copy_dset(), DRAW_saveas_finalize_CB(), DUP_main(), EDIT_full_copy(), EDIT_main(), EDIT_one_dataset(), EDIT_wod_copy(), fim3d_fimmer_compute(), form_clusters(), Fourier_Filter_Driver(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), output_results(), output_ts_array(), PERMTEST_main(), POWER_main(), process_NIML_Node_ROI(), r_new_resam_dset(), RENAME_main(), REORDER_main(), RT_fim_recurse(), RT_process_image(), RT_registration_2D_onevol(), RT_registration_3D_onevol(), RT_start_dataset(), RT_tell_afni_one(), s2v_nodes2volume(), saveMask(), STAVG_main(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), terminate(), THD_dataset_headname(), THD_dataset_tshift(), THD_init_session(), THD_is_dataset(), THD_niml_to_dataset(), THD_open_1D(), THD_open_3D(), THD_open_3dcalc(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_open_tcat(), THD_setup_mastery(), THD_warp3D(), THD_zeropad(), THRESH_main(), VOLREG_main(), WINsorize(), write_3dtime(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_bucket(), write_bucket_data(), write_output(), write_results(), write_ts_array(), and ZPAD_main().
00035 {
00036 va_list vararg_ptr ;
00037 int flag_arg , errnum = 0 ;
00038 int redo_bricks , redo_daxes , redo_taxis , ii ;
00039 void * dummy ;
00040 int iarg ;
00041
00042 /**----- variables to flag and store presence of arguments -----**/
00043
00044 int new_prefix = 0 ; char * prefix = NULL ;
00045 int new_directory_name = 0 ; char * directory_name = NULL ;
00046 int new_brick_fac = 0 ; float * brick_fac = NULL ;
00047 int new_malloc_type = 0 ; int malloc_type = ILLEGAL_TYPE ;
00048 int new_datum_all = 0 ; int datum_all = ILLEGAL_TYPE ;
00049 int new_datum_array = 0 ; int * datum_array = NULL ;
00050 int new_nvals = 0 ; int nvals = 0 ;
00051 int new_nxyz = 0 ; THD_ivec3 nxyz ;
00052 int new_xyzdel = 0 ; THD_fvec3 xyzdel ;
00053 int new_xyzorg = 0 ; THD_fvec3 xyzorg ;
00054 int new_xyzorient = 0 ; THD_ivec3 xyzorient ;
00055 int new_to_dicomm = 0 ; THD_mat33 to_dicomm ;
00056 int new_ntt = 0 ; int ntt = 0 ;
00057 int new_ttorg = 0 ; float ttorg = 0.0 ;
00058 int new_ttdel = 0 ; float ttdel = 0.0 ;
00059 int new_ttdur = 0 ; float ttdur = 0.0 ;
00060 int new_nsl = 0 ; int nsl = 0 ;
00061 int new_zorg_sl = 0 ; float zorg_sl = 0.0 ;
00062 int new_dz_sl = 0 ; float dz_sl = 0.0 ;
00063 int new_toff_sl = 0 ; float * toff_sl = NULL ;
00064 int new_type = 0 ; int type = ILLEGAL_TYPE ;
00065 int new_view_type = 0 ; int view_type = ILLEGAL_TYPE ;
00066 int new_func_type = 0 ; int func_type = ILLEGAL_TYPE ;
00067 int new_label1 = 0 ; char * label1 = NULL ;
00068 int new_label2 = 0 ; char * label2 = NULL ;
00069 int new_self_name = 0 ; char * self_name = NULL ;
00070 int new_warp_parent = 0 ; THD_3dim_dataset * warp_parent = NULL ;
00071 int new_anat_parent = 0 ; THD_3dim_dataset * anat_parent = NULL ;
00072 int new_stat_aux = 0 ; float * stat_aux = NULL ;
00073 int new_warp = 0 ; THD_warp * warp = NULL ;
00074 int new_tunits = 0 ; int tunits = ILLEGAL_TYPE ;
00075 int new_keywords = 0 ; char * keywords = NULL ;
00076
00077 /* 30 Nov 1997 */
00078
00079 int new_brick_label_one = 0 ; char * brick_label_one = NULL ;
00080 int brick_label_one_iv = -1 ;
00081
00082 int new_brick_fac_one = 0 ; float brick_fac_one = 0.0 ;
00083 int brick_fac_one_iv = -1 ;
00084
00085 int new_brick_stataux_one = 0 ; float * brick_stataux_one = NULL ;
00086 int brick_stataux_one_iv = -1 ;
00087
00088 int new_brick_keywords_one = 0 ; char * brick_keywords_one = NULL ;
00089 int brick_keywords_one_iv = -1 ;
00090
00091 /****---------------------- Sanity Check ----------------------****/
00092
00093 ENTRY("EDIT_dset_items") ;
00094
00095 if( ! ISVALID_3DIM_DATASET(dset) ) RETURN(1) ; /* bad data */
00096
00097 /****----------- Scan input argument list;
00098 - Load data into locals (va_arg);
00099 - Check for legal values;
00100 - Flag its presence (the new_ variables);
00101 - Carry out simple processing that doesn't
00102 depend on the presence of other arguments. ---------****/
00103
00104 va_start( vararg_ptr , dset ) ; /** Initialize arg reading **/
00105 iarg = 1 ;
00106
00107 do{
00108 flag_arg = va_arg( vararg_ptr , int ) ; /** Get next arg **/
00109 if( flag_arg == ADN_none ) break ; /** No more args! **/
00110 #if 0
00111 fprintf(stderr,"EDIT_dset_items: iarg=%d flag_arg=%d\n",iarg,flag_arg) ;
00112 #endif
00113 iarg++ ;
00114
00115 switch( flag_arg ){
00116
00117 default:{
00118 int iv ;
00119 char str[128] ;
00120
00121 /** 30 Nov 1997: check for special cases **/
00122
00123 iv = flag_arg - ADN_brick_label_one ;
00124 if( iv >= 0 && iv < ADN_ONE_STEP ){
00125 brick_label_one_iv = iv ;
00126 brick_label_one = va_arg( vararg_ptr , char * ) ;
00127 if( brick_label_one != NULL ) new_brick_label_one = 1 ;
00128 break ; /* exit switch */
00129 }
00130
00131 iv = flag_arg - ADN_brick_fac_one ;
00132 if( iv >= 0 && iv < ADN_ONE_STEP ){
00133 brick_fac_one_iv = iv ;
00134 brick_fac_one = va_arg( vararg_ptr , double ) ;
00135 new_brick_fac_one = 1 ;
00136 break ; /* exit switch */
00137 }
00138
00139 iv = flag_arg - ADN_brick_stataux_one ;
00140 if( iv >= 0 && iv < ADN_ONE_STEP ){
00141 brick_stataux_one_iv = iv ;
00142 brick_stataux_one = va_arg( vararg_ptr , float * ) ;
00143 if( brick_stataux_one != NULL ) new_brick_stataux_one = 1 ;
00144 break ; /* exit switch */
00145 }
00146
00147 iv = flag_arg - ADN_brick_keywords_replace_one ;
00148 if( iv >= 0 && iv < ADN_ONE_STEP ){
00149 brick_keywords_one_iv = iv ;
00150 brick_keywords_one = va_arg( vararg_ptr , char * ) ;
00151 new_brick_keywords_one = 1 ;
00152 break ; /* exit switch */
00153 }
00154
00155 iv = flag_arg - ADN_brick_keywords_append_one ;
00156 if( iv >= 0 && iv < ADN_ONE_STEP ){
00157 brick_keywords_one_iv = iv ;
00158 brick_keywords_one = va_arg( vararg_ptr , char * ) ;
00159 new_brick_keywords_one = 2 ;
00160 break ; /* exit switch */
00161 }
00162
00163 /** not a special case? error! **/
00164
00165 sprintf(str,"illegal opcode = %d at arg #%d",flag_arg,iarg) ;
00166 EDERR(str) ; if( errnum > 9 ) RETURN(errnum) ;
00167 dummy = va_arg( vararg_ptr , void * ) ; /* skip next arg */
00168 }
00169 break ;
00170
00171 /** these two commands affect the disk file names **/
00172
00173 case ADN_prefix: /* processed later */
00174 prefix = va_arg( vararg_ptr , char * ) ;
00175 if( prefix != NULL ) new_prefix = 1 ;
00176 else EDERR("illegal new prefix") ;
00177 break ;
00178
00179 case ADN_directory_name: /* processed later */
00180 directory_name = va_arg( vararg_ptr , char * ) ;
00181 if( directory_name != NULL ) new_directory_name = 1 ;
00182 else EDERR("illegal new directory_name") ;
00183 break ;
00184
00185 /** change the memory allocation type (mmap or malloc) **/
00186
00187 case ADN_malloc_type: /* processed now */
00188 malloc_type = va_arg( vararg_ptr , int ) ;
00189 if( ISVALID_MEM_CODE(malloc_type) ){
00190 new_malloc_type = 1 ;
00191 THD_force_malloc_type( dset->dblk , malloc_type ) ;
00192 }
00193 else EDERR("illegal new malloc_type") ;
00194 break ;
00195
00196 /** these commands affect the data in the bricks **/
00197
00198 case ADN_brick_fac: /* processed later */
00199 brick_fac = va_arg( vararg_ptr , float * ) ;
00200 new_brick_fac = 1 ;
00201 break ;
00202
00203 case ADN_datum_all: /* processed later */
00204 datum_all = va_arg( vararg_ptr , int ) ;
00205 if( AFNI_GOOD_DTYPE(datum_all) ) new_datum_all = 1 ;
00206 else EDERR("illegal new datum_all") ;
00207 break ;
00208
00209 case ADN_datum_array: /* processed later */
00210 datum_array = va_arg( vararg_ptr , int * ) ;
00211 if( datum_array != NULL ) new_datum_array = 1 ;
00212 else EDERR("illegal new datum_array") ;
00213 break ;
00214
00215 case ADN_nvals: /* processed later */
00216 nvals = va_arg( vararg_ptr , int ) ;
00217 if( nvals > 0 ) new_nvals = 1 ;
00218 else EDERR("illegal new nvals") ;
00219 break ;
00220
00221 /** these commands affect the spatial axes,
00222 which may also influence size of the data bricks **/
00223
00224 case ADN_nxyz: /* processed later */
00225 nxyz = va_arg( vararg_ptr , THD_ivec3 ) ;
00226 if( nxyz.ijk[0] >= 1 && nxyz.ijk[1] >= 1 && nxyz.ijk[2] >= 1 )
00227 new_nxyz = 1 ;
00228 else EDERR("illegal new nxyz") ;
00229 break ;
00230
00231 case ADN_xyzdel: /* processed later */
00232 xyzdel = va_arg( vararg_ptr , THD_fvec3 ) ;
00233 if( xyzdel.xyz[0]!=0.0 && xyzdel.xyz[1]!=0.0 && xyzdel.xyz[2]!=0.0 )
00234 new_xyzdel = 1 ;
00235 else EDERR("illegal new xyzdel") ;
00236 break ;
00237
00238 case ADN_xyzorg: /* processed later */
00239 xyzorg = va_arg( vararg_ptr , THD_fvec3 ) ;
00240 new_xyzorg = 1 ;
00241 break ;
00242
00243 case ADN_xyzorient: /* processed later */
00244 xyzorient = va_arg( vararg_ptr , THD_ivec3 ) ;
00245 if( xyzorient.ijk[0] >= FIRST_ORIENT_TYPE &&
00246 xyzorient.ijk[0] <= LAST_ORIENT_TYPE &&
00247 xyzorient.ijk[1] >= FIRST_ORIENT_TYPE &&
00248 xyzorient.ijk[1] <= LAST_ORIENT_TYPE &&
00249 xyzorient.ijk[2] >= FIRST_ORIENT_TYPE &&
00250 xyzorient.ijk[2] <= LAST_ORIENT_TYPE &&
00251 ORIENT_xyzint[xyzorient.ijk[0]]
00252 + ORIENT_xyzint[xyzorient.ijk[1]]
00253 + ORIENT_xyzint[xyzorient.ijk[2]] == 6 )
00254
00255 new_xyzorient = 1 ;
00256 else EDERR("illegal new xyzorient") ;
00257 break ;
00258
00259 case ADN_to_dicomm: /* illegal at this time */
00260 EDERR("to_dicomm not implemented") ;
00261 break ;
00262
00263 /** these commands affect the time axis of the dataset **/
00264
00265 case ADN_ntt: /* processed later */
00266 ntt = va_arg( vararg_ptr , int ) ;
00267 if( ntt >= 0 ) new_ntt = 1 ;
00268 else EDERR("illegal new taxis ntt") ;
00269 break ;
00270
00271 case ADN_tunits: /* processed later */
00272 tunits = va_arg( vararg_ptr , int ) ;
00273 if( tunits >= 0 ) new_tunits = 1 ;
00274 else EDERR("illegal new taxis tunits") ;
00275 break ;
00276
00277 case ADN_nsl: /* processed later */
00278 nsl = va_arg( vararg_ptr , int ) ;
00279 if( nsl >= 0 ) new_nsl = 1 ;
00280 else EDERR("illegal new taxis nsl") ;
00281 break ;
00282
00283 case ADN_ttorg: /* processed later */
00284 ttorg = (float) va_arg( vararg_ptr , double ) ;
00285 new_ttorg = 1 ;
00286 break ;
00287
00288 case ADN_ttdel: /* processed later */
00289 ttdel = (float) va_arg( vararg_ptr , double ) ;
00290 new_ttdel = 1 ;
00291 break ;
00292
00293 case ADN_ttdur: /* processed later */
00294 ttdur = (float) va_arg( vararg_ptr , double ) ;
00295 new_ttdur = 1 ;
00296 break ;
00297
00298 case ADN_zorg_sl: /* processed later */
00299 zorg_sl = (float) va_arg( vararg_ptr , double ) ;
00300 new_zorg_sl = 1 ;
00301 break ;
00302
00303 case ADN_dz_sl: /* processed later */
00304 dz_sl = (float) va_arg( vararg_ptr , double ) ;
00305 if( dz_sl != 0.0 ) new_dz_sl = 1 ;
00306 else EDERR("illegal new taxis dz_sl") ;
00307 break ;
00308
00309 case ADN_toff_sl: /* processed later */
00310 toff_sl = va_arg( vararg_ptr , float * ) ;
00311 new_toff_sl = 1 ;
00312 break ;
00313
00314 /** these commands affect the interpretation of the dataset
00315 (e.g., is it functional or anatomical, which view type, ...) **/
00316
00317 case ADN_type: /* processed later */
00318 type = va_arg( vararg_ptr , int ) ;
00319 if( type >= FIRST_3DIM_TYPE && type <= LAST_3DIM_TYPE )
00320 new_type = 1 ;
00321 else EDERR("illegal new type") ;
00322 break ;
00323
00324 case ADN_view_type: /* processed later */
00325 view_type = va_arg( vararg_ptr , int ) ;
00326 if( view_type >= FIRST_VIEW_TYPE && view_type <= LAST_VIEW_TYPE )
00327 new_view_type = 1 ;
00328 else EDERR("illegal new view_type") ;
00329 break ;
00330
00331 case ADN_func_type: /* processed later */
00332 func_type = va_arg( vararg_ptr , int ) ;
00333 if( func_type >= 0 ) new_func_type = 1 ;
00334 else EDERR("illegal new func_type") ;
00335 break ;
00336
00337 /** auxiliary statistical data, for interpretation of functions **/
00338
00339 case ADN_stat_aux: /* processed now */
00340 stat_aux = va_arg( vararg_ptr , float * ) ;
00341 if( stat_aux != NULL ){
00342 new_stat_aux = 1 ;
00343 for( ii=0 ; ii < MAX_STAT_AUX ; ii++ )
00344 dset->stat_aux[ii] = stat_aux[ii] ;
00345 } else EDERR("illegal new stat_aux") ;
00346 break ;
00347
00348 /** dataset keywords **/
00349
00350 case ADN_keywords_replace: /* processed now */
00351 keywords = va_arg( vararg_ptr , char * ) ;
00352 new_keywords = 1 ;
00353 THD_store_dataset_keywords( dset , keywords ) ;
00354 break ;
00355
00356 case ADN_keywords_append: /* processed now */
00357 keywords = va_arg( vararg_ptr , char * ) ;
00358 new_keywords = 1 ;
00359 THD_append_dataset_keywords( dset , keywords ) ;
00360 break ;
00361
00362 /** various labeling options **/
00363
00364 case ADN_label1: /* processed now */
00365 label1 = va_arg( vararg_ptr , char * ) ;
00366 if( label1 != NULL ){
00367 MCW_strncpy( dset->label1 , label1 , THD_MAX_LABEL ) ;
00368 new_label1 = 1 ;
00369 }
00370 else EDERR("illegal new label1") ;
00371 break ;
00372
00373 case ADN_label2: /* processed now */
00374 label2 = va_arg( vararg_ptr , char * ) ;
00375 if( label2 != NULL ){
00376 MCW_strncpy( dset->label2 , label2 , THD_MAX_LABEL ) ;
00377 new_label2 = 1 ;
00378 }
00379 else EDERR("illegal new label2") ;
00380 break ;
00381
00382 case ADN_self_name: /* processed now */
00383 self_name = va_arg( vararg_ptr , char * ) ;
00384 if( self_name != NULL ){
00385 MCW_strncpy( dset->self_name , self_name , THD_MAX_NAME ) ;
00386 new_self_name = 1 ;
00387 }
00388 else EDERR("illegal new self_name") ;
00389 break ;
00390
00391 /** relationships to other datasets **/
00392
00393 case ADN_warp_parent: /* processed now */
00394 warp_parent = va_arg( vararg_ptr , THD_3dim_dataset * ) ;
00395 if( ISVALID_3DIM_DATASET(warp_parent) ){
00396 new_warp_parent = 1 ;
00397 dset->warp_parent = warp_parent ;
00398 MCW_strncpy(dset->warp_parent_name,warp_parent->self_name,THD_MAX_NAME) ;
00399 dset->warp_parent_idcode = warp_parent->idcode ;
00400 }
00401 else EDERR("illegal new warp_parent") ;
00402 break ;
00403
00404 case ADN_warp: /* processed now */
00405 warp = va_arg( vararg_ptr , THD_warp * ) ;
00406 if( ISVALID_WARP(warp) ){
00407 new_warp = 1 ;
00408 if( dset->warp == NULL ) dset->warp = myXtNew(THD_warp) ;
00409 *(dset->warp) =* warp ;
00410 } else EDERR("illegal new warp") ;
00411 break ;
00412
00413 case ADN_anat_parent: /* processed now */
00414 anat_parent = va_arg( vararg_ptr , THD_3dim_dataset * ) ;
00415 if( ISVALID_3DIM_DATASET(anat_parent) ){
00416 new_anat_parent = 1 ;
00417 dset->anat_parent = anat_parent ;
00418 MCW_strncpy(dset->anat_parent_name,anat_parent->self_name,THD_MAX_NAME) ;
00419 dset->anat_parent_idcode = anat_parent->idcode ;
00420 }
00421 else EDERR("illegal new anat_parent") ;
00422 break ;
00423
00424 case ADN_anatpar_idcode:{ /* processed now [13 Dec 1999] */
00425 MCW_idcode * idc ;
00426 idc = va_arg( vararg_ptr , MCW_idcode * ) ;
00427 if( idc != NULL )
00428 dset->anat_parent_idcode = *idc ;
00429 else
00430 EDERR("illegal new anatpar_idcode") ;
00431 }
00432 break ;
00433
00434 } /*- end of switch on flag_arg -*/
00435
00436 iarg++ ;
00437 } while( 1 ) ; /* end of loop over arguments */
00438 va_end( vararg_ptr ) ;
00439 if( errnum > 0 ) RETURN(errnum) ;
00440
00441 /**** carry out edits that were flagged above ****/
00442
00443 /**---------- Need to reset the disk filename? ------------**/
00444 /** 22 Nov 2002: remove +orig etc. from prefix, if present **/
00445
00446 if( new_prefix || new_directory_name || new_view_type ){
00447 char *nprefix = THD_deplus_prefix( prefix ) ;
00448
00449 THD_init_diskptr_names( dset->dblk->diskptr ,
00450 directory_name , NULL ,
00451 nprefix , view_type , True ) ;
00452
00453 if( DSET_IS_1D(dset) || DSET_IS_3D(dset) ){ /* 21 Mar 2003 */
00454 char *fname = dset->dblk->diskptr->brick_name ;
00455 int ll = strlen(fname) ;
00456 fname[ll-10] = '\0' ;
00457 if( DSET_IS_1D(dset) || (DSET_NY(dset)==1 && DSET_NZ(dset)==1) )
00458 strcat(fname,".1D");
00459 else
00460 strcat(fname,".3D");
00461 }
00462
00463 /** output of NIfTI-1.1 dataset: 06 May 2005 **/
00464
00465 if( nprefix != NULL && ( STRING_HAS_SUFFIX(nprefix,".nii") ||
00466 STRING_HAS_SUFFIX(nprefix,".nii.gz") ) ){
00467 char *fname = dset->dblk->diskptr->brick_name ;
00468 int ll = strlen(fname) ;
00469 fname[ll-10] = '\0' ;
00470 if( STRING_HAS_SUFFIX(nprefix,".nii") ) strcat(fname,".nii") ;
00471 else strcat(fname,".nii.gz") ;
00472 }
00473
00474 if( nprefix != NULL ) free(nprefix) ;
00475 }
00476
00477 /**----------- Need to reconfigure the spatial axes? -----------**/
00478 /** Most of this code is from routine THD_3dim_from_block **/
00479
00480 redo_daxes = ( new_nxyz || new_xyzorg || new_xyzdel || new_xyzorient ) ;
00481
00482 if( redo_daxes ){
00483 THD_dataxes * daxes = dset->daxes ;
00484 THD_diskptr * dkptr = dset->dblk->diskptr ;
00485
00486 /** copy new stuff into the daxes structure **/
00487
00488 if( new_nxyz ){
00489 daxes->nxx = dkptr->dimsizes[0] = nxyz.ijk[0] ;
00490 daxes->nyy = dkptr->dimsizes[1] = nxyz.ijk[1] ;
00491 daxes->nzz = dkptr->dimsizes[2] = nxyz.ijk[2] ;
00492 }
00493
00494 if( new_xyzorg ){
00495 daxes->xxorg = xyzorg.xyz[0] ;
00496 daxes->yyorg = xyzorg.xyz[1] ;
00497 daxes->zzorg = xyzorg.xyz[2] ;
00498 }
00499
00500 if( new_xyzdel ){
00501 daxes->xxdel = xyzdel.xyz[0] ;
00502 daxes->yydel = xyzdel.xyz[1] ;
00503 daxes->zzdel = xyzdel.xyz[2] ;
00504 }
00505
00506 if( new_xyzorient ){
00507 daxes->xxorient = xyzorient.ijk[0] ;
00508 daxes->yyorient = xyzorient.ijk[1] ;
00509 daxes->zzorient = xyzorient.ijk[2] ;
00510 }
00511
00512 /*---------------------------------------*/
00513 /*-- set bounding box for this dataset --*/
00514 /*---------------------------------------*/
00515
00516 daxes->xxmin = daxes->xxorg ;
00517 daxes->xxmax = daxes->xxorg + (daxes->nxx-1) * daxes->xxdel ;
00518 if( daxes->xxmin > daxes->xxmax ){
00519 float temp = daxes->xxmin ;
00520 daxes->xxmin = daxes->xxmax ; daxes->xxmax = temp ;
00521 }
00522
00523 daxes->yymin = daxes->yyorg ;
00524 daxes->yymax = daxes->yyorg + (daxes->nyy-1) * daxes->yydel ;
00525 if( daxes->yymin > daxes->yymax ){
00526 float temp = daxes->yymin ;
00527 daxes->yymin = daxes->yymax ; daxes->yymax = temp ;
00528 }
00529
00530 daxes->zzmin = daxes->zzorg ;
00531 daxes->zzmax = daxes->zzorg + (daxes->nzz-1) * daxes->zzdel ;
00532 if( daxes->zzmin > daxes->zzmax ){
00533 float temp = daxes->zzmin ;
00534 daxes->zzmin = daxes->zzmax ; daxes->zzmax = temp ;
00535 }
00536
00537 #ifdef EXTEND_BBOX
00538 daxes->xxmin -= 0.5 * daxes->xxdel ; /* pushes edges back by 1/2 */
00539 daxes->xxmax += 0.5 * daxes->xxdel ; /* voxel dimensions (the box */
00540 daxes->yymin -= 0.5 * daxes->yydel ; /* defined above is based on */
00541 daxes->yymax += 0.5 * daxes->yydel ; /* voxel centers, not edges) */
00542 daxes->zzmin -= 0.5 * daxes->zzdel ;
00543 daxes->zzmax += 0.5 * daxes->zzdel ;
00544 #endif
00545
00546 /*----------------------------------------------------------------*/
00547 /*-- matrix that transforms to Dicom (left-posterior-superior) --*/
00548 /*----------------------------------------------------------------*/
00549
00550 LOAD_ZERO_MAT(daxes->to_dicomm) ;
00551
00552 switch( daxes->xxorient ){
00553 case ORI_R2L_TYPE:
00554 case ORI_L2R_TYPE: daxes->to_dicomm.mat[0][0] = 1.0 ; break ;
00555 case ORI_P2A_TYPE:
00556 case ORI_A2P_TYPE: daxes->to_dicomm.mat[1][0] = 1.0 ; break ;
00557 case ORI_I2S_TYPE:
00558 case ORI_S2I_TYPE: daxes->to_dicomm.mat[2][0] = 1.0 ; break ;
00559 }
00560
00561 switch( daxes->yyorient ){
00562 case ORI_R2L_TYPE:
00563 case ORI_L2R_TYPE: daxes->to_dicomm.mat[0][1] = 1.0 ; break ;
00564 case ORI_P2A_TYPE:
00565 case ORI_A2P_TYPE: daxes->to_dicomm.mat[1][1] = 1.0 ; break ;
00566 case ORI_I2S_TYPE:
00567 case ORI_S2I_TYPE: daxes->to_dicomm.mat[2][1] = 1.0 ; break ;
00568 }
00569
00570 switch( daxes->zzorient ){
00571 case ORI_R2L_TYPE:
00572 case ORI_L2R_TYPE: daxes->to_dicomm.mat[0][2] = 1.0 ; break ;
00573 case ORI_P2A_TYPE:
00574 case ORI_A2P_TYPE: daxes->to_dicomm.mat[1][2] = 1.0 ; break ;
00575 case ORI_I2S_TYPE:
00576 case ORI_S2I_TYPE: daxes->to_dicomm.mat[2][2] = 1.0 ; break ;
00577 }
00578 }
00579
00580 /**---------- Need to reconfigure the sub-bricks? ----------**/
00581
00582 if( new_datum_all && new_datum_array ){
00583 EDERR("datum_all and datum_array can't be used together") ;
00584 RETURN(errnum) ;
00585 }
00586
00587 redo_bricks = ( new_datum_all || new_datum_array ||
00588 new_nvals || new_nxyz ) ;
00589
00590 if( redo_bricks && THD_count_databricks(dset->dblk) > 0 ){
00591 EDERR("cannot reconfigure bricks that already are full") ;
00592 RETURN(errnum) ;
00593 }
00594
00595 if( redo_bricks ){
00596 int old_nvals = dset->dblk->nvals ;
00597 #if 0
00598 fprintf(stderr,"EDIT_dset_items: about to redo_bricks\n") ;
00599 #endif
00600 if( ! new_nvals ) nvals = old_nvals ;
00601
00602 /** make an array of data types, if one not provided **/
00603
00604 if( ! new_datum_array ){
00605 datum_array = (int *) XtMalloc( sizeof(int) * nvals ) ;
00606
00607 #if 0
00608 fprintf(stderr,"EDIT_dset_items: about to make datum_array\n") ;
00609 #endif
00610 for( ii=0 ; ii < nvals ; ii++ )
00611 datum_array[ii] = (new_datum_all) ? datum_all
00612 : (ii < old_nvals) ? DSET_BRICK_TYPE(dset,ii)
00613 : DSET_BRICK_TYPE(dset,0) ;
00614 } /* 06 Apr 2005 [rickr] */
00615
00616 if( new_nvals ){
00617 if( dset->dblk->nvals != nvals )
00618 THD_copy_datablock_auxdata( NULL , dset->dblk ) ; /* 30 Nov 1997 */
00619
00620 myXtFree( dset->dblk->brick_bytes ) ;
00621 myXtFree( dset->dblk->brick_fac ) ;
00622
00623 dset->dblk->nvals = dset->dblk->diskptr->nvals = nvals ;
00624 }
00625
00626 THD_init_datablock_brick( dset->dblk , nvals , datum_array ) ;
00627
00628 if( ! new_datum_array ) myXtFree(datum_array) ;
00629 }
00630
00631 /**---------- Need to add new brick_fac values? ----------**/
00632
00633 if( new_brick_fac ){
00634 if( brick_fac != NULL ){
00635 for( ii=0 ; ii < dset->dblk->nvals ; ii++ )
00636 dset->dblk->brick_fac[ii] = brick_fac[ii] ;
00637 } else {
00638 for( ii=0 ; ii < dset->dblk->nvals ; ii++ )
00639 dset->dblk->brick_fac[ii] = 0.0 ;
00640 }
00641 }
00642
00643 /** 30 Nov 1997: do just one brick_fac value **/
00644
00645 if( new_brick_fac_one ){
00646 if( brick_fac_one_iv < 0 || brick_fac_one_iv >= dset->dblk->nvals ){
00647 EDERR("illegal index for ADN_brick_fac_one") ;
00648 RETURN(errnum) ;
00649 }
00650 dset->dblk->brick_fac[ brick_fac_one_iv ] = brick_fac_one ;
00651 }
00652
00653 /**--------- 30 Nov 1997: add a single brick label value --------**/
00654
00655 if( new_brick_label_one ){
00656 if( brick_label_one_iv < 0 || brick_label_one_iv >= dset->dblk->nvals ){
00657 EDERR("illegal index for ADN_brick_label_one") ;
00658 RETURN(errnum) ;
00659 }
00660
00661 THD_store_datablock_label( dset->dblk, brick_label_one_iv, brick_label_one ) ;
00662 }
00663
00664 /*---- add a single brick keywords value ----*/
00665
00666 if( new_brick_keywords_one ){
00667 if( brick_keywords_one_iv < 0 || brick_keywords_one_iv >= dset->dblk->nvals ){
00668 EDERR("illegal index for ADN_brick_keywords_one") ;
00669 RETURN(errnum) ;
00670 }
00671
00672 if( new_brick_keywords_one == 1 )
00673 THD_store_datablock_keywords( dset->dblk, brick_keywords_one_iv,
00674 brick_keywords_one );
00675 else if( new_brick_keywords_one == 2 )
00676 THD_append_datablock_keywords( dset->dblk, brick_keywords_one_iv,
00677 brick_keywords_one );
00678 }
00679
00680 /*---- Add a single brick stataux value.
00681 The input is a float array formatted like so:
00682 <statcode> <npar> <value> ... <value>
00683 where <statcode> is a FUNC_*_TYPE code
00684 <npar> is the number of values to follow (may be 0);
00685 normally is FUNC_need_stat_aux[<statcode>]
00686 <value> is an auxiliary statistical parameter needed
00687 for data of type <statcode> ----*/
00688
00689 if( new_brick_stataux_one ){
00690 int jv , npar , kv , iv ;
00691
00692 iv = brick_stataux_one_iv ;
00693
00694 if( iv < 0 || iv >= dset->dblk->nvals ){
00695 EDERR("illegal index for ADN_brick_stataux_one") ;
00696 RETURN(errnum) ;
00697 }
00698
00699 jv = brick_stataux_one[0] ; /* statcode */
00700
00701 npar = brick_stataux_one[1] ; /* # of values present */
00702 if( npar < 0 ){
00703 EDERR("illegal npar for ADN_brick_stataux_one") ;
00704 RETURN(errnum) ;
00705 }
00706
00707 kv = FUNC_need_stat_aux[jv] ; /* # of values needed */
00708 if( npar > kv ) npar = kv ;
00709
00710 THD_store_datablock_stataux( dset->dblk ,
00711 iv , jv , npar , brick_stataux_one + 2 ) ;
00712 }
00713
00714 /**---------- Need to reconfigure the time axis? ----------**/
00715
00716 redo_taxis = ( new_ntt || new_nsl || new_ttorg || new_ttdel ||
00717 new_ttdur || new_zorg_sl || new_dz_sl || new_toff_sl ) ;
00718
00719 if( ! new_ntt ) ntt = ISVALID_TIMEAXIS(dset->taxis) ? dset->taxis->ntt : 0 ;
00720
00721 if( ntt == 0 && dset->taxis != NULL ){
00722 myXtFree( dset->taxis->toff_sl ) ;
00723 myXtFree( dset->taxis ) ;
00724 dset->taxis = NULL ;
00725 }
00726
00727 redo_taxis = ( redo_taxis && ntt > 0 ) ;
00728
00729 if( (new_nsl && nsl > 0) && !new_toff_sl ){ /* if we have new slice count */
00730 EDERR("have new_nsl but not new_toff_sl") ; /* but no new slice offsets */
00731 RETURN(errnum) ;
00732 }
00733
00734 if( redo_taxis ){
00735 THD_timeaxis * taxis = dset->taxis ;
00736
00737 if( taxis == NULL ){
00738 taxis = dset->taxis = myXtNew( THD_timeaxis ) ;
00739 taxis->type = TIMEAXIS_TYPE ;
00740 taxis->toff_sl = NULL ;
00741 taxis->nsl = 0 ;
00742 taxis->ttorg = taxis->ttdel = taxis->ttdur = 0.0 ;
00743 taxis->ntt = ntt ;
00744 }
00745
00746 if( new_ntt ) taxis->ntt = ntt ;
00747 if( new_ttorg ) taxis->ttorg = ttorg ;
00748 if( new_ttdel ) taxis->ttdel = ttdel ;
00749 if( new_ttdur ) taxis->ttdur = ttdur ;
00750 if( new_zorg_sl ) taxis->zorg_sl = zorg_sl ;
00751 if( new_dz_sl ) taxis->dz_sl = dz_sl ;
00752
00753 if( new_nsl ){
00754 taxis->nsl = nsl ;
00755 if( nsl > 0 )
00756 taxis->toff_sl = (float *) XtRealloc( (char *) taxis->toff_sl ,
00757 sizeof(float) * nsl ) ;
00758 else
00759 myXtFree(taxis->toff_sl) ;
00760 }
00761
00762 if( new_toff_sl )
00763 for( ii=0 ; ii < taxis->nsl ; ii++ ) taxis->toff_sl[ii] = toff_sl[ii] ;
00764 }
00765
00766 if( new_tunits ){
00767 THD_timeaxis * taxis = dset->taxis ;
00768
00769 if( taxis == NULL ){
00770 EDERR("have new_tunits but have no time axis") ;
00771 RETURN(errnum) ;
00772 }
00773
00774 taxis->units_type = tunits ;
00775 }
00776
00777 /**--------------- Need to redo dataset type codes? ------------**/
00778 /** Note that changing the type codes by themselves won't fix **/
00779 /** nvals or other such stuff -- that must be done separately. **/
00780
00781 if( new_type ) dset->type = type ;
00782 if( new_view_type ) dset->view_type = view_type ;
00783
00784 if( new_func_type ){
00785 if( (ISANAT(dset) && func_type <= LAST_ANAT_TYPE) ||
00786 (ISFUNC(dset) && func_type <= LAST_FUNC_TYPE) ){
00787
00788 dset->func_type = func_type ;
00789
00790 } else{
00791 EDERR("illegal new_func type combination") ; RETURN(errnum) ;
00792 }
00793 }
00794
00795 /****--------------- hopefully, we are done! ---------------****/
00796
00797 RETURN(errnum) ;
00798 }
|
|
|
Remove any +???? suffix from a prefix, returning a new one. -- 22 Nov 2002 - RWCox --------------------------------------------------------------------- Definition at line 806 of file edt_dsetitems.c. Referenced by EDIT_dset_items().
00807 {
00808 char *newprefix ;
00809 int nn ;
00810
00811 if( prefix == NULL ) return NULL ;
00812
00813 nn = strlen(prefix); newprefix = strdup(prefix);
00814
00815 /* only remove the basic 3: +orig, +acpc +tlrc 17 May 2004 [rickr] */
00816 /* (blame Shruti) */
00817 if( nn > 4 && ( (strcmp(newprefix+nn-5,"+orig") == 0) ||
00818 (strcmp(newprefix+nn-5,"+acpc") == 0) ||
00819 (strcmp(newprefix+nn-5,"+tlrc") == 0) ) )
00820 newprefix[nn-5] = '\0' ;
00821
00822 /* old check
00823 isalpha(newprefix[nn-4]) &&
00824 isalpha(newprefix[nn-3]) &&
00825 isalpha(newprefix[nn-2]) &&
00826 isalpha(newprefix[nn-1]) ) newprefix[nn-5] = '\0' ;
00827 */
00828
00829 return newprefix ;
00830 }
|