Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

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_arrayMCW_find_clusters (int, int, int, float, float, float, int, void *, float)
MCW_cluster_arrayNIH_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_clusterMCW_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 *)
byteEDT_calcmask (char *, int *)
void * EDIT_volpad (int, int, int, int, int, int, int, int, int, int, void *)
THD_3dim_datasetEDIT_empty_copy (THD_3dim_dataset *)
THD_3dim_datasetEDIT_full_copy (THD_3dim_dataset *, char *)
int EDIT_dset_items (THD_3dim_dataset *,...)
THD_3dim_datasetEDIT_wod_copy (THD_3dim_dataset *)
THD_datablockEDIT_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

#define ADDTO_CLARR cl,
cc   
 

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)
Add a MCW_cluster to a MCW_cluster_array.

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().

#define ADDTO_CLUSTER cc,
ii,
jj,
kk,
m   
 

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)
Add point (ii,jj,kk) with magnitude mm to a MCW_cluster.

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().

#define ADN_anat_parent   6062
 

Definition at line 415 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_anatpar_idcode   6065
 

Definition at line 418 of file editvol.h.

Referenced by EDIT_dset_items().

#define ADN_brick_fac   6011
 

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().

#define ADN_brick_fac_one   (3*ADN_ONE_STEP)
 

Definition at line 423 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_brick_keywords_append_one   (6*ADN_ONE_STEP)
 

Definition at line 426 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_brick_keywords_replace_one   (5*ADN_ONE_STEP)
 

Definition at line 425 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_brick_label_one   (2*ADN_ONE_STEP)
 

Definition at line 422 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_brick_stataux_one   (4*ADN_ONE_STEP)
 

Definition at line 424 of file editvol.h.

Referenced by EDIT_dset_items(), EDIT_one_dataset(), and main().

#define ADN_datum_all   6013
 

Definition at line 378 of file editvol.h.

Referenced by AFNI_fimmer_compute(), AFNI_read_inputs(), basis_write_iresp(), basis_write_sresp(), COPY_main(), do_xrestore_stuff(), DRAW_copy_dset(), EDIT_dset_items(), fim3d_fimmer_compute(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), PERMTEST_main(), POWER_main(), RT_fim_recurse(), RT_start_dataset(), s2v_nodes2volume(), saveMask(), STAVG_main(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), THD_open_1D(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), THRESH_main(), write_3dtime(), write_bucket_data(), and write_ts_array().

#define ADN_datum_array   6014
 

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().

#define ADN_directory_name   6002
 

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().

#define ADN_dz_sl   6037
 

Definition at line 399 of file editvol.h.

Referenced by EDIT_dset_items(), RT_start_dataset(), and THD_open_nifti().

#define ADN_func_type   6053
 

Definition at line 407 of file editvol.h.

