Doxygen Source Code Documentation
editvol.h File Reference
#include <sys/types.h>
#include <stddef.h>
#include <X11/Intrinsic.h>
#include <stdarg.h>
#include "mrilib.h"
#include "afni_warp.h"
Go to the source code of this file.
Data Structures | |
struct | EDIT_options |
struct | MCW_cluster |
struct | MCW_cluster_array |
Defines | |
#define | INC_CLUSTER 8 |
#define | IJK_TO_THREE(ijk, i, j, k, nx, nxy) ( (k) = (ijk)/(nxy) , (j)=((ijk)%(nxy))/(nx) , (i)=(ijk)%(nx) ) |
#define | THREE_TO_IJK(i, j, k, nx, nxy) ((i)+(j)*(nx)+(k)*(nxy)) |
#define | INIT_CLUSTER(cc) |
#define | KILL_CLUSTER(cc) |
#define | DBMALL(n) |
#define | ADDTO_CLUSTER(cc, ii, jj, kk, m) |
#define | ISOVALUE_MODE 1 |
#define | ISOMERGE_MODE 2 |
#define | INIT_CLARR(cl) |
#define | ADDTO_CLARR(cl, cc) |
#define | DESTROY_CLARR(cl) |
#define | CLUST_ORDERED(c1, c2) ( (c1)->num_pt >= (c2)->num_pt ) |
#define | CLUST_SWAP(c1, c2) (ct=(c1),(c1)=(c2),(c2)=ct,sss=1) |
#define | SORT_CLARR(name) |
#define | ECFLAG_NONE 0 |
#define | ECFLAG_SAME 1 |
#define | ECFLAG_MEAN 2 |
#define | ECFLAG_MAX 3 |
#define | ECFLAG_AMAX 4 |
#define | ECFLAG_SMAX 5 |
#define | ECFLAG_SIZE 6 |
#define | ECFLAG_ORDER 7 |
#define | FCFLAG_NONE 0 |
#define | FCFLAG_MEAN 1 |
#define | FCFLAG_NZMEAN 2 |
#define | FCFLAG_MAX 3 |
#define | FCFLAG_AMAX 4 |
#define | FCFLAG_SMAX 5 |
#define | FCFLAG_AVER 66 |
#define | FCFLAG_EXPR 77 |
#define | FCFLAG_ONE_STEP 100000 |
#define | FCFLAG_WINSOR (2*FCFLAG_ONE_STEP) |
#define | INIT_EDOPT(edopt) |
#define | RMS_TO_SIGMA(rms) (0.57735027*(rms)) |
#define | FWHM_TO_SIGMA(fh) (0.42466090*(fh)) |
#define | EDIT_zeropad EDIT_volpad |
#define | EDIT_volpad_even(px, py, pz, nx, ny, nz, ft, vv) EDIT_volpad( (px),(px), (py),(py), (pz),(pz), (nx),(ny),(nz), (ft),(vv) ) |
#define | ADN_none 0 |
#define | ADN_prefix 6001 |
#define | ADN_directory_name 6002 |
#define | ADN_brick_fac 6011 |
#define | ADN_malloc_type 6012 |
#define | ADN_datum_all 6013 |
#define | ADN_datum_array 6014 |
#define | ADN_nvals 6016 |
#define | ADN_nxyz 6020 |
#define | ADN_xyzdel 6021 |
#define | ADN_xyzorg 6022 |
#define | ADN_xyzorient 6023 |
#define | ADN_to_dicomm 6024 |
#define | ADN_ntt 6031 |
#define | ADN_ttorg 6032 |
#define | ADN_ttdel 6033 |
#define | ADN_ttdur 6034 |
#define | ADN_nsl 6035 |
#define | ADN_zorg_sl 6036 |
#define | ADN_dz_sl 6037 |
#define | ADN_toff_sl 6039 |
#define | ADN_tunits 6040 |
#define | ADN_type 6051 |
#define | ADN_view_type 6052 |
#define | ADN_func_type 6053 |
#define | ADN_label1 6054 |
#define | ADN_label2 6055 |
#define | ADN_self_name 6056 |
#define | ADN_keywords_replace 6057 |
#define | ADN_keywords_append 6058 |
#define | ADN_warp_parent 6061 |
#define | ADN_anat_parent 6062 |
#define | ADN_stat_aux 6063 |
#define | ADN_warp 6064 |
#define | ADN_anatpar_idcode 6065 |
#define | ADN_ONE_STEP 100000 |
#define | ADN_brick_label_one (2*ADN_ONE_STEP) |
#define | ADN_brick_fac_one (3*ADN_ONE_STEP) |
#define | ADN_brick_stataux_one (4*ADN_ONE_STEP) |
#define | ADN_brick_keywords_replace_one (5*ADN_ONE_STEP) |
#define | ADN_brick_keywords_append_one (6*ADN_ONE_STEP) |
#define | EDIT_COPY_ANATOMY_PARENT_ID(nds, ods) |
#define | EDIT_ZERO_ANATOMY_PARENT_ID(nds) |
#define | EDIT_STATAUX4(ds, iv, ft, a, b, c, d) |
#define | EDIT_BRICK_TO_NOSTAT(ds, iv) EDIT_STATAUX4(ds,iv,FUNC_FIM_TYPE,0,0,0,0) |
#define | EDIT_BRICK_TO_FICO(ds, iv, nsam, nfit, nort) EDIT_STATAUX4(ds,iv,FUNC_COR_TYPE,nsam,nfit,nort,0) |
#define | EDIT_BRICK_TO_FITT(ds, iv, ndof) EDIT_STATAUX4(ds,iv,FUNC_TT_TYPE,ndof,0,0,0) |
#define | EDIT_BRICK_TO_FIFT(ds, iv, ndof, ddof) EDIT_STATAUX4(ds,iv,FUNC_FT_TYPE,ndof,ddof,0,0) |
#define | EDIT_BRICK_TO_FIZT(ds, iv) EDIT_STATAUX4(ds,iv,FUNC_ZT_TYPE,0,0,0,0) |
#define | EDIT_BRICK_TO_FICT(ds, iv, ndof) EDIT_STATAUX4(ds,iv,FUNC_CT_TYPE,ndof,0,0,0) |
#define | EDIT_BRICK_TO_FIBT(ds, iv, a, b) EDIT_STATAUX4(ds,iv,FUNC_BT_TYPE,a,b,0,0) |
#define | EDIT_BRICK_TO_FIBN(ds, iv, ntrial, prob) EDIT_STATAUX4(ds,iv,FUNC_BN_TYPE,ntrial,prob,0,0) |
#define | EDIT_BRICK_TO_FIGT(ds, iv, shape, scale) EDIT_STATAUX4(ds,iv,FUNC_GT_TYPE,shape,scale,0,0) |
#define | EDIT_BRICK_TO_FIPT(ds, iv, mean) EDIT_STATAUX4(ds,iv,FUNC_PT_TYPE,mean,0,0,0) |
#define | EDIT_BRICK_LABEL(ds, iv, str) EDIT_dset_items( (ds), ADN_brick_label_one+(iv), (str), ADN_none ) |
#define | EDIT_BRICK_FACTOR(ds, iv, fac) EDIT_dset_items( (ds), ADN_brick_fac_one+(iv), (fac), ADN_none ) |
#define | EDIT_BRICK_ADDKEY(ds, iv, str) EDIT_dset_items( (ds), ADN_brick_keywords_append_one+(iv), (str), ADN_none ) |
Typedefs | |
typedef EDIT_options | EDIT_options |
Functions | |
MCW_cluster_array * | MCW_find_clusters (int, int, int, float, float, float, int, void *, float) |
MCW_cluster_array * | NIH_find_clusters (int, int, int, float, float, float, int, void *, float, int) |
void | MCW_cluster_to_vol (int, int, int, int, void *, MCW_cluster *) |
void | MCW_scale_to_max (int, int, int, int, void *) |
float | MCW_vol_amax (int, int, int, int, void *) |
MCW_cluster * | MCW_build_mask (int, int, int, float, float, float, float) |
void | MCW_erode_clusters (int, int, int, float, float, float, int, void *, float, float, int) |
void | MCW_sort_cluster (MCW_cluster *) |
char * | EDIT_options_help (void) |
void | EDIT_one_dataset (THD_3dim_dataset *dset, EDIT_options *edopt) |
void | EDIT_blur_volume (int, int, int, float, float, float, int, void *, float) |
void | EDIT_blur_volume_3d (int, int, int, float, float, float, int, void *, float, float, float) |
int | EDIT_check_argv (int, char *argv[], int, EDIT_options *) |
void | EDIT_coerce_type (int, int, void *, int, void *) |
void | EDIT_coerce_scale_type (int, float, int, void *, int, void *) |
float | EDIT_coerce_autoscale (int, int, void *, int, void *) |
void | EDIT_aver_fvol (int, int, int, float, float, float, float *, float) |
void | EDIT_zscore_vol (int, int, float, void *, int, float *) |
void | EDIT_clip_float (float, int, float *) |
byte * | EDT_calcmask (char *, int *) |
void * | EDIT_volpad (int, int, int, int, int, int, int, int, int, int, void *) |
THD_3dim_dataset * | EDIT_empty_copy (THD_3dim_dataset *) |
THD_3dim_dataset * | EDIT_full_copy (THD_3dim_dataset *, char *) |
int | EDIT_dset_items (THD_3dim_dataset *,...) |
THD_3dim_dataset * | EDIT_wod_copy (THD_3dim_dataset *) |
THD_datablock * | EDIT_empty_datablock (void) |
void | EDIT_add_bricklist (THD_3dim_dataset *, int, int *, float *, void *sbr[]) |
void | EDIT_add_brick (THD_3dim_dataset *, int, float, void *) |
void | EDIT_substitute_brick (THD_3dim_dataset *, int, int, void *) |
void | EDIT_cluster_array (MCW_cluster_array *, int, float, float) |
void | EDIT_filter_volume (int, int, int, float, float, float, int, void *, int, float, byte *, char *) |
Define Documentation
|
Value: do{ int nn ; \ if( (cl)->num_clu == (cl)->num_all ){ \ (cl)->num_all += INC_CLUSTER ; nn = (cl)->num_all ; \ (cl)->clar = (MCW_cluster **) XtRealloc( (char *)(cl)->clar , \ sizeof(MCW_cluster *) * nn ) ;\ } \ (cl)->clar[((cl)->num_clu)++] = (cc) ; break ; } while(0) Definition at line 122 of file editvol.h. Referenced by EDIT_one_dataset(), main(), MCW_find_clusters(), NIH_find_clusters(), ROIPLOT_main(), and THD_average_one_timeseries(). |
|
Value: do{ int nn ; \ if( (cc)->num_pt == (cc)->num_all ){ \ (cc)->num_all = 1.25*(cc)->num_all + INC_CLUSTER ; \ nn = (cc)->num_all ; \ (cc)->i=(short *) XtRealloc((char *)(cc)->i,sizeof(short)*nn );\ (cc)->j=(short *) XtRealloc((char *)(cc)->j,sizeof(short)*nn );\ (cc)->k=(short *) XtRealloc((char *)(cc)->k,sizeof(short)*nn );\ (cc)->mag=(float *) XtRealloc((char *)(cc)->mag,sizeof(float)*nn);\ DBMALL(nn) ; } \ nn = (cc)->num_pt ; ((cc)->num_pt)++ ; \ (cc)->i[nn] = (ii) ; (cc)->j[nn] = (jj) ; (cc)->k[nn] = (kk) ; \ (cc)->mag[nn] = (m) ; break ; } while(0) Definition at line 88 of file editvol.h. Referenced by HISTO_main(), MCW_build_mask(), MCW_find_clusters(), mri_medianfilter(), NIH_find_clusters(), and WINsorize(). |
|
Definition at line 415 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
Definition at line 418 of file editvol.h. Referenced by EDIT_dset_items(). |
|
values in the datablock * Definition at line 376 of file editvol.h. Referenced by AFNI_fimmer_compute(), EDIT_dset_items(), fim3d_fimmer_compute(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), output_ts_array(), POWER_main(), process_NIML_Node_ROI(), RT_fim_recurse(), THD_open_analyze(), write_3dtime(), write_afni_data(), write_afni_fict(), write_afni_fizt(), and write_ts_array(). |
|
Definition at line 423 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
Definition at line 426 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
Definition at line 425 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
Definition at line 422 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
Definition at line 424 of file editvol.h. Referenced by EDIT_dset_items(), EDIT_one_dataset(), and main(). |
|
|
Definition at line 379 of file editvol.h. Referenced by EDIT_dset_items(), THD_open_3D(), write_afni_data(), write_afni_fict(), and write_afni_fizt(). |
|
Definition at line 372 of file editvol.h. Referenced by AFNI_read_inputs(), check_one_output_file(), create_bucket(), EDIT_dset_items(), EDIT_main(), form_clusters(), main(), RT_tell_afni_one(), SUMA_FormAfnidset(), terminate(), THD_dataset_headname(), THD_is_dataset(), THD_open_3dcalc(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_bucket(), and write_bucket_data(). |
|
Definition at line 399 of file editvol.h. Referenced by EDIT_dset_items(), RT_start_dataset(), and THD_open_nifti(). |
|
|
Definition at line 412 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
Definition at line 411 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
Definition at line 408 of file editvol.h. Referenced by basis_write_iresp(), basis_write_sresp(), check_one_output_file(), check_output_file(), copy_dset(), COPY_main(), EDIT_dset_items(), EDIT_full_copy(), EDIT_main(), main(), output_ts_array(), write_3dtime(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_results(), and write_ts_array(). |
|
Definition at line 409 of file editvol.h. Referenced by EDIT_dset_items(), and main(). |
|
|
|
Definition at line 397 of file editvol.h. Referenced by EDIT_dset_items(), main(), POWER_main(), RT_start_dataset(), THD_dataset_tshift(), THD_open_nifti(), THD_zeropad(), write_results(), and write_ts_array(). |
|
|
|
values in the dataxes * Definition at line 384 of file editvol.h. Referenced by AFNI_read_inputs(), apply_dataxes(), apply_orientation(), EDIT_dset_items(), main(), RT_start_dataset(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), THD_open_1D(), THD_open_3D(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_warp3D(), and THD_zeropad(). |
|
Definition at line 421 of file editvol.h. Referenced by EDIT_dset_items(). |
|
|
Definition at line 410 of file editvol.h. Referenced by basis_write_iresp(), basis_write_sresp(), check_one_output_file(), check_output_file(), EDIT_dset_items(), main(), output_ts_array(), write_3dtime(), write_afni_data(), write_afni_fict(), write_afni_fizt(), and write_ts_array(). |
|
Definition at line 416 of file editvol.h. Referenced by AFNI_fimmer_compute(), EDIT_dset_items(), fim3d_fimmer_compute(), main(), RT_fim_recurse(), write_afni_data(), write_afni_fict(), and write_afni_fizt(). |
|
Definition at line 388 of file editvol.h. Referenced by EDIT_dset_items(). |
|
Definition at line 400 of file editvol.h. Referenced by EDIT_dset_items(), RT_start_dataset(), THD_open_nifti(), and THD_zeropad(). |
|
Definition at line 394 of file editvol.h. Referenced by AFNI_read_images(), AFNI_read_inputs(), basis_write_iresp(), basis_write_sresp(), EDIT_dset_items(), main(), POWER_main(), RT_start_dataset(), THD_dataset_tshift(), THD_open_1D(), THD_open_3D(), THD_open_analyze(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_open_tcat(), THD_warp3D(), and write_ts_array(). |
|
Definition at line 395 of file editvol.h. Referenced by AFNI_read_inputs(), EDIT_dset_items(), main(), POWER_main(), RT_start_dataset(), THD_dataset_tshift(), THD_open_1D(), THD_open_analyze(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_open_tcat(), THD_warp3D(), and write_ts_array(). |
|
Definition at line 393 of file editvol.h. Referenced by AFNI_read_inputs(), basis_write_iresp(), basis_write_sresp(), EDIT_dset_items(), main(), POWER_main(), RT_start_dataset(), THD_dataset_tshift(), THD_open_1D(), THD_open_analyze(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_open_tcat(), THD_warp3D(), and write_ts_array(). |
|
Definition at line 401 of file editvol.h. Referenced by AFNI_read_inputs(), EDIT_dset_items(), main(), POWER_main(), RT_start_dataset(), THD_dataset_tshift(), THD_open_1D(), THD_open_3D(), THD_open_analyze(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_open_tcat(), and THD_warp3D(). |
|
|
Definition at line 406 of file editvol.h. Referenced by AFNI_read_inputs(), EDIT_dset_items(), main(), RT_start_dataset(), SUMA_BrainVoyager_Read_vmr(), SUMA_OpenDX_Read_CruiseVolHead(), THD_dataset_headname(), THD_is_dataset(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), and THD_warp3D(). |
|
Definition at line 417 of file editvol.h. Referenced by DUP_main(), EDIT_dset_items(), EDIT_wod_copy(), and main(). |
|
Definition at line 414 of file editvol.h. Referenced by DUP_main(), EDIT_dset_items(), EDIT_wod_copy(), and main(). |
|
Definition at line 385 of file editvol.h. Referenced by AFNI_read_inputs(), apply_dataxes(), apply_orientation(), EDIT_dset_items(), main(), RT_start_dataset(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), THD_init_session(), THD_open_1D(), THD_open_3D(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), and THD_warp3D(). |
|
Definition at line 386 of file editvol.h. Referenced by AFNI_read_inputs(), apply_dataxes(), apply_orientation(), EDIT_dset_items(), main(), RT_start_dataset(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), THD_open_1D(), THD_open_3D(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_warp3D(), and THD_zeropad(). |
|
Definition at line 387 of file editvol.h. Referenced by apply_orientation(), EDIT_dset_items(), main(), RT_start_dataset(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), THD_init_session(), THD_open_3D(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), and THD_warp3D(). |
|
Definition at line 398 of file editvol.h. Referenced by EDIT_dset_items(), RT_start_dataset(), THD_open_nifti(), and THD_zeropad(). |
|
Determine if 2 MCW_cluster are ordered. |
|
Swap 2 MCW_cluster. |
|
|
|
Value: do{ int ii ; if( cl != NULL ){ \ for( ii=0 ; ii < (cl)->num_clu ; ii++ ) \ KILL_CLUSTER( (cl)->clar[ii] ) ; \ myXtFree((cl)->clar) ; (cl) = NULL ; \ } break ; } while(0) Definition at line 133 of file editvol.h. Referenced by EDIT_one_dataset(), identify_clusters(), main(), MCW_find_clusters(), NIH_find_clusters(), RCREND_reload_func_dset(), REND_reload_func_dset(), ROIPLOT_main(), and THD_average_one_timeseries(). |
|
Definition at line 255 of file editvol.h. Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts(). |
|
Definition at line 254 of file editvol.h. Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts(). |
|
Definition at line 253 of file editvol.h. Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts(). |
|
|
|
Definition at line 258 of file editvol.h. Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), EDIT_one_dataset(), and EDIT_opts(). |
|
Definition at line 252 of file editvol.h. Referenced by CLUST_main(), EDIT_check_argv(), EDIT_one_dataset(), EDIT_opts(), remove_isolated_stuff(), and SUMA_BlankAfniEditOptions(). |
|
Definition at line 257 of file editvol.h. Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), EDIT_one_dataset(), and EDIT_opts(). |
|
Definition at line 256 of file editvol.h. Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts(). |
|
Add a keyword to sub-brick iv of dataset ds. Definition at line 526 of file editvol.h. Referenced by DELAY_main(). |
|
Change the iv-th sub-brick scale factor in dataset ds to fac (factor=0 means "don't scale"). Definition at line 521 of file editvol.h. Referenced by AFNI_fimmer_compute(), attach_sub_brick(), basis_write_iresp(), basis_write_sresp(), COPY_main(), DRAW_copy_dset(), main(), PERMTEST_main(), process_subbrick(), THD_add_bricks(), THD_load_tcat(), THD_warp3D(), THRESH_main(), write_bucket_data(), and write_results(). |
|
Change the iv-th sub-brick label in dataset ds to str. Definition at line 515 of file editvol.h. Referenced by AFNI_fimmer_compute(), attach_sub_brick(), DELAY_main(), main(), PERMTEST_main(), process_subbrick(), quadrant_fimfunc(), RT_fim_recurse(), spearman_fimfunc(), THD_open_minc(), THD_open_nifti(), THRESH_main(), and write_bucket_data(). |
|
Convert sub-brick iv of dataset ds to a fibn (binomial variable) statistic. |
|
Convert sub-brick iv of dataset ds to a fibt (beta variable) statistic. |
|
Convert sub-brick iv of dataset ds to a fico (correlation) statistic. Definition at line 468 of file editvol.h. Referenced by AFNI_fimmer_compute(), attach_sub_brick(), DELAY_main(), main(), quadrant_fimfunc(), and spearman_fimfunc(). |
|
Convert sub-brick iv of dataset ds to a fict (chi square) statistic. |
|
Convert sub-brick iv of dataset ds to a fift (F test) statistic. Definition at line 478 of file editvol.h. Referenced by attach_sub_brick(), and write_bucket_data(). |
|
Convert sub-brick iv of dataset ds to a figt (gamma variable) statistic. |
|
Convert sub-brick iv of dataset ds to a fipt (Poisson variable) statistic. |
|
Convert sub-brick iv of dataset ds to a fitt (t test) statistic. Definition at line 473 of file editvol.h. Referenced by attach_sub_brick(), and write_bucket_data(). |
|
Convert sub-brick iv of dataset ds to a fizt (z score) statistic. Definition at line 483 of file editvol.h. Referenced by PERMTEST_main(), and process_subbrick(). |
|
Convert sub-brick iv of dataset ds to a no-statistic [16 Jun 2003] Definition at line 463 of file editvol.h. Referenced by process_NIML_Node_ROI(). |
|
Value: do{ if( ISVALID_DSET(nds) && ISVALID_DSET(ods) ) \ (nds)->anat_parent_idcode = (ods)->anat_parent_idcode ; \ } while(0) Definition at line 434 of file editvol.h. Referenced by EDIT_empty_copy(). |
|
Value: do{ float sqq[6] ; \ if( ISVALID_DSET(ds) && \ (iv) >= 0 && (iv) < DSET_NVALS(ds) && \ (ft) >= 0 && (ft) <= LAST_FUNC_TYPE ){ \ sqq[0] = (ft) ; sqq[1] = FUNC_need_stat_aux[ft] ; \ sqq[2] = (a) ; sqq[3] = (b) ; sqq[4] = (c) ; sqq[5] = (d) ; \ EDIT_dset_items( (ds),ADN_brick_stataux_one+(iv),sqq,ADN_none ) ; \ } } while(0) Definition at line 451 of file editvol.h. Referenced by THD_open_3D(), and THD_open_nifti(). |
|
Definition at line 339 of file editvol.h. Referenced by THD_rota_vol(), and THD_rota_vol_matvec(). |
|
Value: do{ if( ISVALID_DSET(nds) ) \ ZERO_IDCODE((nds)->anat_parent_idcode); } while(0) Definition at line 441 of file editvol.h. Referenced by main(), and THD_zeropad(). |
|
|
|
Definition at line 265 of file editvol.h. Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts(). |
|
Definition at line 268 of file editvol.h. Referenced by EDIT_check_argv(), EDIT_filter_volume(), EDIT_opts(), and MRG_read_opts(). |
|
Definition at line 269 of file editvol.h. Referenced by EDIT_filter_volume(), and MRG_read_opts(). |
|
Definition at line 264 of file editvol.h. Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts(). |
|
Definition at line 262 of file editvol.h. Referenced by EDIT_check_argv(), EDIT_filter_volume(), EDIT_opts(), and MRG_read_opts(). |
|
Definition at line 261 of file editvol.h. Referenced by EDIT_one_dataset(), and SUMA_BlankAfniEditOptions(). |
|
Definition at line 263 of file editvol.h. Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts(). |
|
Definition at line 271 of file editvol.h. Referenced by EDIT_filter_volume(), and MRG_read_opts(). |
|
Definition at line 266 of file editvol.h. Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts(). |
|
Definition at line 272 of file editvol.h. Referenced by EDIT_filter_volume(), and MRG_read_opts(). |
|
Convert Gaussian blur FWHM width to sigma [1/sqrt(log(2)*8)] Definition at line 317 of file editvol.h. Referenced by EDIT_check_argv(), EDIT_opts(), and get_options(). |
|
In a cluster struct, the (i,j,k) indexes for each voxel are stored in a single integer ijk (to save space). The macros below translate between (i,j,k) [THREE] and ijk. Definition at line 38 of file editvol.h. Referenced by connectivity_tests(), create_row(), estimate_gfw(), generate_image(), get_activation_region(), main(), MCW_erode_clusters(), MCW_find_clusters(), NIH_find_clusters(), THD_mask_clust(), and to_3dmm(). |
|
|
|
Value: ( (cl) = XtNew(MCW_cluster_array) , \ (cl)->num_clu = (cl)->num_all = 0 , (cl)->clar = NULL ) Definition at line 116 of file editvol.h. Referenced by EDIT_one_dataset(), main(), MCW_find_clusters(), NIH_find_clusters(), ROIPLOT_main(), and THD_average_one_timeseries(). |
|
Value: ( (cc) = XtNew(MCW_cluster) , \ (cc)->num_pt = (cc)->num_all = 0 , \ (cc)->i = NULL , (cc)->j = NULL , (cc)->k = NULL ,(cc)->mag = NULL ) Definition at line 63 of file editvol.h. Referenced by MCW_build_mask(), MCW_find_clusters(), and NIH_find_clusters(). |
|
Value: ( (edopt)->thtoin = 0 , \ (edopt)->noneg = 0 , \ (edopt)->abss = 0 , \ (edopt)->clip_bot = 0.0 , \ (edopt)->clip_top = 0.0 , \ (edopt)->thresh = 0.0 , \ (edopt)->clust_rmm = -1.0, \ (edopt)->clust_vmul = 0.0 , \ (edopt)->edit_clust = 0 , \ (edopt)->erode_pv = 0.0 , \ (edopt)->dilate = 0 , \ (edopt)->filter_rmm = 0.0 , \ (edopt)->filter_opt = 0 , \ (edopt)->thrfilter_rmm = 0.0 , \ (edopt)->thrfilter_opt = 0 , \ (edopt)->blur = 0.0 , \ (edopt)->thrblur = 0.0 , \ (edopt)->scale = 0 , \ (edopt)->mult = 0.0 , \ (edopt)->do_zvol = 0 , \ (edopt)->clip_unscaled = 0 , \ (edopt)->iv_fim = -1 , \ (edopt)->iv_thr = -1 , \ (edopt)->zscore = 0 , \ (edopt)->verbose = 0 , \ (edopt)->nfmask = 0 , \ (edopt)->fmask = NULL, \ (edopt)->fexpr = NULL, \ (edopt)->fake_dxyz = 0 , \ 0 ) Definition at line 276 of file editvol.h. Referenced by CL_read_opts(), CLUST_main(), EDIT_main(), HI_read_opts(), main(), MRG_read_opts(), remove_isolated_stuff(), and TT_read_opts(). |
|
Definition at line 103 of file editvol.h. Referenced by CL_read_opts(), and NIH_find_clusters(). |
|
Definition at line 102 of file editvol.h. Referenced by CL_read_opts(), and NIH_find_clusters(). |
|
Value: do{ if( cc != NULL ){ \ myXtFree((cc)->i) ; \ myXtFree((cc)->j) ; \ myXtFree((cc)->k) ; \ myXtFree((cc)->mag) ; \ myXtFree((cc)) ; \ (cc) = NULL ; \ } break ; } while(0) Definition at line 70 of file editvol.h. Referenced by EDIT_aver_fvol(), EDIT_filter_volume(), HISTO_main(), main(), MCW_build_mask(), MCW_erode_clusters(), MCW_find_clusters(), mri_medianfilter(), NIH_find_clusters(), RCREND_cutout_blobs(), REND_cutout_blobs(), and WINsorize(). |
|
Convert Gaussian blur RMS width to sigma [1/sqrt(3)] Definition at line 314 of file editvol.h. Referenced by EDIT_check_argv(), and EDIT_opts(). |
|
Value: if( (name) != NULL && (name)->num_clu > 1 ){ \ int iic , jjc , sss ; MCW_cluster * ct ; \ for( iic=0 ; iic < (name)->num_clu ; iic++ ){ \ sss = 0 ; \ for( jjc=1 ; jjc < (name)->num_clu ; jjc++ ){ \ if( !CLUST_ORDERED( (name)->clar[jjc-1] , (name)->clar[jjc] ) ) \ CLUST_SWAP( (name)->clar[jjc-1] , (name)->clar[jjc] ) ; \ } if( !sss ) break ; }} Definition at line 150 of file editvol.h. Referenced by EDIT_cluster_array(), EDIT_one_dataset(), main(), and ROIPLOT_main(). |
|
Definition at line 43 of file editvol.h. Referenced by connectivity_tests(), EDIT_filter_volume(), estimate_gfw(), from_3dmm(), get_activation_region(), MCW_cluster_to_vol(), MCW_erode_clusters(), MCW_find_clusters(), NIH_find_clusters(), THD_average_timeseries(), and THD_mask_clust(). |
Typedef Documentation
|
Data structure filled in EDIT_check_argv, and used to control EDIT_one_dataset (options applied in order given).
|
Function Documentation
|
stataux * Definition at line 115 of file edt_addbrick.c. References EDIT_add_bricklist(), and typ. Referenced by AFNI_fimmer_compute(), main(), RT_process_image(), RT_registration_2D_onevol(), RT_registration_3D_onevol(), and THD_add_bricks().
00116 { 00117 int ttt = typ ; 00118 float fff = fac ; 00119 void * bbb = br ; 00120 00121 EDIT_add_bricklist( dset , 1 , &ttt , &fff , &bbb ) ; 00122 return ; 00123 } |
|
Definition at line 24 of file edt_addbrick.c. References ADDTO_IMARR, THD_datablock::brick, THD_datablock::brick_bytes, THD_datablock::brick_fac, THD_datablock::brick_keywords, THD_datablock::brick_lab, THD_datablock::brick_stataux, THD_datablock::brick_statcode, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::dblk, THD_diskptr::dimsizes, THD_datablock::diskptr, ENTRY, ISVALID_3DIM_DATASET, THD_datablock::malloc_type, mri_fix_data_pointer(), mri_new_vol_empty(), THD_datablock::nvals, THD_diskptr::nvals, MRI_IMAGE::nvox, nz, MRI_IMAGE::pixel_size, THD_init_datablock_keywords(), THD_init_datablock_labels(), THD_store_datablock_keywords(), THD_store_datablock_label(), THD_datablock::total_bytes, typ, and XtRealloc. Referenced by do_xrestore_stuff(), and EDIT_add_brick().
00026 { 00027 int ibr , typ , nx,ny,nz , nvals,new_nvals ; 00028 THD_datablock * dblk ; 00029 MRI_IMAGE * qim ; 00030 char str[32] ; 00031 00032 ENTRY("EDIT_add_bricklist") ; 00033 00034 /**-- Sanity Checks --**/ 00035 00036 if( ! ISVALID_3DIM_DATASET(dset) || nbr <= 0 ) EXRETURN; /* error! */ 00037 if( dset->dblk->brick == NULL ) EXRETURN; /* error! */ 00038 if( dset->dblk->malloc_type != DATABLOCK_MEM_MALLOC )EXRETURN; /* error! */ 00039 00040 dblk = dset->dblk ; 00041 nvals = dblk->nvals ; 00042 nx = dblk->diskptr->dimsizes[0] ; 00043 ny = dblk->diskptr->dimsizes[1] ; 00044 nz = dblk->diskptr->dimsizes[2] ; 00045 00046 /**-- reallocate the brick control information --**/ 00047 00048 new_nvals = nvals + nbr ; 00049 dblk->brick_bytes = (int *) XtRealloc( (char *) dblk->brick_bytes , 00050 sizeof(int) * new_nvals ) ; 00051 00052 dblk->brick_fac = (float *) XtRealloc( (char *) dblk->brick_fac , 00053 sizeof(float) * new_nvals ) ; 00054 00055 dblk->nvals = dblk->diskptr->nvals = new_nvals ; 00056 00057 /** allocate new sub-brick images **/ 00058 00059 for( ibr=0 ; ibr < nbr ; ibr++ ){ 00060 typ = (tbr != NULL ) ? tbr[ibr] : MRI_short ; 00061 qim = mri_new_vol_empty( nx,ny,nz , typ ) ; /* image with no data */ 00062 00063 if( sbr != NULL && sbr[ibr] != NULL ) /* attach data to image */ 00064 mri_fix_data_pointer( sbr[ibr] , qim ) ; 00065 00066 ADDTO_IMARR( dblk->brick , qim ) ; /* attach image to dset */ 00067 00068 dblk->brick_fac[nvals+ibr] = (fbr != NULL) ? fbr[ibr] : 0.0 ; 00069 dblk->brick_bytes[nvals+ibr] = qim->pixel_size * qim->nvox ; 00070 dblk->total_bytes += dblk->brick_bytes[ibr] ; 00071 } 00072 00073 /** allocate new sub-brick auxiliary data: labels **/ 00074 00075 if( dblk->brick_lab == NULL ) 00076 THD_init_datablock_labels( dblk ) ; 00077 else 00078 dblk->brick_lab = (char **) XtRealloc( (char *) dblk->brick_lab , 00079 sizeof(char *) * new_nvals ) ; 00080 for( ibr=0 ; ibr < nbr ; ibr++ ){ 00081 sprintf( str , "#%d" , nvals+ibr ) ; 00082 dblk->brick_lab[nvals+ibr] = NULL ; 00083 THD_store_datablock_label( dblk , nvals+ibr , str ) ; 00084 } 00085 00086 /** keywords **/ 00087 00088 if( dblk->brick_keywords == NULL ) 00089 THD_init_datablock_keywords( dblk ) ; 00090 else 00091 dblk->brick_keywords = (char **) XtRealloc( (char *) dblk->brick_keywords , 00092 sizeof(char *) * new_nvals ) ; 00093 for( ibr=0 ; ibr < nbr ; ibr++ ){ 00094 dblk->brick_keywords[nvals+ibr] = NULL ; 00095 THD_store_datablock_keywords( dblk , nvals+ibr , NULL ) ; 00096 } 00097 00098 /** stataux **/ 00099 00100 if( dblk->brick_statcode != NULL ){ 00101 dblk->brick_statcode = (int *) XtRealloc( (char *) dblk->brick_statcode , 00102 sizeof(int) * new_nvals ) ; 00103 dblk->brick_stataux = (float **) XtRealloc( (char *) dblk->brick_stataux , 00104 sizeof(float *) * new_nvals ) ; 00105 00106 for( ibr=0 ; ibr < nbr ; ibr++ ){ 00107 dblk->brick_statcode[nvals+ibr] = 0 ; 00108 dblk->brick_stataux[nvals+ibr] = NULL ; 00109 } 00110 } 00111 00112 EXRETURN; 00113 } |
|
Definition at line 391 of file edt_filtervol.c. References abs, ENTRY, EXIT, fim, free, i, MCW_cluster::i, MCW_cluster::j, MCW_cluster::k, KILL_CLUSTER, malloc, MAX, MCW_build_mask(), MCW_cluster::num_pt, and nz. Referenced by EDIT_filter_volume().
00393 { 00394 MCW_cluster * mask ; 00395 int i, j, k , ij , ii ; 00396 int jk,jkadd , nxadd,nyadd,nzadd , nxyz_add , mnum ; 00397 float * ffim ; 00398 int * madd ; 00399 float fac , sum ; 00400 00401 ENTRY("EDIT_aver_fvol") ; 00402 00403 /*--- Make a cluster that is a mask of points closer than rmm ---*/ 00404 00405 mask = MCW_build_mask(nx,ny,nz, dx,dy,dz, rmm) ; 00406 if( mask == NULL || mask->num_pt < 2 ){ 00407 fprintf(stderr,"Warning: EDIT_aver_volume has no effect.\n") ; 00408 EXRETURN ; 00409 } 00410 mnum = mask->num_pt ; 00411 00412 /*--- Allocate workspaces ---*/ 00413 00414 #if 1 00415 nxadd = nyadd = nzadd = 1 ; 00416 for( ii=0 ; ii < mnum ; ii++ ){ 00417 i = abs((int)mask->i[ii]) ; nxadd = MAX(i,nxadd) ; 00418 j = abs((int)mask->j[ii]) ; nyadd = MAX(j,nyadd) ; 00419 k = abs((int)mask->k[ii]) ; nzadd = MAX(k,nzadd) ; 00420 } 00421 #else 00422 nxadd = (int)(rmm/dx) ; 00423 nyadd = (int)(rmm/dy) ; 00424 nzadd = (int)(rmm/dz) ; 00425 #endif 00426 00427 nxyz_add = (nx+2*nxadd) * (ny+2*nyadd) * (nz+2*nzadd) ; 00428 00429 ffim = (float *) malloc(sizeof(float) * nxyz_add) ; 00430 if(ffim == NULL){ 00431 fprintf(stderr,"*** EDIT_aver_volume can't malloc workspace!\n") ; 00432 fprintf(stderr,"nx=%d ny=%d nz=%d nxadd=%d nyadd=%d nzadd=%d\n", 00433 nx,ny,nz , nxadd,nyadd,nzadd ) ; 00434 EXIT(1) ; 00435 } 00436 for( i=0 ; i < nxyz_add ; i++ ) ffim[i] = 0.0 ; 00437 00438 madd = (int *) malloc( sizeof(int) * (mnum+1) ) ; 00439 if( madd == NULL ){ 00440 fprintf(stderr,"*** EDIT_aver_volume can't malloc workspace!\n") ; 00441 EXIT(1) ; 00442 } 00443 madd[0] = 0 ; 00444 for( ii=0 ; ii < mnum ; ii++ ){ 00445 madd[ii+1] = mask->i[ii] + 00446 mask->j[ii] * (nx+2*nxadd) + 00447 mask->k[ii] * ((nx+2*nxadd)*(ny+2*nyadd)) ; 00448 } 00449 mnum++ ; fac = 1.0 / mnum ; 00450 00451 KILL_CLUSTER(mask) ; 00452 00453 /*-- copy data into workspace --*/ 00454 00455 for( k=0 ; k < nz ; k++ ){ 00456 for( j=0 ; j < ny ; j++ ){ 00457 jkadd = j * (nx+2*nxadd) + k * ((nx+2*nxadd)*(ny+2*nyadd)) ; 00458 jk = j * nx + k * (nx * ny) ; 00459 for( i=0 ; i < nx ; i++ ) ffim[i+jkadd] = fim[i+jk] ; 00460 } 00461 } 00462 00463 /*-- average data from workspace back into original array --*/ 00464 00465 for( k=0 ; k < nz ; k++ ){ 00466 for( j=0 ; j < ny ; j++ ){ 00467 jkadd = j * (nx+2*nxadd) + k * ((nx+2*nxadd)*(ny+2*nyadd)) ; 00468 jk = j * nx + k * (nx * ny) ; 00469 for( i=0 ; i < nx ; i++ ){ 00470 sum = 0.0 ; ij = i+jkadd ; 00471 for( ii=0 ; ii < mnum ; ii++ ) sum += ffim[ij+madd[ii]] ; 00472 fim[i+jk] = fac * sum ; 00473 } 00474 } 00475 } 00476 00477 free(ffim); free(madd); 00478 EXRETURN; 00479 } |
|
Definition at line 24 of file edt_blur.c. References EDIT_blur_volume_3d(), and nz. Referenced by EDIT_one_dataset().
00027 { 00028 EDIT_blur_volume_3d (nx, ny, nz, dx, dy, dz, ftype, vfim, 00029 sigma, sigma, sigma); 00030 } |
|
Definition at line 40 of file edt_blur.c. References base, csfft_cox(), csfft_nextup_one35(), ENTRY, GET_AS_BIG, complex::i, nz, complex::r, and STATUS. Referenced by EDIT_blur_volume(), gaussian_filter(), mri_3dalign_setup(), mri_warp3d_align_one(), and mri_warp3D_align_setup().
00044 { 00045 int jj,kk , nxy , base,nby2 ; 00046 float dk , aa , k , fac ; 00047 register int ii , nup ; 00048 00049 static int cx_size = 0 ; /* workspaces */ 00050 static int gg_size = 0 ; 00051 static complex * cx = NULL ; 00052 static float * gg = NULL ; 00053 00054 byte * bfim = NULL ; 00055 short * sfim = NULL ; 00056 float * ffim = NULL ; 00057 complex * cfim = NULL ; 00058 00059 float fbot,ftop ; /* 10 Jan 2003 */ 00060 int nxyz ; 00061 00062 /*** initialize ***/ 00063 00064 ENTRY("EDIT_blur_volume_3d") ; 00065 00066 if( vfim == NULL || 00067 sigmax <= 0.0 || sigmay <= 0.0 || sigmaz <= 0.0) EXRETURN ; 00068 00069 switch( ftype ){ 00070 default: EXRETURN ; 00071 case MRI_short: sfim = (short *) vfim ; break ; 00072 case MRI_float: ffim = (float *) vfim ; break ; 00073 case MRI_byte: bfim = (byte *) vfim ; break ; 00074 case MRI_complex: cfim = (complex *) vfim ; break ; 00075 } 00076 nxy = nx * ny ; nxyz = nxy * nz ; 00077 00078 /*** 10 Jan 2003: find bot and top of data input */ 00079 00080 switch( ftype ){ 00081 default: 00082 fbot = ftop = 0.0 ; 00083 break ; 00084 00085 case MRI_short: 00086 fbot = ftop = sfim[0] ; 00087 for( ii=1 ; ii < nxyz ; ii++ ) 00088 if( sfim[ii] < fbot ) fbot = sfim[ii] ; 00089 else if( sfim[ii] > ftop ) ftop = sfim[ii] ; 00090 break ; 00091 00092 case MRI_float: 00093 fbot = ftop = ffim[0] ; 00094 for( ii=1 ; ii < nxyz ; ii++ ) 00095 if( ffim[ii] < fbot ) fbot = ffim[ii] ; 00096 else if( ffim[ii] > ftop ) ftop = ffim[ii] ; 00097 break ; 00098 00099 case MRI_byte: 00100 fbot = ftop = bfim[0] ; 00101 for( ii=1 ; ii < nxyz ; ii++ ) 00102 if( bfim[ii] < fbot ) fbot = bfim[ii] ; 00103 else if( bfim[ii] > ftop ) ftop = bfim[ii] ; 00104 break ; 00105 } 00106 00107 /*** do x-direction ***/ 00108 00109 STATUS("start x FFTs") ; 00110 00111 aa = sigmax * sigmax * 0.5 ; 00112 nup = nx + (int)(3.0 * sigmax / dx) ; /* min FFT length */ 00113 #if 0 00114 ii = 2 ; while( ii < nup ){ ii *= 2 ; } /* next power of 2 larger */ 00115 #else 00116 ii = csfft_nextup_one35(nup) ; 00117 #endif 00118 nup = ii ; nby2 = nup / 2 ; 00119 00120 GET_AS_BIG(cx,complex,nup) ; GET_AS_BIG(gg,float,nup) ; 00121 00122 dk = (2.0*PI) / (nup * dx) ; 00123 fac = 1.0 / nup ; 00124 gg[0] = fac ; 00125 for( ii=1 ; ii<=nby2 ; ii++ ){ k=ii*dk; gg[nup-ii]=gg[ii]=fac*exp(-aa*k*k); } 00126 00127 /** July 20: double up on FFTs **/ 00128 /** Feb 09: extend to other data types besides shorts; 00129 doubling up does not apply to complex data! **/ 00130 00131 switch( ftype ){ 00132 case MRI_short:{ 00133 register short * qfim ; 00134 for( kk=0 ; kk < nz ; kk++ ){ 00135 for( jj=0 ; jj < ny ; jj+=2 ){ 00136 base = jj*nx + kk*nxy ; 00137 qfim = sfim + base ; 00138 if( jj == ny-1 ) 00139 for( ii=0 ; ii<nx ; ii++){ cx[ii].r = qfim[ii] ; cx[ii].i = 0.0 ; } 00140 else 00141 for( ii=0 ; ii<nx ; ii++){ cx[ii].r = qfim[ii] ; cx[ii].i = qfim[ii+nx] ; } 00142 for( ii=nx; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00143 csfft_cox( -1 , nup , cx ) ; 00144 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00145 csfft_cox( 1 , nup , cx ) ; 00146 if( jj == ny-1 ) 00147 for( ii=0 ; ii<nx ; ii++){ qfim[ii] = cx[ii].r ; } 00148 else 00149 for( ii=0 ; ii<nx ; ii++){ qfim[ii] = cx[ii].r ; qfim[ii+nx] = cx[ii].i ; } 00150 } 00151 } 00152 } 00153 break ; 00154 00155 case MRI_float:{ 00156 register float * qfim ; 00157 for( kk=0 ; kk < nz ; kk++ ){ 00158 for( jj=0 ; jj < ny ; jj+=2 ){ 00159 base = jj*nx + kk*nxy ; 00160 qfim = ffim + base ; 00161 if( jj == ny-1 ) 00162 for( ii=0 ; ii<nx ; ii++){ cx[ii].r = qfim[ii] ; cx[ii].i = 0.0 ; } 00163 else 00164 for( ii=0 ; ii<nx ; ii++){ cx[ii].r = qfim[ii] ; cx[ii].i = qfim[ii+nx] ; } 00165 for( ii=nx; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00166 csfft_cox( -1 , nup , cx ) ; 00167 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00168 csfft_cox( 1 , nup , cx ) ; 00169 if( jj == ny-1 ) 00170 for( ii=0 ; ii<nx ; ii++){ qfim[ii] = cx[ii].r ; } 00171 else 00172 for( ii=0 ; ii<nx ; ii++){ qfim[ii] = cx[ii].r ; qfim[ii+nx] = cx[ii].i ; } 00173 } 00174 } 00175 } 00176 break ; 00177 00178 case MRI_byte:{ 00179 register byte * qfim ; 00180 for( kk=0 ; kk < nz ; kk++ ){ 00181 for( jj=0 ; jj < ny ; jj+=2 ){ 00182 base = jj*nx + kk*nxy ; 00183 qfim = bfim + base ; 00184 if( jj == ny-1 ) 00185 for( ii=0 ; ii<nx ; ii++){ cx[ii].r = qfim[ii] ; cx[ii].i = 0.0 ; } 00186 else 00187 for( ii=0 ; ii<nx ; ii++){ cx[ii].r = qfim[ii] ; cx[ii].i = qfim[ii+nx] ; } 00188 for( ii=nx; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00189 csfft_cox( -1 , nup , cx ) ; 00190 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00191 csfft_cox( 1 , nup , cx ) ; 00192 if( jj == ny-1 ) 00193 for( ii=0 ; ii<nx ; ii++){ qfim[ii] = cx[ii].r ; } 00194 else 00195 for( ii=0 ; ii<nx ; ii++){ qfim[ii] = cx[ii].r ; qfim[ii+nx] = cx[ii].i ; } 00196 } 00197 } 00198 } 00199 break ; 00200 00201 case MRI_complex:{ 00202 register complex * qfim ; 00203 for( kk=0 ; kk < nz ; kk++ ){ 00204 for( jj=0 ; jj < ny ; jj++ ){ 00205 base = jj*nx + kk*nxy ; 00206 qfim = cfim + base ; 00207 for( ii=0 ; ii<nx ; ii++) { cx[ii] = qfim[ii] ; } 00208 for( ii=nx; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00209 csfft_cox( -1 , nup , cx ) ; 00210 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00211 csfft_cox( 1 , nup , cx ) ; 00212 for( ii=0 ; ii<nx ; ii++){ qfim[ii] = cx[ii] ; } 00213 } 00214 } 00215 } 00216 break ; 00217 } 00218 00219 /*** do y-direction ***/ 00220 00221 STATUS("start y FFTs") ; 00222 00223 aa = sigmay * sigmay * 0.5 ; 00224 nup = ny + (int)(3.0 * sigmay / dy) ; /* min FFT length */ 00225 #if 0 00226 ii = 2 ; while( ii < nup ){ ii *= 2 ; } /* next power of 2 larger */ 00227 #else 00228 ii = csfft_nextup_one35(nup) ; 00229 #endif 00230 nup = ii ; nby2 = nup / 2 ; 00231 00232 GET_AS_BIG(cx,complex,nup) ; GET_AS_BIG(gg,float,nup) ; 00233 00234 dk = (2.0*PI) / (nup * dy) ; 00235 fac = 1.0 / nup ; 00236 gg[0] = fac ; 00237 for( ii=1 ; ii<=nby2 ; ii++ ){ k=ii*dk; gg[nup-ii]=gg[ii]=fac*exp(-aa*k*k); } 00238 00239 switch( ftype ){ 00240 case MRI_short:{ 00241 register short * qfim ; 00242 for( kk=0 ; kk < nz ; kk++ ){ 00243 for( jj=0 ; jj < nx ; jj+=2 ){ 00244 base = jj + kk*nxy ; 00245 qfim = sfim + base ; 00246 if( jj == nx-1 ) 00247 for( ii=0 ; ii<ny ; ii++){ cx[ii].r = qfim[ii*nx] ; cx[ii].i = 0.0 ; } 00248 else 00249 for( ii=0 ; ii<ny ; ii++){ cx[ii].r = qfim[ii*nx] ; cx[ii].i = qfim[ii*nx+1] ; } 00250 for( ii=ny; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00251 csfft_cox( -1 , nup , cx ) ; 00252 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00253 csfft_cox( 1 , nup , cx ) ; 00254 if( jj == nx-1 ) 00255 for( ii=0 ; ii<ny ; ii++){ qfim[ii*nx] = cx[ii].r ; } 00256 else 00257 for( ii=0 ; ii<ny ; ii++){ qfim[ii*nx] = cx[ii].r ; qfim[ii*nx+1] = cx[ii].i ; } 00258 } 00259 } 00260 } 00261 break ; 00262 00263 case MRI_byte:{ 00264 register byte * qfim ; 00265 for( kk=0 ; kk < nz ; kk++ ){ 00266 for( jj=0 ; jj < nx ; jj+=2 ){ 00267 base = jj + kk*nxy ; 00268 qfim = bfim + base ; 00269 if( jj == nx-1 ) 00270 for( ii=0 ; ii<ny ; ii++){ cx[ii].r = qfim[ii*nx] ; cx[ii].i = 0.0 ; } 00271 else 00272 for( ii=0 ; ii<ny ; ii++){ cx[ii].r = qfim[ii*nx] ; cx[ii].i = qfim[ii*nx+1] ; } 00273 for( ii=ny; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00274 csfft_cox( -1 , nup , cx ) ; 00275 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00276 csfft_cox( 1 , nup , cx ) ; 00277 if( jj == nx-1 ) 00278 for( ii=0 ; ii<ny ; ii++){ qfim[ii*nx] = cx[ii].r ; } 00279 else 00280 for( ii=0 ; ii<ny ; ii++){ qfim[ii*nx] = cx[ii].r ; qfim[ii*nx+1] = cx[ii].i ; } 00281 } 00282 } 00283 } 00284 break ; 00285 00286 case MRI_float:{ 00287 register float * qfim ; 00288 for( kk=0 ; kk < nz ; kk++ ){ 00289 for( jj=0 ; jj < nx ; jj+=2 ){ 00290 base = jj + kk*nxy ; 00291 qfim = ffim + base ; 00292 if( jj == nx-1 ) 00293 for( ii=0 ; ii<ny ; ii++){ cx[ii].r = qfim[ii*nx] ; cx[ii].i = 0.0 ; } 00294 else 00295 for( ii=0 ; ii<ny ; ii++){ cx[ii].r = qfim[ii*nx] ; cx[ii].i = qfim[ii*nx+1] ; } 00296 for( ii=ny; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00297 csfft_cox( -1 , nup , cx ) ; 00298 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00299 csfft_cox( 1 , nup , cx ) ; 00300 if( jj == nx-1 ) 00301 for( ii=0 ; ii<ny ; ii++){ qfim[ii*nx] = cx[ii].r ; } 00302 else 00303 for( ii=0 ; ii<ny ; ii++){ qfim[ii*nx] = cx[ii].r ; qfim[ii*nx+1] = cx[ii].i ; } 00304 } 00305 } 00306 } 00307 break ; 00308 00309 case MRI_complex:{ 00310 register complex * qfim ; 00311 for( kk=0 ; kk < nz ; kk++ ){ 00312 for( jj=0 ; jj < nx ; jj++ ){ 00313 base = jj + kk*nxy ; 00314 qfim = cfim + base ; 00315 for( ii=0 ; ii<ny ; ii++){ cx[ii] = qfim[ii*nx] ; } 00316 for( ii=ny; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00317 csfft_cox( -1 , nup , cx ) ; 00318 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00319 csfft_cox( 1 , nup , cx ) ; 00320 for( ii=0 ; ii<ny ; ii++){ qfim[ii*nx] = cx[ii] ; } 00321 } 00322 } 00323 } 00324 break ; 00325 } 00326 00327 /*** do z-direction ***/ 00328 00329 STATUS("start z FFTs") ; 00330 00331 aa = sigmaz * sigmaz * 0.5 ; 00332 nup = nz + (int)(3.0 * sigmaz / dz) ; /* min FFT length */ 00333 #if 0 00334 ii = 2 ; while( ii < nup ){ ii *= 2 ; } /* next power of 2 larger */ 00335 #else 00336 ii = csfft_nextup_one35(nup) ; 00337 #endif 00338 nup = ii ; nby2 = nup / 2 ; 00339 00340 GET_AS_BIG(cx,complex,nup) ; GET_AS_BIG(gg,float,nup) ; 00341 00342 dk = (2.0*PI) / (nup * dz) ; 00343 fac = 1.0 / nup ; 00344 gg[0] = fac ; 00345 for( ii=1 ; ii<=nby2 ; ii++ ){ k=ii*dk; gg[nup-ii]=gg[ii]=fac*exp(-aa*k*k); } 00346 00347 switch( ftype ){ 00348 case MRI_short:{ 00349 register short * qfim ; 00350 for( kk=0 ; kk < ny ; kk++ ){ 00351 for( jj=0 ; jj < nx ; jj+=2 ){ 00352 base = jj + kk*nx ; 00353 qfim = sfim + base ; 00354 if( jj == nx-1 ) 00355 for( ii=0 ; ii<nz ; ii++){ cx[ii].r = qfim[ii*nxy] ; cx[ii].i = 0.0 ; } 00356 else 00357 for( ii=0 ; ii<nz ; ii++){ cx[ii].r = qfim[ii*nxy] ; cx[ii].i = qfim[ii*nxy+1] ; } 00358 for( ii=nz; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00359 csfft_cox( -1 , nup , cx ) ; 00360 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00361 csfft_cox( 1 , nup , cx ) ; 00362 if( jj == nx-1 ) 00363 for( ii=0 ; ii<nz ; ii++){ qfim[ii*nxy] = cx[ii].r ; } 00364 else 00365 for( ii=0 ; ii<nz ; ii++){ qfim[ii*nxy] = cx[ii].r ; qfim[ii*nxy+1] = cx[ii].i ; } 00366 } 00367 } 00368 } 00369 break ; 00370 00371 case MRI_float:{ 00372 register float * qfim ; 00373 for( kk=0 ; kk < ny ; kk++ ){ 00374 for( jj=0 ; jj < nx ; jj+=2 ){ 00375 base = jj + kk*nx ; 00376 qfim = ffim + base ; 00377 if( jj == nx-1 ) 00378 for( ii=0 ; ii<nz ; ii++){ cx[ii].r = qfim[ii*nxy] ; cx[ii].i = 0.0 ; } 00379 else 00380 for( ii=0 ; ii<nz ; ii++){ cx[ii].r = qfim[ii*nxy] ; cx[ii].i = qfim[ii*nxy+1] ; } 00381 for( ii=nz; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00382 csfft_cox( -1 , nup , cx ) ; 00383 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00384 csfft_cox( 1 , nup , cx ) ; 00385 if( jj == nx-1 ) 00386 for( ii=0 ; ii<nz ; ii++){ qfim[ii*nxy] = cx[ii].r ; } 00387 else 00388 for( ii=0 ; ii<nz ; ii++){ qfim[ii*nxy] = cx[ii].r ; qfim[ii*nxy+1] = cx[ii].i ; } 00389 } 00390 } 00391 } 00392 break ; 00393 00394 case MRI_byte:{ 00395 register byte * qfim ; 00396 for( kk=0 ; kk < ny ; kk++ ){ 00397 for( jj=0 ; jj < nx ; jj+=2 ){ 00398 base = jj + kk*nx ; 00399 qfim = bfim + base ; 00400 if( jj == nx-1 ) 00401 for( ii=0 ; ii<nz ; ii++){ cx[ii].r = qfim[ii*nxy] ; cx[ii].i = 0.0 ; } 00402 else 00403 for( ii=0 ; ii<nz ; ii++){ cx[ii].r = qfim[ii*nxy] ; cx[ii].i = qfim[ii*nxy+1] ; } 00404 for( ii=nz; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00405 csfft_cox( -1 , nup , cx ) ; 00406 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00407 csfft_cox( 1 , nup , cx ) ; 00408 if( jj == nx-1 ) 00409 for( ii=0 ; ii<nz ; ii++){ qfim[ii*nxy] = cx[ii].r ; } 00410 else 00411 for( ii=0 ; ii<nz ; ii++){ qfim[ii*nxy] = cx[ii].r ; qfim[ii*nxy+1] = cx[ii].i ; } 00412 } 00413 } 00414 } 00415 break ; 00416 00417 case MRI_complex:{ 00418 register complex * qfim ; 00419 for( kk=0 ; kk < ny ; kk++ ){ 00420 for( jj=0 ; jj < nx ; jj++ ){ 00421 base = jj + kk*nx ; 00422 qfim = cfim + base ; 00423 for( ii=0 ; ii<nz ; ii++){ cx[ii] = qfim[ii*nxy] ; } 00424 for( ii=nz; ii<nup; ii++){ cx[ii].r = cx[ii].i = 0.0 ; } 00425 csfft_cox( -1 , nup , cx ) ; 00426 for( ii=0 ; ii<nup; ii++){ cx[ii].r *= gg[ii] ; cx[ii].i *= gg[ii] ; } 00427 csfft_cox( 1 , nup , cx ) ; 00428 for( ii=0 ; ii<nz ; ii++){ qfim[ii*nxy] = cx[ii] ; } 00429 } 00430 } 00431 } 00432 break ; 00433 } 00434 00435 /*** 10 Jan 2003: clip data to bot and top found above ***/ 00436 /*** to minimize Gibbs ringing artifacts ***/ 00437 00438 switch( ftype ){ 00439 00440 case MRI_short: 00441 for( ii=0 ; ii < nxyz ; ii++ ) 00442 if( sfim[ii] < fbot ) sfim[ii] = fbot ; 00443 else if( sfim[ii] > ftop ) sfim[ii] = ftop ; 00444 break ; 00445 00446 case MRI_float: 00447 for( ii=0 ; ii < nxyz ; ii++ ) 00448 if( ffim[ii] < fbot ) ffim[ii] = fbot ; 00449 else if( ffim[ii] > ftop ) ffim[ii] = ftop ; 00450 break ; 00451 00452 case MRI_byte: 00453 for( ii=0 ; ii < nxyz ; ii++ ) 00454 if( bfim[ii] < fbot ) bfim[ii] = fbot ; 00455 else if( bfim[ii] > ftop ) bfim[ii] = ftop ; 00456 break ; 00457 } 00458 00459 /*** done! ***/ 00460 00461 EXRETURN ; 00462 } |
|
Definition at line 18 of file edt_checkargv.c. References EDIT_options::abss, argc, EDIT_options::blur, CHECK_DONE, EDIT_options::clip_bot, EDIT_options::clip_top, EDIT_options::clip_unscaled, EDIT_options::clust_rmm, EDIT_options::clust_vmul, EDIT_options::dilate, EDIT_options::do_zvol, ECFLAG_AMAX, ECFLAG_MAX, ECFLAG_MEAN, ECFLAG_ORDER, ECFLAG_SAME, ECFLAG_SIZE, ECFLAG_SMAX, EDIT_options::edit_clust, ENTRY, EDIT_options::erode_pv, EXIT, EDIT_options::fake_dxyz, FCFLAG_AMAX, FCFLAG_AVER, FCFLAG_MAX, FCFLAG_MEAN, FCFLAG_NZMEAN, FCFLAG_SMAX, EDIT_options::filter_opt, EDIT_options::filter_rmm, FWHM_TO_SIGMA, EDIT_options::mult, EDIT_options::nfmask, EDIT_options::noneg, RETURN, RMS_TO_SIGMA, EDIT_options::scale, strtod(), EDIT_options::thrblur, EDIT_options::thresh, EDIT_options::thrfilter_opt, EDIT_options::thrfilter_rmm, EDIT_options::thtoin, EDIT_options::zscore, EDIT_options::zv_x1, EDIT_options::zv_x2, EDIT_options::zv_y1, EDIT_options::zv_y2, EDIT_options::zv_z1, and EDIT_options::zv_z2. Referenced by CL_read_opts(), HI_read_opts(), main(), MRG_read_opts(), and TT_read_opts().
00019 { 00020 float val ; 00021 int ival , nopt_in=nopt ; 00022 00023 ENTRY("EDIT_check_argv") ; 00024 00025 /**** -1clip val ****/ 00026 00027 if( strncmp(argv[nopt],"-1clip" ,6) == 0 || 00028 strncmp(argv[nopt],"-1uclip",6) == 0 ){ 00029 nopt++ ; 00030 if( nopt >= argc ){ 00031 fprintf(stderr,"no argument after %s?\n",argv[nopt-1]) ; 00032 EXIT(1); 00033 } 00034 edopt->clip_top = strtod( argv[nopt++] , NULL ) ; 00035 if( edopt->clip_top <= 0 ){ 00036 fprintf(stderr,"illegal value after %s!\n",argv[nopt-2]) ; 00037 EXIT(1) ; 00038 } 00039 edopt->clip_bot = -edopt->clip_top ; 00040 edopt->clip_unscaled = (strncmp(argv[nopt-2],"-1uclip",6) == 0) ; 00041 CHECK_DONE ; 00042 } 00043 00044 /**** -2clip val1 val2 ****/ 00045 00046 if( strncmp(argv[nopt],"-2clip" ,6) == 0 || 00047 strncmp(argv[nopt],"-2uclip",6) == 0 ){ 00048 nopt++ ; 00049 if( nopt+1 >= argc ){ 00050 fprintf(stderr,"no arguments after %s?\n",argv[nopt-1]) ; 00051 EXIT(1) ; 00052 } 00053 edopt->clip_bot = strtod( argv[nopt++] , NULL ) ; /* bot */ 00054 edopt->clip_top = strtod( argv[nopt++] , NULL ) ; /* top */ 00055 00056 if( edopt->clip_bot >= edopt->clip_top ){ 00057 fprintf(stderr, 00058 "*** %s %f %f is illegal:\n" 00059 "*** first value must be less than second value!\n", 00060 argv[nopt-3] , edopt->clip_bot , edopt->clip_top ) ; 00061 EXIT(1) ; 00062 } 00063 edopt->clip_unscaled = (strncmp(argv[nopt-3],"-2uclip",6) == 0) ; 00064 CHECK_DONE ; 00065 } 00066 00067 /**** -1thtoin ****/ 00068 00069 if( strncmp(argv[nopt],"-1thtoin",6) == 0 ){ 00070 edopt->thtoin = 1 ; 00071 nopt++ ; CHECK_DONE ; 00072 } 00073 00074 /**** -2thtoin ****/ 00075 00076 if( strncmp(argv[nopt],"-2thtoin",6) == 0 ){ 00077 edopt->thtoin = 2 ; 00078 nopt++ ; CHECK_DONE ; 00079 } 00080 00081 /**** -1zscore (17 Sep 1998) ****/ 00082 00083 if( strncmp(argv[nopt],"-1zscore",6) == 0 ){ 00084 edopt->zscore = 1 ; 00085 nopt++ ; CHECK_DONE ; 00086 } 00087 00088 /**** -dxyz=1 (11 Sep 2000) ****/ 00089 00090 if( strcmp(argv[nopt],"-dxyz=1") == 0 ){ 00091 edopt->fake_dxyz = 1 ; 00092 nopt++ ; CHECK_DONE ; 00093 } 00094 00095 /**** -1noneg ****/ 00096 00097 if( strncmp(argv[nopt],"-1noneg",6) == 0 ){ 00098 edopt->noneg = 1 ; 00099 nopt++ ; CHECK_DONE ; 00100 } 00101 00102 /**** -1abs ****/ 00103 00104 if( strncmp(argv[nopt],"-1abs",6) == 0 ){ 00105 edopt->abss = 1 ; 00106 nopt++ ; CHECK_DONE ; 00107 } 00108 00109 /**** -1thresh thr ****/ 00110 00111 if( strncmp(argv[nopt],"-1thresh",6) == 0 ){ 00112 nopt++ ; 00113 if( nopt >= argc ){ 00114 fprintf(stderr,"no argument after -1thresh!\n") ; 00115 EXIT(1); 00116 } 00117 val = strtod( argv[nopt++] , NULL ) ; 00118 if( val < 0.0 ){ 00119 fprintf(stderr,"illegal value after -1thresh!\n") ; 00120 EXIT(1) ; 00121 } 00122 edopt->thresh = val ; 00123 CHECK_DONE ; 00124 } 00125 00126 /**** -1clust rmm vmul ****/ 00127 00128 if( strncmp(argv[nopt],"-1clust",12) == 0 ){ 00129 nopt++ ; 00130 if( nopt+1 >= argc ){ 00131 fprintf(stderr,"need 2 arguments after -1clust!\n") ; 00132 EXIT(1) ; 00133 } 00134 edopt->edit_clust = ECFLAG_SAME; 00135 edopt->clust_rmm = strtod( argv[nopt++] , NULL ) ; 00136 edopt->clust_vmul = strtod( argv[nopt++] , NULL ) ; 00137 if( edopt->clust_rmm < 0 ){ 00138 fprintf(stderr,"illegal value after -1clust\n") ; 00139 EXIT(1) ; 00140 } 00141 CHECK_DONE ; 00142 } 00143 00144 00145 /**** -1clust_mean rmm vmul ****/ /* 10 Sept 1996 */ 00146 00147 if( strncmp(argv[nopt],"-1clust_mean",12) == 0 ){ 00148 nopt++ ; 00149 if( nopt+1 >= argc ){ 00150 fprintf(stderr,"need 2 arguments after -1clust_mean!\n") ; 00151 EXIT(1) ; 00152 } 00153 edopt->edit_clust = ECFLAG_MEAN; 00154 edopt->clust_rmm = strtod( argv[nopt++] , NULL ) ; 00155 edopt->clust_vmul = strtod( argv[nopt++] , NULL ) ; 00156 if( edopt->clust_rmm < 0 ){ 00157 fprintf(stderr,"illegal value after -1clust_mean\n") ; 00158 EXIT(1) ; 00159 } 00160 CHECK_DONE ; 00161 } 00162 00163 /**** -1clust_max rmm vmul ****/ /* 10 Sept 1996 */ 00164 00165 if( strncmp(argv[nopt],"-1clust_max",12) == 0 ){ 00166 nopt++ ; 00167 if( nopt+1 >= argc ){ 00168 fprintf(stderr,"need 2 arguments after -1clust_max!\n") ; 00169 EXIT(1) ; 00170 } 00171 edopt->edit_clust = ECFLAG_MAX; 00172 edopt->clust_rmm = strtod( argv[nopt++] , NULL ) ; 00173 edopt->clust_vmul = strtod( argv[nopt++] , NULL ) ; 00174 if( edopt->clust_rmm < 0 ){ 00175 fprintf(stderr,"illegal value after -1clust_max\n") ; 00176 EXIT(1) ; 00177 } 00178 CHECK_DONE ; 00179 } 00180 00181 /**** -1clust_amax rmm vmul ****/ /* 10 Sept 1996 */ 00182 00183 if( strncmp(argv[nopt],"-1clust_amax",12) == 0 ){ 00184 nopt++ ; 00185 if( nopt+1 >= argc ){ 00186 fprintf(stderr,"need 2 arguments after -1clust_amax!\n") ; 00187 EXIT(1) ; 00188 } 00189 edopt->edit_clust = ECFLAG_AMAX; 00190 edopt->clust_rmm = strtod( argv[nopt++] , NULL ) ; 00191 edopt->clust_vmul = strtod( argv[nopt++] , NULL ) ; 00192 if( edopt->clust_rmm < 0 ){ 00193 fprintf(stderr,"illegal value after -1clust_amax\n") ; 00194 EXIT(1) ; 00195 } 00196 CHECK_DONE ; 00197 } 00198 00199 /**** -1clust_smax rmm vmul ****/ /* 10 Sept 1996 */ 00200 00201 if( strncmp(argv[nopt],"-1clust_smax",12) == 0 ){ 00202 nopt++ ; 00203 if( nopt+1 >= argc ){ 00204 fprintf(stderr,"need 2 arguments after -1clust_smax!\n") ; 00205 EXIT(1) ; 00206 } 00207 edopt->edit_clust = ECFLAG_SMAX; 00208 edopt->clust_rmm = strtod( argv[nopt++] , NULL ) ; 00209 edopt->clust_vmul = strtod( argv[nopt++] , NULL ) ; 00210 if( edopt->clust_rmm < 0 ){ 00211 fprintf(stderr,"illegal value after -1clust_smax\n") ; 00212 EXIT(1) ; 00213 } 00214 CHECK_DONE ; 00215 } 00216 00217 /**** -1clust_size rmm vmul ****/ /* 10 Sept 1996 */ 00218 00219 if( strncmp(argv[nopt],"-1clust_size",12) == 0 ){ 00220 nopt++ ; 00221 if( nopt+1 >= argc ){ 00222 fprintf(stderr,"need 2 arguments after -1clust_size!\n") ; 00223 EXIT(1) ; 00224 } 00225 edopt->edit_clust = ECFLAG_SIZE; 00226 edopt->clust_rmm = strtod( argv[nopt++] , NULL ) ; 00227 edopt->clust_vmul = strtod( argv[nopt++] , NULL ) ; 00228 if( edopt->clust_rmm < 0 ){ 00229 fprintf(stderr,"illegal value after -1clust_size\n") ; 00230 EXIT(1) ; 00231 } 00232 CHECK_DONE ; 00233 } 00234 00235 /**** -1clust_order rmm vmul ****/ /* 09 June 1998 */ 00236 00237 if( strncmp(argv[nopt],"-1clust_order",12) == 0 ){ 00238 nopt++ ; 00239 if( nopt+1 >= argc ){ 00240 fprintf(stderr,"need 2 arguments after -1clust_order!\n") ; 00241 EXIT(1) ; 00242 } 00243 edopt->edit_clust = ECFLAG_ORDER; 00244 edopt->clust_rmm = strtod( argv[nopt++] , NULL ) ; 00245 edopt->clust_vmul = strtod( argv[nopt++] , NULL ) ; 00246 if( edopt->clust_rmm < 0 ){ 00247 fprintf(stderr,"illegal value after -1clust_order\n") ; 00248 EXIT(1) ; 00249 } 00250 CHECK_DONE ; 00251 } 00252 00253 /**** -1erode pv ****/ /* 17 June 1998 */ 00254 00255 if( strncmp(argv[nopt],"-1erode",7) == 0 ){ 00256 nopt++ ; 00257 if( nopt >= argc ){ 00258 fprintf(stderr,"need 1 argument after -1erode!\n") ; 00259 EXIT(1) ; 00260 } 00261 edopt->erode_pv = strtod( argv[nopt++] , NULL ) ; 00262 if (edopt->erode_pv > 1.0) edopt->erode_pv /= 100.0; 00263 if( edopt->erode_pv < 0.0 || edopt->erode_pv > 1.0 ){ 00264 fprintf(stderr,"illegal value after -1erode \n") ; 00265 EXIT(1) ; 00266 } 00267 CHECK_DONE ; 00268 } 00269 00270 /**** -1dilate ****/ /* 17 June 1998 */ 00271 00272 if( strncmp(argv[nopt],"-1dilate",8) == 0 ){ 00273 nopt++ ; 00274 edopt->dilate = 1; 00275 CHECK_DONE ; 00276 } 00277 00278 /**** -1filter_mean rmm ****/ /* 11 Sept 1996 */ 00279 00280 if( strncmp(argv[nopt],"-1filter_mean",15) == 0 ){ 00281 nopt++ ; 00282 if( nopt >= argc ){ 00283 fprintf(stderr,"need 1 argument after -1filter_mean \n") ; 00284 EXIT(1) ; 00285 } 00286 edopt->filter_opt = FCFLAG_MEAN; 00287 edopt->filter_rmm = strtod( argv[nopt++] , NULL ) ; 00288 if( edopt->filter_rmm <= 0 ){ 00289 fprintf(stderr,"illegal value after -1filter_mean \n") ; 00290 EXIT(1) ; 00291 } 00292 CHECK_DONE ; 00293 } 00294 00295 /**** -1filter_nzmean rmm ****/ /* 11 Sept 1996 */ 00296 00297 if( strncmp(argv[nopt],"-1filter_nzmean",15) == 0 ){ 00298 nopt++ ; 00299 if( nopt >= argc ){ 00300 fprintf(stderr,"need 1 argument after -1filter_nzmean \n") ; 00301 EXIT(1) ; 00302 } 00303 edopt->filter_opt = FCFLAG_NZMEAN; 00304 edopt->filter_rmm = strtod( argv[nopt++] , NULL ) ; 00305 if( edopt->filter_rmm <= 0 ){ 00306 fprintf(stderr,"illegal value after -1filter_nzmean \n") ; 00307 EXIT(1) ; 00308 } 00309 CHECK_DONE ; 00310 } 00311 00312 /**** -1filter_max rmm ****/ /* 11 Sept 1996 */ 00313 00314 if( strncmp(argv[nopt],"-1filter_max",15) == 0 ){ 00315 nopt++ ; 00316 if( nopt >= argc ){ 00317 fprintf(stderr,"need 1 argument after -1filter_max \n") ; 00318 EXIT(1) ; 00319 } 00320 edopt->filter_opt = FCFLAG_MAX; 00321 edopt->filter_rmm = strtod( argv[nopt++] , NULL ) ; 00322 if( edopt->filter_rmm <= 0 ){ 00323 fprintf(stderr,"illegal value after -1filter_max \n") ; 00324 EXIT(1) ; 00325 } 00326 CHECK_DONE ; 00327 } 00328 00329 /**** -1filter_amax rmm ****/ /* 11 Sept 1996 */ 00330 00331 if( strncmp(argv[nopt],"-1filter_amax",15) == 0 ){ 00332 nopt++ ; 00333 if( nopt >= argc ){ 00334 fprintf(stderr,"need 1 argument after -1filter_amax \n") ; 00335 EXIT(1) ; 00336 } 00337 edopt->filter_opt = FCFLAG_AMAX; 00338 edopt->filter_rmm = strtod( argv[nopt++] , NULL ) ; 00339 if( edopt->filter_rmm <= 0 ){ 00340 fprintf(stderr,"illegal value after -1filter_amax \n") ; 00341 EXIT(1) ; 00342 } 00343 CHECK_DONE ; 00344 } 00345 00346 /**** -1filter_smax rmm ****/ /* 11 Sept 1996 */ 00347 00348 if( strncmp(argv[nopt],"-1filter_smax",15) == 0 ){ 00349 nopt++ ; 00350 if( nopt >= argc ){ 00351 fprintf(stderr,"need 1 argument after -1filter_smax \n") ; 00352 EXIT(1) ; 00353 } 00354 edopt->filter_opt = FCFLAG_SMAX; 00355 edopt->filter_rmm = strtod( argv[nopt++] , NULL ) ; 00356 if( edopt->filter_rmm <= 0 ){ 00357 fprintf(stderr,"illegal value after -1filter_smax \n") ; 00358 EXIT(1) ; 00359 } 00360 CHECK_DONE ; 00361 } 00362 00363 /**** -1filter_aver rmm ****/ /* 07 Jan 1998 */ 00364 00365 if( strncmp(argv[nopt],"-1filter_aver",15) == 0 ){ 00366 nopt++ ; 00367 if( nopt >= argc ){ 00368 fprintf(stderr,"need 1 argument after -1filter_aver \n") ; 00369 EXIT(1) ; 00370 } 00371 edopt->filter_opt = FCFLAG_AVER ; 00372 edopt->filter_rmm = strtod( argv[nopt++] , NULL ) ; 00373 if( edopt->filter_rmm <= 0 ){ 00374 fprintf(stderr,"illegal value after -1filter_aver \n") ; 00375 EXIT(1) ; 00376 } 00377 00378 if( edopt->nfmask > 0 ) edopt->filter_opt = FCFLAG_MEAN ; 00379 CHECK_DONE ; 00380 } 00381 00382 00383 /**** -t1filter_aver rmm ****/ /* 07 Jan 1998 */ 00384 00385 if( strncmp(argv[nopt],"-t1filter_aver",15) == 0 ){ 00386 nopt++ ; 00387 if( nopt >= argc ){ 00388 fprintf(stderr,"need 1 argument after -t1filter_aver \n") ; 00389 EXIT(1) ; 00390 } 00391 edopt->thrfilter_opt = FCFLAG_AVER ; 00392 edopt->thrfilter_rmm = strtod( argv[nopt++] , NULL ) ; 00393 if( edopt->thrfilter_rmm <= 0 ){ 00394 fprintf(stderr,"illegal value after -t1filter_aver \n") ; 00395 EXIT(1) ; 00396 } 00397 00398 if( edopt->nfmask > 0 ) edopt->thrfilter_opt = FCFLAG_MEAN ; 00399 CHECK_DONE ; 00400 } 00401 00402 00403 /**** -t1filter_mean rmm ****/ /* 1 Oct 1996 */ 00404 00405 if( strncmp(argv[nopt],"-t1filter_mean",15) == 0 ){ 00406 nopt++ ; 00407 if( nopt >= argc ){ 00408 fprintf(stderr,"need 1 argument after -t1filter_mean \n") ; 00409 EXIT(1) ; 00410 } 00411 edopt->thrfilter_opt = FCFLAG_MEAN; 00412 edopt->thrfilter_rmm = strtod( argv[nopt++] , NULL ) ; 00413 if( edopt->thrfilter_rmm <= 0 ){ 00414 fprintf(stderr,"illegal value after -t1filter_mean \n") ; 00415 EXIT(1) ; 00416 } 00417 CHECK_DONE ; 00418 } 00419 00420 00421 /**** -t1filter_nzmean rmm ****/ /* 1 Oct 1996 */ 00422 00423 if( strncmp(argv[nopt],"-t1filter_nzmean",15) == 0 ){ 00424 nopt++ ; 00425 if( nopt >= argc ){ 00426 fprintf(stderr,"need 1 argument after -t1filter_nzmean \n") ; 00427 EXIT(1) ; 00428 } 00429 edopt->thrfilter_opt = FCFLAG_NZMEAN; 00430 edopt->thrfilter_rmm = strtod( argv[nopt++] , NULL ) ; 00431 if( edopt->thrfilter_rmm <= 0 ){ 00432 fprintf(stderr,"illegal value after -t1filter_nzmean \n") ; 00433 EXIT(1) ; 00434 } 00435 CHECK_DONE ; 00436 } 00437 00438 00439 /**** -t1filter_max rmm ****/ /* 1 Oct 1996 */ 00440 00441 if( strncmp(argv[nopt],"-t1filter_max",15) == 0 ){ 00442 nopt++ ; 00443 if( nopt >= argc ){ 00444 fprintf(stderr,"need 1 argument after -t1filter_max \n") ; 00445 EXIT(1) ; 00446 } 00447 edopt->thrfilter_opt = FCFLAG_MAX; 00448 edopt->thrfilter_rmm = strtod( argv[nopt++] , NULL ) ; 00449 if( edopt->thrfilter_rmm <= 0 ){ 00450 fprintf(stderr,"illegal value after -t1filter_max \n") ; 00451 EXIT(1) ; 00452 } 00453 CHECK_DONE ; 00454 } 00455 00456 00457 /**** -t1filter_amax rmm ****/ /* 1 Oct 1996 */ 00458 00459 if( strncmp(argv[nopt],"-t1filter_amax",15) == 0 ){ 00460 nopt++ ; 00461 if( nopt >= argc ){ 00462 fprintf(stderr,"need 1 argument after -t1filter_amax \n") ; 00463 EXIT(1) ; 00464 } 00465 edopt->thrfilter_opt = FCFLAG_AMAX; 00466 edopt->thrfilter_rmm = strtod( argv[nopt++] , NULL ) ; 00467 if( edopt->thrfilter_rmm <= 0 ){ 00468 fprintf(stderr,"illegal value after -t1filter_amax \n") ; 00469 EXIT(1) ; 00470 } 00471 CHECK_DONE ; 00472 } 00473 00474 00475 /**** -t1filter_smax rmm ****/ /* 1 Oct 1996 */ 00476 00477 if( strncmp(argv[nopt],"-t1filter_smax",15) == 0 ){ 00478 nopt++ ; 00479 if( nopt >= argc ){ 00480 fprintf(stderr,"need 1 argument after -t1filter_smax \n") ; 00481 EXIT(1) ; 00482 } 00483 edopt->thrfilter_opt = FCFLAG_SMAX; 00484 edopt->thrfilter_rmm = strtod( argv[nopt++] , NULL ) ; 00485 if( edopt->thrfilter_rmm <= 0 ){ 00486 fprintf(stderr,"illegal value after -t1filter_smax \n") ; 00487 EXIT(1) ; 00488 } 00489 CHECK_DONE ; 00490 } 00491 00492 00493 00494 00495 /**** -1blur_sigma size ****/ 00496 00497 if( strncmp(argv[nopt],"-1blur_sigma",12) == 0 ){ 00498 nopt++ ; 00499 if( nopt >= argc ){ 00500 fprintf(stderr,"need argument after -1blur_sigma!\n") ; 00501 EXIT(1) ; 00502 } 00503 edopt->blur = strtod( argv[nopt++] , NULL ) ; 00504 if( edopt->blur <= 0 ){ 00505 fprintf(stderr,"illegal value after -1blur_sigma\n") ; 00506 EXIT(1) ; 00507 } 00508 CHECK_DONE ; 00509 } 00510 00511 /**** -1blur_rms size ****/ 00512 00513 if( strncmp(argv[nopt],"-1blur_rms",12) == 0 ){ 00514 nopt++ ; 00515 if( nopt >= argc ){ 00516 fprintf(stderr,"need argument after -1blur_rms!\n") ; 00517 EXIT(1) ; 00518 } 00519 edopt->blur = strtod( argv[nopt++] , NULL ) ; 00520 if( edopt->blur <= 0 ){ 00521 fprintf(stderr,"illegal value after -1blur_rms\n") ; 00522 EXIT(1) ; 00523 } 00524 edopt->blur = RMS_TO_SIGMA(edopt->blur) ; 00525 CHECK_DONE ; 00526 } 00527 00528 /**** -1blur_fwhm size ****/ 00529 00530 if( strncmp(argv[nopt],"-1blur_fwhm",12) == 0 ){ 00531 nopt++ ; 00532 if( nopt >= argc ){ 00533 fprintf(stderr,"need argument after -1blur_fwhm!\n") ; 00534 EXIT(1) ; 00535 } 00536 edopt->blur = strtod( argv[nopt++] , NULL ) ; 00537 if( edopt->blur <= 0 ){ 00538 fprintf(stderr,"illegal value after -1blur_fwhm\n") ; 00539 EXIT(1) ; 00540 } 00541 edopt->blur = FWHM_TO_SIGMA(edopt->blur) ; 00542 CHECK_DONE ; 00543 } 00544 00545 /**** -1blur ****/ 00546 00547 if( strncmp(argv[nopt],"-1blur",6) == 0 ){ 00548 fprintf(stderr, 00549 "*** the old -1blur option is no longer valid! ***\n") ; 00550 EXIT(1) ; 00551 } 00552 00553 /**** -t1blur_sigma size ****/ /* 4 Oct 1996 */ 00554 00555 if( strncmp(argv[nopt],"-t1blur_sigma",12) == 0 ){ 00556 nopt++ ; 00557 if( nopt >= argc ){ 00558 fprintf(stderr,"need argument after -t1blur_sigma!\n") ; 00559 EXIT(1) ; 00560 } 00561 edopt->thrblur = strtod( argv[nopt++] , NULL ) ; 00562 if( edopt->thrblur <= 0 ){ 00563 fprintf(stderr,"illegal value after -t1blur_sigma\n") ; 00564 EXIT(1) ; 00565 } 00566 CHECK_DONE ; 00567 } 00568 00569 /**** -t1blur_rms size ****/ /* 4 Oct 1996 */ 00570 00571 if( strncmp(argv[nopt],"-t1blur_rms",12) == 0 ){ 00572 nopt++ ; 00573 if( nopt >= argc ){ 00574 fprintf(stderr,"need argument after -t1blur_rms!\n") ; 00575 EXIT(1) ; 00576 } 00577 edopt->thrblur = strtod( argv[nopt++] , NULL ) ; 00578 if( edopt->thrblur <= 0 ){ 00579 fprintf(stderr,"illegal value after -t1blur_rms\n") ; 00580 EXIT(1) ; 00581 } 00582 edopt->thrblur = RMS_TO_SIGMA(edopt->thrblur) ; 00583 CHECK_DONE ; 00584 } 00585 00586 /**** -t1blur_fwhm size ****/ /* 4 Oct 1996 */ 00587 00588 if( strncmp(argv[nopt],"-t1blur_fwhm",12) == 0 ){ 00589 nopt++ ; 00590 if( nopt >= argc ){ 00591 fprintf(stderr,"need argument after -t1blur_fwhm!\n") ; 00592 EXIT(1) ; 00593 } 00594 edopt->thrblur = strtod( argv[nopt++] , NULL ) ; 00595 if( edopt->thrblur <= 0 ){ 00596 fprintf(stderr,"illegal value after -t1blur_fwhm\n") ; 00597 EXIT(1) ; 00598 } 00599 edopt->thrblur = FWHM_TO_SIGMA(edopt->thrblur) ; 00600 CHECK_DONE ; 00601 } 00602 00603 00604 /**** -1scale ****/ 00605 00606 if( strncmp(argv[nopt],"-1scale",6) == 0 ){ 00607 #ifdef ALLOW_SCALE_TO_MAX 00608 edopt->scale = 1 ; 00609 #else 00610 fprintf(stderr, 00611 "*** the old -1scale option is no longer valid! ***\n") ; 00612 #endif 00613 nopt++ ; CHECK_DONE ; 00614 } 00615 00616 /**** -1mult mult ****/ 00617 00618 if( strncmp(argv[nopt],"-1mult",6) == 0 ){ 00619 nopt++ ; 00620 if( nopt >= argc ){ 00621 fprintf(stderr,"no argument after -1mult!\n") ; 00622 EXIT(1); 00623 } 00624 val = strtod( argv[nopt++] , NULL ) ; 00625 if( val == 0.0 ){ 00626 fprintf(stderr,"illegal value after -1mult!\n") ; 00627 EXIT(1) ; 00628 } 00629 edopt->mult = val ; 00630 CHECK_DONE ; 00631 } 00632 00633 /**** -1zvol x1 x2 y1 y2 z1 z2 ***/ 00634 00635 if( strncmp(argv[nopt],"-1zvol",6) == 0 ){ 00636 char * cerr ; 00637 00638 if( nopt+6 >= argc ){ 00639 fprintf(stderr,"need 6 arguments after -1zvol!\a\n") ; 00640 EXIT(1) ; 00641 } 00642 00643 edopt->zv_x1 = strtod( argv[nopt+1] , &cerr ) ; 00644 if( cerr == argv[nopt+1] ){ 00645 fprintf(stderr,"illegal 1st argument after -1zvol!\a\n") ; 00646 EXIT(1) ; 00647 } 00648 00649 edopt->zv_x2 = strtod( argv[nopt+2] , &cerr ) ; 00650 if( cerr == argv[nopt+2] ){ 00651 fprintf(stderr,"illegal 2nd argument after -1zvol!\a\n") ; 00652 EXIT(1) ; 00653 } 00654 00655 edopt->zv_y1 = strtod( argv[nopt+3] , &cerr ) ; 00656 if( cerr == argv[nopt+3] ){ 00657 fprintf(stderr,"illegal 3rd argument after -1zvol!\a\n") ; 00658 EXIT(1) ; 00659 } 00660 00661 edopt->zv_y2 = strtod( argv[nopt+4] , &cerr ) ; 00662 if( cerr == argv[nopt+4] ){ 00663 fprintf(stderr,"illegal 4th argument after -1zvol!\a\n") ; 00664 EXIT(1) ; 00665 } 00666 00667 edopt->zv_z1 = strtod( argv[nopt+5] , &cerr ) ; 00668 if( cerr == argv[nopt+5] ){ 00669 fprintf(stderr,"illegal 5th argument after -1zvol!\a\n") ; 00670 EXIT(1) ; 00671 } 00672 00673 edopt->zv_z2 = strtod( argv[nopt+6] , &cerr ) ; 00674 if( cerr == argv[nopt+6] ){ 00675 fprintf(stderr,"illegal 6th argument after -1zvol!\a\n") ; 00676 EXIT(1) ; 00677 } 00678 edopt->do_zvol = 1 ; 00679 00680 nopt += 7 ; CHECK_DONE ; 00681 } 00682 00683 RETURN( 0 ); 00684 } |
|
Definition at line 401 of file edt_coerce.c. Referenced by AFNI_fimmer_compute().
00402 { 00403 int ii ; 00404 float bot ; 00405 00406 ENTRY("EDIT_clip_float") ; 00407 00408 if( top <= 0.0 || nxyz <= 0 || vol == NULL ) EXRETURN ; 00409 00410 bot = -top ; 00411 00412 for( ii=0 ; ii < nxyz ; ii++ ) 00413 if( vol[ii] > top ) vol[ii] = top ; 00414 else if( vol[ii] < bot ) vol[ii] = bot ; 00415 00416 EXRETURN ; 00417 } |
|
Definition at line 25 of file edt_clustarr.c. References amax, MCW_cluster_array::clar, ECFLAG_AMAX, ECFLAG_MAX, ECFLAG_MEAN, ECFLAG_ORDER, ECFLAG_SIZE, ECFLAG_SMAX, ENTRY, MCW_cluster::mag, MCW_cluster_array::num_clu, MCW_cluster::num_pt, and SORT_CLARR. Referenced by EDIT_one_dataset().
00027 { 00028 int iclu; /* cluster index */ 00029 int nclu; /* non-empty cluster index */ 00030 int ii; /* voxel index */ 00031 float 00032 mag, /* voxel intensity */ 00033 sum, /* sum of voxel intensities */ 00034 max, /* maximum of voxel intensities */ 00035 amax, /* maximum of absolute voxel intensities */ 00036 smax, /* signed maximum of absolute voxel intensities */ 00037 mean, /* mean of voxel intensities */ 00038 size; /* size of cluster (multiples of vmul) */ 00039 00040 ENTRY("EDIT_cluster_array") ; 00041 00042 if( edit_clust == ECFLAG_ORDER ){ 00043 SORT_CLARR(clar) ; 00044 } 00045 00046 nclu = 0; 00047 for (iclu = 0; iclu < clar->num_clu; iclu++) 00048 { 00049 if ((clar->clar[iclu] != NULL) && (clar->clar[iclu]->num_pt > 0)) 00050 { 00051 nclu++; 00052 00053 /* initialization of basic statistics for this cluster */ 00054 sum = max = smax = clar->clar[iclu]->mag[0]; 00055 amax = fabs(smax); 00056 00057 /* calculate basic statistics for this cluster */ 00058 for (ii = 1; ii < clar->clar[iclu]->num_pt; ii++) 00059 { 00060 mag = clar->clar[iclu]->mag[ii]; 00061 switch (edit_clust) 00062 { 00063 case ECFLAG_MEAN : 00064 sum += mag; break; 00065 case ECFLAG_MAX : 00066 if (mag > max) max = mag; break; 00067 case ECFLAG_AMAX : 00068 if (fabs(mag) > amax) amax = fabs(mag); break; 00069 case ECFLAG_SMAX : 00070 if (fabs(mag) > fabs(smax)) smax = mag; break; 00071 case ECFLAG_SIZE : break; 00072 default : break; 00073 } 00074 00075 } 00076 00077 /* additional calculations */ 00078 if (edit_clust == ECFLAG_MEAN) 00079 mean = sum / clar->clar[iclu]->num_pt; 00080 if (edit_clust == ECFLAG_SIZE) 00081 size = clar->clar[iclu]->num_pt * dxyz / vmul; 00082 00083 /* set all voxel intensities in this cluster to the same value */ 00084 for (ii = 0; ii < clar->clar[iclu]->num_pt; ii++) 00085 { 00086 switch (edit_clust) 00087 { 00088 case ECFLAG_MEAN : clar->clar[iclu]->mag[ii] = mean; 00089 case ECFLAG_MAX : clar->clar[iclu]->mag[ii] = max; break; 00090 case ECFLAG_AMAX : clar->clar[iclu]->mag[ii] = amax; break; 00091 case ECFLAG_SMAX : clar->clar[iclu]->mag[ii] = smax; break; 00092 case ECFLAG_SIZE : clar->clar[iclu]->mag[ii] = size; break; 00093 case ECFLAG_ORDER: clar->clar[iclu]->mag[ii] = nclu; break; 00094 default : break; 00095 } 00096 } 00097 } 00098 } /* iclu */ 00099 00100 EXRETURN ; 00101 } |
|
Definition at line 383 of file edt_coerce.c. References EDIT_coerce_scale_type(), ENTRY, MCW_vol_amax(), MRI_IS_INT_TYPE, RETURN, and top. Referenced by EDIT_filter_volume(), EDIT_main(), and main().
00385 { 00386 float fac=0.0 , top ; 00387 00388 ENTRY("EDIT_coerce_autoscale") ; 00389 00390 if( MRI_IS_INT_TYPE(otype) ){ 00391 top = MCW_vol_amax( nxyz,1,1 , itype,ivol ) ; 00392 fac = (top > MRI_TYPE_maxval[otype]) ? MRI_TYPE_maxval[otype]/top : 0.0 ; 00393 } 00394 00395 EDIT_coerce_scale_type( nxyz , fac , itype,ivol , otype,ovol ) ; 00396 RETURN( fac ); 00397 } |
|
Definition at line 194 of file edt_coerce.c. References CABS, EDIT_coerce_type(), ENTRY, FLOAT_TO_BYTE, fout, complex::i, complex::r, ROUND, and STATUS. Referenced by CALC_read_opts(), EDIT_coerce_autoscale(), EDIT_coerce_autoscale_new(), EDIT_main(), EDIT_one_dataset(), initialize_program(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), mri_scalize(), POWER_main(), process_as_floats(), process_subbrick(), read_afni_data(), ROIPLOT_main(), s2v_nodes2volume(), STAVG_main(), SUMA_Get_isosurface_datasets(), SUMA_LoadPrepInVol(), SUMA_SurfGridIntersect(), THD_autonudge(), and THD_write_minc().
00196 { 00197 register int ii ; 00198 register float fac = scl , val ; 00199 00200 complex * cin , * cout ; 00201 short * sin , * sout ; 00202 float * fin , * fout ; 00203 byte * bin , * bout ; 00204 double * din , * dout ; /* 11 Jan 1999 */ 00205 00206 ENTRY("EDIT_coerce_scale_type") ; 00207 #ifdef AFNI_DEBUG 00208 { char str[256] ; 00209 sprintf(str,"voxels=%d scale=%g input type=%s output type=%s", 00210 nxyz,scl , MRI_TYPE_name[itype],MRI_TYPE_name[otype]) ; 00211 STATUS(str) ; } 00212 #endif 00213 00214 if( nxyz <= 0 || ivol == NULL || ovol == NULL ) EXRETURN ; 00215 00216 if( fac == 0.0 || fac == 1.0 ){ 00217 EDIT_coerce_type( nxyz , itype,ivol , otype,ovol ) ; 00218 EXRETURN ; 00219 } 00220 00221 switch( itype ){ 00222 default: 00223 fprintf(stderr,"** Unknown itype=%d in EDIT_coerce_scale_type\n",itype); 00224 EXRETURN ; 00225 case MRI_complex: cin = (complex *) ivol ; break ; 00226 case MRI_short : sin = (short *) ivol ; break ; 00227 case MRI_float : fin = (float *) ivol ; break ; 00228 case MRI_byte : bin = (byte *) ivol ; break ; 00229 case MRI_double : din = (double *) ivol ; break ; 00230 } 00231 switch( otype ){ 00232 default: 00233 fprintf(stderr,"** Unknown otype=%d in EDIT_coerce_scale_type\n",otype); 00234 EXRETURN ; 00235 case MRI_complex: cout = (complex *) ovol ; break ; 00236 case MRI_short : sout = (short *) ovol ; break ; 00237 case MRI_float : fout = (float *) ovol ; break ; 00238 case MRI_byte : bout = (byte *) ovol ; break ; 00239 case MRI_double : dout = (double *) ovol ; break ; 00240 } 00241 00242 switch( otype ){ 00243 00244 /*** outputs are shorts ***/ 00245 00246 case MRI_short: 00247 switch( itype ){ 00248 case MRI_short: /* inputs are shorts */ 00249 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*sin[ii]) ; 00250 EXRETURN ; 00251 case MRI_float: /* inputs are floats */ 00252 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*fin[ii]) ; 00253 EXRETURN ; 00254 case MRI_double: /* inputs are double */ 00255 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*din[ii]) ; 00256 EXRETURN ; 00257 case MRI_byte: /* inputs are bytes */ 00258 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*bin[ii]) ; 00259 EXRETURN ; 00260 case MRI_complex: /* inputs are complex */ 00261 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*CABS(cin[ii])) ; 00262 EXRETURN ; 00263 } 00264 EXRETURN ; 00265 00266 /*** outputs are floats ***/ 00267 00268 case MRI_float: 00269 switch( itype ){ 00270 case MRI_short: /* inputs are shorts */ 00271 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*sin[ii] ; 00272 EXRETURN ; 00273 case MRI_float: /* inputs are floats */ 00274 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*fin[ii] ; 00275 EXRETURN ; 00276 case MRI_double: /* inputs are doubles */ 00277 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*din[ii] ; 00278 EXRETURN ; 00279 case MRI_byte: /* inputs are bytes */ 00280 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*bin[ii] ; 00281 EXRETURN ; 00282 case MRI_complex: /* inputs are complex */ 00283 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*CABS(cin[ii]) ; 00284 EXRETURN ; 00285 } 00286 EXRETURN ; 00287 00288 /*** outputs are doubles ***/ 00289 00290 case MRI_double: 00291 switch( itype ){ 00292 case MRI_short: /* inputs are shorts */ 00293 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*sin[ii] ; 00294 EXRETURN ; 00295 case MRI_float: /* inputs are floats */ 00296 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*fin[ii] ; 00297 EXRETURN ; 00298 case MRI_double: /* inputs are doubles */ 00299 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*din[ii] ; 00300 EXRETURN ; 00301 case MRI_byte: /* inputs are bytes */ 00302 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*bin[ii] ; 00303 EXRETURN ; 00304 case MRI_complex: /* inputs are complex */ 00305 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*CABS(cin[ii]) ; 00306 EXRETURN ; 00307 } 00308 EXRETURN ; 00309 00310 /*** outputs are bytes ***/ 00311 00312 case MRI_byte: 00313 switch( itype ){ 00314 case MRI_short: /* inputs are shorts */ 00315 for( ii=0 ; ii < nxyz ; ii++ ){ 00316 val = fac*sin[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ; 00317 } 00318 EXRETURN ; 00319 case MRI_float: /* inputs are floats */ 00320 for( ii=0 ; ii < nxyz ; ii++ ){ 00321 val = fac*fin[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ; 00322 } 00323 EXRETURN ; 00324 case MRI_double: /* inputs are doubles */ 00325 for( ii=0 ; ii < nxyz ; ii++ ){ 00326 val = fac*din[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ; 00327 } 00328 EXRETURN ; 00329 case MRI_byte: /* inputs are bytes */ 00330 for( ii=0 ; ii < nxyz ; ii++ ){ 00331 val = fac*bin[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ; 00332 } 00333 EXRETURN ; 00334 case MRI_complex:{ /* inputs are complex */ 00335 for( ii=0 ; ii < nxyz ; ii++ ){ 00336 val = fac*CABS(cin[ii]) ; bout[ii] = FLOAT_TO_BYTE(val) ; 00337 } 00338 } 00339 EXRETURN ; 00340 } 00341 EXRETURN ; 00342 00343 /*** outputs are complex ***/ 00344 00345 case MRI_complex: 00346 switch( itype ){ 00347 case MRI_short: /* inputs are shorts */ 00348 for( ii=0 ; ii < nxyz ; ii++ ) 00349 cout[ii].r = fac*sin[ii] , cout[ii].i = 0.0 ; 00350 EXRETURN ; 00351 case MRI_float: /* inputs are floats */ 00352 for( ii=0 ; ii < nxyz ; ii++ ) 00353 cout[ii].r = fac*fin[ii] , cout[ii].i = 0.0 ; 00354 EXRETURN ; 00355 case MRI_double: /* inputs are doubles */ 00356 for( ii=0 ; ii < nxyz ; ii++ ) 00357 cout[ii].r = fac*din[ii] , cout[ii].i = 0.0 ; 00358 EXRETURN ; 00359 case MRI_byte: /* inputs are bytes */ 00360 for( ii=0 ; ii < nxyz ; ii++ ) 00361 cout[ii].r = fac*bin[ii] , cout[ii].i = 0.0 ; 00362 EXRETURN ; 00363 case MRI_complex: /* inputs are complex */ 00364 for( ii=0 ; ii < nxyz ; ii++ ) 00365 cout[ii].r = fac*cin[ii].r , cout[ii].i = fac*cin[ii].i ; 00366 EXRETURN ; 00367 } 00368 EXRETURN ; 00369 } 00370 EXRETURN ; 00371 } |
|
Definition at line 21 of file edt_coerce.c. References CABS, ENTRY, FLOAT_TO_BYTE, fout, complex::i, complex::r, ROUND, SHORT_TO_BYTE, and STATUS. Referenced by DSET_cor(), EDIT_coerce_scale_type(), EDIT_filter_volume(), main(), NUD_rotate(), PC_read_opts(), THD_rota3D(), THD_rota3D_matvec(), and UC_read_opts().
00022 { 00023 register int ii ; 00024 00025 complex * cin , * cout ; 00026 short * sin , * sout ; 00027 float * fin , * fout ; 00028 byte * bin , * bout ; 00029 double * din , * dout ; /* 10 Jan 1999 */ 00030 00031 ENTRY("EDIT_coerce_type") ; 00032 #ifdef AFNI_DEBUG 00033 { char str[256] ; 00034 sprintf(str,"voxels=%d input type=%s output type=%s", 00035 nxyz, MRI_TYPE_name[itype],MRI_TYPE_name[otype]) ; 00036 STATUS(str) ; } 00037 #endif 00038 00039 if( nxyz <= 0 || ivol == NULL || ovol == NULL ) EXRETURN ; 00040 00041 switch( itype ){ 00042 default: 00043 fprintf(stderr,"** Unknown itype=%d in EDIT_coerce_type\n",itype); 00044 EXRETURN ; 00045 case MRI_complex: cin = (complex *) ivol ; break ; 00046 case MRI_short : sin = (short *) ivol ; break ; 00047 case MRI_float : fin = (float *) ivol ; break ; 00048 case MRI_byte : bin = (byte *) ivol ; break ; 00049 case MRI_double : din = (double *) ivol ; break ; 00050 } 00051 switch( otype ){ 00052 default: 00053 fprintf(stderr,"** Unknown otype=%d in EDIT_coerce_type\n",otype); 00054 EXRETURN ; 00055 case MRI_complex: cout = (complex *) ovol ; break ; 00056 case MRI_short : sout = (short *) ovol ; break ; 00057 case MRI_float : fout = (float *) ovol ; break ; 00058 case MRI_byte : bout = (byte *) ovol ; break ; 00059 case MRI_double : dout = (double *) ovol ; break ; 00060 } 00061 00062 switch( otype ){ 00063 00064 /*** outputs are shorts ***/ 00065 00066 case MRI_short: 00067 switch( itype ){ 00068 case MRI_short: /* inputs are shorts */ 00069 memcpy( sout , sin , sizeof(short)*nxyz ) ; 00070 EXRETURN ; 00071 case MRI_float: /* inputs are floats */ 00072 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fin[ii]) ; 00073 EXRETURN ; 00074 case MRI_double: /* inputs are doubles */ 00075 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(din[ii]) ; 00076 EXRETURN ; 00077 case MRI_byte: /* inputs are bytes */ 00078 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = bin[ii] ; 00079 EXRETURN ; 00080 case MRI_complex: /* inputs are complex */ 00081 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(CABS(cin[ii])) ; 00082 EXRETURN ; 00083 } 00084 EXRETURN ; 00085 00086 /*** outputs are floats ***/ 00087 00088 case MRI_float: 00089 switch( itype ){ 00090 case MRI_short: /* inputs are shorts */ 00091 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = sin[ii] ; 00092 EXRETURN ; 00093 case MRI_float: /* inputs are floats */ 00094 memcpy( fout , fin , sizeof(float)*nxyz ) ; 00095 EXRETURN ; 00096 case MRI_double: /* inputs are doubles */ 00097 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = din[ii] ; 00098 EXRETURN ; 00099 case MRI_byte: /* inputs are bytes */ 00100 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = bin[ii] ; 00101 EXRETURN ; 00102 case MRI_complex: /* inputs are complex */ 00103 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = CABS(cin[ii]) ; 00104 EXRETURN ; 00105 } 00106 EXRETURN ; 00107 00108 /*** outputs are doubles ***/ 00109 00110 case MRI_double: 00111 switch( itype ){ 00112 case MRI_short: /* inputs are shorts */ 00113 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = sin[ii] ; 00114 EXRETURN ; 00115 case MRI_float: /* inputs are floats */ 00116 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fin[ii] ; 00117 EXRETURN ; 00118 case MRI_double: /* inputs are doubles */ 00119 memcpy( dout , din , sizeof(double)*nxyz ) ; 00120 EXRETURN ; 00121 case MRI_byte: /* inputs are bytes */ 00122 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = bin[ii] ; 00123 EXRETURN ; 00124 case MRI_complex: /* inputs are complex */ 00125 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = CABS(cin[ii]) ; 00126 EXRETURN ; 00127 } 00128 EXRETURN ; 00129 00130 /*** outputs are bytes ***/ 00131 00132 case MRI_byte: 00133 switch( itype ){ 00134 case MRI_short: /* inputs are shorts */ 00135 for( ii=0 ; ii < nxyz ; ii++ ) bout[ii] = SHORT_TO_BYTE(sin[ii]) ; 00136 EXRETURN ; 00137 case MRI_float: /* inputs are floats */ 00138 for( ii=0 ; ii < nxyz ; ii++ ) bout[ii] = FLOAT_TO_BYTE(fin[ii]) ; 00139 EXRETURN ; 00140 case MRI_double: /* inputs are doubles */ 00141 for( ii=0 ; ii < nxyz ; ii++ ) bout[ii] = FLOAT_TO_BYTE(din[ii]) ; 00142 EXRETURN ; 00143 case MRI_byte: /* inputs are bytes */ 00144 memcpy( bout , bin , sizeof(byte)*nxyz ) ; 00145 EXRETURN ; 00146 case MRI_complex:{ /* inputs are complex */ 00147 float val ; 00148 for( ii=0 ; ii < nxyz ; ii++ ){ val = CABS(cin[ii]) ; 00149 bout[ii] = FLOAT_TO_BYTE(val) ; } 00150 } 00151 EXRETURN ; 00152 } 00153 EXRETURN ; 00154 00155 /*** outputs are complex ***/ 00156 00157 case MRI_complex: 00158 switch( itype ){ 00159 case MRI_short: /* inputs are shorts */ 00160 for( ii=0 ; ii < nxyz ; ii++ ) 00161 cout[ii].r = sin[ii] , cout[ii].i = 0.0 ; 00162 EXRETURN ; 00163 case MRI_float: /* inputs are floats */ 00164 for( ii=0 ; ii < nxyz ; ii++ ) 00165 cout[ii].r = fin[ii] , cout[ii].i = 0.0 ; 00166 EXRETURN ; 00167 case MRI_double: /* inputs are doubles */ 00168 for( ii=0 ; ii < nxyz ; ii++ ) 00169 cout[ii].r = din[ii] , cout[ii].i = 0.0 ; 00170 EXRETURN ; 00171 case MRI_byte: /* inputs are bytes */ 00172 for( ii=0 ; ii < nxyz ; ii++ ) 00173 cout[ii].r = bin[ii] , cout[ii].i = 0.0 ; 00174 EXRETURN ; 00175 case MRI_complex: /* inputs are complex */ 00176 memcpy( cout , cin , sizeof(complex)*nxyz ) ; 00177 EXRETURN ; 00178 } 00179 EXRETURN ; 00180 } 00181 EXRETURN ; 00182 } |
|
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_datablock::nvals, THD_diskptr::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_timeaxis::type, THD_3dim_dataset::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 } |
|
----------------------- prototypes -----------------------* Definition at line 20 of file edt_emptycopy.c. References ADDTO_KILL, THD_3dim_dataset::anat_parent, THD_3dim_dataset::anat_parent_idcode, THD_3dim_dataset::anat_parent_name, ANAT_SPGR_TYPE, THD_datablock::atr, THD_datablock::brick, THD_datablock::brick_bytes, THD_datablock::brick_fac, THD_diskptr::byte_order, DATABLOCK_MEM_MALLOC, DATABLOCK_TYPE, DATAXES_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, DUMMY_NAME, EDIT_COPY_ANATOMY_PARENT_ID, ENTRY, THD_3dim_dataset::func_type, HEAD_ANAT_TYPE, THD_3dim_dataset::idcode, INIT_KILL, INIT_STAT_AUX, ISVALID_3DIM_DATASET, ISVALID_TIMEAXIS, THD_3dim_dataset::keywords, THD_3dim_dataset::kl, THD_datablock::kl, THD_3dim_dataset::label1, THD_3dim_dataset::label2, LOAD_DIAG_MAT, THD_datablock::malloc_type, THD_3dim_dataset::markers, THD_datablock::master_bytes, THD_datablock::master_ival, THD_datablock::master_nvals, MAX_STAT_AUX, MCW_new_idcode, MCW_strncpy, myXtNew, THD_datablock::natr, THD_datablock::natr_alloc, THD_timeaxis::nsl, THD_datablock::nvals, THD_diskptr::nvals, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, ORI_A2P_TYPE, ORI_I2S_TYPE, ORI_R2L_TYPE, THD_dataxes::parent, THD_datablock::parent, THD_3dim_dataset::parent, THD_diskptr::rank, RETURN, THD_3dim_dataset::self_name, THD_3dim_dataset::self_warp, THD_3dim_dataset::stat_aux, THD_3dim_dataset::stats, STORAGE_BY_BRICK, THD_diskptr::storage_mode, THD_3dim_dataset::tagset, THD_3dim_dataset::taxis, THD_3dim_dataset::tcat_len, THD_3dim_dataset::tcat_list, THD_3dim_dataset::tcat_num, THD_copy_datablock_auxdata(), THD_get_write_order(), THD_init_datablock_brick(), THD_init_diskptr_names(), THD_MAX_LABEL, THD_MAX_NAME, THD_null_datablock_auxdata, THD_store_dataset_keywords(), THD_dataxes::to_dicomm, THD_timeaxis::toff_sl, THD_3dim_dataset::type, THD_warp::type, THD_diskptr::type, THD_datablock::type, THD_dataxes::type, VIEW_ORIGINAL_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_idcode, THD_3dim_dataset::warp_parent_name, THD_3dim_dataset::wod_daxes, THD_3dim_dataset::wod_flag, XtMalloc, THD_dataxes::xxdel, THD_dataxes::xxmax, THD_dataxes::xxmin, THD_dataxes::xxorg, THD_dataxes::xxorient, THD_dataxes::yydel, THD_dataxes::yymax, THD_dataxes::yymin, THD_dataxes::yyorg, THD_dataxes::yyorient, ZERO_IDCODE, ZERO_STAT_AUX, THD_dataxes::zzdel, THD_dataxes::zzmax, THD_dataxes::zzmin, THD_dataxes::zzorg, and THD_dataxes::zzorient. Referenced by AFNI_fimmer_compute(), AFNI_read_inputs(), 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(), DUP_main(), EDIT_full_copy(), EDIT_main(), EDIT_wod_copy(), EDT_calcmask(), fim3d_fimmer_compute(), form_clusters(), Fourier_Filter_Driver(), get_options(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), output_ts_array(), PERMTEST_main(), POWER_main(), process_NIML_Node_ROI(), r_new_resam_dset(), REORDER_main(), RT_fim_recurse(), RT_start_dataset(), s2v_nodes2volume(), saveMask(), STAVG_main(), SUMA_FormAfnidset(), terminate(), THD_copy_dset_subs(), THD_dataset_headname(), THD_is_dataset(), THD_open_1D(), THD_open_3D(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THD_open_tcat(), 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_results(), and write_ts_array().
00021 { 00022 THD_3dim_dataset *new_dset ; 00023 THD_datablock *new_dblk ; 00024 THD_dataxes *new_daxes ; 00025 THD_timeaxis *new_taxis ; 00026 THD_diskptr *new_dkptr ; 00027 int new_nvals , old_good ; 00028 00029 ENTRY("EDIT_empty_copy") ; /* 29 Aug 2001 */ 00030 00031 old_good = ISVALID_3DIM_DATASET(old_dset) ; 00032 00033 /** make some new places to store stuff **/ 00034 00035 new_dset = myXtNew( THD_3dim_dataset ) ; 00036 new_dblk = new_dset->dblk = myXtNew( THD_datablock ) ; 00037 new_daxes = new_dset->daxes = myXtNew( THD_dataxes ) ; 00038 new_dkptr = new_dblk->diskptr = myXtNew( THD_diskptr ) ; 00039 00040 INIT_KILL(new_dset->kl) ; INIT_KILL(new_dblk->kl) ; 00041 ADDTO_KILL(new_dset->kl,new_dblk) ; 00042 ADDTO_KILL(new_dset->kl,new_daxes) ; 00043 ADDTO_KILL(new_dset->kl,new_dkptr) ; 00044 00045 new_dset->wod_daxes = myXtNew(THD_dataxes) ; 00046 new_dset->wod_daxes->parent = (XtPointer) new_dset ; 00047 new_dset->wod_flag = False ; 00048 00049 ADDTO_KILL(new_dset->kl,new_dset->wod_daxes) ; 00050 00051 new_dset->idcode = MCW_new_idcode() ; 00052 ZERO_IDCODE(new_dset->anat_parent_idcode) ; 00053 ZERO_IDCODE(new_dset->warp_parent_idcode) ; 00054 00055 if( old_good ){ 00056 new_dset->type = old_dset->type ; /* data types */ 00057 new_dset->func_type = old_dset->func_type ; 00058 new_dset->view_type = old_dset->view_type ; 00059 new_nvals = old_dset->dblk->nvals ; 00060 } else { 00061 new_dset->type = HEAD_ANAT_TYPE ; 00062 new_dset->func_type = ANAT_SPGR_TYPE ; 00063 new_dset->view_type = VIEW_ORIGINAL_TYPE ; 00064 new_nvals = ANAT_nvals[new_dset->func_type] ; 00065 } 00066 00067 new_dset->warp = NULL ; 00068 new_dset->anat_parent = NULL ; 00069 new_dset->markers = NULL ; 00070 new_dset->warp_parent = NULL ; 00071 00072 /*-- 14 Dec 1999: copy the anat_parent, too --*/ 00073 00074 if( old_good ){ 00075 new_dset->anat_parent = old_dset->anat_parent ; /* actual link, for use now */ 00076 EDIT_COPY_ANATOMY_PARENT_ID(new_dset,old_dset) ; /* idcode, for HEAD file later */ 00077 } 00078 00079 /*-- end of anat_parent copy --*/ 00080 00081 new_dset->vox_warp = myXtNew( THD_warp ) ; /* create a voxel warp */ 00082 new_dset->vox_warp->type = ILLEGAL_TYPE ; /* but don't put anything in it */ 00083 new_dset->self_warp = NULL ; /* 26 Aug 2002 */ 00084 00085 new_dset->warp_parent_name[0] = '\0' ; 00086 new_dset->anat_parent_name[0] = '\0' ; 00087 00088 MCW_strncpy( new_dset->self_name , DUMMY_NAME , THD_MAX_NAME ) ; 00089 MCW_strncpy( new_dset->label1 , DUMMY_NAME , THD_MAX_LABEL ) ; 00090 MCW_strncpy( new_dset->label2 , DUMMY_NAME , THD_MAX_LABEL ) ; 00091 00092 new_dset->death_mark = 0 ; 00093 new_dset->tcat_list = NULL ; 00094 new_dset->tcat_num = 0 ; 00095 new_dset->tcat_len = NULL ; 00096 #ifdef ALLOW_DATASET_VLIST 00097 new_dset->pts = NULL ; 00098 #endif 00099 new_dset->tagset = NULL ; /* Oct 1998 */ 00100 00101 new_dkptr->type = DISKPTR_TYPE ; 00102 new_dkptr->rank = 3 ; 00103 new_dkptr->nvals = new_nvals ; 00104 new_dkptr->storage_mode = STORAGE_BY_BRICK ; 00105 new_dkptr->byte_order = THD_get_write_order() ; /* 25 April 1998 */ 00106 if( old_good ){ 00107 new_dkptr->dimsizes[0] = old_dset->daxes->nxx ; 00108 new_dkptr->dimsizes[1] = old_dset->daxes->nyy ; 00109 new_dkptr->dimsizes[2] = old_dset->daxes->nzz ; 00110 } else { 00111 new_dkptr->dimsizes[0] = 2 ; 00112 new_dkptr->dimsizes[1] = 2 ; 00113 new_dkptr->dimsizes[2] = 2 ; 00114 } 00115 00116 if( old_good ) 00117 THD_init_diskptr_names( new_dkptr , 00118 old_dset->dblk->diskptr->directory_name , 00119 NULL , DUMMY_NAME , 00120 new_dset->view_type , True ) ; 00121 else 00122 THD_init_diskptr_names( new_dkptr , 00123 "./" , NULL , DUMMY_NAME , 00124 new_dset->view_type , True ) ; 00125 00126 new_dblk->type = DATABLOCK_TYPE ; 00127 new_dblk->nvals = new_nvals ; 00128 new_dblk->malloc_type = DATABLOCK_MEM_MALLOC ; 00129 new_dblk->natr = new_dblk->natr_alloc = 0 ; 00130 new_dblk->atr = NULL ; 00131 new_dblk->parent = (XtPointer) new_dset ; 00132 00133 DBLK_unlock(new_dblk) ; /* Feb 1998 */ 00134 00135 new_dblk->brick_fac = NULL ; 00136 new_dblk->brick_bytes = NULL ; 00137 new_dblk->brick = NULL ; 00138 if( old_good ) 00139 THD_init_datablock_brick( new_dblk , -1 , old_dset->dblk ) ; 00140 else 00141 THD_init_datablock_brick( new_dblk , MRI_short , NULL ) ; 00142 00143 if( old_good && old_dset->keywords != NULL ) 00144 THD_store_dataset_keywords( new_dset , old_dset->keywords ) ; 00145 else 00146 new_dset->keywords = NULL ; 00147 00148 THD_null_datablock_auxdata( new_dblk ) ; 00149 if( old_good ) THD_copy_datablock_auxdata( old_dset->dblk , new_dblk ) ; 00150 00151 new_dblk->master_nvals = 0 ; /* 11 Jan 1999 */ 00152 new_dblk->master_ival = NULL ; /* Copy does not inherit mastery */ 00153 new_dblk->master_bytes = NULL ; 00154 00155 if( old_good ) 00156 *new_daxes = *(old_dset->daxes) ; /* copy all contents */ 00157 else { 00158 new_daxes->type = DATAXES_TYPE ; /* make up contents */ 00159 00160 new_daxes->nxx = new_dkptr->dimsizes[0] ; 00161 new_daxes->nyy = new_dkptr->dimsizes[1] ; 00162 new_daxes->nzz = new_dkptr->dimsizes[2] ; 00163 00164 new_daxes->xxorg = new_daxes->yyorg = new_daxes->zzorg = -0.5 ; 00165 new_daxes->xxdel = new_daxes->yydel = new_daxes->zzdel = 1.0 ; 00166 00167 new_daxes->xxorient = ORI_R2L_TYPE ; 00168 new_daxes->yyorient = ORI_A2P_TYPE ; 00169 new_daxes->zzorient = ORI_I2S_TYPE ; 00170 LOAD_DIAG_MAT(new_daxes->to_dicomm,1,1,1) ; 00171 00172 new_daxes->xxmin = new_daxes->yymin = new_daxes->zzmin = -0.5 ; 00173 new_daxes->xxmax = new_daxes->yymax = new_daxes->zzmax = 0.5 ; 00174 } 00175 new_daxes->parent = (XtPointer) new_dset ; 00176 00177 new_dset->stats = NULL ; 00178 new_dset->parent = NULL ; 00179 00180 if( old_good ) 00181 INIT_STAT_AUX( new_dset , MAX_STAT_AUX , old_dset->stat_aux ) ; 00182 else 00183 ZERO_STAT_AUX( new_dset ) ; 00184 00185 if( old_good && ISVALID_TIMEAXIS(old_dset->taxis) ){ 00186 new_taxis = new_dset->taxis = myXtNew( THD_timeaxis ) ; 00187 00188 *new_taxis = *old_dset->taxis ; /* copy contents */ 00189 00190 if( new_taxis->nsl > 0 ){ /* copy toff_sl array, if present */ 00191 int isl ; 00192 new_taxis->toff_sl = (float *) XtMalloc( sizeof(float) * new_taxis->nsl ) ; 00193 for( isl = 0 ; isl < new_taxis->nsl ; isl++ ) 00194 new_taxis->toff_sl[isl] = old_dset->taxis->toff_sl[isl] ; 00195 } else { 00196 new_taxis->toff_sl = NULL ; 00197 } 00198 } else { 00199 new_dset->taxis = NULL ; 00200 } 00201 00202 RETURN( new_dset ); 00203 } |
|
|
Definition at line 38 of file edt_filtervol.c. References amax, EDIT_aver_fvol(), EDIT_coerce_autoscale(), EDIT_coerce_type(), ENTRY, EXIT, FCFLAG_AMAX, FCFLAG_AVER, FCFLAG_EXPR, FCFLAG_MAX, FCFLAG_MEAN, FCFLAG_NZMEAN, FCFLAG_ONE_STEP, FCFLAG_SMAX, FCFLAG_WINSOR, free, i, MCW_cluster::i, MCW_cluster::j, MCW_cluster::k, KILL_CLUSTER, malloc, MCW_build_mask(), MCW_cluster::num_pt, nz, PARSER_evaluate_one(), PARSER_generate_code(), qsort_float(), and THREE_TO_IJK. Referenced by EDIT_one_dataset().
00041 { 00042 MCW_cluster * mask; /* mask for filtering */ 00043 int nxy, nxyz; /* dimensions of volume data */ 00044 int mnum; /* number of points in mask */ 00045 int i, j, k, ii, jj, kk; /* voxel indices */ 00046 int ijkvox, ijkma, jma; /* more voxel indices */ 00047 float * ffim, * ffim_out; /* floating point fim's */ 00048 00049 float 00050 mag, /* voxel intensity */ 00051 sum, /* sum of voxel intensities */ 00052 sumnz, /* sum of non-zero voxel intensities */ 00053 mean, /* mean of voxel intensities */ 00054 max, /* maximum of voxel intensities */ 00055 amax, /* maximum of absolute voxel intensities */ 00056 smax; /* signed maximum of absolute voxel intensities */ 00057 int 00058 npts, nznpts; /* number of points in average */ 00059 00060 float wtsum ; /* 09 Aug 2000: stuff for FCFLAG_EXPR */ 00061 float * wt=NULL ; 00062 PARSER_code * pcode ; 00063 00064 int nw , nnw , iw ; /* 11 Sep 2000: Winsor stuff */ 00065 float * sw=NULL , vw ; 00066 00067 nxy = nx*ny; nxyz = nxy*nz; 00068 00069 #define GOODVOX(ijk) (fmask==NULL || fmask[ijk]!=0) 00070 #define BADVOX(ijk) (fmask!=NULL && fmask[ijk]==0) 00071 00072 ENTRY("EDIT_filter_volume") ; 00073 00074 /* 09 Aug 2000: can't use AVER code if mask is in place */ 00075 00076 if( fmask != NULL && filter_opt == FCFLAG_AVER ) filter_opt = FCFLAG_MEAN ; 00077 00078 /***--- 07 Jan 1998 ---***/ 00079 00080 if( filter_opt == FCFLAG_AVER ){ 00081 if( fim_type != MRI_float ){ 00082 ffim = (float *) malloc (sizeof(float) * nxyz); 00083 if( ffim == NULL ){ 00084 fprintf(stderr,"EDIT_filter_volume: no workspace!\n") ; 00085 EXIT(1) ; 00086 } 00087 EDIT_coerce_type (nxyz, fim_type, vfim, MRI_float, ffim); 00088 } else { 00089 ffim = (float *) vfim ; 00090 } 00091 EDIT_aver_fvol(nx,ny,nz,dx,dy,dz,ffim,filter_rmm) ; 00092 if( ffim != vfim ){ 00093 EDIT_coerce_autoscale(nxyz, MRI_float, ffim, fim_type, vfim); 00094 free(ffim) ; 00095 } 00096 EXRETURN ; 00097 } 00098 00099 /***--- end 07 Jan 1998 ---***/ 00100 00101 /*--- Make a cluster that is a mask of points closer than filter_rmm ---*/ 00102 00103 mask = MCW_build_mask (nx, ny, nz, dx, dy, dz, filter_rmm); 00104 if (mask == NULL) 00105 { 00106 fprintf (stderr, "Warning: Filter option has no effect. \n"); 00107 EXRETURN; 00108 } 00109 mnum = mask->num_pt; 00110 00111 /* 09 Aug 2000: evaluate expression weights into wt */ 00112 00113 if( filter_opt == FCFLAG_EXPR ){ 00114 double atoz[26] ; 00115 00116 if( fexpr == NULL ){ 00117 fprintf(stderr,"*** EDIT_filter_volume: no fexpr for FCFLAG_EXPR!\n"); 00118 EXIT(1) ; 00119 } 00120 00121 pcode = PARSER_generate_code( fexpr ) ; 00122 if( pcode == NULL ){ 00123 fprintf(stderr,"*** EDIT_filter_volume: illegal fexpr!\n"); EXIT(1); 00124 } 00125 00126 wt = (float *) malloc(sizeof(float)*(mnum+1)) ; 00127 00128 #define II 8 /* a=0 b=1 ... i=8 ... z=25 */ 00129 #define JJ 9 00130 #define KK 10 00131 #define RR 17 00132 #define XX 23 00133 #define YY 24 00134 #define ZZ 25 00135 00136 for( ii=0 ; ii < 26 ; ii++ ) atoz[ii] = 0.0 ; 00137 00138 wt[0] = PARSER_evaluate_one( pcode , atoz ) ; /* weight at center */ 00139 00140 for (jma = 0; jma < mnum; jma++){ /* rest of weights */ 00141 atoz[II] = mask->i[jma] ; 00142 atoz[JJ] = mask->j[jma] ; 00143 atoz[KK] = mask->k[jma] ; 00144 atoz[XX] = atoz[II] * dx ; 00145 atoz[YY] = atoz[JJ] * dy ; 00146 atoz[ZZ] = atoz[KK] * dz ; 00147 atoz[RR] = sqrt(atoz[XX]*atoz[XX] + atoz[YY]*atoz[YY] + atoz[ZZ]*atoz[ZZ]) ; 00148 wt[jma+1] = PARSER_evaluate_one( pcode , atoz ) ; 00149 } 00150 free(pcode) ; 00151 } 00152 00153 /* 11 Sep 2000: setup for Winsorizing */ 00154 00155 if( filter_opt > FCFLAG_WINSOR && 00156 filter_opt < FCFLAG_WINSOR+FCFLAG_ONE_STEP ){ 00157 00158 static int first=1 ; 00159 00160 nw = filter_opt - FCFLAG_WINSOR ; 00161 nnw = mnum - nw ; 00162 filter_opt = FCFLAG_WINSOR ; 00163 00164 fprintf(stderr,"++ Winsor filter: N=%d nw=%d\n",mnum+1,nw) ; 00165 if( first || nnw < nw ){ 00166 first = 0 ; 00167 if( nnw < nw ){ 00168 fprintf(stderr,"** Illegal Winsor parameters - skipping!\n") ; 00169 EXRETURN ; 00170 } 00171 } 00172 00173 sw = (float *) malloc(sizeof(float)*(mnum+1)) ; 00174 00175 fmask = NULL ; /* must disable mask for Winsor */ 00176 } 00177 00178 /*--- Allocate space for floating point data ---*/ 00179 00180 ffim = (float *) malloc (sizeof(float) * nxyz); 00181 if (ffim == NULL) 00182 { 00183 fprintf (stderr, "\n Error: cannot allocate filter workspace! \n"); 00184 EXIT(1); 00185 } 00186 ffim_out = (float *) malloc (sizeof(float) * nxyz); 00187 if (ffim_out == NULL) 00188 { 00189 fprintf (stderr, "\n Error: cannot allocate filter workspace! \n"); 00190 EXIT(1); 00191 } 00192 00193 /*--- Convert vfim to floating point data ---*/ 00194 00195 EDIT_coerce_type (nxyz, fim_type, vfim, MRI_float, ffim); 00196 00197 /*--- Iteration over all voxels in vfim ---*/ 00198 00199 for (k = 0; k < nz; k++) 00200 { 00201 for (j = 0; j < ny; j++) 00202 { 00203 for (i = 0; i < nx; i++) 00204 { 00205 /*--- Initialization for filtering of voxel #(i,j,k) ---*/ 00206 00207 ijkvox = THREE_TO_IJK (i, j, k, nx, nxy); 00208 npts = nznpts = 0 ; 00209 sum = sumnz = max = amax = smax = wtsum = 0.0 ; 00210 if( GOODVOX(ijkvox) ){ 00211 mag = ffim[ijkvox]; 00212 switch (filter_opt) 00213 { 00214 case FCFLAG_MEAN: 00215 sum = mag; npts = 1; break; 00216 case FCFLAG_NZMEAN: 00217 if (mag != 0.0) 00218 {sumnz = mag; nznpts = 1;} 00219 break; 00220 case FCFLAG_MAX: 00221 max = mag; npts = 1 ; break; 00222 case FCFLAG_AMAX: 00223 amax = fabs(mag); npts = 1 ; break; 00224 case FCFLAG_SMAX: 00225 smax = mag; npts = 1 ; break; 00226 case FCFLAG_EXPR: 00227 sum = wt[0]*mag ; wtsum = wt[0] ; npts = 1 ; break ; 00228 00229 case FCFLAG_WINSOR: 00230 for( iw=0 ; iw <= mnum ; iw++ ) sw[iw] = mag ; 00231 vw = mag ; break ; 00232 } 00233 } 00234 00235 /*--- Now iterate over the positions in the mask ---*/ 00236 00237 switch (filter_opt) 00238 { 00239 case FCFLAG_MEAN: 00240 for (jma = 0; jma < mnum; jma++) 00241 { 00242 ii = i + mask->i[jma]; 00243 jj = j + mask->j[jma]; 00244 kk = k + mask->k[jma]; 00245 if (ii < 0 || jj < 0 || kk < 0 || 00246 ii >= nx || jj >= ny || kk >= nz) continue; 00247 ijkma = THREE_TO_IJK (ii, jj, kk, nx, nxy); 00248 if( BADVOX(ijkma) ) continue ; 00249 mag = ffim[ijkma]; 00250 sum += mag; npts++; 00251 } 00252 break; 00253 case FCFLAG_NZMEAN: 00254 for (jma = 0; jma < mnum; jma++) 00255 { 00256 ii = i + mask->i[jma]; 00257 jj = j + mask->j[jma]; 00258 kk = k + mask->k[jma]; 00259 if (ii < 0 || jj < 0 || kk < 0 || 00260 ii >= nx || jj >= ny || kk >= nz) continue; 00261 ijkma = THREE_TO_IJK (ii, jj, kk, nx, nxy); 00262 if( BADVOX(ijkma) ) continue ; 00263 mag = ffim[ijkma]; 00264 if (mag != 0.0) {sumnz += mag; nznpts++;} 00265 } 00266 break; 00267 case FCFLAG_EXPR: 00268 for (jma = 0; jma < mnum; jma++) 00269 { 00270 ii = i + mask->i[jma]; 00271 jj = j + mask->j[jma]; 00272 kk = k + mask->k[jma]; 00273 if (ii < 0 || jj < 0 || kk < 0 || 00274 ii >= nx || jj >= ny || kk >= nz) continue; 00275 ijkma = THREE_TO_IJK (ii, jj, kk, nx, nxy); 00276 if( BADVOX(ijkma) ) continue ; 00277 mag = ffim[ijkma]; 00278 sum += wt[jma+1]*mag; npts++; wtsum += wt[jma+1] ; 00279 } 00280 break ; 00281 case FCFLAG_MAX: 00282 for (jma = 0; jma < mnum; jma++) 00283 { 00284 ii = i + mask->i[jma]; 00285 jj = j + mask->j[jma]; 00286 kk = k + mask->k[jma]; 00287 if (ii < 0 || jj < 0 || kk < 0 || 00288 ii >= nx || jj >= ny || kk >= nz) continue; 00289 ijkma = THREE_TO_IJK (ii, jj, kk, nx, nxy); 00290 if( BADVOX(ijkma) ) continue ; 00291 mag = ffim[ijkma]; 00292 if (npts == 0 || mag > max) max = mag; 00293 npts++ ; 00294 } 00295 break; 00296 case FCFLAG_AMAX: 00297 for (jma = 0; jma < mnum; jma++) 00298 { 00299 ii = i + mask->i[jma]; 00300 jj = j + mask->j[jma]; 00301 kk = k + mask->k[jma]; 00302 if (ii < 0 || jj < 0 || kk < 0 || 00303 ii >= nx || jj >= ny || kk >= nz) continue; 00304 ijkma = THREE_TO_IJK (ii, jj, kk, nx, nxy); 00305 if( BADVOX(ijkma) ) continue ; 00306 mag = ffim[ijkma]; 00307 if (npts == 0 || fabs(mag) > amax) amax = fabs(mag); 00308 npts++ ; 00309 } 00310 break; 00311 case FCFLAG_SMAX: 00312 for (jma = 0; jma < mnum; jma++) 00313 { 00314 ii = i + mask->i[jma]; 00315 jj = j + mask->j[jma]; 00316 kk = k + mask->k[jma]; 00317 if (ii < 0 || jj < 0 || kk < 0 || 00318 ii >= nx || jj >= ny || kk >= nz) continue; 00319 ijkma = THREE_TO_IJK (ii, jj, kk, nx, nxy); 00320 if( BADVOX(ijkma) ) continue ; 00321 mag = ffim[ijkma]; 00322 if (npts == 0 || fabs(mag) > fabs(smax)) smax = mag; 00323 npts++ ; 00324 } 00325 break; 00326 case FCFLAG_WINSOR: 00327 for (jma = 0; jma < mnum; jma++) 00328 { 00329 ii = i + mask->i[jma]; 00330 jj = j + mask->j[jma]; 00331 kk = k + mask->k[jma]; 00332 if (ii < 0 || jj < 0 || kk < 0 || 00333 ii >= nx || jj >= ny || kk >= nz) continue; 00334 ijkma = THREE_TO_IJK (ii, jj, kk, nx, nxy); 00335 sw[jma+1] = ffim[ijkma]; 00336 } 00337 break; 00338 00339 default: break; 00340 } 00341 00342 /*--- Save statistic for this voxel ---*/ 00343 00344 switch (filter_opt) 00345 { 00346 case FCFLAG_MEAN: 00347 ffim_out[ijkvox] = (npts > 0) ? sum/npts : 0.0 ; break; 00348 00349 case FCFLAG_NZMEAN: 00350 ffim_out[ijkvox] = (nznpts > 0) ? sumnz/nznpts : 0.0 ; break ; 00351 00352 case FCFLAG_EXPR: 00353 ffim_out[ijkvox] = (wtsum != 0.0) ? sum/wtsum : 0.0 ; break ; 00354 00355 case FCFLAG_MAX: ffim_out[ijkvox] = max ; break; 00356 case FCFLAG_AMAX: ffim_out[ijkvox] = amax; break; 00357 case FCFLAG_SMAX: ffim_out[ijkvox] = smax; break; 00358 00359 case FCFLAG_WINSOR: 00360 qsort_float( mnum+1 , sw ) ; 00361 ffim_out[ijkvox] = (vw < sw[nw]) ? sw[nw] 00362 : (vw > sw[nnw]) ? sw[nnw] 00363 : vw ; 00364 break ; 00365 00366 default: break; 00367 } 00368 } /* i */ 00369 } /* j */ 00370 } /* k */ 00371 00372 /*--- Return the filtered data in the original data type. ---*/ 00373 EDIT_coerce_autoscale(nxyz, MRI_float, ffim_out, fim_type, vfim); 00374 00375 /*--- clean up ---*/ 00376 KILL_CLUSTER (mask); 00377 free (ffim); 00378 free (ffim_out); 00379 if( wt != NULL ) free(wt) ; 00380 if( sw != NULL ) free(sw) ; 00381 00382 EXRETURN; 00383 } |
|
Definition at line 13 of file edt_fullcopy.c. References ADN_label1, ADN_none, ADN_prefix, THD_3dim_dataset::dblk, DSET_BRICK_ARRAY, DSET_BRICK_BYTES, DSET_BRICK_TYPE, DSET_NVALS, EDIT_dset_items(), EDIT_empty_copy(), EDIT_substitute_brick(), ENTRY, ISVALID_3DIM_DATASET, malloc, RETURN, THD_delete_3dim_dataset(), and THD_load_datablock(). Referenced by main(), PLUTO_copy_dset(), process_dataset(), and THD_zeropad().
00014 { 00015 THD_3dim_dataset *new_dset ; 00016 int ival , ityp , nbytes , nvals ; 00017 void *new_brick , *old_brick ; 00018 00019 ENTRY("EDIT_full_copy") ; 00020 00021 /*-- sanity check --*/ 00022 00023 if( ! ISVALID_3DIM_DATASET(dset) ) RETURN(NULL) ; 00024 00025 /*-- make the empty copy --*/ 00026 00027 new_dset = EDIT_empty_copy( dset ) ; /* copy is set to MALLOC memory */ 00028 00029 /*-- change its name? --*/ 00030 00031 if( new_prefix != NULL ) 00032 EDIT_dset_items( new_dset , 00033 ADN_prefix , new_prefix , 00034 ADN_label1 , new_prefix , 00035 ADN_none ) ; 00036 00037 /*-- make brick(s) for this dataset --*/ 00038 00039 THD_load_datablock( dset->dblk ) ; /* make sure old one is in memory */ 00040 00041 nvals = DSET_NVALS(dset) ; 00042 00043 for( ival=0 ; ival < nvals ; ival++ ){ 00044 ityp = DSET_BRICK_TYPE(new_dset,ival) ; /* type of data */ 00045 nbytes = DSET_BRICK_BYTES(new_dset,ival) ; /* how much data */ 00046 new_brick = malloc( nbytes ) ; /* make room */ 00047 00048 if( new_brick == NULL ){ 00049 THD_delete_3dim_dataset( new_dset , False ) ; 00050 RETURN(NULL) ; 00051 } 00052 00053 EDIT_substitute_brick( new_dset , ival , ityp , new_brick ) ; 00054 00055 /*-- copy data from old brick to new brick --*/ 00056 00057 old_brick = DSET_BRICK_ARRAY(dset,ival) ; 00058 00059 if( old_brick == NULL ){ 00060 THD_delete_3dim_dataset( new_dset , False ) ; 00061 RETURN(NULL) ; 00062 } 00063 00064 memcpy( new_brick , old_brick , nbytes ) ; 00065 } 00066 00067 RETURN( new_dset ); 00068 } |
|
Definition at line 22 of file edt_onedset.c. References EDIT_options::abss, ADDTO_CLARR, ADN_brick_stataux_one, ADN_none, AFNI_GOOD_DTYPE, AFNI_GOOD_FUNC_DTYPE, EDIT_options::blur, THD_diskptr::brick_name, CABS, MCW_cluster_array::clar, EDIT_options::clip_bot, EDIT_options::clip_top, EDIT_options::clip_unscaled, EDIT_options::clust_rmm, EDIT_options::clust_vmul, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, DESTROY_CLARR, EDIT_options::dilate, THD_datablock::diskptr, EDIT_options::do_zvol, DSET_ARRAY, DSET_BRICK_FACTOR, DSET_BRICK_STATAUX, DSET_BRICK_STATCODE, DSET_BRICK_TYPE, DSET_BRIKNAME, DSET_LOADED, DSET_NVALS, ECFLAG_ORDER, ECFLAG_SAME, ECFLAG_SIZE, EDIT_blur_volume(), EDIT_options::edit_clust, EDIT_cluster_array(), EDIT_coerce_scale_type(), EDIT_dset_items(), EDIT_filter_volume(), EDIT_zscore_vol(), ENTRY, EDIT_options::erode_pv, EDIT_options::fake_dxyz, FCFLAG_NONE, EDIT_options::fexpr, EDIT_options::filter_opt, EDIT_options::filter_rmm, EDIT_options::fmask, FUNC_IS_STAT, THD_3dim_dataset::func_type, FUNC_ZT_SCALE_SHORT, complex::i, THD_ivec3::ijk, INIT_CLARR, ISANAT, ISBUCKET, ISFUNC, EDIT_options::iv_fim, EDIT_options::iv_thr, MAX, MCW_cluster_to_vol(), MCW_erode_clusters(), MCW_find_clusters(), MCW_scale_to_max(), MRI_type_name, EDIT_options::mult, EDIT_options::noneg, MCW_cluster_array::num_clu, MCW_cluster::num_pt, THD_dataxes::nxx, THD_dataxes::nyy, nz, THD_dataxes::nzz, complex::r, EDIT_options::scale, SORT_CLARR, THD_3dim_dataset::stat_aux, STATUS, TEMP_FVEC3, THD_3dmm_to_3dind(), THD_force_malloc_type(), THD_load_datablock(), EDIT_options::thrblur, EDIT_options::thresh, EDIT_options::thrfilter_opt, EDIT_options::thrfilter_rmm, EDIT_options::thtoin, top, EDIT_options::verbose, THD_dataxes::xxdel, THD_dataxes::yydel, EDIT_options::zscore, EDIT_options::zv_x1, EDIT_options::zv_x2, EDIT_options::zv_y1, EDIT_options::zv_y2, EDIT_options::zv_z1, EDIT_options::zv_z2, and THD_dataxes::zzdel. Referenced by CLUST_main(), EDIT_main(), main(), and remove_isolated_stuff().
00023 { 00024 int edit_thtoin = edopt->thtoin ; /* copy into local variables */ 00025 int edit_noneg = edopt->noneg ; /* for historical reasons */ 00026 int edit_abs = edopt->abss ; 00027 float edit_clip_bot = edopt->clip_bot ; /* Nov 1995: changed to floats */ 00028 float edit_clip_top = edopt->clip_top ; 00029 float edit_thresh = edopt->thresh ; 00030 int edit_clust = edopt->edit_clust ; /* 10 Sept 1996 */ 00031 float clust_rmm = edopt->clust_rmm ; 00032 float clust_vmul = edopt->clust_vmul ; 00033 float erode_pv = edopt->erode_pv; /* 17 June 1998 */ 00034 int dilate = edopt->dilate; /* 17 June 1998 */ 00035 int filter_opt = edopt->filter_opt; /* 11 Sept 1996 */ 00036 float filter_rmm = edopt->filter_rmm; /* 11 Sept 1996 */ 00037 int thrfilter_opt = edopt->thrfilter_opt; /* 1 Oct 1996 */ 00038 float thrfilter_rmm = edopt->thrfilter_rmm; /* 1 Oct 1996 */ 00039 float edit_blur = edopt->blur ; 00040 float edit_thrblur = edopt->thrblur; /* 4 Oct 1996 */ 00041 int edit_scale = edopt->scale ; 00042 float edit_mult = edopt->mult ; 00043 int edit_zvol = edopt->do_zvol ; 00044 int edit_ivfim = edopt->iv_fim ; /* 30 Nov 1997 */ 00045 int edit_ivthr = edopt->iv_thr ; /* 30 Nov 1997 */ 00046 int verbose = edopt->verbose ; /* 01 Nov 1999 */ 00047 int fake_dxyz = edopt->fake_dxyz ; /* 11 Sep 2000 */ 00048 00049 int edit_clip_unscaled = edopt->clip_unscaled ; /* 09 Aug 1996 */ 00050 00051 THD_dataxes * daxes ; 00052 short * sfim = NULL , * sthr = NULL ; 00053 float * ffim = NULL , * fthr = NULL ; 00054 complex * cfim = NULL ; 00055 byte * bfim = NULL , * bthr = NULL ; 00056 void * vfim = NULL , * vthr = NULL ; 00057 int nx,ny,nz,nxy,nxyz , jj,kk , ptmin , iclu,nclu , fim_max ; 00058 int iv_fim , iv_thr , fim_type , thr_type ; 00059 register int ii ; 00060 float dx,dy,dz , dxyz , rmm,vmul , val , vvv ; 00061 MCW_cluster_array * clar ; 00062 MCW_cluster * blur=NULL ; 00063 int fimtype , thrtype ; 00064 float fimfac , thrfac ; 00065 00066 /** get the data from this dataset **/ 00067 00068 ENTRY("EDIT_one_dataset") ; 00069 00070 THD_force_malloc_type( dset->dblk , DATABLOCK_MEM_MALLOC ) ; 00071 THD_load_datablock( dset->dblk ) ; 00072 00073 if( !DSET_LOADED(dset) ){ 00074 fprintf(stderr, 00075 "\n*** Cannot read data brick for dataset %s\a\n", 00076 DSET_BRIKNAME(dset) ) ; 00077 EXRETURN ; 00078 } 00079 00080 /** load the data sub-brick indexes (iv_*) and check types for legality **/ 00081 00082 if( ISANAT(dset) ){ 00083 if( edit_ivfim >= 0 && edit_ivfim < DSET_NVALS(dset) ) /* 30 Nov 1997 */ 00084 iv_fim = edit_ivfim ; 00085 else 00086 iv_fim = ANAT_ival_zero[dset->func_type] ; 00087 00088 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: fim index = %d\n",iv_fim) ; 00089 00090 fim_type = DSET_BRICK_TYPE(dset,iv_fim) ; 00091 fimfac = DSET_BRICK_FACTOR(dset,iv_fim) ; 00092 iv_thr = -1 ; 00093 thr_type = ILLEGAL_TYPE ; 00094 00095 if( !AFNI_GOOD_DTYPE(fim_type) || fim_type == MRI_rgb ){ 00096 fprintf(stderr,"\n*** Illegal anatomy data type %s in dataset %s\a\n" , 00097 MRI_type_name[fim_type] , 00098 dset->dblk->diskptr->brick_name ) ; 00099 EXRETURN ; 00100 } 00101 00102 #ifdef AFNI_DEBUG 00103 { char str[256] ; 00104 sprintf(str,"Anat dset: iv=%d type=%s fac=%g",iv_fim,MRI_TYPE_name[fim_type],fimfac) ; 00105 STATUS(str) ; } 00106 #endif 00107 00108 } 00109 00110 if( ISFUNC(dset) ){ 00111 if( edit_ivfim >= 0 && edit_ivfim < DSET_NVALS(dset) ) /* 30 Nov 1997 */ 00112 iv_fim = edit_ivfim ; 00113 else 00114 iv_fim = FUNC_ival_fim[dset->func_type] ; 00115 00116 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: fim index = %d\n",iv_fim) ; 00117 00118 fim_type = DSET_BRICK_TYPE(dset,iv_fim) ; 00119 fimfac = DSET_BRICK_FACTOR(dset,iv_fim) ; 00120 00121 if( edit_ivthr >= 0 && edit_ivthr < DSET_NVALS(dset) ) /* 30 Nov 1997 */ 00122 iv_thr = edit_ivthr ; 00123 else 00124 iv_thr = FUNC_ival_thr[dset->func_type] ; 00125 00126 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: thr index = %d\n",iv_thr) ; 00127 00128 if( iv_thr < 0 ){ 00129 thr_type = ILLEGAL_TYPE ; 00130 thrfac = 0.0 ; 00131 } else { 00132 thr_type = DSET_BRICK_TYPE(dset,iv_thr) ; 00133 thrfac = DSET_BRICK_FACTOR(dset,iv_thr) ; 00134 if( thrfac == 0.0 ){ 00135 switch( thr_type ){ 00136 case MRI_short: thrfac = 1.0/FUNC_scale_short[dset->func_type]; break; 00137 case MRI_byte : thrfac = 1.0/FUNC_scale_byte [dset->func_type]; break; 00138 } 00139 } 00140 } 00141 00142 if( !AFNI_GOOD_FUNC_DTYPE(fim_type) || fim_type == MRI_rgb ){ 00143 fprintf(stderr,"\n*** Illegal functional data type %s in dataset %s\a\n" , 00144 MRI_type_name[fim_type], dset->dblk->diskptr->brick_name ) ; 00145 EXRETURN ; 00146 } 00147 00148 if( thr_type >= 0 && (!AFNI_GOOD_FUNC_DTYPE(thr_type) || fim_type == MRI_rgb) ){ 00149 fprintf(stderr,"\n*** Illegal threshold data type %s in dataset %s\a\n" , 00150 MRI_type_name[fim_type] , dset->dblk->diskptr->brick_name ) ; 00151 EXRETURN ; 00152 } 00153 00154 #ifdef AFNI_DEBUG 00155 { char str[256] ; 00156 sprintf(str,"Func dset: iv_fim=%d type=%s fac=%g",iv_fim,MRI_TYPE_name[fim_type],fimfac) ; 00157 STATUS(str) ; 00158 if( iv_thr >= 0 ){ 00159 sprintf(str,"Func dset: iv_thr=%d type=%s fac=%g",iv_thr,MRI_TYPE_name[thr_type],thrfac) ; 00160 STATUS(str) ; } } 00161 #endif 00162 00163 } 00164 00165 /** load the pointers to the sub-bricks **/ 00166 00167 vfim = DSET_ARRAY(dset,iv_fim) ; 00168 switch( fim_type ){ 00169 default: 00170 fprintf(stderr,"\n*** Illegal data type in dataset %s\a\n", 00171 dset->dblk->diskptr->brick_name ) ; 00172 EXRETURN ; 00173 00174 case MRI_short: sfim = (short *) vfim ; break ; 00175 case MRI_float: ffim = (float *) vfim ; break ; 00176 case MRI_byte: bfim = (byte *) vfim ; break ; 00177 case MRI_complex: cfim = (complex *) vfim ; break ; 00178 } 00179 00180 if( iv_thr >= 0 ){ 00181 vthr = DSET_ARRAY(dset,iv_thr) ; 00182 switch( thr_type ){ 00183 default: 00184 fprintf(stderr,"\n*** Illegal thresh data type in dataset %s\a\n", 00185 dset->dblk->diskptr->brick_name ) ; 00186 EXRETURN ; 00187 00188 case MRI_short: sthr = (short *) vthr ; break ; 00189 case MRI_float: fthr = (float *) vthr ; break ; 00190 case MRI_byte: bthr = (byte *) vthr ; break ; 00191 } 00192 } 00193 00194 /** load the grid parameters **/ 00195 00196 daxes = dset->daxes ; 00197 nx = daxes->nxx ; dx = fabs(daxes->xxdel) ; 00198 ny = daxes->nyy ; dy = fabs(daxes->yydel) ; 00199 nz = daxes->nzz ; dz = fabs(daxes->zzdel) ; 00200 00201 if( fake_dxyz ) dx = dy = dz = 1.0 ; /* 11 Sep 2000 */ 00202 00203 nxy = nx * ny ; nxyz = nxy * nz ; dxyz = dx*dy*dz ; 00204 00205 /*----- copy threshold over intensity? -----*/ 00206 00207 STATUS("dataset loaded") ; 00208 00209 if( edit_thtoin && iv_thr >= 0 ){ 00210 float new_fimfac , scaling ; 00211 00212 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: copy thr over fim\n") ; 00213 00214 /**** 00215 Find scaling factors for various conversions (0 --> no scaling) 00216 scaling = factor to actually scale data by when copying to new brick 00217 new_fimfac = factor to later scale data by when converting to floats 00218 ****/ 00219 00220 if( edit_thtoin == 2 ){ 00221 new_fimfac = scaling = 0.0 ; /** -2thtoin --> no scaling **/ 00222 } else { 00223 switch( thr_type ){ 00224 00225 /** threshold datum is shorts **/ 00226 00227 case MRI_short:{ 00228 switch( fim_type ){ 00229 case MRI_short: /* fim datum is shorts --> no new scaling needed */ 00230 new_fimfac = thrfac ; 00231 scaling = 0.0 ; 00232 break ; 00233 00234 case MRI_float: /* fim datum is floats --> will be scaled properly */ 00235 new_fimfac = 0.0 ; 00236 scaling = thrfac ; 00237 break ; 00238 00239 case MRI_byte: /* fim datum is bytes */ 00240 new_fimfac = 1.0 / FUNC_scale_byte[dset->func_type] ; 00241 scaling = thrfac * FUNC_scale_byte[dset->func_type] ; 00242 break ; 00243 } 00244 } 00245 break ; 00246 00247 /** threshold datum is bytes **/ 00248 00249 case MRI_byte:{ 00250 switch( fim_type ){ 00251 case MRI_short: /* fim datum is shorts */ 00252 new_fimfac = 1.0 / FUNC_scale_short[dset->func_type] ; 00253 scaling = thrfac * FUNC_scale_short[dset->func_type] ; 00254 break ; 00255 00256 case MRI_float: /* fim datum is floats */ 00257 new_fimfac = 0.0 ; 00258 scaling = thrfac ; 00259 break ; 00260 00261 case MRI_byte: /* fim datum is bytes */ 00262 new_fimfac = thrfac ; 00263 scaling = 0.0 ; 00264 break ; 00265 } 00266 } 00267 break ; 00268 00269 /** threshold datum is floats **/ 00270 00271 case MRI_float:{ 00272 switch( fim_type ){ 00273 case MRI_short: /* fim datum is shorts */ 00274 new_fimfac = 1.0 / FUNC_scale_short[dset->func_type] ; 00275 scaling = FUNC_scale_short[dset->func_type] ; 00276 break ; 00277 00278 case MRI_float: /* fim datum is floats --> no scaling needed */ 00279 new_fimfac = 0.0 ; 00280 scaling = 0.0 ; 00281 break ; 00282 00283 case MRI_byte: /* fim datum is bytes */ 00284 new_fimfac = 1.0 / FUNC_scale_byte[dset->func_type] ; 00285 scaling = FUNC_scale_byte[dset->func_type] ; 00286 break ; 00287 } 00288 } 00289 break ; 00290 } 00291 } 00292 00293 #ifdef AFNI_DEBUG 00294 { char str[256] ; 00295 sprintf(str,"thtoin: scaling=%f new_fimfac=%f input=%s output=%s", 00296 scaling,new_fimfac,MRI_TYPE_name[thr_type],MRI_TYPE_name[fim_type]) ; 00297 STATUS(str) ; } 00298 #endif 00299 00300 /** have scaling factors, so use them **/ 00301 00302 EDIT_coerce_scale_type( nxyz , scaling , 00303 thr_type , vthr , fim_type , vfim ) ; 00304 00305 DSET_BRICK_FACTOR(dset,iv_fim) = fimfac = new_fimfac ; 00306 } /* end -1thtoin */ 00307 00308 /*----- non-negative? -----*/ 00309 00310 if( edit_noneg ){ /* meaningless for byte and complex */ 00311 STATUS("noneg") ; 00312 00313 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: remove negative values\n") ; 00314 00315 switch( fim_type ){ 00316 case MRI_short: 00317 for( ii=0 ; ii < nxyz ; ii++ ) if( sfim[ii] < 0 ) sfim[ii] = 0 ; 00318 break ; 00319 00320 case MRI_float: 00321 for( ii=0 ; ii < nxyz ; ii++ ) if( ffim[ii] < 0 ) ffim[ii] = 0 ; 00322 break ; 00323 00324 default: 00325 STATUS("noneg applied to meaningless type: will be ignored") ; 00326 } 00327 } 00328 00329 /*----- absolute? -----*/ 00330 00331 if( edit_abs ){ /* meaningless for byte */ 00332 STATUS("abs") ; 00333 00334 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: take absolute value\n") ; 00335 00336 switch( fim_type ){ 00337 case MRI_short: 00338 for( ii=0 ; ii < nxyz ; ii++ ) if( sfim[ii] < 0 ) sfim[ii] = -sfim[ii] ; 00339 break ; 00340 00341 case MRI_float: 00342 for( ii=0 ; ii < nxyz ; ii++ ) if( ffim[ii] < 0 ) ffim[ii] = -ffim[ii] ; 00343 break ; 00344 00345 case MRI_complex: 00346 for( ii=0 ; ii < nxyz ; ii++ ){ 00347 cfim[ii].r = CABS(cfim[ii]) ; cfim[ii].i = 0.0 ; 00348 } 00349 break ; 00350 00351 default: 00352 STATUS("abs applied to meaningless type: will be ignored") ; 00353 } 00354 } 00355 00356 /*----- clip? -----*/ 00357 00358 if( edit_clip_bot < edit_clip_top ){ 00359 00360 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: clip fim values\n") ; 00361 00362 switch( fim_type ){ 00363 case MRI_short:{ 00364 int top , bot ; 00365 float ftop,fbot ; 00366 if( fimfac > 0.0 && ! edit_clip_unscaled ){ 00367 ftop = edit_clip_top / fimfac ; 00368 fbot = edit_clip_bot / fimfac ; 00369 } else { 00370 ftop = edit_clip_top ; 00371 fbot = edit_clip_bot ; 00372 } 00373 00374 top = rint(ftop) ; /* this code was modifed 28 Sep 1998 */ 00375 if( top >= MRI_maxshort ) top = MRI_maxshort + 1 ; 00376 if( top <= -MRI_maxshort ) top = -(MRI_maxshort + 1) ; 00377 00378 bot = rint(fbot) ; 00379 if( bot >= MRI_maxshort ) bot = MRI_maxshort + 1 ; 00380 if( bot <= -MRI_maxshort ) bot = -(MRI_maxshort + 1) ; 00381 00382 #ifdef AFNI_DEBUG 00383 { char str[256] ; 00384 sprintf(str,"clipping short from %d to %d",bot,top) ; 00385 STATUS(str) ; } 00386 #endif 00387 for( ii=0 ; ii < nxyz ; ii++ ) 00388 if( sfim[ii] > bot && sfim[ii] < top ) sfim[ii] = 0 ; 00389 } 00390 break ; 00391 00392 case MRI_byte:{ 00393 int top , bot ; 00394 float ftop,fbot ; 00395 if( fimfac > 0.0 && ! edit_clip_unscaled ){ 00396 ftop = edit_clip_top / fimfac ; 00397 fbot = edit_clip_bot / fimfac ; 00398 } else { 00399 ftop = edit_clip_top ; 00400 fbot = edit_clip_bot ; 00401 } 00402 00403 top = rint(ftop) ; 00404 if( top >= MRI_maxbyte ) top = MRI_maxbyte + 1 ; 00405 if( top <= -MRI_maxbyte ) top = -(MRI_maxbyte + 1) ; 00406 00407 bot = rint(fbot) ; 00408 if( bot >= MRI_maxbyte ) bot = MRI_maxbyte + 1 ; 00409 if( bot <= -MRI_maxbyte ) bot = -(MRI_maxbyte + 1) ; 00410 00411 if( bot < 0 ) bot = 0 ; 00412 if( top < bot ) top = bot ; 00413 #ifdef AFNI_DEBUG 00414 { char str[256] ; 00415 sprintf(str,"clipping byte from %d to %d",bot,top) ; 00416 STATUS(str) ; } 00417 #endif 00418 for( ii=0 ; ii < nxyz ; ii++ ) 00419 if( bfim[ii] > bot && bfim[ii] < top ) bfim[ii] = 0 ; 00420 } 00421 break ; 00422 00423 case MRI_float:{ 00424 float top , bot ; 00425 if( fimfac > 0.0 && ! edit_clip_unscaled ){ 00426 top = edit_clip_top / fimfac ; 00427 bot = edit_clip_bot / fimfac ; 00428 } else { 00429 top = edit_clip_top ; 00430 bot = edit_clip_bot ; 00431 } 00432 #ifdef AFNI_DEBUG 00433 { char str[256] ; 00434 sprintf(str,"clipping float from %g to %g",bot,top) ; 00435 STATUS(str) ; } 00436 #endif 00437 for( ii=0 ; ii < nxyz ; ii++ ) 00438 if( ffim[ii] > bot && ffim[ii] < top ) ffim[ii] = 0.0 ; 00439 } 00440 break ; 00441 00442 case MRI_complex:{ 00443 float val ; 00444 float top , bot ; 00445 if( fimfac > 0.0 && ! edit_clip_unscaled ){ 00446 top = edit_clip_top / fimfac ; 00447 bot = edit_clip_bot / fimfac ; 00448 } else { 00449 top = edit_clip_top ; 00450 bot = edit_clip_bot ; 00451 } 00452 #ifdef AFNI_DEBUG 00453 { char str[256] ; 00454 sprintf(str,"clipping complex from %g to %g",bot,top) ; 00455 STATUS(str) ; } 00456 #endif 00457 for( ii=0 ; ii < nxyz ; ii++ ){ 00458 val = CABS(cfim[ii]) ; 00459 if( val > bot && val < top ) cfim[ii].r = cfim[ii].i = 0.0 ; 00460 } 00461 } 00462 break ; 00463 } 00464 } 00465 00466 /*----- apply threshold? -----*/ 00467 00468 if( edit_thresh > 0.0 && iv_thr >= 0 ){ 00469 #ifdef AFNI_DEBUG 00470 int nthresh = 0 ; 00471 # define THADD (nthresh++) 00472 #else 00473 # define THADD /* nada */ 00474 #endif 00475 00476 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: apply threshold\n") ; 00477 00478 switch( thr_type ){ 00479 00480 /** threshold datum is shorts **/ 00481 00482 case MRI_short:{ 00483 short thrplu , thrmin ; 00484 float fplu = edit_thresh / thrfac ; 00485 if( fplu > 32767.0 ){ 00486 fprintf(stderr,"\n*** -1thresh out of range: reset to %g\n", 00487 32767.0 * thrfac ) ; 00488 fplu = 32767.0 ; 00489 } 00490 thrplu = (short) fplu ; 00491 thrmin = -thrplu ; 00492 #ifdef AFNI_DEBUG 00493 { char str[256] ; 00494 sprintf(str,"short threshold = %d\n",(int)thrplu) ; STATUS(str) ; } 00495 #endif 00496 switch( fim_type ){ 00497 case MRI_short: /* fim datum is shorts */ 00498 for( ii=0 ; ii < nxyz ; ii++ ) 00499 if( sthr[ii] < thrplu && sthr[ii] > thrmin ){ sfim[ii] = 0 ; THADD ; } 00500 break ; 00501 00502 case MRI_byte: /* fim datum is bytes */ 00503 for( ii=0 ; ii < nxyz ; ii++ ) 00504 if( sthr[ii] < thrplu && sthr[ii] > thrmin ){ bfim[ii] = 0 ; THADD ; } 00505 break ; 00506 00507 case MRI_float: /* fim datum is floats */ 00508 for( ii=0 ; ii < nxyz ; ii++ ) 00509 if( sthr[ii] < thrplu && sthr[ii] > thrmin ){ ffim[ii] = 0.0 ; THADD ; } 00510 break ; 00511 00512 case MRI_complex: /* fim datum is complex */ 00513 for( ii=0 ; ii < nxyz ; ii++ ) 00514 if( sthr[ii] < thrplu && sthr[ii] > thrmin ){ 00515 cfim[ii].r = cfim[ii].i = 0.0 ; THADD ; 00516 } 00517 break ; 00518 } 00519 } 00520 break ; 00521 00522 /** threshold datum is bytes **/ 00523 00524 case MRI_byte:{ 00525 byte thrplu ; 00526 float fplu = edit_thresh / thrfac ; 00527 if( fplu > 255.0 ){ 00528 fprintf(stderr,"\n*** -1thresh out of range: reset to %g\n", 00529 255.0 * thrfac ) ; 00530 fplu = 255.0 ; 00531 } 00532 thrplu = (byte) fplu ; 00533 #ifdef AFNI_DEBUG 00534 { char str[256] ; 00535 sprintf(str,"byte threshold = %d\n",(int)thrplu) ; STATUS(str) ; } 00536 #endif 00537 switch( fim_type ){ 00538 case MRI_short: /* fim datum is shorts */ 00539 for( ii=0 ; ii < nxyz ; ii++ ) if( bthr[ii] < thrplu ){ sfim[ii] = 0 ; THADD ; } 00540 break ; 00541 00542 case MRI_byte: /* fim datum is bytes */ 00543 for( ii=0 ; ii < nxyz ; ii++ ) if( bthr[ii] < thrplu ){ bfim[ii] = 0 ; THADD ; } 00544 break ; 00545 00546 case MRI_float: /* fim datum is floats */ 00547 for( ii=0 ; ii < nxyz ; ii++ ) if( bthr[ii] < thrplu ){ ffim[ii] = 0.0 ; THADD ; } 00548 break ; 00549 00550 case MRI_complex: /* fim datum is complex */ 00551 for( ii=0 ; ii < nxyz ; ii++ ) 00552 if( bthr[ii] < thrplu ){ 00553 cfim[ii].r = cfim[ii].i = 0.0 ; THADD ; 00554 } 00555 break ; 00556 } 00557 } 00558 break ; 00559 00560 /** threshold datum is floats **/ 00561 00562 case MRI_float:{ 00563 float thrplu , thrmin ; 00564 thrplu = edit_thresh ; if( thrfac > 0.0 ) thrplu /= thrfac ; 00565 thrmin = -thrplu ; 00566 #ifdef AFNI_DEBUG 00567 { char str[256] ; 00568 sprintf(str,"float threshold = %g\n",thrplu) ; STATUS(str) ; } 00569 #endif 00570 switch( fim_type ){ 00571 case MRI_short: /* fim datum is shorts */ 00572 for( ii=0 ; ii < nxyz ; ii++ ) 00573 if( fthr[ii] < thrplu && fthr[ii] > thrmin ){ sfim[ii] = 0 ; THADD ; } 00574 break ; 00575 00576 case MRI_byte: /* fim datum is bytes */ 00577 for( ii=0 ; ii < nxyz ; ii++ ) 00578 if( fthr[ii] < thrplu && fthr[ii] > thrmin ){ bfim[ii] = 0 ; THADD ; } 00579 break ; 00580 00581 case MRI_float: /* fim datum is floats */ 00582 for( ii=0 ; ii < nxyz ; ii++ ) 00583 if( fthr[ii] < thrplu && fthr[ii] > thrmin ){ ffim[ii] = 0.0 ; THADD ; } 00584 break ; 00585 00586 case MRI_complex: /* fim datum is complex */ 00587 for( ii=0 ; ii < nxyz ; ii++ ) 00588 if( fthr[ii] < thrplu && fthr[ii] > thrmin ){ 00589 cfim[ii].r = cfim[ii].i = 0.0 ; THADD ; 00590 } 00591 break ; 00592 } 00593 } 00594 break ; 00595 } 00596 #ifdef AFNI_DEBUG 00597 { char str[256] ; 00598 sprintf(str,"number thresholded to zero = %d",nthresh) ; 00599 STATUS(str) ; } 00600 #endif 00601 } 00602 00603 /*----- blur? -----*/ 00604 00605 if( edit_blur > 0.0 ){ 00606 00607 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: blurring fim\n") ; 00608 00609 EDIT_blur_volume( nx,ny,nz, dx,dy,dz , fim_type,vfim , edit_blur ) ; 00610 } 00611 00612 /*----- threshold blur? -----*/ /* 4 Oct 1996 */ 00613 if(( edit_thrblur > 0.0) && (vthr != NULL) ){ 00614 00615 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: blurring threshold\n") ; 00616 00617 EDIT_blur_volume( nx,ny,nz, dx,dy,dz , thr_type,vthr , edit_thrblur ) ; 00618 } 00619 00620 00621 /*----- zvol? -----*/ 00622 00623 if( edit_zvol ){ 00624 THD_ivec3 iv1 , iv2 ; 00625 int ix1,ix2 , jy1,jy2 , kz1,kz2 , jj,kk ; 00626 00627 iv1 = THD_3dmm_to_3dind(dset,TEMP_FVEC3(edopt->zv_x1,edopt->zv_y1,edopt->zv_z1)); 00628 iv2 = THD_3dmm_to_3dind(dset,TEMP_FVEC3(edopt->zv_x2,edopt->zv_y2,edopt->zv_z2)); 00629 00630 ix1 = iv1.ijk[0] ; ix2 = iv2.ijk[0] ; 00631 jy1 = iv1.ijk[1] ; jy2 = iv2.ijk[1] ; 00632 kz1 = iv1.ijk[2] ; kz2 = iv2.ijk[2] ; 00633 00634 if( ix1 > ix2 ){ ii=ix1 ; ix1=ix2 ; ix2=ii ; } 00635 if( jy1 > jy2 ){ ii=jy1 ; jy1=jy2 ; jy2=ii ; } 00636 if( kz1 > kz2 ){ ii=kz1 ; kz1=kz2 ; kz2=ii ; } 00637 00638 #ifdef AFNI_DEBUG 00639 { char str[256] ; 00640 sprintf(str,"edit_zvol: x1=%g x2=%g y1=%g y2=%g z1=%g z2=%g", 00641 edopt->zv_x1,edopt->zv_x2,edopt->zv_y1,edopt->zv_y2,edopt->zv_z1,edopt->zv_z2) ; 00642 STATUS(str) ; 00643 sprintf(str," : ix1=%d ix2=%d jy1=%d jy2=%d kz1=%d kz2=%d", 00644 ix1,ix2,jy1,jy2,kz1,kz2) ; 00645 STATUS(str) ; } 00646 #endif 00647 00648 if( verbose ) 00649 fprintf(stderr,"--- EDIT_one_dataset: zeroing indexes [%d,%d]x[%d,%d]x[%d,%d]\n", 00650 ix1,ix2,jy1,jy2,kz1,kz2 ) ; 00651 00652 for( kk=kz1 ; kk <= kz2 ; kk++ ){ 00653 for( jj=jy1 ; jj <= jy2 ; jj++ ){ 00654 switch( fim_type ){ 00655 case MRI_short: 00656 for( ii=ix1 ; ii <= ix2 ; ii++ ) sfim[ii+jj*nx+kk*nxy] = 0 ; 00657 break ; 00658 00659 case MRI_byte: 00660 for( ii=ix1 ; ii <= ix2 ; ii++ ) bfim[ii+jj*nx+kk*nxy] = 0 ; 00661 break ; 00662 00663 case MRI_float: 00664 for( ii=ix1 ; ii <= ix2 ; ii++ ) ffim[ii+jj*nx+kk*nxy] = 0 ; 00665 break ; 00666 00667 case MRI_complex: 00668 for( ii=ix1 ; ii <= ix2 ; ii++ ) 00669 cfim[ii+jj*nx+kk*nxy].r = cfim[ii+jj*nx+kk*nxy].i = 0 ; 00670 break ; 00671 } 00672 } 00673 } 00674 } 00675 00676 /*----- form clusters? -----*/ 00677 00678 rmm = clust_rmm ; 00679 vmul = clust_vmul ; 00680 00681 if( rmm >= 0.0 ){ /* do clustering? */ 00682 00683 MCW_cluster_array * clbig ; 00684 MCW_cluster * cl ; 00685 00686 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: clustering with rmm=%g vmul=%g\n", 00687 rmm,vmul ) ; 00688 00689 /*----- Erosion and dilation of clusters -----*/ /* 17 June 1998 */ 00690 if (erode_pv > 0.0) 00691 MCW_erode_clusters (nx, ny, nz, dx, dy, dz, fim_type, vfim, rmm, 00692 erode_pv, dilate); 00693 00694 00695 STATUS("clustering") ; 00696 00697 if( vmul >= 0.0 ) 00698 ptmin = (int)( vmul / dxyz + 0.99 ) ; 00699 else 00700 ptmin = (int) fabs(vmul) ; /* 30 Apr 2002 */ 00701 00702 vmul = MAX(1,ptmin) * dxyz ; /* for use below */ 00703 00704 clar = MCW_find_clusters( nx,ny,nz , dx,dy,dz , fim_type,vfim , rmm ) ; 00705 nclu = 0 ; 00706 00707 if( clar != NULL ){ 00708 INIT_CLARR(clbig) ; 00709 for( iclu=0 ; iclu < clar->num_clu ; iclu++ ){ 00710 cl = clar->clar[iclu] ; 00711 if( cl->num_pt >= ptmin ){ /* big enough */ 00712 ADDTO_CLARR(clbig,cl) ; /* copy pointer */ 00713 clar->clar[iclu] = NULL ; /* null out original */ 00714 nclu++ ; 00715 } 00716 } 00717 DESTROY_CLARR(clar) ; 00718 clar = clbig ; 00719 if( nclu == 0 || clar == NULL || clar->num_clu == 0 ){ 00720 printf("*** NO CLUSTERS FOUND ***\n") ; 00721 if( clar != NULL ) DESTROY_CLARR(clar) ; 00722 EXRETURN ; 00723 } 00724 SORT_CLARR(clar) ; 00725 } 00726 00727 if( nclu == 0 ){ /* no data left */ 00728 STATUS("no data left after cluster edit!") ; 00729 DESTROY_CLARR(clar) ; 00730 EXRETURN ; 00731 } 00732 00733 #ifdef AFNI_DEBUG 00734 { char str[256] ; 00735 sprintf(str,"number clusters = %d",nclu) ; STATUS(str) ; } 00736 #endif 00737 00738 /*----- edit clusters? -----*/ /* 10 Sept 1996 */ 00739 if (edit_clust > ECFLAG_SAME) 00740 EDIT_cluster_array (clar, edit_clust, dxyz, vmul); 00741 if (edit_clust == ECFLAG_SIZE || edit_clust == ECFLAG_ORDER) 00742 DSET_BRICK_FACTOR(dset,iv_fim) = 0.0; 00743 00744 for( iclu=0 ; iclu < clar->num_clu ; iclu++ ) 00745 if( clar->clar[iclu] != NULL && clar->clar[iclu]->num_pt > 0 ){ 00746 MCW_cluster_to_vol( nx,ny,nz , fim_type,vfim , clar->clar[iclu] ) ; 00747 } else { 00748 } 00749 00750 DESTROY_CLARR(clar) ; 00751 } 00752 00753 00754 /*----- filter? -----*/ /* 11 Sept 1996 */ 00755 if (filter_opt > FCFLAG_NONE){ 00756 00757 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: filtering fim\n") ; 00758 00759 EDIT_filter_volume (nx, ny, nz, dx, dy, dz, fim_type, vfim, 00760 filter_opt, filter_rmm , edopt->fmask , edopt->fexpr ); 00761 } 00762 00763 00764 /*----- threshold filter? -----*/ /* 1 Oct 1996 */ 00765 if ((thrfilter_opt > FCFLAG_NONE) && (vthr != NULL)){ 00766 00767 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: filtering thr\n") ; 00768 00769 EDIT_filter_volume (nx, ny, nz, dx, dy, dz, thr_type, vthr, 00770 thrfilter_opt, thrfilter_rmm , edopt->fmask , edopt->fexpr ); 00771 } 00772 00773 00774 /*----- scale? -----*/ 00775 00776 #ifdef ALLOW_SCALE_TO_MAX 00777 if( edit_scale ){ 00778 STATUS("scale") ; 00779 00780 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: scaling fim to max\n") ; 00781 00782 MCW_scale_to_max( nx,ny,nz , fim_type , vfim ) ; 00783 } 00784 #endif 00785 00786 /*----- mult? -----*/ 00787 /*--- correction for scaling of short and byte bricks (13 Sept. 1996) ---*/ 00788 00789 if( edit_mult != 0.0 ){ 00790 STATUS("mult") ; 00791 00792 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: multiplying fim\n") ; 00793 00794 switch( fim_type ){ 00795 case MRI_short: 00796 if (fimfac > 0) 00797 DSET_BRICK_FACTOR(dset,iv_fim) = 00798 DSET_BRICK_FACTOR(dset,iv_fim) * edit_mult ; 00799 else 00800 for( ii=0 ; ii < nxyz ; ii++ ) sfim[ii] *= edit_mult ; 00801 break ; 00802 00803 case MRI_byte : 00804 if (fimfac > 0) 00805 DSET_BRICK_FACTOR(dset,iv_fim) = 00806 DSET_BRICK_FACTOR(dset,iv_fim) * edit_mult ; 00807 else 00808 for( ii=0 ; ii < nxyz ; ii++ ) bfim[ii] *= edit_mult ; 00809 break ; 00810 00811 case MRI_float: for( ii=0 ; ii < nxyz ; ii++ ) ffim[ii] *= edit_mult ; 00812 break ; 00813 00814 case MRI_complex: for( ii=0 ; ii < nxyz ; ii++ ) 00815 cfim[ii].r *= edit_mult , cfim[ii].i *= edit_mult ; 00816 break ; 00817 } 00818 } 00819 00820 /*----- 17 Sep 1998: conversion to z-score? -----*/ 00821 00822 if( edopt->zscore ){ /* 07 Jun 1999! How did this get lost? */ 00823 int kv = DSET_BRICK_STATCODE(dset,iv_fim) ; 00824 float par[2] ; 00825 00826 if( FUNC_IS_STAT(kv) && kv != FUNC_ZT_TYPE ){ 00827 00828 #if 0 00829 fprintf(stderr," -1zscore: converting\n") ; 00830 #endif 00831 00832 if( verbose ) fprintf(stderr,"--- EDIT_one_dataset: converting to zscore\n") ; 00833 00834 EDIT_zscore_vol( nxyz , fim_type , fimfac , vfim , 00835 kv , DSET_BRICK_STATAUX(dset,iv_fim) ) ; 00836 00837 if( ISBUCKET(dset) ){ 00838 00839 #if 0 00840 fprintf(stderr," -1zscore: bucketing\n") ; 00841 #endif 00842 00843 par[0] = FUNC_ZT_TYPE ; 00844 par[1] = 0 ; 00845 EDIT_dset_items( dset , ADN_brick_stataux_one+iv_fim,par , ADN_none ) ; 00846 00847 } else if( ISFUNC(dset) && 00848 FUNC_IS_STAT(dset->func_type) && 00849 iv_fim == FUNC_ival_thr[dset->func_type] ){ 00850 00851 #if 0 00852 fprintf(stderr," -1zscore: retyping\n") ; 00853 #endif 00854 00855 dset->func_type = FUNC_ZT_TYPE ; 00856 dset->stat_aux[0] = 0.0 ; 00857 00858 } else { 00859 fprintf(stderr,"*** -1zscore error: non-bucket & non-func!\n") ; 00860 } 00861 00862 if( fim_type == MRI_short ) 00863 DSET_BRICK_FACTOR(dset,iv_fim) = 1.0 / FUNC_ZT_SCALE_SHORT ; 00864 } 00865 } 00866 00867 /*------ DONE! -----*/ 00868 00869 EXRETURN ; 00870 } |
|
Definition at line 157 of file edt_help.c. References helpstring. Referenced by MRG_Syntax().
00158 { 00159 return helpstring ; 00160 } |
|
Definition at line 25 of file edt_substbrick.c. References THD_datablock::brick, THD_datablock::brick_bytes, calloc, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::dblk, DSET_BRICK, DSET_CRUSH_BSTAT, ENTRY, EXIT, fim, ISVALID_3DIM_DATASET, THD_datablock::malloc_type, mri_empty_conforming, mri_fix_data_pointer(), mri_free(), THD_datablock::nvals, MRI_IMAGE::nvox, MRI_IMAGE::pixel_size, and THD_datablock::total_bytes. Referenced by AFNI_read_inputs(), applyMask(), attach_sub_brick(), basis_write_iresp(), basis_write_sresp(), CALC_read_opts(), copy_dset(), COPY_main(), DRAW_copy_dset(), EDIT_full_copy(), EDIT_main(), form_clusters(), Fourier_Filter_Driver(), get_options(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), NUD_doall_CB(), NUD_update_base(), POWER_main(), process_NIML_Node_ROI(), r_fill_resampled_data_brick(), REORDER_main(), RT_process_image(), RT_registration_2D_onevol(), RT_registration_3D_onevol(), s2v_nodes2volume(), saveMask(), STAVG_main(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), THD_add_bricks(), THD_copy_dset_subs(), THD_load_tcat(), THD_warp3D(), THD_zeropad(), VOLREG_main(), WINsorize(), write_bucket(), write_bucket_data(), and write_results().
00026 { 00027 THD_datablock * dblk ; 00028 MRI_IMAGE * newim , * oldim ; 00029 int nbytes , nullfim = (fim == NULL) ; 00030 00031 ENTRY("EDIT_substitute_brick") ; 00032 00033 /**-- Sanity Checks --**/ 00034 00035 if( ! ISVALID_3DIM_DATASET(dset) ) EXRETURN; /* error! */ 00036 if( dset->dblk->brick == NULL ) EXRETURN; /* ditto! */ 00037 if( dset->dblk->malloc_type != DATABLOCK_MEM_MALLOC )EXRETURN; /* ditto! */ 00038 if( ival >= dset->dblk->nvals || ival < 0 ) EXRETURN; /* ditto! */ 00039 if( ftype < 0 || ftype > LAST_MRI_TYPE ) EXRETURN; /* ditto! */ 00040 00041 oldim = DSET_BRICK(dset,ival) ; if( oldim == NULL ) EXRETURN; /* ditto! */ 00042 00043 newim = mri_empty_conforming( oldim , ftype ) ; /* new sub-brick */ 00044 nbytes = newim->nvox * newim->pixel_size ; /* how big it is */ 00045 mri_free( oldim ) ; /* kill old one */ 00046 00047 if( nullfim ){ /* if needed, */ 00048 fim = calloc( 1,nbytes ) ; /* make array */ 00049 if( fim == NULL ){ 00050 fprintf(stderr,"\n*** malloc error for dataset sub-brick\n") ; EXIT(1) ; 00051 } 00052 } 00053 mri_fix_data_pointer( fim , newim ) ; /* attach new data */ 00054 DSET_BRICK(dset,ival) = newim ; /* put in dataset */ 00055 00056 /** change the byte count for this sub-brick and the total dataset **/ 00057 00058 dset->dblk->total_bytes += (nbytes - dset->dblk->brick_bytes[ival]) ; 00059 dset->dblk->brick_bytes[ival] = nbytes ; 00060 00061 DSET_CRUSH_BSTAT(dset,ival) ; 00062 00063 EXRETURN ; 00064 } |
|
Definition at line 13 of file edt_volpad.c. References calloc, ENTRY, fim, free, malloc, MAX, MIN, mri_datum_size(), nz, and RETURN. Referenced by mri_zeropad_3D().
00017 { 00018 int nxold,nyold,nzold , nxnew,nynew,nznew , nxyold,nxynew ; 00019 int ii,jj,kk , iv , iibot,iitop , jjbot,jjtop , kkbot,kktop ; 00020 void * vnew ; 00021 00022 ENTRY("EDIT_volpad") ; 00023 00024 /*- check for user stupidity -*/ 00025 00026 if( nx <= 0 || ny <= 0 || nz <= 0 || fim == NULL ) RETURN(NULL) ; 00027 00028 /*- special case: just copy input -*/ 00029 00030 if( nxbot == 0 && nybot == 0 && nzbot == 0 && 00031 nxtop == 0 && nytop == 0 && nztop == 0 ){ 00032 00033 vnew = malloc( mri_datum_size(ftype) * nx*ny*nz ) ; 00034 memcpy( vnew , fim , mri_datum_size(ftype) * nx*ny*nz ) ; 00035 RETURN(vnew) ; 00036 } 00037 00038 nxold = nx ; nxnew = nxold + nxbot + nxtop ; /* dimensions */ 00039 nyold = ny ; nynew = nyold + nybot + nytop ; 00040 nzold = nz ; nznew = nzold + nzbot + nztop ; 00041 00042 nxyold = nxold * nyold ; /* for computing 3D subscripts */ 00043 nxynew = nxnew * nynew ; 00044 00045 iibot = MAX(0,-nxbot) ; iitop = MIN(nxold,nxold+nxtop) ; /* range of data */ 00046 jjbot = MAX(0,-nybot) ; jjtop = MIN(nyold,nyold+nytop) ; /* in old dataset */ 00047 kkbot = MAX(0,-nzbot) ; kktop = MIN(nzold,nzold+nztop) ; /* to copy to new */ 00048 00049 if( nxnew < 2 || iibot >= iitop || /* check for reasonable sizes */ 00050 nynew < 2 || jjbot >= jjtop || /* and ranges of dataset */ 00051 nznew < 2 || kkbot >= kktop ){ 00052 00053 fprintf(stderr,"*** EDIT_volpad: can't cut volume down to nothing!\n") ; 00054 RETURN(NULL) ; 00055 } 00056 00057 vnew = calloc( nxnew*nynew*nznew , mri_datum_size(ftype) ) ; /* new brick */ 00058 if( vnew == NULL ){ 00059 fprintf(stderr, "*** EDIT_volpad: Can't malloc space for new array\n") ; 00060 RETURN(NULL) ; 00061 } 00062 00063 /* macros for computing 1D subscripts from 3D indices */ 00064 00065 #undef SNEW /* in case was defined in some stupid .h file */ 00066 #undef SOLD 00067 #define SNEW(i,j,k) ((i+nxbot)+(j+nybot)*nxnew+(k+nzbot)*nxynew) 00068 #define SOLD(i,j,k) (i+j*nxold+k*nxyold) 00069 00070 switch( ftype ){ /* copy rows of old into new */ 00071 00072 default: 00073 fprintf(stderr,"*** EDIT_volpad: unknown input datum=%d\n",ftype) ; 00074 free(vnew) ; 00075 RETURN(NULL) ; 00076 00077 case MRI_byte:{ 00078 byte * bnew = (byte *) vnew, * bold = (byte *) fim ; 00079 for( kk=kkbot ; kk < kktop ; kk++ ) 00080 for( jj=jjbot ; jj < jjtop ; jj++ ) 00081 for( ii=iibot ; ii < iitop ; ii++ ) 00082 bnew[SNEW(ii,jj,kk)] = bold[SOLD(ii,jj,kk)] ; 00083 } 00084 break ; 00085 00086 case MRI_rgb:{ 00087 byte * bnew = (byte *) vnew, * bold = (byte *) fim ; 00088 for( kk=kkbot ; kk < kktop ; kk++ ) 00089 for( jj=jjbot ; jj < jjtop ; jj++ ) 00090 for( ii=iibot ; ii < iitop ; ii++ ){ 00091 bnew[3*SNEW(ii,jj,kk) ] = bold[3*SOLD(ii,jj,kk) ] ; 00092 bnew[3*SNEW(ii,jj,kk)+1] = bold[3*SOLD(ii,jj,kk)+1] ; 00093 bnew[3*SNEW(ii,jj,kk)+2] = bold[3*SOLD(ii,jj,kk)+2] ; 00094 } 00095 } 00096 break ; 00097 00098 case MRI_short:{ 00099 short * bnew = (short *) vnew, * bold = (short *) fim ; 00100 for( kk=kkbot ; kk < kktop ; kk++ ) 00101 for( jj=jjbot ; jj < jjtop ; jj++ ) 00102 for( ii=iibot ; ii < iitop ; ii++ ) 00103 bnew[SNEW(ii,jj,kk)] = bold[SOLD(ii,jj,kk)] ; 00104 } 00105 break ; 00106 00107 case MRI_int:{ 00108 int * bnew = (int *) vnew, * bold = (int *) fim ; 00109 for( kk=kkbot ; kk < kktop ; kk++ ) 00110 for( jj=jjbot ; jj < jjtop ; jj++ ) 00111 for( ii=iibot ; ii < iitop ; ii++ ) 00112 bnew[SNEW(ii,jj,kk)] = bold[SOLD(ii,jj,kk)] ; 00113 } 00114 break ; 00115 00116 case MRI_float:{ 00117 float * bnew = (float *) vnew, * bold = (float *) fim ; 00118 for( kk=kkbot ; kk < kktop ; kk++ ) 00119 for( jj=jjbot ; jj < jjtop ; jj++ ) 00120 for( ii=iibot ; ii < iitop ; ii++ ) 00121 bnew[SNEW(ii,jj,kk)] = bold[SOLD(ii,jj,kk)] ; 00122 } 00123 break ; 00124 00125 case MRI_double:{ 00126 double * bnew = (double *) vnew, * bold = (double *) fim ; 00127 for( kk=kkbot ; kk < kktop ; kk++ ) 00128 for( jj=jjbot ; jj < jjtop ; jj++ ) 00129 for( ii=iibot ; ii < iitop ; ii++ ) 00130 bnew[SNEW(ii,jj,kk)] = bold[SOLD(ii,jj,kk)] ; 00131 } 00132 break ; 00133 00134 case MRI_complex:{ 00135 complex * bnew = (complex *) vnew, * bold = (complex *) fim ; 00136 for( kk=kkbot ; kk < kktop ; kk++ ) 00137 for( jj=jjbot ; jj < jjtop ; jj++ ) 00138 for( ii=iibot ; ii < iitop ; ii++ ) 00139 bnew[SNEW(ii,jj,kk)] = bold[SOLD(ii,jj,kk)] ; 00140 } 00141 break ; 00142 00143 } /* end of switch on datum type */ 00144 00145 RETURN(vnew) ; 00146 } |
|
Make a warp-on-demand "duplicate" of a dataset. --------------------------------------------------------------------- Definition at line 7 of file edt_wodcopy.c. References ADN_func_type, ADN_none, ADN_prefix, ADN_type, ADN_warp, ADN_warp_parent, ANAT_BUCK_TYPE, DATABLOCK_MEM_UNDEFINED, THD_3dim_dataset::dblk, THD_datablock::diskptr, EDIT_dset_items(), EDIT_empty_copy(), ENTRY, HEAD_ANAT_TYPE, IDENTITY_WARP, ISVALID_3DIM_DATASET, ISVALID_DSET, THD_datablock::malloc_type, myXtNew, RETURN, THD_diskptr::storage_mode, and STORAGE_UNDEFINED.
00008 { 00009 THD_3dim_dataset *dset_out ; 00010 THD_warp * warp ; 00011 00012 ENTRY("EDIT_wod_copy") ; 00013 00014 if( !ISVALID_DSET(dset_in) ) RETURN(NULL) ; 00015 00016 /*** copy header info ***/ 00017 00018 dset_out = EDIT_empty_copy( dset_in ) ; 00019 if( !ISVALID_3DIM_DATASET(dset_out) ) RETURN(NULL) ; 00020 00021 warp = myXtNew( THD_warp ) ; *warp = IDENTITY_WARP ; 00022 00023 EDIT_dset_items( dset_out , 00024 ADN_prefix , "dup" , 00025 ADN_type , HEAD_ANAT_TYPE , 00026 ADN_func_type , ANAT_BUCK_TYPE , 00027 ADN_warp , warp , 00028 ADN_warp_parent , dset_in , 00029 ADN_none ) ; 00030 00031 dset_out->dblk->diskptr->storage_mode = STORAGE_UNDEFINED ; 00032 dset_out->dblk->malloc_type = DATABLOCK_MEM_UNDEFINED ; 00033 00034 RETURN(dset_out) ; 00035 } |
|
Definition at line 16 of file edt_zscore.c. References ENTRY, FUNC_IS_STAT, FUNC_ZT_SCALE_SHORT, THD_stat_to_zscore(), and var. Referenced by EDIT_one_dataset().
00019 { 00020 register int ii ; 00021 00022 ENTRY("EDIT_zscore_vol") ; 00023 00024 /*-- sanity checks --*/ 00025 00026 if( nvox < 1 || /* no data? */ 00027 var == NULL || /* no data? */ 00028 ! FUNC_IS_STAT(statcode) || /* not a statistic? */ 00029 statcode == FUNC_ZT_TYPE || /* already a z-score? */ 00030 ( vtype != MRI_short && vtype != MRI_float ) /* illegal type of data? */ 00031 ) EXRETURN ; 00032 00033 /*-- what type of data? --*/ 00034 00035 switch( vtype ){ 00036 00037 case MRI_float:{ 00038 register float * bar = (float *) var ; 00039 register float fac = (vfac != 0.0 ) ? vfac : 1.0 ; 00040 00041 for( ii=0 ; ii < nvox ; ii++ ) 00042 bar[ii] = THD_stat_to_zscore( fac*bar[ii] , statcode , stataux ) ; 00043 } 00044 break ; 00045 00046 case MRI_short:{ 00047 register short * bar = (short *) var ; 00048 register float fac = (vfac != 0.0 ) ? vfac : 1.0 ; 00049 00050 for( ii=0 ; ii < nvox ; ii++ ) 00051 bar[ii] = (short) ( FUNC_ZT_SCALE_SHORT 00052 * THD_stat_to_zscore(fac*bar[ii],statcode,stataux) ) ; 00053 } 00054 break ; 00055 } 00056 00057 EXRETURN ; 00058 } |
|
Definition at line 83 of file edt_calcmask.c. References append_string_to_args(), CALC_byte, CALC_dshift, CALC_dshift_i, CALC_dshift_j, CALC_dshift_k, CALC_dshift_l, CALC_dshift_mode, CALC_ffac, CALC_float, CALC_nvox, CALC_read_opts(), CALC_short, CALC_type, THD_3dim_dataset::daxes, DSET_delete, DSET_index_to_ix, DSET_index_to_jy, DSET_index_to_kz, DSET_ixyz_to_index, DSET_NX, DSET_NY, DSET_NZ, DSHIFT_MODE_STOP, DSHIFT_MODE_WRAP, DSHIFT_MODE_ZERO, EDIT_empty_copy(), ENTRY, free, malloc, MIN, PARSER_evaluate_vector(), RETURN, THD_dataxes::xxdel, THD_dataxes::xxorg, THD_dataxes::yydel, THD_dataxes::yyorg, THD_dataxes::zzdel, and THD_dataxes::zzorg. Referenced by get_cmask(), main(), SUMA_Get_isosurface_datasets(), and validate_datasets().
00084 { 00085 int Argc=0 ; 00086 char ** Argv=NULL ; 00087 byte * bmask ; 00088 00089 #define VSIZE 1024 00090 00091 double * atoz[26] ; 00092 int ii , ids , jj, ll, jbot, jtop ; 00093 THD_3dim_dataset * new_dset ; 00094 double temp[VSIZE]; 00095 00096 int nx,nxy ; 00097 THD_dataxes * daxes ; 00098 00099 ENTRY("EDT_calcmask") ; 00100 00101 /*** parse input options ***/ 00102 00103 if( cmd == NULL ) RETURN( NULL ); 00104 append_string_to_args( cmd , 0,NULL , &Argc , &Argv ) ; 00105 if( Argc == 0 || Argv == NULL ) RETURN( NULL ); 00106 00107 jj = CALC_read_opts( Argc , Argv ) ; 00108 00109 for( ii=0 ; ii < Argc ; ii++ ) free(Argv[ii]) ; 00110 free(Argv) ; 00111 00112 if( jj != 0 ){ 00113 if( CALC_code != NULL ) free(CALC_code) ; 00114 for( ids=0 ; ids < 26 ; ids++ ){ 00115 if( CALC_dset[ids] != NULL ) DSET_delete( CALC_dset[ids] ) ; 00116 } 00117 RETURN( NULL ); 00118 } 00119 00120 /*** make output dataset ***/ 00121 00122 for( ids=0 ; ids < 26 ; ids++ ) if( CALC_dset[ids] != NULL ) break ; 00123 00124 new_dset = EDIT_empty_copy( CALC_dset[ids] ) ; 00125 00126 for (ids=0; ids<26; ids++) 00127 atoz[ids] = (double *) malloc(sizeof(double) * VSIZE ) ; 00128 00129 for( ids=0 ; ids < 26 ; ids++ ) /* initialize to all zeros */ 00130 for (ii=0; ii<VSIZE; ii++) 00131 atoz[ids][ii] = 0.0 ; 00132 00133 nx = DSET_NX(new_dset) ; 00134 nxy = nx * DSET_NY(new_dset) ; daxes = new_dset->daxes ; 00135 00136 bmask = (byte *) malloc(sizeof(byte) * CALC_nvox) ; 00137 00138 /*** loop over voxels ***/ 00139 00140 for ( ii = 0 ; ii < CALC_nvox ; ii += VSIZE ) { 00141 00142 jbot = ii ; 00143 jtop = MIN( ii + VSIZE , CALC_nvox ) ; 00144 00145 /* loop over datasets or other symbol definitions */ 00146 00147 for (ids = 0 ; ids < 26 ; ids ++ ) { 00148 00149 /* 22 Nov 1999: if a differentially subscripted dataset is here */ 00150 00151 if( CALC_dshift[ids] >= 0 ){ 00152 int jds = CALC_dshift[ids] ; /* actual dataset index */ 00153 int jjs , ix,jy,kz ; 00154 int id=CALC_dshift_i[ids] , jd=CALC_dshift_j[ids] , 00155 kd=CALC_dshift_k[ids] , ld=CALC_dshift_l[ids] ; 00156 int ijkd = ((id!=0) || (jd!=0) || (kd!=0)) ; 00157 int dsx = DSET_NX(CALC_dset[jds]) - 1 ; 00158 int dsy = DSET_NY(CALC_dset[jds]) - 1 ; 00159 int dsz = DSET_NZ(CALC_dset[jds]) - 1 ; 00160 int mode = CALC_dshift_mode[ids] , dun ; 00161 00162 for( dun=0,jj=jbot ; jj < jtop ; jj++ ){ 00163 jjs = jj ; 00164 if( ijkd ){ 00165 ix = DSET_index_to_ix(CALC_dset[jds],jj) ; 00166 jy = DSET_index_to_jy(CALC_dset[jds],jj) ; 00167 kz = DSET_index_to_kz(CALC_dset[jds],jj) ; 00168 00169 ix += id ; /* x shift */ 00170 if( ix < 0 || ix > dsx ){ 00171 switch( mode ){ 00172 case DSHIFT_MODE_ZERO: 00173 atoz[ids][jj-ii] = 0.0 ; dun = 1 ; 00174 break ; 00175 default: 00176 case DSHIFT_MODE_STOP: 00177 if( ix < 0 ) ix = 0 ; 00178 else if( ix > dsx ) ix = dsx ; 00179 break ; 00180 case DSHIFT_MODE_WRAP: 00181 while( ix < 0 ) ix += (dsx+1) ; 00182 while( ix > dsx ) ix -= (dsx+1) ; 00183 break ; 00184 } 00185 } 00186 if( dun ){ dun=0; continue; } /* go to next jj */ 00187 00188 jy += jd ; /* y shift */ 00189 if( jy < 0 || jy > dsy ){ 00190 switch( mode ){ 00191 case DSHIFT_MODE_ZERO: 00192 atoz[ids][jj-ii] = 0.0 ; dun = 1 ; 00193 break ; 00194 default: 00195 case DSHIFT_MODE_STOP: 00196 if( jy < 0 ) jy = 0 ; 00197 else if( jy > dsy ) jy = dsy ; 00198 break ; 00199 case DSHIFT_MODE_WRAP: 00200 while( jy < 0 ) jy += (dsy+1) ; 00201 while( jy > dsy ) jy -= (dsy+1) ; 00202 break ; 00203 } 00204 } 00205 if( dun ){ dun=0; continue; } /* go to next jj */ 00206 00207 kz += kd ; /* z shift */ 00208 if( kz < 0 || kz > dsz ){ 00209 switch( mode ){ 00210 case DSHIFT_MODE_ZERO: 00211 atoz[ids][jj-ii] = 0.0 ; dun = 1 ; 00212 break ; 00213 default: 00214 case DSHIFT_MODE_STOP: 00215 if( kz < 0 ) kz = 0 ; 00216 else if( kz > dsz ) kz = dsz ; 00217 break ; 00218 case DSHIFT_MODE_WRAP: 00219 while( kz < 0 ) kz += (dsz+1) ; 00220 while( kz > dsz ) kz -= (dsz+1) ; 00221 break ; 00222 } 00223 } 00224 if( dun ){ dun=0; continue; } /* go to next jj */ 00225 00226 jjs = DSET_ixyz_to_index(CALC_dset[jds],ix,jy,kz) ; 00227 } 00228 switch( CALC_type[jds] ) { 00229 case MRI_short: 00230 atoz[ids][jj-ii] = CALC_short[jds][jjs] 00231 * CALC_ffac[jds]; 00232 break ; 00233 case MRI_float: 00234 atoz[ids][jj-ii] = CALC_float[jds][jjs] 00235 * CALC_ffac[jds]; 00236 break ; 00237 case MRI_byte: 00238 atoz[ids][jj-ii] = CALC_byte[jds][jjs] 00239 * CALC_ffac[jds]; 00240 break ; 00241 } 00242 } 00243 } 00244 00245 /* the case of a 3D dataset (i.e., only 1 sub-brick) */ 00246 00247 else if ( CALC_type[ids] >= 0 ) { 00248 switch( CALC_type[ids] ) { 00249 case MRI_short: 00250 for (jj =jbot ; jj < jtop ; jj ++ ){ 00251 atoz[ids][jj-ii] = CALC_short[ids][jj] * CALC_ffac[ids] ; 00252 } 00253 break; 00254 00255 case MRI_float: 00256 for (jj =jbot ; jj < jtop ; jj ++ ){ 00257 atoz[ids][jj-ii] = CALC_float[ids][jj] * CALC_ffac[ids] ; 00258 } 00259 break; 00260 00261 case MRI_byte: 00262 for (jj =jbot ; jj < jtop ; jj ++ ){ 00263 atoz[ids][jj-ii] = CALC_byte[ids][jj] * CALC_ffac[ids] ; 00264 } 00265 break; 00266 } 00267 } 00268 00269 /* the case of a voxel (x,y,z) or (i,j,k) coordinate */ 00270 00271 else if( CALC_has_predefined ) { 00272 00273 switch( ids ){ 00274 case 23: /* x */ 00275 if( HAS_X ) 00276 for( jj=jbot ; jj < jtop ; jj++ ) 00277 atoz[ids][jj-ii] = daxes->xxorg + 00278 (jj%nx) * daxes->xxdel ; 00279 break ; 00280 00281 case 24: /* y */ 00282 if( HAS_Y ) 00283 for( jj=jbot ; jj < jtop ; jj++ ) 00284 atoz[ids][jj-ii] = daxes->yyorg + 00285 ((jj%nxy)/nx) * daxes->yydel ; 00286 break ; 00287 00288 case 25: /* z */ 00289 if( HAS_Z ) 00290 for( jj=jbot ; jj < jtop ; jj++ ) 00291 atoz[ids][jj-ii] = daxes->zzorg + 00292 (jj/nxy) * daxes->zzdel ; 00293 break ; 00294 00295 case 8: /* i */ 00296 if( HAS_I ) 00297 for( jj=jbot ; jj < jtop ; jj++ ) 00298 atoz[ids][jj-ii] = (jj%nx) ; 00299 break ; 00300 00301 case 9: /* j */ 00302 if( HAS_J ) 00303 for( jj=jbot ; jj < jtop ; jj++ ) 00304 atoz[ids][jj-ii] = ((jj%nxy)/nx) ; 00305 break ; 00306 00307 case 10: /* k */ 00308 if( HAS_K ) 00309 for( jj=jbot ; jj < jtop ; jj++ ) 00310 atoz[ids][jj-ii] = (jj/nxy) ; 00311 break ; 00312 00313 } /* end of switch on symbol subscript */ 00314 00315 } /* end of choice over data type (if-else cascade) */ 00316 } /* end of loop over datasets/symbols */ 00317 00318 /**** actually do the work! ****/ 00319 00320 PARSER_evaluate_vector(CALC_code, atoz, jtop-jbot, temp); 00321 for ( jj = jbot ; jj < jtop ; jj ++ ) 00322 bmask[jj] = (temp[jj-ii] != 0.0) ; 00323 00324 } /* end of loop over space (voxels) */ 00325 00326 /* cleanup and go home */ 00327 00328 for( ids=0 ; ids < 26 ; ids++ ){ 00329 free(atoz[ids]) ; 00330 if( CALC_dset[ids] != NULL ) DSET_delete( CALC_dset[ids] ) ; 00331 } 00332 DSET_delete(new_dset) ; 00333 free(CALC_code) ; 00334 00335 if( nxyz != NULL ) *nxyz = CALC_nvox ; 00336 RETURN( bmask ); 00337 } |
|
Definition at line 25 of file edt_buildmask.c. References ADDTO_CLUSTER, ENTRY, idx, INIT_CLUSTER, KILL_CLUSTER, MCW_cluster::num_pt, nz, and RETURN. Referenced by EDIT_aver_fvol(), EDIT_filter_volume(), HISTO_main(), MCW_erode_clusters(), MCW_find_clusters(), mri_medianfilter(), NIH_find_clusters(), RCREND_cutout_blobs(), REND_cutout_blobs(), TT_whereami(), and WINsorize().
00028 { 00029 int ii, jj, kk, idx, jdy, kdz, nxy, nxyz, ijkma, mnum; 00030 float xq, yq, zq, dist_q; 00031 MCW_cluster * mask; 00032 00033 ENTRY("MCW_build_mask") ; 00034 00035 if( max_dist <= 0.0 ){ /* 30 Apr 2002 */ 00036 dx = dy = dz = 1.0 ; max_dist = 1.01 ; 00037 } 00038 00039 idx = max_dist / dx ; jdy = max_dist / dy ; kdz = max_dist / dz ; 00040 00041 #ifdef CLUST_DEBUG 00042 printf("MCW_find_clusters: idx=%d jdy=%d kdz=%d\n",idx,jdy,kdz) ; 00043 #endif 00044 00045 if( (idx < 1 && jdy < 1 && kdz < 1) || (idx < 0 || jdy < 0 || kdz < 0 ) ){ 00046 fprintf(stderr,"*** Illegal dimensions input to MCW_build_mask:\n" 00047 "*** dx=%g dy=%g dz=%g max_dist=%g\n", 00048 dx,dy,dz,max_dist ) ; 00049 RETURN( NULL ); 00050 } 00051 00052 INIT_CLUSTER(mask) ; 00053 00054 dist_q = max_dist * max_dist ; 00055 nxy = nx*ny ; nxyz = nxy * nz ; 00056 00057 for( kk=-kdz ; kk <= kdz ; kk++ ){ 00058 zq = (kk*dz) * (kk*dz) ; 00059 for( jj=-jdy ; jj <= jdy ; jj++ ){ 00060 yq = zq + (jj*dy) * (jj*dy) ; 00061 for( ii=-idx ; ii <= idx ; ii++ ){ 00062 xq = yq + (ii*dx)*(ii*dx) ; 00063 if( xq <= dist_q && xq > 0.0 ){ 00064 ADDTO_CLUSTER( mask , ii, jj, kk, 0 ) ; 00065 } 00066 } 00067 } 00068 } 00069 00070 #ifdef CLUST_DEBUG 00071 printf(" mask size = %d\n",mask->num_pt ) ; 00072 #endif 00073 00074 mnum = mask->num_pt ; 00075 if( mnum < 2 ){ 00076 KILL_CLUSTER(mask) ; 00077 fprintf(stderr, 00078 "*** MCW_build_mask error: mask has only %d elements!\n",mnum); 00079 RETURN( NULL ); 00080 } 00081 00082 RETURN (mask); 00083 } |
|
Definition at line 200 of file edt_clust.c. References ENTRY, fim, MCW_cluster::i, MCW_cluster::j, MCW_cluster::k, MCW_cluster::mag, MCW_cluster::num_pt, nz, and THREE_TO_IJK. Referenced by EDIT_one_dataset(), main(), RCREND_reload_func_dset(), and REND_reload_func_dset().
00202 { 00203 int icl, ijk ; 00204 int nxy ; 00205 short * sfar ; 00206 float * ffar ; 00207 byte * bfar ; 00208 00209 ENTRY("MCW_cluster_to_vol") ; 00210 00211 if( fim == NULL || clust == NULL ) EXRETURN ; 00212 00213 nxy = nx * ny; 00214 00215 switch( ftype ){ 00216 case MRI_short: 00217 sfar = (short *) fim ; 00218 for( icl=0 ; icl < clust->num_pt ; icl++ ) 00219 { 00220 ijk = THREE_TO_IJK (clust->i[icl], clust->j[icl], clust->k[icl], 00221 nx, nxy); 00222 sfar[ijk] = clust->mag[icl] ; 00223 } 00224 EXRETURN ; 00225 00226 case MRI_byte: 00227 bfar = (byte *) fim ; 00228 for( icl=0 ; icl < clust->num_pt ; icl++ ) 00229 { 00230 ijk = THREE_TO_IJK (clust->i[icl], clust->j[icl], clust->k[icl], 00231 nx, nxy); 00232 bfar[ijk] = clust->mag[icl] ; 00233 } 00234 EXRETURN ; 00235 00236 case MRI_float: 00237 ffar = (float *) fim ; 00238 for( icl=0 ; icl < clust->num_pt ; icl++ ) 00239 { 00240 ijk = THREE_TO_IJK (clust->i[icl], clust->j[icl], clust->k[icl], 00241 nx, nxy); 00242 ffar[ijk] = clust->mag[icl] ; 00243 } 00244 EXRETURN ; 00245 } 00246 00247 EXRETURN ; /* should not be reached */ 00248 } |
|
Definition at line 271 of file edt_clust.c. References ENTRY, fim, free, MCW_cluster::i, IJK_TO_THREE, MCW_cluster::j, MCW_cluster::k, KILL_CLUSTER, malloc, MCW_build_mask(), MCW_cluster::num_pt, nz, and THREE_TO_IJK. Referenced by EDIT_one_dataset().
00282 { 00283 MCW_cluster * mask = NULL; /* mask determines nbhd membership */ 00284 int minimum; /* minimum number of voxels in nbhd */ 00285 int count; /* count of voxels in neighborhood */ 00286 int nxy, nxyz; /* numbers of voxels */ 00287 int ijk, iv, jv, kv; /* voxel indices */ 00288 int ijkm, im, jm, km; /* voxel indices */ 00289 int imask, nmask; /* mask indices */ 00290 short * sfar; /* pointer to short data */ 00291 byte * bfar; /* pointer to byte data */ 00292 float * ffar; /* pointer to float data */ 00293 float * efim = NULL; /* copy of eroded voxels */ 00294 00295 ENTRY("MCW_erode_clusters") ; 00296 00297 00298 /*----- Just in case -----*/ 00299 if ( fim == NULL ) EXRETURN; 00300 00301 00302 /*----- Initialize local variables -----*/ 00303 nxy = nx * ny; nxyz = nxy * nz; 00304 00305 00306 /*----- Set pointer to input data -----*/ 00307 switch (ftype) 00308 { 00309 default: EXRETURN; 00310 case MRI_short: sfar = (short *) fim; break; 00311 case MRI_byte : bfar = (byte *) fim; break; 00312 case MRI_float: ffar = (float *) fim; break; 00313 } 00314 00315 00316 /*----- Initialization for copy of eroded voxels -----*/ 00317 efim = (float *) malloc (sizeof(float) * nxyz); 00318 if (efim == NULL) 00319 { 00320 fprintf (stderr, "Unable to allocate memory in MCW_erode_clusters"); 00321 EXRETURN; 00322 } 00323 for (ijk = 0; ijk < nxyz; ijk++) 00324 efim[ijk] = 0.0; 00325 00326 00327 /*--- Make a cluster that is a mask of points closer than max_dist ---*/ 00328 mask = MCW_build_mask (nx, ny, nz, dx, dy, dz, max_dist); 00329 if (mask == NULL) 00330 { 00331 fprintf (stderr, "Unable to build mask in MCW_erode_clusters"); 00332 EXRETURN; 00333 } 00334 00335 00336 /*----- Calculate minimum number of voxels in nbhd. for non-erosion -----*/ 00337 nmask = mask->num_pt ; 00338 minimum = floor(pv*nmask + 0.99); 00339 if (minimum <= 0) EXRETURN; /*----- Nothing will be eroded -----*/ 00340 00341 00342 /*----- Step 1: Identify voxels to be eroded -----*/ 00343 switch (ftype) 00344 { 00345 case MRI_short: 00346 for (ijk = 0; ijk < nxyz; ijk++) 00347 { 00348 if (sfar[ijk] == 0) continue; 00349 IJK_TO_THREE (ijk, iv, jv, kv, nx, nxy); 00350 00351 /*----- Count number of active voxels in the neighborhood -----*/ 00352 count = 0; 00353 for (imask = 0; imask < nmask; imask++) 00354 { 00355 im = iv + mask->i[imask]; 00356 jm = jv + mask->j[imask]; 00357 km = kv + mask->k[imask]; 00358 if ( im < 0 || jm < 0 || km < 0 || 00359 im >= nx || jm >= ny || km >= nz ) continue; 00360 ijkm = THREE_TO_IJK (im, jm, km, nx, nxy); 00361 if (sfar[ijkm] != 0) count++; 00362 } 00363 00364 /*----- Record voxel to be eroded -----*/ 00365 if (count < minimum) efim[ijk] = (float) sfar[ijk]; 00366 } 00367 break; 00368 00369 case MRI_byte: 00370 for (ijk = 0; ijk < nxyz; ijk++) 00371 { 00372 if (bfar[ijk] == 0) continue; 00373 IJK_TO_THREE (ijk, iv, jv, kv, nx, nxy); 00374 00375 /*----- Count number of active voxels in the neighborhood -----*/ 00376 count = 0; 00377 for (imask = 0; imask < nmask; imask++) 00378 { 00379 im = iv + mask->i[imask]; 00380 jm = jv + mask->j[imask]; 00381 km = kv + mask->k[imask]; 00382 if ( im < 0 || jm < 0 || km < 0 || 00383 im >= nx || jm >= ny || km >= nz ) continue; 00384 ijkm = THREE_TO_IJK (im, jm, km, nx, nxy); 00385 if (bfar[ijkm] != 0) count++; 00386 } 00387 00388 /*----- Record voxel to be eroded -----*/ 00389 if (count < minimum) efim[ijk] = (float) bfar[ijk]; 00390 } 00391 break; 00392 00393 case MRI_float: 00394 for (ijk = 0; ijk < nxyz; ijk++) 00395 { 00396 if (ffar[ijk] == 0.0) continue; 00397 IJK_TO_THREE (ijk, iv, jv, kv, nx, nxy); 00398 00399 /*----- Count number of active voxels in the neighborhood -----*/ 00400 count = 0; 00401 for (imask = 0; imask < nmask; imask++) 00402 { 00403 im = iv + mask->i[imask]; 00404 jm = jv + mask->j[imask]; 00405 km = kv + mask->k[imask]; 00406 if ( im < 0 || jm < 0 || km < 0 || 00407 im >= nx || jm >= ny || km >= nz ) continue; 00408 ijkm = THREE_TO_IJK (im, jm, km, nx, nxy); 00409 if (ffar[ijkm] != 0.0) count++; 00410 } 00411 00412 /*----- Record voxel to be eroded -----*/ 00413 if (count < minimum) efim[ijk] = ffar[ijk]; 00414 } 00415 break; 00416 00417 } 00418 00419 00420 /*----- Step 2: Erode voxels -----*/ 00421 switch (ftype) 00422 { 00423 case MRI_short: 00424 for (ijk = 0; ijk < nxyz; ijk++) 00425 if (efim[ijk] != 0.0) sfar[ijk] = 0; 00426 break; 00427 00428 case MRI_byte: 00429 for (ijk = 0; ijk < nxyz; ijk++) 00430 if (efim[ijk] != 0.0) bfar[ijk] = 0; 00431 break; 00432 00433 case MRI_float: 00434 for (ijk = 0; ijk < nxyz; ijk++) 00435 if (efim[ijk] != 0.0) ffar[ijk] = 0.0; 00436 break; 00437 } 00438 00439 00440 /*----- Proceed with dilation phase? -----*/ 00441 if (dilate) 00442 { 00443 00444 00445 /*----- Step 3: Identify voxels to be restored -----*/ 00446 switch (ftype) 00447 { 00448 case MRI_short: 00449 for (ijk = 0; ijk < nxyz; ijk++) 00450 { 00451 if (efim[ijk] == 0.0) continue; 00452 IJK_TO_THREE (ijk, iv, jv, kv, nx, nxy); 00453 00454 /*---- Determine if any active voxels in the neighborhood ----*/ 00455 for (imask = 0; imask < nmask; imask++) 00456 { 00457 im = iv + mask->i[imask]; 00458 jm = jv + mask->j[imask]; 00459 km = kv + mask->k[imask]; 00460 if ( im < 0 || jm < 0 || km < 0 || 00461 im >= nx || jm >= ny || km >= nz ) continue; 00462 ijkm = THREE_TO_IJK (im, jm, km, nx, nxy); 00463 if (sfar[ijkm] != 0) break; 00464 } 00465 00466 /*----- Reset voxel not to be restored -----*/ 00467 if (imask == nmask) efim[ijk] = 0.0; 00468 } 00469 break; 00470 00471 case MRI_byte: 00472 for (ijk = 0; ijk < nxyz; ijk++) 00473 { 00474 if (efim[ijk] == 0.0) continue; 00475 IJK_TO_THREE (ijk, iv, jv, kv, nx, nxy); 00476 00477 /*---- Determine if any active voxels in the neighborhood ----*/ 00478 for (imask = 0; imask < nmask; imask++) 00479 { 00480 im = iv + mask->i[imask]; 00481 jm = jv + mask->j[imask]; 00482 km = kv + mask->k[imask]; 00483 if ( im < 0 || jm < 0 || km < 0 || 00484 im >= nx || jm >= ny || km >= nz ) continue; 00485 ijkm = THREE_TO_IJK (im, jm, km, nx, nxy); 00486 if (bfar[ijkm] != 0) break; 00487 } 00488 00489 /*----- Reset voxel not to be restored -----*/ 00490 if (imask == nmask) efim[ijk] = 0.0; 00491 } 00492 break; 00493 00494 case MRI_float: 00495 for (ijk = 0; ijk < nxyz; ijk++) 00496 { 00497 if (efim[ijk] == 0.0) continue; 00498 IJK_TO_THREE (ijk, iv, jv, kv, nx, nxy); 00499 00500 /*---- Determine if any active voxels in the neighborhood ----*/ 00501 for (imask = 0; imask < nmask; imask++) 00502 { 00503 im = iv + mask->i[imask]; 00504 jm = jv + mask->j[imask]; 00505 km = kv + mask->k[imask]; 00506 if ( im < 0 || jm < 0 || km < 0 || 00507 im >= nx || jm >= ny || km >= nz ) continue; 00508 ijkm = THREE_TO_IJK (im, jm, km, nx, nxy); 00509 if (ffar[ijkm] != 0.0) break; 00510 } 00511 00512 /*----- Reset voxel not to be restored -----*/ 00513 if (imask == nmask) efim[ijk] = 0.0; 00514 } 00515 break; 00516 } 00517 00518 00519 /*----- Step 4: Restore voxels -----*/ 00520 switch (ftype) 00521 { 00522 case MRI_short: 00523 for (ijk = 0; ijk < nxyz; ijk++) 00524 if (efim[ijk] != 0.0) sfar[ijk] = (short) efim[ijk]; 00525 break; 00526 00527 case MRI_byte: 00528 for (ijk = 0; ijk < nxyz; ijk++) 00529 if (efim[ijk] != 0.0) bfar[ijk] = (byte) efim[ijk]; 00530 break; 00531 00532 case MRI_float: 00533 for (ijk = 0; ijk < nxyz; ijk++) 00534 if (efim[ijk] != 0.0) ffar[ijk] = efim[ijk]; 00535 break; 00536 } 00537 00538 } /* if (dilate) */ 00539 00540 00541 /*----- Release memory -----*/ 00542 KILL_CLUSTER(mask) ; 00543 free (efim); efim = NULL; 00544 EXRETURN ; 00545 } |
|
Definition at line 23 of file edt_clust.c. References ADDTO_CLARR, ADDTO_CLUSTER, DESTROY_CLARR, ENTRY, fim, MCW_cluster::i, IJK_TO_THREE, INIT_CLARR, INIT_CLUSTER, MCW_cluster::j, MCW_cluster::k, KILL_CLUSTER, MCW_build_mask(), MCW_cluster_array::num_clu, MCW_cluster::num_pt, nz, RETURN, and THREE_TO_IJK. Referenced by EDIT_one_dataset(), identify_clusters(), main(), NIH_find_clusters(), RCREND_reload_func_dset(), REND_reload_func_dset(), and ROIPLOT_main().
00028 { 00029 MCW_cluster_array * clust_arr ; 00030 MCW_cluster * clust , * mask ; 00031 int ii,jj,kk , nxy,nxyz , ijk , ijk_last , mnum ; 00032 int icl , jma , ijkcl , ijkma , did_one ; 00033 float fimv ; 00034 short * sfar ; 00035 float * ffar ; 00036 byte * bfar ; 00037 short ic, jc, kc; 00038 short im, jm, km; 00039 00040 ENTRY("MCW_find_clusters") ; 00041 00042 if( fim == NULL ) RETURN(NULL) ; 00043 00044 switch( ftype ){ 00045 default: RETURN(NULL) ; 00046 case MRI_short: sfar = (short *) fim ; break ; 00047 case MRI_byte : bfar = (byte *) fim ; break ; 00048 case MRI_float: ffar = (float *) fim ; break ; 00049 } 00050 00051 /*--- make a cluster that is a mask of points closer than max_dist ---*/ 00052 00053 mask = MCW_build_mask (nx, ny, nz, dx, dy, dz, max_dist); 00054 if (mask == NULL) 00055 { 00056 fprintf (stderr, "Unable to build mask in MCW_find_clusters"); 00057 RETURN(NULL) ; 00058 } 00059 00060 nxy = nx*ny ; nxyz = nxy * nz ; 00061 00062 mnum = mask->num_pt ; 00063 00064 00065 /*--- scan through array, find nonzero point, build a cluster, ... ---*/ 00066 00067 INIT_CLARR(clust_arr) ; 00068 00069 ijk_last = 0 ; 00070 do { 00071 switch( ftype ){ 00072 case MRI_short: 00073 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) if( sfar[ijk] != 0 ) break ; 00074 if( ijk < nxyz ){ 00075 fimv = sfar[ijk] ; sfar[ijk] = 0 ; /* save found point */ 00076 } 00077 break ; 00078 00079 case MRI_byte: 00080 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) if( bfar[ijk] != 0 ) break ; 00081 if( ijk < nxyz ){ 00082 fimv = bfar[ijk] ; bfar[ijk] = 0 ; /* save found point */ 00083 } 00084 break ; 00085 00086 case MRI_float: 00087 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) if( ffar[ijk] != 0.0 ) break ; 00088 if( ijk < nxyz ){ 00089 fimv = ffar[ijk] ; ffar[ijk] = 0.0 ; /* save found point */ 00090 } 00091 break ; 00092 } 00093 if( ijk == nxyz ) break ; /* didn't find any! */ 00094 00095 #ifdef CLUST_DEBUG 00096 printf(" starting cluster at ijk=%d\n",ijk) ; 00097 #endif 00098 00099 ijk_last = ijk+1 ; /* start here next time */ 00100 00101 INIT_CLUSTER(clust) ; /* make a new cluster */ 00102 IJK_TO_THREE(ijk,ic,jc,kc,nx,nxy) ; 00103 ADDTO_CLUSTER( clust , ic, jc, kc, fimv ) ; /* start it off */ 00104 00105 /*-- 00106 for each point in cluster: 00107 check points offset by the mask for nonzero entries in fim 00108 enter those into cluster 00109 continue until end of cluster is reached 00110 (note that cluster is expanding as we progress) 00111 --*/ 00112 00113 switch( ftype ){ 00114 case MRI_short: 00115 for( icl=0 ; icl < clust->num_pt ; icl++ ){ 00116 ic = clust->i[icl]; 00117 jc = clust->j[icl]; 00118 kc = clust->k[icl]; 00119 00120 for( jma=0 ; jma < mnum ; jma++ ){ 00121 im = ic + mask->i[jma]; 00122 jm = jc + mask->j[jma]; 00123 km = kc + mask->k[jma]; 00124 if( im < 0 || im >= nx || 00125 jm < 0 || jm >= ny || km < 0 || km >= nz ) continue ; 00126 00127 ijkma = THREE_TO_IJK (im, jm, km, nx, nxy); 00128 if( ijkma < ijk_last || ijkma >= nxyz || sfar[ijkma] == 0 ) continue ; 00129 00130 ADDTO_CLUSTER( clust , im, jm, km, sfar[ijkma] ) ; 00131 sfar[ijkma] = 0 ; 00132 } 00133 } 00134 break ; 00135 00136 case MRI_byte: 00137 for( icl=0 ; icl < clust->num_pt ; icl++ ){ 00138 ic = clust->i[icl]; 00139 jc = clust->j[icl]; 00140 kc = clust->k[icl]; 00141 00142 for( jma=0 ; jma < mnum ; jma++ ){ 00143 im = ic + mask->i[jma]; 00144 jm = jc + mask->j[jma]; 00145 km = kc + mask->k[jma]; 00146 if( im < 0 || im >= nx || 00147 jm < 0 || jm >= ny || km < 0 || km >= nz ) continue ; 00148 00149 ijkma = THREE_TO_IJK (im, jm, km, nx, nxy); 00150 if( ijkma < ijk_last || ijkma >= nxyz || bfar[ijkma] == 0 ) continue ; 00151 00152 ADDTO_CLUSTER( clust , im, jm, km, bfar[ijkma] ) ; 00153 bfar[ijkma] = 0 ; 00154 } 00155 } 00156 break ; 00157 00158 case MRI_float: 00159 for( icl=0 ; icl < clust->num_pt ; icl++ ){ 00160 ic = clust->i[icl]; 00161 jc = clust->j[icl]; 00162 kc = clust->k[icl]; 00163 00164 for( jma=0 ; jma < mnum ; jma++ ){ 00165 im = ic + mask->i[jma]; 00166 jm = jc + mask->j[jma]; 00167 km = kc + mask->k[jma]; 00168 if( im < 0 || im >= nx || 00169 jm < 0 || jm >= ny || km < 0 || km >= nz ) continue ; 00170 00171 ijkma = THREE_TO_IJK (im, jm, km, nx, nxy); 00172 if( ijkma < ijk_last || ijkma >= nxyz || ffar[ijkma] == 0.0 ) continue ; 00173 00174 ADDTO_CLUSTER( clust , im, jm, km, ffar[ijkma] ) ; 00175 ffar[ijkma] = 0.0 ; 00176 } 00177 } 00178 break ; 00179 } 00180 00181 ADDTO_CLARR(clust_arr,clust) ; 00182 } while( 1 ) ; 00183 00184 KILL_CLUSTER(mask) ; 00185 00186 if( clust_arr->num_clu <= 0 ){ DESTROY_CLARR(clust_arr) ; } 00187 00188 RETURN(clust_arr) ; 00189 } |
|
Definition at line 14 of file edt_scl2max.c. References abs, CSQR, ENTRY, fim, complex::i, nz, and complex::r. Referenced by EDIT_one_dataset().
00015 { 00016 register int nxyz = nx * ny * nz , ii ; 00017 register float fac ; 00018 00019 ENTRY("MCW_scale_to_max") ; 00020 00021 if( fim == NULL ) EXRETURN ; 00022 00023 switch( ftype ){ 00024 00025 case MRI_byte:{ 00026 register byte * bfar = (byte *) fim ; 00027 register byte max , val ; 00028 max = bfar[0] ; 00029 for( ii=1 ; ii < nxyz ; ii++ ){ 00030 val = bfar[ii] ; if( val > max ) max = val ; 00031 } 00032 if( max == 0 ) EXRETURN ; 00033 fac = 255.0 / max ; 00034 for( ii=0 ; ii < nxyz ; ii++ ) bfar[ii] *= fac ; 00035 } 00036 break ; 00037 00038 case MRI_short:{ 00039 register short * sfar = (short *) fim ; 00040 register short max , val ; 00041 max = abs(sfar[0]) ; 00042 for( ii=1 ; ii < nxyz ; ii++ ){ 00043 val = abs(sfar[ii]) ; if( val > max ) max = val ; 00044 } 00045 if( max == 0 ) EXRETURN ; 00046 fac = 10000.0 / max ; 00047 for( ii=0 ; ii < nxyz ; ii++ ) sfar[ii] *= fac ; 00048 } 00049 break ; 00050 00051 case MRI_float:{ 00052 register float * ffar = (float *) fim ; 00053 register float max , val ; 00054 max = fabs(ffar[0]) ; 00055 for( ii=1 ; ii < nxyz ; ii++ ){ 00056 val = fabs(ffar[ii]) ; if( val > max ) max = val ; 00057 } 00058 if( max == 0.0 ) EXRETURN ; 00059 fac = 10000.0 / max ; 00060 for( ii=0 ; ii < nxyz ; ii++ ) ffar[ii] *= fac ; 00061 } 00062 break ; 00063 00064 case MRI_complex:{ 00065 register complex * cfar = (complex *) fim ; 00066 register float max , val ; 00067 max = CSQR(cfar[0]) ; 00068 for( ii=1 ; ii < nxyz ; ii++ ){ 00069 val = CSQR(cfar[ii]) ; if( val > max ) max = val ; 00070 } 00071 if( max == 0.0 ) EXRETURN ; 00072 fac = 10000.0 / sqrt(max) ; 00073 for( ii=0 ; ii < nxyz ; ii++ ){ 00074 cfar[ii].r *= fac ; cfar[ii].i *= fac ; 00075 } 00076 } 00077 break ; 00078 } 00079 00080 EXRETURN ; 00081 } |
|
Definition at line 9 of file edt_sortmask.c. References ENTRY, free, short3::i, MCW_cluster::i, short3::j, MCW_cluster::j, short3::k, MCW_cluster::k, MCW_cluster::mag, malloc, MCW_cluster::num_pt, and qsort_floatstuff(). Referenced by TT_whereami().
00010 { 00011 int nn , ii ; 00012 float *aa ; 00013 short3 ** ss ; 00014 00015 ENTRY("MCW_sort_cluster") ; 00016 00017 if( cl == NULL || cl->num_pt < 2 ) EXRETURN ; 00018 00019 nn = cl->num_pt ; 00020 aa = (float * ) malloc(sizeof(float) *nn) ; 00021 ss = (short3 **) malloc(sizeof(short3 *)*nn) ; 00022 for( ii=0 ; ii < nn ; ii++ ){ 00023 aa[ii] = cl->mag[ii] ; 00024 ss[ii] = (short3 *) malloc(sizeof(short3)) ; 00025 ss[ii]->i = cl->i[ii] ; 00026 ss[ii]->j = cl->j[ii] ; 00027 ss[ii]->k = cl->k[ii] ; 00028 } 00029 00030 qsort_floatstuff( nn , aa , (void **) ss ) ; 00031 00032 for( ii=0 ; ii < nn ; ii++ ){ 00033 cl->mag[ii] = aa[ii] ; 00034 cl->i[ii] = ss[ii]->i ; 00035 cl->j[ii] = ss[ii]->j ; 00036 cl->k[ii] = ss[ii]->k ; 00037 free(ss[ii]) ; 00038 } 00039 00040 free(ss) ; free(aa) ; EXRETURN ; 00041 } |
|
Definition at line 11 of file edt_volamax.c. References abs, CSQR, ENTRY, fim, nz, and RETURN. Referenced by EDIT_coerce_autoscale(), EDIT_coerce_autoscale_new(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), mri_scalize(), POWER_main(), process_as_floats(), and s2v_nodes2volume().
00012 { 00013 register int nxyz = nx * ny * nz , ii ; 00014 00015 ENTRY("MCW_vol_amax") ; 00016 00017 if( fim == NULL ) RETURN( 0.0 ); 00018 00019 switch( ftype ){ 00020 00021 case MRI_byte:{ 00022 register byte * bfar = (byte *) fim ; 00023 register byte max , val ; 00024 max = bfar[0] ; 00025 for( ii=1 ; ii < nxyz ; ii++ ){ 00026 val = bfar[ii] ; if( val > max ) max = val ; 00027 } 00028 RETURN ((float) max) ; 00029 } 00030 break ; 00031 00032 case MRI_short:{ 00033 register short * sfar = (short *) fim ; 00034 register short max , val ; 00035 max = abs(sfar[0]) ; 00036 for( ii=1 ; ii < nxyz ; ii++ ){ 00037 val = abs(sfar[ii]) ; if( val > max ) max = val ; 00038 } 00039 RETURN ((float) max) ; 00040 } 00041 break ; 00042 00043 case MRI_float:{ 00044 register float * ffar = (float *) fim ; 00045 register float max , val ; 00046 max = fabs(ffar[0]) ; 00047 for( ii=1 ; ii < nxyz ; ii++ ){ 00048 val = fabs(ffar[ii]) ; if( val > max ) max = val ; 00049 } 00050 RETURN ((float) max) ; 00051 } 00052 break ; 00053 00054 case MRI_double:{ 00055 register double * dfar = (double *) fim ; 00056 register double max , val ; 00057 max = fabs(dfar[0]) ; 00058 for( ii=1 ; ii < nxyz ; ii++ ){ 00059 val = fabs(dfar[ii]) ; if( val > max ) max = val ; 00060 } 00061 RETURN ((float) max) ; 00062 } 00063 break ; 00064 00065 case MRI_complex:{ 00066 register complex * cfar = (complex *) fim ; 00067 register float max , val ; 00068 max = CSQR(cfar[0]) ; 00069 for( ii=1 ; ii < nxyz ; ii++ ){ 00070 val = CSQR(cfar[ii]) ; if( val > max ) max = val ; 00071 } 00072 RETURN( (float) sqrt(max) ); 00073 } 00074 break ; 00075 } 00076 RETURN( 0.0 ); 00077 } |
|
Modified MCW_find_clusters():
Definition at line 12 of file edt_clust2.c. References ADDTO_CLARR, ADDTO_CLUSTER, DESTROY_CLARR, ENTRY, fim, MCW_cluster::i, IJK_TO_THREE, INIT_CLARR, INIT_CLUSTER, ISOMERGE_MODE, ISOVALUE_MODE, MCW_cluster::j, MCW_cluster::k, KILL_CLUSTER, MCW_build_mask(), MCW_find_clusters(), MCW_cluster_array::num_clu, MCW_cluster::num_pt, nz, RETURN, and THREE_TO_IJK. Referenced by main().
00017 { 00018 MCW_cluster_array *clust_arr ; 00019 MCW_cluster *clust , *mask=NULL ; 00020 int ii,jj,kk , nxy,nxyz , ijk , ijk_last , mnum ; 00021 int icl , jma , ijkcl , ijkma , did_one ; 00022 float fimv ; 00023 short *sfar ; 00024 float *ffar ; 00025 byte *bfar ; 00026 short ic, jc, kc; 00027 short im, jm, km; 00028 00029 ENTRY("NIH_find_clusters") ; 00030 00031 if( fim == NULL ) RETURN(NULL) ; 00032 00033 switch( ftype ){ 00034 default: RETURN(NULL) ; 00035 case MRI_short: sfar = (short *) fim ; break ; 00036 case MRI_byte : bfar = (byte *) fim ; break ; 00037 case MRI_float: ffar = (float *) fim ; break ; 00038 } 00039 00040 /* default => use older code (in edt_clust.c) */ 00041 00042 if( mode <= 0 || mode > ISOMERGE_MODE ){ 00043 RETURN( MCW_find_clusters( nx,ny,nz , dx,dy,dz , 00044 ftype,fim , max_dist ) ) ; 00045 } 00046 00047 /*--- make a cluster that is a mask of points closer than max_dist ---*/ 00048 00049 if( mode == ISOVALUE_MODE ){ 00050 mask = MCW_build_mask (nx, ny, nz, dx, dy, dz, max_dist); 00051 if (mask == NULL) 00052 { 00053 fprintf(stderr, "Unable to build mask in NIH_find_clusters"); 00054 RETURN(NULL); 00055 } 00056 mnum = mask->num_pt ; 00057 } 00058 00059 nxy = nx*ny ; nxyz = nxy * nz ; 00060 00061 /*--- scan through array, find nonzero point, build a cluster, ... ---*/ 00062 00063 INIT_CLARR(clust_arr) ; 00064 00065 ijk_last = 0 ; 00066 do { 00067 00068 /* find nonzero point in 3D array, starting at ijk_last */ 00069 00070 switch( ftype ){ 00071 case MRI_short: 00072 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) if( sfar[ijk] != 0 ) break ; 00073 if( ijk < nxyz ){ 00074 fimv = sfar[ijk] ; sfar[ijk] = 0 ; /* save found point */ 00075 } 00076 break ; 00077 00078 case MRI_byte: 00079 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) if( bfar[ijk] != 0 ) break ; 00080 if( ijk < nxyz ){ 00081 fimv = bfar[ijk] ; bfar[ijk] = 0 ; /* save found point */ 00082 } 00083 break ; 00084 00085 case MRI_float: 00086 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) if( ffar[ijk] != 0.0 ) break ; 00087 if( ijk < nxyz ){ 00088 fimv = ffar[ijk] ; ffar[ijk] = 0.0 ; /* save found point */ 00089 } 00090 break ; 00091 } 00092 if( ijk == nxyz ) break ; /* didn't find any nonzero point! */ 00093 00094 ijk_last = ijk+1 ; /* start here next time */ 00095 00096 INIT_CLUSTER(clust) ; /* make a new cluster */ 00097 IJK_TO_THREE(ijk,ic,jc,kc,nx,nxy) ; /* find 3D index */ 00098 ADDTO_CLUSTER( clust , ic, jc, kc, fimv ) ; /* start cluster off */ 00099 00100 switch( mode ){ 00101 00102 case ISOVALUE_MODE:{ /* for each point in cluster: 00103 check points offset by mask for nonzero entries in fim 00104 enter those into cluster 00105 continue until end of cluster is reached 00106 (note that cluster is expanding as we progress) */ 00107 00108 switch( ftype ){ 00109 case MRI_short: 00110 for( icl=0 ; icl < clust->num_pt ; icl++ ){ 00111 ic = clust->i[icl]; /* check around this point */ 00112 jc = clust->j[icl]; 00113 kc = clust->k[icl]; 00114 00115 for( jma=0 ; jma < mnum ; jma++ ){ 00116 im = ic + mask->i[jma]; /* offset by mask */ 00117 jm = jc + mask->j[jma]; 00118 km = kc + mask->k[jma]; 00119 if( im < 0 || im >= nx || 00120 jm < 0 || jm >= ny || km < 0 || km >= nz ) continue ; 00121 00122 ijkma = THREE_TO_IJK (im, jm, km, nx, nxy); 00123 if( ijkma < ijk_last || ijkma >= nxyz || sfar[ijkma] != fimv ) continue ; 00124 00125 ADDTO_CLUSTER( clust , im, jm, km, sfar[ijkma] ) ; 00126 sfar[ijkma] = 0 ; 00127 } 00128 } 00129 break ; 00130 00131 case MRI_byte: 00132 for( icl=0 ; icl < clust->num_pt ; icl++ ){ 00133 ic = clust->i[icl]; 00134 jc = clust->j[icl]; 00135 kc = clust->k[icl]; 00136 00137 for( jma=0 ; jma < mnum ; jma++ ){ 00138 im = ic + mask->i[jma]; 00139 jm = jc + mask->j[jma]; 00140 km = kc + mask->k[jma]; 00141 if( im < 0 || im >= nx || 00142 jm < 0 || jm >= ny || km < 0 || km >= nz ) continue ; 00143 00144 ijkma = THREE_TO_IJK (im, jm, km, nx, nxy); 00145 if( ijkma < ijk_last || ijkma >= nxyz || bfar[ijkma] != fimv ) continue ; 00146 00147 ADDTO_CLUSTER( clust , im, jm, km, bfar[ijkma] ) ; 00148 bfar[ijkma] = 0 ; 00149 } 00150 } 00151 break ; 00152 00153 case MRI_float: 00154 for( icl=0 ; icl < clust->num_pt ; icl++ ){ 00155 ic = clust->i[icl]; 00156 jc = clust->j[icl]; 00157 kc = clust->k[icl]; 00158 00159 for( jma=0 ; jma < mnum ; jma++ ){ 00160 im = ic + mask->i[jma]; 00161 jm = jc + mask->j[jma]; 00162 km = kc + mask->k[jma]; 00163 if( im < 0 || im >= nx || 00164 jm < 0 || jm >= ny || km < 0 || km >= nz ) continue ; 00165 00166 ijkma = THREE_TO_IJK (im, jm, km, nx, nxy); 00167 if( ijkma < ijk_last || ijkma >= nxyz || ffar[ijkma] != fimv ) continue ; 00168 00169 ADDTO_CLUSTER( clust , im, jm, km, ffar[ijkma] ) ; 00170 ffar[ijkma] = 0.0 ; 00171 } 00172 } 00173 break ; 00174 } /* end of switch on array type */ 00175 } 00176 break ; /* end of ISOVALUE_MODE */ 00177 00178 /*.................................*/ 00179 00180 case ISOMERGE_MODE:{ /* find other points with the same value */ 00181 00182 switch( ftype ){ 00183 case MRI_short: 00184 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) 00185 if( sfar[ijk] == fimv ){ 00186 IJK_TO_THREE(ijk,ic,jc,kc,nx,nxy) ; /* find 3D index */ 00187 ADDTO_CLUSTER( clust , ic, jc, kc, fimv ) ; /* start cluster off */ 00188 sfar[ijk] = 0 ; 00189 } 00190 break ; 00191 00192 case MRI_byte: 00193 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) 00194 if( bfar[ijk] == fimv ){ 00195 IJK_TO_THREE(ijk,ic,jc,kc,nx,nxy) ; /* find 3D index */ 00196 ADDTO_CLUSTER( clust , ic, jc, kc, fimv ) ; /* start cluster off */ 00197 bfar[ijk] = 0 ; 00198 } 00199 break ; 00200 00201 case MRI_float: 00202 for( ijk=ijk_last ; ijk < nxyz ; ijk++ ) 00203 if( ffar[ijk] == fimv ){ 00204 IJK_TO_THREE(ijk,ic,jc,kc,nx,nxy) ; /* find 3D index */ 00205 ADDTO_CLUSTER( clust , ic, jc, kc, fimv ) ; /* start cluster off */ 00206 ffar[ijk] = 0 ; 00207 } 00208 break ; 00209 } 00210 } 00211 break ; /* end of ISOMERGE_MODE */ 00212 00213 } 00214 00215 ADDTO_CLARR(clust_arr,clust) ; 00216 } while( 1 ) ; 00217 00218 if( mask != NULL ) KILL_CLUSTER(mask) ; 00219 00220 if( clust_arr->num_clu <= 0 ){ DESTROY_CLARR(clust_arr) ; } 00221 00222 RETURN(clust_arr) ; 00223 } |