Doxygen Source Code Documentation
edt_coerce.c File Reference
#include "mrilib.h"Go to the source code of this file.
Defines | |
| #define | ROUND(qq) rint((qq)) |
Functions | |
| void | EDIT_coerce_type (int nxyz, int itype, void *ivol, int otype, void *ovol) |
| void | EDIT_coerce_scale_type (int nxyz, float scl, int itype, void *ivol, int otype, void *ovol) |
| float | EDIT_coerce_autoscale (int nxyz, int itype, void *ivol, int otype, void *ovol) |
| void | EDIT_clip_float (float top, int nxyz, float *vol) |
Define Documentation
|
|
Definition at line 10 of file edt_coerce.c. Referenced by EDIT_coerce_scale_type(), and EDIT_coerce_type(). |
Function Documentation
|
||||||||||||||||
|
Definition at line 401 of file edt_coerce.c. Referenced by AFNI_fimmer_compute().
00402 {
00403 int ii ;
00404 float bot ;
00405
00406 ENTRY("EDIT_clip_float") ;
00407
00408 if( top <= 0.0 || nxyz <= 0 || vol == NULL ) EXRETURN ;
00409
00410 bot = -top ;
00411
00412 for( ii=0 ; ii < nxyz ; ii++ )
00413 if( vol[ii] > top ) vol[ii] = top ;
00414 else if( vol[ii] < bot ) vol[ii] = bot ;
00415
00416 EXRETURN ;
00417 }
|
|
||||||||||||||||||||||||
|
Definition at line 383 of file edt_coerce.c. References EDIT_coerce_scale_type(), ENTRY, MCW_vol_amax(), MRI_IS_INT_TYPE, RETURN, and top. Referenced by EDIT_filter_volume(), EDIT_main(), and main().
00385 {
00386 float fac=0.0 , top ;
00387
00388 ENTRY("EDIT_coerce_autoscale") ;
00389
00390 if( MRI_IS_INT_TYPE(otype) ){
00391 top = MCW_vol_amax( nxyz,1,1 , itype,ivol ) ;
00392 fac = (top > MRI_TYPE_maxval[otype]) ? MRI_TYPE_maxval[otype]/top : 0.0 ;
00393 }
00394
00395 EDIT_coerce_scale_type( nxyz , fac , itype,ivol , otype,ovol ) ;
00396 RETURN( fac );
00397 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 194 of file edt_coerce.c. References CABS, EDIT_coerce_type(), ENTRY, FLOAT_TO_BYTE, fout, complex::i, complex::r, ROUND, and STATUS. Referenced by CALC_read_opts(), EDIT_coerce_autoscale(), EDIT_coerce_autoscale_new(), EDIT_main(), EDIT_one_dataset(), initialize_program(), main(), MAKER_4D_to_typed_fbuc(), MAKER_4D_to_typed_fim(), MAKER_4D_to_typed_fith(), mri_scalize(), POWER_main(), process_as_floats(), process_subbrick(), read_afni_data(), ROIPLOT_main(), s2v_nodes2volume(), STAVG_main(), SUMA_Get_isosurface_datasets(), SUMA_LoadPrepInVol(), SUMA_SurfGridIntersect(), THD_autonudge(), and THD_write_minc().
00196 {
00197 register int ii ;
00198 register float fac = scl , val ;
00199
00200 complex * cin , * cout ;
00201 short * sin , * sout ;
00202 float * fin , * fout ;
00203 byte * bin , * bout ;
00204 double * din , * dout ; /* 11 Jan 1999 */
00205
00206 ENTRY("EDIT_coerce_scale_type") ;
00207 #ifdef AFNI_DEBUG
00208 { char str[256] ;
00209 sprintf(str,"voxels=%d scale=%g input type=%s output type=%s",
00210 nxyz,scl , MRI_TYPE_name[itype],MRI_TYPE_name[otype]) ;
00211 STATUS(str) ; }
00212 #endif
00213
00214 if( nxyz <= 0 || ivol == NULL || ovol == NULL ) EXRETURN ;
00215
00216 if( fac == 0.0 || fac == 1.0 ){
00217 EDIT_coerce_type( nxyz , itype,ivol , otype,ovol ) ;
00218 EXRETURN ;
00219 }
00220
00221 switch( itype ){
00222 default:
00223 fprintf(stderr,"** Unknown itype=%d in EDIT_coerce_scale_type\n",itype);
00224 EXRETURN ;
00225 case MRI_complex: cin = (complex *) ivol ; break ;
00226 case MRI_short : sin = (short *) ivol ; break ;
00227 case MRI_float : fin = (float *) ivol ; break ;
00228 case MRI_byte : bin = (byte *) ivol ; break ;
00229 case MRI_double : din = (double *) ivol ; break ;
00230 }
00231 switch( otype ){
00232 default:
00233 fprintf(stderr,"** Unknown otype=%d in EDIT_coerce_scale_type\n",otype);
00234 EXRETURN ;
00235 case MRI_complex: cout = (complex *) ovol ; break ;
00236 case MRI_short : sout = (short *) ovol ; break ;
00237 case MRI_float : fout = (float *) ovol ; break ;
00238 case MRI_byte : bout = (byte *) ovol ; break ;
00239 case MRI_double : dout = (double *) ovol ; break ;
00240 }
00241
00242 switch( otype ){
00243
00244 /*** outputs are shorts ***/
00245
00246 case MRI_short:
00247 switch( itype ){
00248 case MRI_short: /* inputs are shorts */
00249 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*sin[ii]) ;
00250 EXRETURN ;
00251 case MRI_float: /* inputs are floats */
00252 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*fin[ii]) ;
00253 EXRETURN ;
00254 case MRI_double: /* inputs are double */
00255 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*din[ii]) ;
00256 EXRETURN ;
00257 case MRI_byte: /* inputs are bytes */
00258 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*bin[ii]) ;
00259 EXRETURN ;
00260 case MRI_complex: /* inputs are complex */
00261 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fac*CABS(cin[ii])) ;
00262 EXRETURN ;
00263 }
00264 EXRETURN ;
00265
00266 /*** outputs are floats ***/
00267
00268 case MRI_float:
00269 switch( itype ){
00270 case MRI_short: /* inputs are shorts */
00271 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*sin[ii] ;
00272 EXRETURN ;
00273 case MRI_float: /* inputs are floats */
00274 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*fin[ii] ;
00275 EXRETURN ;
00276 case MRI_double: /* inputs are doubles */
00277 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*din[ii] ;
00278 EXRETURN ;
00279 case MRI_byte: /* inputs are bytes */
00280 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*bin[ii] ;
00281 EXRETURN ;
00282 case MRI_complex: /* inputs are complex */
00283 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = fac*CABS(cin[ii]) ;
00284 EXRETURN ;
00285 }
00286 EXRETURN ;
00287
00288 /*** outputs are doubles ***/
00289
00290 case MRI_double:
00291 switch( itype ){
00292 case MRI_short: /* inputs are shorts */
00293 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*sin[ii] ;
00294 EXRETURN ;
00295 case MRI_float: /* inputs are floats */
00296 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*fin[ii] ;
00297 EXRETURN ;
00298 case MRI_double: /* inputs are doubles */
00299 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*din[ii] ;
00300 EXRETURN ;
00301 case MRI_byte: /* inputs are bytes */
00302 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*bin[ii] ;
00303 EXRETURN ;
00304 case MRI_complex: /* inputs are complex */
00305 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fac*CABS(cin[ii]) ;
00306 EXRETURN ;
00307 }
00308 EXRETURN ;
00309
00310 /*** outputs are bytes ***/
00311
00312 case MRI_byte:
00313 switch( itype ){
00314 case MRI_short: /* inputs are shorts */
00315 for( ii=0 ; ii < nxyz ; ii++ ){
00316 val = fac*sin[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ;
00317 }
00318 EXRETURN ;
00319 case MRI_float: /* inputs are floats */
00320 for( ii=0 ; ii < nxyz ; ii++ ){
00321 val = fac*fin[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ;
00322 }
00323 EXRETURN ;
00324 case MRI_double: /* inputs are doubles */
00325 for( ii=0 ; ii < nxyz ; ii++ ){
00326 val = fac*din[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ;
00327 }
00328 EXRETURN ;
00329 case MRI_byte: /* inputs are bytes */
00330 for( ii=0 ; ii < nxyz ; ii++ ){
00331 val = fac*bin[ii] ; bout[ii] = FLOAT_TO_BYTE(val) ;
00332 }
00333 EXRETURN ;
00334 case MRI_complex:{ /* inputs are complex */
00335 for( ii=0 ; ii < nxyz ; ii++ ){
00336 val = fac*CABS(cin[ii]) ; bout[ii] = FLOAT_TO_BYTE(val) ;
00337 }
00338 }
00339 EXRETURN ;
00340 }
00341 EXRETURN ;
00342
00343 /*** outputs are complex ***/
00344
00345 case MRI_complex:
00346 switch( itype ){
00347 case MRI_short: /* inputs are shorts */
00348 for( ii=0 ; ii < nxyz ; ii++ )
00349 cout[ii].r = fac*sin[ii] , cout[ii].i = 0.0 ;
00350 EXRETURN ;
00351 case MRI_float: /* inputs are floats */
00352 for( ii=0 ; ii < nxyz ; ii++ )
00353 cout[ii].r = fac*fin[ii] , cout[ii].i = 0.0 ;
00354 EXRETURN ;
00355 case MRI_double: /* inputs are doubles */
00356 for( ii=0 ; ii < nxyz ; ii++ )
00357 cout[ii].r = fac*din[ii] , cout[ii].i = 0.0 ;
00358 EXRETURN ;
00359 case MRI_byte: /* inputs are bytes */
00360 for( ii=0 ; ii < nxyz ; ii++ )
00361 cout[ii].r = fac*bin[ii] , cout[ii].i = 0.0 ;
00362 EXRETURN ;
00363 case MRI_complex: /* inputs are complex */
00364 for( ii=0 ; ii < nxyz ; ii++ )
00365 cout[ii].r = fac*cin[ii].r , cout[ii].i = fac*cin[ii].i ;
00366 EXRETURN ;
00367 }
00368 EXRETURN ;
00369 }
00370 EXRETURN ;
00371 }
|
|
||||||||||||||||||||||||
|
Definition at line 21 of file edt_coerce.c. References CABS, ENTRY, FLOAT_TO_BYTE, fout, complex::i, complex::r, ROUND, SHORT_TO_BYTE, and STATUS. Referenced by DSET_cor(), EDIT_coerce_scale_type(), EDIT_filter_volume(), main(), NUD_rotate(), PC_read_opts(), THD_rota3D(), THD_rota3D_matvec(), and UC_read_opts().
00022 {
00023 register int ii ;
00024
00025 complex * cin , * cout ;
00026 short * sin , * sout ;
00027 float * fin , * fout ;
00028 byte * bin , * bout ;
00029 double * din , * dout ; /* 10 Jan 1999 */
00030
00031 ENTRY("EDIT_coerce_type") ;
00032 #ifdef AFNI_DEBUG
00033 { char str[256] ;
00034 sprintf(str,"voxels=%d input type=%s output type=%s",
00035 nxyz, MRI_TYPE_name[itype],MRI_TYPE_name[otype]) ;
00036 STATUS(str) ; }
00037 #endif
00038
00039 if( nxyz <= 0 || ivol == NULL || ovol == NULL ) EXRETURN ;
00040
00041 switch( itype ){
00042 default:
00043 fprintf(stderr,"** Unknown itype=%d in EDIT_coerce_type\n",itype);
00044 EXRETURN ;
00045 case MRI_complex: cin = (complex *) ivol ; break ;
00046 case MRI_short : sin = (short *) ivol ; break ;
00047 case MRI_float : fin = (float *) ivol ; break ;
00048 case MRI_byte : bin = (byte *) ivol ; break ;
00049 case MRI_double : din = (double *) ivol ; break ;
00050 }
00051 switch( otype ){
00052 default:
00053 fprintf(stderr,"** Unknown otype=%d in EDIT_coerce_type\n",otype);
00054 EXRETURN ;
00055 case MRI_complex: cout = (complex *) ovol ; break ;
00056 case MRI_short : sout = (short *) ovol ; break ;
00057 case MRI_float : fout = (float *) ovol ; break ;
00058 case MRI_byte : bout = (byte *) ovol ; break ;
00059 case MRI_double : dout = (double *) ovol ; break ;
00060 }
00061
00062 switch( otype ){
00063
00064 /*** outputs are shorts ***/
00065
00066 case MRI_short:
00067 switch( itype ){
00068 case MRI_short: /* inputs are shorts */
00069 memcpy( sout , sin , sizeof(short)*nxyz ) ;
00070 EXRETURN ;
00071 case MRI_float: /* inputs are floats */
00072 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(fin[ii]) ;
00073 EXRETURN ;
00074 case MRI_double: /* inputs are doubles */
00075 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(din[ii]) ;
00076 EXRETURN ;
00077 case MRI_byte: /* inputs are bytes */
00078 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = bin[ii] ;
00079 EXRETURN ;
00080 case MRI_complex: /* inputs are complex */
00081 for( ii=0 ; ii < nxyz ; ii++ ) sout[ii] = ROUND(CABS(cin[ii])) ;
00082 EXRETURN ;
00083 }
00084 EXRETURN ;
00085
00086 /*** outputs are floats ***/
00087
00088 case MRI_float:
00089 switch( itype ){
00090 case MRI_short: /* inputs are shorts */
00091 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = sin[ii] ;
00092 EXRETURN ;
00093 case MRI_float: /* inputs are floats */
00094 memcpy( fout , fin , sizeof(float)*nxyz ) ;
00095 EXRETURN ;
00096 case MRI_double: /* inputs are doubles */
00097 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = din[ii] ;
00098 EXRETURN ;
00099 case MRI_byte: /* inputs are bytes */
00100 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = bin[ii] ;
00101 EXRETURN ;
00102 case MRI_complex: /* inputs are complex */
00103 for( ii=0 ; ii < nxyz ; ii++ ) fout[ii] = CABS(cin[ii]) ;
00104 EXRETURN ;
00105 }
00106 EXRETURN ;
00107
00108 /*** outputs are doubles ***/
00109
00110 case MRI_double:
00111 switch( itype ){
00112 case MRI_short: /* inputs are shorts */
00113 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = sin[ii] ;
00114 EXRETURN ;
00115 case MRI_float: /* inputs are floats */
00116 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = fin[ii] ;
00117 EXRETURN ;
00118 case MRI_double: /* inputs are doubles */
00119 memcpy( dout , din , sizeof(double)*nxyz ) ;
00120 EXRETURN ;
00121 case MRI_byte: /* inputs are bytes */
00122 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = bin[ii] ;
00123 EXRETURN ;
00124 case MRI_complex: /* inputs are complex */
00125 for( ii=0 ; ii < nxyz ; ii++ ) dout[ii] = CABS(cin[ii]) ;
00126 EXRETURN ;
00127 }
00128 EXRETURN ;
00129
00130 /*** outputs are bytes ***/
00131
00132 case MRI_byte:
00133 switch( itype ){
00134 case MRI_short: /* inputs are shorts */
00135 for( ii=0 ; ii < nxyz ; ii++ ) bout[ii] = SHORT_TO_BYTE(sin[ii]) ;
00136 EXRETURN ;
00137 case MRI_float: /* inputs are floats */
00138 for( ii=0 ; ii < nxyz ; ii++ ) bout[ii] = FLOAT_TO_BYTE(fin[ii]) ;
00139 EXRETURN ;
00140 case MRI_double: /* inputs are doubles */
00141 for( ii=0 ; ii < nxyz ; ii++ ) bout[ii] = FLOAT_TO_BYTE(din[ii]) ;
00142 EXRETURN ;
00143 case MRI_byte: /* inputs are bytes */
00144 memcpy( bout , bin , sizeof(byte)*nxyz ) ;
00145 EXRETURN ;
00146 case MRI_complex:{ /* inputs are complex */
00147 float val ;
00148 for( ii=0 ; ii < nxyz ; ii++ ){ val = CABS(cin[ii]) ;
00149 bout[ii] = FLOAT_TO_BYTE(val) ; }
00150 }
00151 EXRETURN ;
00152 }
00153 EXRETURN ;
00154
00155 /*** outputs are complex ***/
00156
00157 case MRI_complex:
00158 switch( itype ){
00159 case MRI_short: /* inputs are shorts */
00160 for( ii=0 ; ii < nxyz ; ii++ )
00161 cout[ii].r = sin[ii] , cout[ii].i = 0.0 ;
00162 EXRETURN ;
00163 case MRI_float: /* inputs are floats */
00164 for( ii=0 ; ii < nxyz ; ii++ )
00165 cout[ii].r = fin[ii] , cout[ii].i = 0.0 ;
00166 EXRETURN ;
00167 case MRI_double: /* inputs are doubles */
00168 for( ii=0 ; ii < nxyz ; ii++ )
00169 cout[ii].r = din[ii] , cout[ii].i = 0.0 ;
00170 EXRETURN ;
00171 case MRI_byte: /* inputs are bytes */
00172 for( ii=0 ; ii < nxyz ; ii++ )
00173 cout[ii].r = bin[ii] , cout[ii].i = 0.0 ;
00174 EXRETURN ;
00175 case MRI_complex: /* inputs are complex */
00176 memcpy( cout , cin , sizeof(complex)*nxyz ) ;
00177 EXRETURN ;
00178 }
00179 EXRETURN ;
00180 }
00181 EXRETURN ;
00182 }
|