Referenced by AFNI_fimmer_compute(), AFNI_read_inputs(), applyMask(), COPY_main(), do_xrestore_stuff(), DRAW_copy_dset(), EDIT_dset_items(), EDIT_main(), EDIT_wod_copy(), fim3d_fimmer_compute(), form_clusters(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), output_results(), PERMTEST_main(), process_NIML_Node_ROI(), RT_fim_recurse(), RT_start_dataset(), s2v_nodes2volume(), saveMask(), 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_open_tcat(), THD_setup_mastery(), THD_warp3D(), THRESH_main(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_bucket(), write_bucket_data(), write_results(), and ZPAD_main().

#define ADN_keywords_append   6058
 

Definition at line 412 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_keywords_replace   6057
 

Definition at line 411 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_label1   6054
 

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().

#define ADN_label2   6055
 

Definition at line 409 of file editvol.h.

Referenced by EDIT_dset_items(), and main().

#define ADN_malloc_type   6012
 

Definition at line 377 of file editvol.h.

Referenced by AFNI_fimmer_compute(), AFNI_read_inputs(), basis_write_iresp(), basis_write_sresp(), do_xrestore_stuff(), EDIT_dset_items(), fim3d_fimmer_compute(), form_clusters(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), output_ts_array(), PERMTEST_main(), POWER_main(), REORDER_main(), RT_fim_recurse(), RT_start_dataset(), STAVG_main(), SUMA_BrainVoyager_Read_vmr(), 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(), THRESH_main(), write_3dtime(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_bucket(), write_bucket_data(), and write_ts_array().

#define ADN_none   0
 

---------------- AFNI Dataset item Names ----------------*

Definition at line 367 of file editvol.h.

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_dset_items(), 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().

#define ADN_nsl   6035
 

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().

#define ADN_ntt   6031
 

values in the timeaxis *

Definition at line 392 of file editvol.h.

Referenced by AFNI_fimmer_compute(), AFNI_read_images(), AFNI_read_inputs(), basis_write_iresp(), basis_write_sresp(), COPY_main(), do_xrestore_stuff(), EDIT_dset_items(), fim3d_fimmer_compute(), form_clusters(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), PERMTEST_main(), POWER_main(), process_NIML_Node_ROI(), REORDER_main(), RT_fim_recurse(), RT_process_image(), RT_registration_2D_onevol(), RT_registration_3D_onevol(), RT_start_dataset(), s2v_nodes2volume(), saveMask(), STAVG_main(), SUMA_FormAfnidset(), 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(), THRESH_main(), WINsorize(), write_3dtime(), write_afni_data(), write_bucket(), write_bucket_data(), write_results(), and write_ts_array().

#define ADN_nvals   6016
 

Definition at line 380 of file editvol.h.

Referenced by AFNI_fimmer_compute(), AFNI_read_inputs(), basis_write_iresp(), basis_write_sresp(), COPY_main(), do_xrestore_stuff(), EDIT_dset_items(), EDIT_main(), fim3d_fimmer_compute(), form_clusters(), 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(), REORDER_main(), RT_fim_recurse(), RT_start_dataset(), s2v_nodes2volume(), saveMask(), STAVG_main(), SUMA_FormAfnidset(), 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(), THRESH_main(), WINsorize(), write_3dtime(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_bucket(), write_bucket_data(), write_results(), and write_ts_array().

#define ADN_nxyz   6020
 

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().

#define ADN_ONE_STEP   100000
 

Definition at line 421 of file editvol.h.

Referenced by EDIT_dset_items().

#define ADN_prefix   6001
 

values in the diskptr *

Definition at line 371 of file editvol.h.

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(), do_xrestore_stuff(), DRAW_copy_dset(), DRAW_saveas_finalize_CB(), DUP_main(), EDIT_dset_items(), EDIT_full_copy(), EDIT_main(), 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_ts_array(), PERMTEST_main(), POWER_main(), process_NIML_Node_ROI(), r_new_resam_dset(), RENAME_main(), REORDER_main(), RT_fim_recurse(), RT_start_dataset(), saveMask(), STAVG_main(), SUMA_BrainVoyager_Read_vmr(), SUMA_FormAfnidset(), SUMA_OpenDX_Read_CruiseVolHead(), THD_dataset_headname(), THD_is_dataset(), THD_niml_to_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_output(), write_results(), and write_ts_array().

#define ADN_self_name   6056
 

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().

#define ADN_stat_aux   6063
 

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().

#define ADN_to_dicomm   6024
 

Definition at line 388 of file editvol.h.

Referenced by EDIT_dset_items().

#define ADN_toff_sl   6039
 

Definition at line 400 of file editvol.h.

Referenced by EDIT_dset_items(), RT_start_dataset(), THD_open_nifti(), and THD_zeropad().

#define ADN_ttdel   6033
 

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().

#define ADN_ttdur   6034
 

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().

#define ADN_ttorg   6032
 

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().

#define ADN_tunits   6040
 

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().

#define ADN_type   6051
 

values in the 3dim_dataset itself *

Definition at line 405 of file editvol.h.

Referenced by AFNI_fimmer_compute(), AFNI_read_inputs(), applyMask(), check_one_output_file(), check_output_file(), COPY_main(), do_xrestore_stuff(), DRAW_copy_dset(), EDIT_dset_items(), EDIT_wod_copy(), fim3d_fimmer_compute(), form_clusters(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), PERMTEST_main(), process_NIML_Node_ROI(), RT_fim_recurse(), RT_start_dataset(), s2v_nodes2volume(), saveMask(), 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(), THRESH_main(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_bucket(), write_bucket_data(), write_results(), and ZPAD_main().

#define ADN_view_type   6052
 

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().

#define ADN_warp   6064
 

Definition at line 417 of file editvol.h.

Referenced by DUP_main(), EDIT_dset_items(), EDIT_wod_copy(), and main().

#define ADN_warp_parent   6061
 

Definition at line 414 of file editvol.h.

Referenced by DUP_main(), EDIT_dset_items(), EDIT_wod_copy(), and main().

#define ADN_xyzdel   6021
 

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().

#define ADN_xyzorg   6022
 

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().

#define ADN_xyzorient   6023
 

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().

#define ADN_zorg_sl   6036
 

Definition at line 398 of file editvol.h.

Referenced by EDIT_dset_items(), RT_start_dataset(), THD_open_nifti(), and THD_zeropad().

#define CLUST_ORDERED c1,
c2       ( (c1)->num_pt >= (c2)->num_pt )
 

Determine if 2 MCW_cluster are ordered.

Definition at line 142 of file editvol.h.

#define CLUST_SWAP c1,
c2       (ct=(c1),(c1)=(c2),(c2)=ct,sss=1)
 

Swap 2 MCW_cluster.

Definition at line 146 of file editvol.h.

#define DBMALL n   
 

Definition at line 83 of file editvol.h.

#define DESTROY_CLARR cl   
 

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)
Delete a MCW_cluster_array (including all MCW_cluster inside).

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().

#define ECFLAG_AMAX   4
 

Definition at line 255 of file editvol.h.

Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts().

#define ECFLAG_MAX   3
 

Definition at line 254 of file editvol.h.

Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts().

#define ECFLAG_MEAN   2
 

Definition at line 253 of file editvol.h.

Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts().

#define ECFLAG_NONE   0
 

Definition at line 251 of file editvol.h.

#define ECFLAG_ORDER   7
 

Definition at line 258 of file editvol.h.

Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), EDIT_one_dataset(), and EDIT_opts().

#define ECFLAG_SAME   1
 

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().

#define ECFLAG_SIZE   6
 

Definition at line 257 of file editvol.h.

Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), EDIT_one_dataset(), and EDIT_opts().

#define ECFLAG_SMAX   5
 

Definition at line 256 of file editvol.h.

Referenced by CLUST_main(), EDIT_check_argv(), EDIT_cluster_array(), and EDIT_opts().

#define EDIT_BRICK_ADDKEY ds,
iv,
str       EDIT_dset_items( (ds), ADN_brick_keywords_append_one+(iv), (str), ADN_none )
 

Add a keyword to sub-brick iv of dataset ds.

Definition at line 526 of file editvol.h.

Referenced by DELAY_main().

#define EDIT_BRICK_FACTOR ds,
iv,
fac       EDIT_dset_items( (ds), ADN_brick_fac_one+(iv), (fac), ADN_none )
 

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().

#define EDIT_BRICK_LABEL ds,
iv,
str       EDIT_dset_items( (ds), ADN_brick_label_one+(iv), (str), ADN_none )
 

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().

#define EDIT_BRICK_TO_FIBN ds,
iv,
ntrial,
prob       EDIT_STATAUX4(ds,iv,FUNC_BN_TYPE,ntrial,prob,0,0)
 

Convert sub-brick iv of dataset ds to a fibn (binomial variable) statistic.

Definition at line 498 of file editvol.h.

#define EDIT_BRICK_TO_FIBT ds,
iv,
a,
b       EDIT_STATAUX4(ds,iv,FUNC_BT_TYPE,a,b,0,0)
 

Convert sub-brick iv of dataset ds to a fibt (beta variable) statistic.

Definition at line 493 of file editvol.h.

#define EDIT_BRICK_TO_FICO ds,
iv,
nsam,
nfit,
nort       EDIT_STATAUX4(ds,iv,FUNC_COR_TYPE,nsam,nfit,nort,0)
 

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().

#define EDIT_BRICK_TO_FICT ds,
iv,
ndof       EDIT_STATAUX4(ds,iv,FUNC_CT_TYPE,ndof,0,0,0)
 

Convert sub-brick iv of dataset ds to a fict (chi square) statistic.

Definition at line 488 of file editvol.h.

#define EDIT_BRICK_TO_FIFT ds,
iv,
ndof,
ddof       EDIT_STATAUX4(ds,iv,FUNC_FT_TYPE,ndof,ddof,0,0)
 

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().

#define EDIT_BRICK_TO_FIGT ds,
iv,
shape,
scale       EDIT_STATAUX4(ds,iv,FUNC_GT_TYPE,shape,scale,0,0)
 

Convert sub-brick iv of dataset ds to a figt (gamma variable) statistic.

Definition at line 503 of file editvol.h.

#define EDIT_BRICK_TO_FIPT ds,
iv,
mean       EDIT_STATAUX4(ds,iv,FUNC_PT_TYPE,mean,0,0,0)
 

Convert sub-brick iv of dataset ds to a fipt (Poisson variable) statistic.

Definition at line 508 of file editvol.h.

#define EDIT_BRICK_TO_FITT ds,
iv,
ndof       EDIT_STATAUX4(ds,iv,FUNC_TT_TYPE,ndof,0,0,0)
 

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().

#define EDIT_BRICK_TO_FIZT ds,
iv       EDIT_STATAUX4(ds,iv,FUNC_ZT_TYPE,0,0,0,0)
 

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().

#define EDIT_BRICK_TO_NOSTAT ds,
iv       EDIT_STATAUX4(ds,iv,FUNC_FIM_TYPE,0,0,0,0)
 

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().

#define EDIT_COPY_ANATOMY_PARENT_ID nds,
ods   
 

Value:

do{ if( ISVALID_DSET(nds) && ISVALID_DSET(ods) )              \
         (nds)->anat_parent_idcode = (ods)->anat_parent_idcode ; \
    } while(0)
Copy anat parent from old datasets ods to new dataset nds.

Definition at line 434 of file editvol.h.

Referenced by EDIT_empty_copy().

#define EDIT_STATAUX4 ds,
iv,
ft,
a,
b,
c,
 
 

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)
Change statistical parameters in dataset ds, sub-brick iv, to statistical type ft, with paramters a,b,c,d.

