Doxygen Source Code Documentation
3dMax.c File Reference
#include "mrilib.h"
#include "thd_shear3d.h"
Go to the source code of this file.
Functions | |
void | Print_Header_MinMax (int Minflag, int Maxflag, THD_3dim_dataset *dset) |
void | Max_func (int Minflag, int Maxflag, int Meanflag, int Countflag, int Posflag,\int Negflag, int Zeroflag, THD_3dim_dataset *dset, byte *mmm, int mmvox) |
void | Max_tsfunc (double tzero, double tdelta, int npts, float ts[], double ts_mean, double ts_slope, void *ud, int nbriks, float *val) |
int | main (int argc, char *argv[]) |
void | Print_Header_MinMax (Minflag, Maxflag, dset) int Minflag |
Variables | |
int | datum = MRI_float |
float | minvalue = 1E10 |
float | maxvalue = -1E10 |
void | Maxflag |
THD_3dim_dataset * | dset |
byte * | mmm |
int | mmvox |
Function Documentation
|
compute the overall minimum and maximum voxel values for a dataset Definition at line 15 of file 3dMax.c. References ADN_ntt, ADN_ttdel, ADN_ttorg, ADN_tunits, AFNI_logger(), argc, datum, DSET_delete, DSET_NVALS, DSET_NVOX, EDIT_dset_items(), free, i, ISVALID_DSET, machdep(), mainENTRY, MAKER_4D_to_typed_fbuc(), MASTER_SHORTHELP_STRING, Max_func(), Max_tsfunc(), maxvalue, minvalue, mmm, mmvox, Print_Header_MinMax(), THD_automask(), THD_makemask(), THD_open_dataset(), and UNITS_SEC_TYPE.
00016 { 00017 THD_3dim_dataset * old_dset , * new_dset ; /* input and output datasets */ 00018 int nopt, nbriks; 00019 int slow_flag, quick_flag, min_flag, max_flag, mean_flag, automask,count_flag; 00020 int positive_flag, negative_flag, zero_flag; 00021 byte * mmm=NULL ; 00022 int mmvox=0 ; 00023 int nxyz, i; 00024 MRI_IMAGE *anat_im = NULL; 00025 00026 00027 /*----- Read command line -----*/ 00028 if( argc < 2 || strcmp(argv[1],"-help") == 0 ){ 00029 printf("Usage: 3dMax [options] dataset\n" 00030 "Compute maximum and/or minimum voxel values of an input dataset\n" 00031 "\n" 00032 "The output is a number to the console. The input dataset\n" 00033 "may use a sub-brick selection list, as in program 3dcalc.\n" 00034 "Options :\n" 00035 " -quick = get the information from the header only (default)\n" 00036 " -slow = read the whole dataset to find the min and max values\n" 00037 " -min = print the minimum value in dataset\n" 00038 " -max = print the minimum value in dataset (default)\n" 00039 " -mean = print the mean value in dataset (implies slow)\n" 00040 " -count = print the number of voxels included (implies slow)\n" 00041 " -positive = include only positive voxel values (implies slow)\n" 00042 " -negative = include only negative voxel values (implies slow)\n" 00043 " -zero = include only zero voxel values (implies slow)\n" 00044 " -non-positive = include only voxel values 0 or negative (implies slow)\n" 00045 " -non-negative = include only voxel values 0 or greater (implies slow)\n" 00046 " -non-zero = include only voxel values not equal to 0 (implies slow)\n" 00047 " -mask dset = use dset as mask to include/exclude voxels\n" 00048 " -automask = automatically compute mask for dataset\n" 00049 " Can not be combined with -mask\n" 00050 " -help = print this help screen\n" 00051 ) ; 00052 printf("\n" MASTER_SHORTHELP_STRING ) ; 00053 exit(0) ; 00054 } 00055 00056 mainENTRY("3dMax main"); machdep(); AFNI_logger("3dMax",argc,argv); 00057 00058 nopt = 1 ; 00059 00060 min_flag = 0; 00061 max_flag = -1; 00062 mean_flag = 0; 00063 slow_flag = 0; 00064 quick_flag = -1; 00065 automask = 0; 00066 count_flag = 0; 00067 positive_flag = -1; 00068 negative_flag = -1; 00069 zero_flag = -1; 00070 00071 datum = MRI_float; 00072 while( nopt < argc && argv[nopt][0] == '-' ){ 00073 if( strcmp(argv[nopt],"-quick") == 0 ){ 00074 quick_flag = 1; 00075 nopt++; continue; 00076 } 00077 00078 if( strcmp(argv[nopt],"-slow") == 0 ){ 00079 slow_flag = 1; 00080 nopt++; continue; 00081 } 00082 00083 if( strcmp(argv[nopt],"-min") == 0 ){ 00084 min_flag = 1; 00085 nopt++; continue; 00086 } 00087 00088 if( strcmp(argv[nopt],"-max") == 0 ){ 00089 max_flag = 1; 00090 nopt++; continue; 00091 } 00092 00093 if( strcmp(argv[nopt],"-mean") == 0 ){ 00094 mean_flag = 1; 00095 nopt++; continue; 00096 } 00097 00098 if( strcmp(argv[nopt],"-count") == 0 ){ 00099 count_flag = 1; 00100 nopt++; continue; 00101 } 00102 00103 if( strcmp(argv[nopt],"-positive") == 0 ){ 00104 if(positive_flag!=-1) { 00105 fprintf(stderr, "***Can not use multiple +/-/0 options"); 00106 exit(1) ; 00107 } 00108 positive_flag = 1; 00109 negative_flag = 0; 00110 zero_flag = 0; 00111 nopt++; continue; 00112 } 00113 00114 if( strcmp(argv[nopt],"-negative") == 0 ){ 00115 if(positive_flag!=-1) { 00116 fprintf(stderr, "***Can not use multiple +/-/0 options"); 00117 exit(1) ; 00118 } 00119 positive_flag = 0; 00120 negative_flag = 1; 00121 zero_flag = 0; 00122 nopt++; continue; 00123 } 00124 00125 if( strcmp(argv[nopt],"-zero") == 0 ){ 00126 if(positive_flag!=-1) { 00127 fprintf(stderr, "***Can not use multiple +/-/0 options"); 00128 exit(1) ; 00129 } 00130 positive_flag = 0; 00131 negative_flag = 0; 00132 zero_flag = 1; 00133 nopt++; continue; 00134 } 00135 00136 if( strcmp(argv[nopt],"-non-positive") == 0 ){ 00137 if(positive_flag!=-1) { 00138 fprintf(stderr, "***Can not use multiple +/-/0 options"); 00139 exit(1) ; 00140 } 00141 positive_flag = 0; 00142 negative_flag = 1; 00143 zero_flag = 1; 00144 nopt++; continue; 00145 } 00146 if( strcmp(argv[nopt],"-non-negative") == 0 ){ 00147 if(positive_flag!=-1) { 00148 fprintf(stderr, "***Can not use multiple +/-/0 options"); 00149 exit(1) ; 00150 } 00151 positive_flag = 1; 00152 negative_flag = 0; 00153 zero_flag = 1; 00154 nopt++; continue; 00155 } 00156 00157 if( strcmp(argv[nopt],"-non-zero") == 0 ){ 00158 if(positive_flag!=-1) { 00159 fprintf(stderr, "***Can not use multiple +/-/0 options"); 00160 exit(1) ; 00161 } 00162 positive_flag = 1; 00163 negative_flag = 1; 00164 zero_flag = 0; 00165 nopt++; continue; 00166 } 00167 00168 00169 if( strcmp(argv[nopt],"-autoclip") == 0 || 00170 strcmp(argv[nopt],"-automask") == 0 ){ 00171 00172 if( mmm != NULL ){ 00173 fprintf(stderr,"** ERROR: can't use -autoclip/mask with -mask!\n"); 00174 exit(1) ; 00175 } 00176 automask = 1 ; nopt++ ; continue ; 00177 } 00178 00179 if( strcmp(argv[nopt],"-mask") == 0 ){ 00180 THD_3dim_dataset * mask_dset ; 00181 if( automask ){ 00182 fprintf(stderr,"** ERROR: can't use -mask with -automask!\n"); 00183 exit(1) ; 00184 } 00185 mask_dset = THD_open_dataset(argv[++nopt]) ; 00186 if( mask_dset == NULL ){ 00187 fprintf(stderr,"** ERROR: can't open -mask dataset!\n"); exit(1); 00188 } 00189 if( mmm != NULL ){ 00190 fprintf(stderr,"** ERROR: can't have 2 -mask options!\n"); exit(1); 00191 } 00192 mmm = THD_makemask( mask_dset , 0 , 1.0,-1.0 ) ; 00193 mmvox = DSET_NVOX( mask_dset ) ; 00194 00195 DSET_delete(mask_dset) ; nopt++ ; continue ; 00196 } 00197 00198 fprintf(stderr, "*** Error - unknown option %s\n", argv[nopt]); 00199 exit(1); 00200 } 00201 00202 if(((mmm!=NULL) && (quick_flag))||(automask &&quick_flag)) { 00203 if(quick_flag==1) 00204 fprintf(stderr, "+++ Warning - can't have quick option with mask\n"); 00205 quick_flag = 0; 00206 slow_flag = 1; 00207 } 00208 00209 if(max_flag==-1) { /* if max_flag is not set by user,*/ 00210 if(min_flag || mean_flag ||count_flag) /* check if other user options set */ 00211 max_flag = 0; 00212 else 00213 max_flag = 1; /* otherwise check only for max */ 00214 } 00215 00216 if((mean_flag==1)||(count_flag==1)||(positive_flag!=-1)) /* mean flag or count_flag implies slow */ 00217 slow_flag = 1; 00218 00219 /* check slow and quick options */ 00220 if((slow_flag)&&(quick_flag!=1)) /* if user asked for slow give it to him */ 00221 quick_flag = 0; 00222 else 00223 quick_flag = 1; 00224 00225 if((max_flag==0)&&(min_flag==0)) /* if the user only asked for mean */ 00226 quick_flag = 0; /* no need to do quick way */ 00227 00228 if((quick_flag) && ((positive_flag==1)||(negative_flag==1)||(zero_flag==1))) 00229 fprintf(stderr, "+++ Warning - ignoring +/-/0 flags for quick computations\n"); 00230 00231 if(positive_flag==-1) { /* if no +/-/0 options set, allow all voxels */ 00232 positive_flag = 1; 00233 negative_flag = 1; 00234 zero_flag = 1; 00235 } 00236 00237 /*----- read input dataset -----*/ 00238 00239 if( nopt >= argc ){ 00240 fprintf(stderr,"*** No input dataset!?\n"); exit(1); 00241 } 00242 00243 old_dset = THD_open_dataset( argv[nopt] ) ; 00244 if( !ISVALID_DSET(old_dset) ){ 00245 fprintf(stderr,"*** Can't open dataset %s\n",argv[nopt]); exit(1); 00246 } 00247 00248 nxyz = DSET_NVOX(old_dset) ; 00249 if( mmm != NULL && mmvox != nxyz ){ 00250 fprintf(stderr,"** Mask and input datasets not the same size!\n") ; 00251 exit(1) ; 00252 } 00253 00254 if(automask && mmm == NULL ){ 00255 mmm = THD_automask( old_dset ) ; 00256 for(i=0;i<nxyz;i++) { 00257 if(mmm[i]!=0) ++mmvox; 00258 } 00259 } 00260 00261 if(quick_flag) 00262 Print_Header_MinMax(min_flag, max_flag, old_dset); 00263 00264 if(slow_flag!=1) 00265 exit(0); 00266 00267 Max_func(min_flag, max_flag, mean_flag,count_flag,positive_flag, negative_flag, zero_flag,\ 00268 old_dset, mmm, mmvox); 00269 00270 if(mmm!=NULL) 00271 free(mmm); 00272 exit(0); 00273 00274 /* unused code time series method for extracting data */ 00275 #if 0 00276 EDIT_dset_items( old_dset , 00277 ADN_ntt , DSET_NVALS(old_dset) , 00278 ADN_ttorg , 0.0 , 00279 ADN_ttdel , 1.0 , 00280 ADN_tunits , UNITS_SEC_TYPE , 00281 NULL ) ; 00282 nbriks = 1; 00283 00284 /*------------- ready to compute new min, max -----------*/ 00285 new_dset = MAKER_4D_to_typed_fbuc( 00286 old_dset , /* input dataset */ 00287 "temp" , /* output prefix */ 00288 datum , /* output datum */ 00289 0 , /* ignore count */ 00290 0 , /* can't detrend in maker function KRH 12/02*/ 00291 nbriks , /* number of briks */ 00292 Max_tsfunc , /* timeseries processor */ 00293 NULL /* data for tsfunc */ 00294 ) ; 00295 if(min_flag) 00296 printf("%-13.6g ", minvalue); 00297 if(max_flag) 00298 printf("%-13.6g", maxvalue); 00299 printf("\n"); 00300 exit(0) ; 00301 #endif 00302 } |
|
Referenced by main(). |
|
Referenced by main(). |
|
Print the minimum and maximum values from the header Referenced by main(). |
|
|
Variable Documentation
|
Definition at line 6 of file 3dMax.c. Referenced by main(). |
|
|
|
|
|
Definition at line 13 of file 3dMax.c. Referenced by main(). |
|
Definition at line 13 of file 3dMax.c. Referenced by main(). |
|
|
Definition at line 367 of file 3dMax.c. Referenced by main(). |