Definition at line 451 of file editvol.h.

Referenced by THD_open_3D(), and THD_open_nifti().

#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) )
 

Definition at line 339 of file editvol.h.

Referenced by THD_rota_vol(), and THD_rota_vol_matvec().

#define EDIT_ZERO_ANATOMY_PARENT_ID nds   
 

Value:

do{ if( ISVALID_DSET(nds) )                             \
         ZERO_IDCODE((nds)->anat_parent_idcode); } while(0)
Null out the anat parent of dataset nds.

Definition at line 441 of file editvol.h.

Referenced by main(), and THD_zeropad().

#define EDIT_zeropad   EDIT_volpad
 

Definition at line 337 of file editvol.h.

#define FCFLAG_AMAX   4
 

Definition at line 265 of file editvol.h.

Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts().

#define FCFLAG_AVER   66
 

Definition at line 268 of file editvol.h.

Referenced by EDIT_check_argv(), EDIT_filter_volume(), EDIT_opts(), and MRG_read_opts().

#define FCFLAG_EXPR   77
 

Definition at line 269 of file editvol.h.

Referenced by EDIT_filter_volume(), and MRG_read_opts().

#define FCFLAG_MAX   3
 

Definition at line 264 of file editvol.h.

Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts().

#define FCFLAG_MEAN   1
 

Definition at line 262 of file editvol.h.

Referenced by EDIT_check_argv(), EDIT_filter_volume(), EDIT_opts(), and MRG_read_opts().

#define FCFLAG_NONE   0
 

Definition at line 261 of file editvol.h.

Referenced by EDIT_one_dataset(), and SUMA_BlankAfniEditOptions().

#define FCFLAG_NZMEAN   2
 

Definition at line 263 of file editvol.h.

Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts().

#define FCFLAG_ONE_STEP   100000
 

Definition at line 271 of file editvol.h.

Referenced by EDIT_filter_volume(), and MRG_read_opts().

#define FCFLAG_SMAX   5
 

Definition at line 266 of file editvol.h.

Referenced by EDIT_check_argv(), EDIT_filter_volume(), and EDIT_opts().

#define FCFLAG_WINSOR   (2*FCFLAG_ONE_STEP)
 

Definition at line 272 of file editvol.h.

Referenced by EDIT_filter_volume(), and MRG_read_opts().

#define FWHM_TO_SIGMA fh       (0.42466090*(fh))
 

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().

#define IJK_TO_THREE ijk,
i,
j,
k,
nx,
nxy       ( (k) = (ijk)/(nxy) , (j)=((ijk)%(nxy))/(nx) , (i)=(ijk)%(nx) )
 

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().

#define INC_CLUSTER   8
 

Definition at line 32 of file editvol.h.

#define INIT_CLARR cl   
 

Value:

( (cl) = XtNew(MCW_cluster_array) , \
    (cl)->num_clu = (cl)->num_all = 0 , (cl)->clar = NULL )
Initialize a MCW_cluster_array.

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().

#define INIT_CLUSTER cc   
 

Value:

( (cc) = XtNew(MCW_cluster) ,        \
    (cc)->num_pt = (cc)->num_all = 0 , \
    (cc)->i = NULL , (cc)->j = NULL , (cc)->k = NULL ,(cc)->mag = NULL )
Initialize a MCW_cluster.

Definition at line 63 of file editvol.h.

Referenced by MCW_build_mask(), MCW_find_clusters(), and NIH_find_clusters().

#define INIT_EDOPT edopt   
 

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 )
Initialize an EDIT_options struct.

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().

#define ISOMERGE_MODE   2
 

Definition at line 103 of file editvol.h.

Referenced by CL_read_opts(), and NIH_find_clusters().

#define ISOVALUE_MODE   1
 

Definition at line 102 of file editvol.h.

Referenced by CL_read_opts(), and NIH_find_clusters().

#define KILL_CLUSTER cc   
 

Value:

do{ if( cc != NULL ){        \
         myXtFree((cc)->i) ;   \
         myXtFree((cc)->j) ;   \
         myXtFree((cc)->k) ;   \
         myXtFree((cc)->mag) ; \
         myXtFree((cc)) ;      \
         (cc) = NULL ;         \
      } break ; } while(0)
Delete an MCW_cluster.

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().

#define RMS_TO_SIGMA rms       (0.57735027*(rms))
 

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().

#define SORT_CLARR name   
 

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 ; }}
Bubble sort a MCW_cluster_array.

Definition at line 150 of file editvol.h.

Referenced by EDIT_cluster_array(), EDIT_one_dataset(), main(), and ROIPLOT_main().

#define THREE_TO_IJK i,
j,
k,
nx,
nxy       ((i)+(j)*(nx)+(k)*(nxy))
 

See also:
IJK_TO_THREE()

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

typedef struct EDIT_options EDIT_options
 

Data structure filled in EDIT_check_argv, and used to control EDIT_one_dataset (options applied in order given).

See also:
INIT_EDOPT()

Function Documentation

void EDIT_add_brick THD_3dim_dataset   dset,
int    typ,
float    fac,
void *    br
 

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 }

void EDIT_add_bricklist THD_3dim_dataset  ,
int   ,
int *   ,
float *   ,
void *    sbr[]
 

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 }

void EDIT_aver_fvol int   ,
int   ,
int   ,
float   ,
float   ,
float   ,
float *   ,
float   
 

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 }

void EDIT_blur_volume int   ,
int   ,
int   ,
float   ,
float   ,
float   ,
int   ,
void *   ,
float   
 

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 }

void EDIT_blur_volume_3d int   ,
int   ,
int   ,
float   ,
float   ,
float   ,
int   ,
void *   ,
float   ,
float   ,
float   
 

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 }

int EDIT_check_argv int   ,
char *    argv[],
int   ,
EDIT_options  
 

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 }

void EDIT_clip_float float   ,
int   ,
float *   
 

Definition at line 401 of file edt_coerce.c.

References ENTRY, and top.

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 }

void EDIT_cluster_array MCW_cluster_array  ,
int   ,
float   ,
float   
 

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 }

float EDIT_coerce_autoscale int   ,
int   ,
void *   ,
int   ,
void *   
 

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 }

void EDIT_coerce_scale_type int   ,
float   ,
int   ,
void *   ,
int   ,
void *   
 

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 }

void EDIT_coerce_type int   ,
int   ,
void *   ,
int   ,
void *   
 

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 }

int EDIT_dset_items THD_3dim_dataset  ,
...   
 

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 }

THD_3dim_dataset* EDIT_empty_copy THD_3dim_dataset  
 

----------------------- 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 }

THD_datablock* EDIT_empty_datablock void   
 

Create a simple empty datablock, to be filled in later.

Definition at line 208 of file edt_emptycopy.c.

References ADDTO_KILL, THD_datablock::atr, 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, THD_diskptr::byte_order, DATABLOCK_MEM_UNDEFINED, DATABLOCK_TYPE, DBLK_unlock, THD_diskptr::dimsizes, THD_datablock::diskptr, DISKPTR_TYPE, DUMMY_NAME, ENTRY, INIT_KILL, THD_datablock::kl, THD_datablock::malloc_type, THD_datablock::master_bot, THD_datablock::master_bytes, THD_datablock::master_ival, THD_datablock::master_nvals, THD_datablock::master_top, myXtNew, THD_datablock::natr, THD_datablock::natr_alloc, THD_datablock::nvals, THD_diskptr::nvals, THD_datablock::parent, THD_diskptr::rank, RETURN, THD_datablock::shm_idcode, THD_diskptr::storage_mode, STORAGE_UNDEFINED, THD_get_write_order(), THD_init_diskptr_names(), THD_null_datablock_auxdata, THD_datablock::total_bytes, THD_datablock::type, THD_diskptr::type, and VIEW_ORIGINAL_TYPE.

Referenced by THD_init_one_datablock(), and THD_niml_to_dataset().

00209 {
00210    THD_datablock *new_dblk ;
00211    THD_diskptr   *new_dkptr ;
00212 
00213 ENTRY("EDIT_empty_datablock") ;
00214 
00215    /** make some new places to store stuff **/
00216 
00217    new_dblk                 = myXtNew( THD_datablock ) ;
00218    new_dblk->type           = DATABLOCK_TYPE ;
00219    new_dblk->brick          = NULL ;
00220    new_dblk->brick_bytes    = NULL ;
00221    new_dblk->brick_fac      = NULL ;
00222    new_dblk->total_bytes    = 0    ;
00223    new_dblk->malloc_type    = DATABLOCK_MEM_UNDEFINED ;
00224    new_dblk->parent         = NULL ;
00225    new_dblk->brick_lab      = NULL ;
00226    new_dblk->brick_keywords = NULL ;
00227    new_dblk->brick_statcode = NULL ;
00228    new_dblk->brick_stataux  = NULL ;
00229    new_dblk->master_nvals   = 0    ; 
00230    new_dblk->master_ival    = NULL ;
00231    new_dblk->master_bytes   = NULL ;
00232    new_dblk->master_bot     = 1.0  ;
00233    new_dblk->master_top     = 0.0  ;
00234    new_dblk->shm_idcode[0]  = '\0' ;
00235    new_dblk->nvals          = 1 ;
00236    new_dblk->natr           = new_dblk->natr_alloc = 0 ;
00237    new_dblk->atr            = NULL ;
00238 
00239    new_dkptr = new_dblk->diskptr = myXtNew( THD_diskptr ) ;
00240 
00241    new_dkptr->type         = DISKPTR_TYPE ;
00242    new_dkptr->rank         = 3 ;
00243    new_dkptr->nvals        = 1 ;
00244    new_dkptr->storage_mode = STORAGE_UNDEFINED ;
00245    new_dkptr->byte_order   = THD_get_write_order() ;
00246    new_dkptr->dimsizes[0]  = 2 ;
00247    new_dkptr->dimsizes[1]  = 2 ;
00248    new_dkptr->dimsizes[2]  = 2 ;
00249 
00250    THD_init_diskptr_names( new_dkptr ,
00251                            "./" , NULL , DUMMY_NAME ,
00252                            VIEW_ORIGINAL_TYPE , True ) ;
00253 
00254    INIT_KILL(new_dblk->kl) ;
00255    ADDTO_KILL(new_dblk->kl,new_dkptr) ;
00256 
00257    DBLK_unlock(new_dblk) ;
00258    THD_null_datablock_auxdata( new_dblk ) ;
00259 
00260    RETURN( new_dblk ) ;
00261 }

void EDIT_filter_volume int   ,
int   ,
int   ,
float   ,
float   ,
float   ,
int   ,
void *   ,
int   ,
float   ,
byte  ,
char *   
 

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 }

THD_3dim_dataset* EDIT_full_copy THD_3dim_dataset  ,
char *   
 

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 }

void EDIT_one_dataset THD_3dim_dataset   dset,
EDIT_options   edopt
 

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 }

char* EDIT_options_help void   
 

Definition at line 157 of file edt_help.c.

References helpstring.

Referenced by MRG_Syntax().

00158 {
00159    return helpstring ;
00160 }

void EDIT_substitute_brick THD_3dim_dataset  ,
int   ,
int   ,
void *   
 

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 }

void* EDIT_volpad int   ,
int   ,
int   ,
int   ,
int   ,
int   ,
int   ,
int   ,
int   ,
int   ,
void *   
 

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 }

THD_3dim_dataset* EDIT_wod_copy THD_3dim_dataset   dset_in
 

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 }

void EDIT_zscore_vol int   ,
int   ,
float   ,
void *   ,
int   ,
float *   
 

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 }

byte* EDT_calcmask char *   ,
int *   
 

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 }

MCW_cluster* MCW_build_mask int   ,
int   ,
int   ,
float   ,
float   ,
float   ,
float   
 

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 }

void MCW_cluster_to_vol int   ,
int   ,
int   ,
int   ,
void *   ,
MCW_cluster  
 

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 }

void MCW_erode_clusters int   ,
int   ,
int   ,
float   ,
float   ,
float   ,
int   ,
void *   ,
float   ,
float   ,
int   
 

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 }

MCW_cluster_array* MCW_find_clusters int   ,
int   ,
int   ,
float   ,
float   ,
float   ,
int   ,
void *   ,
float   
 

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 }

void MCW_scale_to_max int   ,
int   ,
int   ,
int   ,
void *   
 

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 }

void MCW_sort_cluster MCW_cluster  
 

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 }

float MCW_vol_amax int   ,
int   ,
int   ,
int   ,
void *   
 

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 }

MCW_cluster_array* NIH_find_clusters int    nx,
int    ny,
int    nz,
float    dx,
float    dy,
float    dz,
int    ftype,
void *    fim,
float    max_dist,
int    mode
 

Modified MCW_find_clusters():

  • added mode variable
  • ISOVALUE_MODE => make clusters that are both contiguous and have the same numerical value
  • ISOMERGE_MODE => make clusters that have the same numerical value, regardless of contiguity ------------------------------------------------------------------

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 }
 

Powered by Plone

This site conforms to the following standards: