Doxygen Source Code Documentation
thd_dsetto1D.c File Reference
#include "mrilib.h"#include "thd.h"Go to the source code of this file.
Functions | |
| MRI_IMAGE * | THD_extract_series (int ind, THD_3dim_dataset *dset, int raw) |
| int | THD_extract_array (int ind, THD_3dim_dataset *dset, int raw, void *uar) |
| MRI_IMARR * | THD_extract_many_series (int ns, int *ind, THD_3dim_dataset *dset) |
Function Documentation
|
||||||||||||||||||||
|
Definition at line 71 of file thd_dsetto1D.c. References AFREALL, CABS, THD_3dim_dataset::dblk, DSET_ARRAY, DSET_BRICK_FACTOR, DSET_BRICK_TYPE, DSET_load, DSET_NVOX, ENTRY, far, ind, ISVALID_DSET, mri_datum_size(), THD_datablock::nvals, RETURN, THD_need_brick_factor(), and typ. Referenced by do_xrestore_stuff(), THD_average_timeseries(), THD_extract_series(), THD_mean_brick(), THD_median_brick(), THD_outlier_count(), and THD_rms_brick().
00072 {
00073 MRI_TYPE typ ;
00074 int nv , ival , nb ;
00075 char *iar ; /* brick in the input */
00076 float *far=NULL ; /* non-raw output */
00077 static void *tar=NULL ; static int ntar=0 ;
00078
00079 ENTRY("THD_extract_array") ;
00080
00081 if( ind < 0 || uar == NULL ||
00082 !ISVALID_DSET(dset) || ind >= DSET_NVOX(dset) ) RETURN(-1) ;
00083
00084 nv = dset->dblk->nvals ;
00085 iar = DSET_ARRAY(dset,0) ;
00086 if( iar == NULL ){ /* load data from disk? */
00087 DSET_load(dset) ;
00088 iar = DSET_ARRAY(dset,0); if( iar == NULL ) RETURN(-1) ;
00089 }
00090 typ = DSET_BRICK_TYPE(dset,0) ; /* raw data type */
00091
00092 /* will extract nb bytes of raw data into array tar */
00093
00094 nb = mri_datum_size(typ) * (nv+1) ;
00095 if( nb > ntar ){ tar = AFREALL(tar,void *,nb) ; ntar = nb ; }
00096 memset(tar,0,nb) ;
00097
00098 if( !raw ) far = (float *) uar ; /* non-raw output */
00099
00100 switch( typ ){
00101
00102 default: /* don't know what to do --> return nada */
00103 RETURN(-1);
00104 break ;
00105
00106 case MRI_byte:{
00107 byte *ar = (byte *)tar , *bar ;
00108 for( ival=0 ; ival < nv ; ival++ ){
00109 bar = (byte *) DSET_ARRAY(dset,ival) ;
00110 if( bar != NULL ) ar[ival] = bar[ind] ;
00111 }
00112 if( !raw ){
00113 for( ival=0 ; ival < nv ; ival++ ) far[ival] = ar[ival] ;
00114 }
00115 }
00116 break ;
00117
00118 case MRI_short:{
00119 short *ar = (short *)tar , *bar ;
00120 for( ival=0 ; ival < nv ; ival++ ){
00121 bar = (short *) DSET_ARRAY(dset,ival) ;
00122 if( bar != NULL ) ar[ival] = bar[ind] ;
00123 }
00124 if( !raw ){
00125 for( ival=0 ; ival < nv ; ival++ ) far[ival] = ar[ival] ;
00126 }
00127 }
00128 break ;
00129
00130 case MRI_float:{
00131 float *ar = (float *)tar , *bar ;
00132 for( ival=0 ; ival < nv ; ival++ ){
00133 bar = (float *) DSET_ARRAY(dset,ival) ;
00134 if( bar != NULL ) ar[ival] = bar[ind] ;
00135 }
00136 if( !raw ){
00137 for( ival=0 ; ival < nv ; ival++ ) far[ival] = ar[ival] ;
00138 }
00139 }
00140 break ;
00141
00142 case MRI_int:{
00143 int *ar = (int *)tar , *bar ;
00144 for( ival=0 ; ival < nv ; ival++ ){
00145 bar = (int *) DSET_ARRAY(dset,ival) ;
00146 if( bar != NULL ) ar[ival] = bar[ind] ;
00147 }
00148 if( !raw ){
00149 for( ival=0 ; ival < nv ; ival++ ) far[ival] = ar[ival] ;
00150 }
00151 }
00152 break ;
00153
00154 case MRI_double:{
00155 double *ar = (double *)tar , *bar ;
00156 for( ival=0 ; ival < nv ; ival++ ){
00157 bar = (double *) DSET_ARRAY(dset,ival) ;
00158 if( bar != NULL ) ar[ival] = bar[ind] ;
00159 }
00160 if( !raw ){
00161 for( ival=0 ; ival < nv ; ival++ ) far[ival] = ar[ival] ;
00162 }
00163 }
00164 break ;
00165
00166 case MRI_complex:{
00167 complex *ar = (complex *)tar , *bar ;
00168 for( ival=0 ; ival < nv ; ival++ ){
00169 bar = (complex *) DSET_ARRAY(dset,ival) ;
00170 if( bar != NULL ) ar[ival] = bar[ind] ;
00171 }
00172 if( !raw ){
00173 for( ival=0 ; ival < nv ; ival++ ) far[ival] = CABS(ar[ival]) ;
00174 }
00175 }
00176 break ;
00177
00178 }
00179
00180 if( raw ){ memcpy(uar,tar,nb); RETURN(0); }
00181
00182 if( THD_need_brick_factor(dset) ){
00183 for( ival=0 ; ival < nv ; ival++ )
00184 if( DSET_BRICK_FACTOR(dset,ival) > 0.0 )
00185 far[ival] *= DSET_BRICK_FACTOR(dset,ival) ;
00186 }
00187
00188 RETURN(0);
00189 }
|
|
||||||||||||||||
|
Definition at line 196 of file thd_dsetto1D.c. References ADDTO_IMARR, THD_datablock::brick_fac, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, DESTROY_IMARR, DSET_ARRAY, DSET_BRICK_TYPE, MRI_IMAGE::dx, ENTRY, far, free, IMARR_SUBIMAGE, ind, INIT_IMARR, malloc, MRI_FLOAT_PTR, mri_free(), mri_mult_to_float(), mri_new(), mri_to_float(), THD_datablock::nvals, THD_dataxes::nxx, THD_dataxes::nyy, RETURN, THD_3dim_dataset::taxis, THD_load_datablock(), THD_need_brick_factor(), THD_timeof(), tt, THD_timeaxis::ttdel, UNITS_MSEC_TYPE, THD_timeaxis::units_type, MRI_IMAGE::xo, THD_dataxes::zzdel, and THD_dataxes::zzorg. Referenced by AFNI_fimmer_compute(), calculate_results(), and do_xrestore_stuff().
00197 {
00198 MRI_IMARR *imar ; /* output */
00199 MRI_IMAGE *im ;
00200 int nv , ival , kk ;
00201 char *iar ; /* brick in the input */
00202 float **far ; /* 27 Feb 2003: ptrs to output */
00203
00204 ENTRY("THD_extract_many_series") ;
00205
00206 if( ns <= 0 || ind == NULL | dset == NULL ) RETURN( NULL );
00207
00208 /* try to load dataset */
00209
00210 nv = dset->dblk->nvals ;
00211 iar = DSET_ARRAY(dset,0) ;
00212 if( iar == NULL ){ /* if data needs to be loaded from disk */
00213 (void) THD_load_datablock( dset->dblk ) ;
00214 iar = DSET_ARRAY(dset,0) ;
00215 if( iar == NULL ) RETURN( NULL );
00216 }
00217
00218 /* create output */
00219
00220 far = (float **) malloc(sizeof(float *)*ns) ; /* 27 Feb 2003 */
00221 INIT_IMARR(imar) ;
00222 for( kk=0 ; kk < ns ; kk++ ){
00223 im = mri_new( nv , 1 , MRI_float ) ; /* N.B.: now does 0 fill */
00224 far[kk] = MRI_FLOAT_PTR(im) ; /* ptr to kk-th output series */
00225 ADDTO_IMARR(imar,im) ;
00226 }
00227
00228 /* fill the output */
00229
00230 switch( DSET_BRICK_TYPE(dset,0) ){
00231
00232 default: /* don't know what to do --> return nada */
00233 DESTROY_IMARR(imar) ; free(far) ;
00234 RETURN( NULL );
00235
00236 case MRI_byte:{
00237 byte * bar ;
00238 for( ival=0 ; ival < nv ; ival++ ){
00239 bar = (byte *) DSET_ARRAY(dset,ival) ;
00240 if( bar != NULL ){
00241 for( kk=0 ; kk < ns ; kk++ ){
00242 far[kk][ival] = (float)bar[ind[kk]] ;
00243 }
00244 }
00245 }
00246 }
00247 break ;
00248
00249 case MRI_short:{
00250 short * bar ;
00251 for( ival=0 ; ival < nv ; ival++ ){
00252 bar = (short *) DSET_ARRAY(dset,ival) ;
00253 if( bar != NULL ){
00254 for( kk=0 ; kk < ns ; kk++ ){
00255 far[kk][ival] = (float)bar[ind[kk]] ;
00256 }
00257 }
00258 }
00259 }
00260 break ;
00261
00262 case MRI_float:{
00263 float * bar ;
00264 for( ival=0 ; ival < nv ; ival++ ){
00265 bar = (float *) DSET_ARRAY(dset,ival) ;
00266 if( bar != NULL ){
00267 for( kk=0 ; kk < ns ; kk++ ){
00268 far[kk][ival] = bar[ind[kk]] ;
00269 }
00270 }
00271 }
00272 }
00273 break ;
00274
00275 case MRI_int:{
00276 int * bar ;
00277 for( ival=0 ; ival < nv ; ival++ ){
00278 bar = (int *) DSET_ARRAY(dset,ival) ;
00279 if( bar != NULL ){
00280 for( kk=0 ; kk < ns ; kk++ ){
00281 far[kk][ival] = bar[ind[kk]] ;
00282 }
00283 }
00284 }
00285 }
00286 break ;
00287
00288 case MRI_double:{
00289 double * bar ;
00290 for( ival=0 ; ival < nv ; ival++ ){
00291 bar = (double *) DSET_ARRAY(dset,ival) ;
00292 if( bar != NULL ){
00293 for( kk=0 ; kk < ns ; kk++ ){
00294 far[kk][ival] = (float)bar[ind[kk]] ;
00295 }
00296 }
00297 }
00298 }
00299 break ;
00300
00301 case MRI_complex:{
00302 complex * bar ;
00303 for( ival=0 ; ival < nv ; ival++ ){
00304 bar = (complex *) DSET_ARRAY(dset,ival) ;
00305 if( bar != NULL ){
00306 for( kk=0 ; kk < ns ; kk++ ){
00307 far[kk][ival] = bar[ind[kk]].r ;
00308 }
00309 }
00310 }
00311 }
00312 break ;
00313
00314 }
00315
00316 /* scale outputs, if needed */
00317
00318 if( THD_need_brick_factor(dset) ){
00319 MRI_IMAGE * qim ;
00320 for( kk=0 ; kk < ns ; kk++ ){
00321 im = IMARR_SUBIMAGE(imar,kk) ;
00322 qim = mri_mult_to_float( dset->dblk->brick_fac , im ) ;
00323 mri_free(im) ;
00324 IMARR_SUBIMAGE(imar,kk) = qim ;
00325 }
00326 }
00327
00328 #if 0 /* 27 Feb 2003 */
00329 /* convert to floats, if needed */
00330
00331 if( IMARR_SUBIMAGE(imar,0)->kind != MRI_float ){
00332 MRI_IMAGE * qim ;
00333 for( kk=0 ; kk < ns ; kk++ ){
00334 im = IMARR_SUBIMAGE(imar,kk) ;
00335 qim = mri_to_float( im ) ;
00336 mri_free(im) ;
00337 IMARR_SUBIMAGE(imar,kk) = qim ;
00338 }
00339 }
00340 #endif
00341
00342 /* add time axis stuff to output images, if present */
00343
00344 if( dset->taxis != NULL ){
00345 float zz , tt ;
00346 int kz ;
00347
00348 for( kk=0 ; kk < ns ; kk++ ){
00349 kz = ind[kk] / ( dset->daxes->nxx * dset->daxes->nyy ) ;
00350 zz = dset->daxes->zzorg + kz * dset->daxes->zzdel ;
00351 tt = THD_timeof( 0 , zz , dset->taxis ) ;
00352 im = IMARR_SUBIMAGE(imar,kk) ;
00353 im->xo = tt ; im->dx = dset->taxis->ttdel ; /* origin and delta */
00354 if( dset->taxis->units_type == UNITS_MSEC_TYPE ){ /* convert to sec */
00355 im->xo *= 0.001 ; im->dx *= 0.001 ;
00356 }
00357 }
00358 } else {
00359 for( kk=0 ; kk < ns ; kk++ ){
00360 im = IMARR_SUBIMAGE(imar,kk) ;
00361 im->xo = 0.0 ; im->dx = 1.0 ;
00362 }
00363 }
00364
00365 free(far) ; RETURN(imar);
00366 }
|
|
||||||||||||||||
|
Definition at line 23 of file thd_dsetto1D.c. References THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, DSET_BRICK_TYPE, MRI_IMAGE::dx, ENTRY, ind, ISVALID_DSET, mri_data_pointer(), mri_free(), mri_new(), THD_datablock::nvals, THD_dataxes::nxx, THD_dataxes::nyy, RETURN, THD_3dim_dataset::taxis, THD_extract_array(), THD_timeof(), tt, THD_timeaxis::ttdel, typ, UNITS_MSEC_TYPE, THD_timeaxis::units_type, MRI_IMAGE::xo, THD_dataxes::zzdel, and THD_dataxes::zzorg. Referenced by DSET2_func(), DSETN_func(), extract_ts_array(), init_floatvector_array(), main(), read_ts_array(), segment_imarr(), and THD_dataset_tshift().
00024 {
00025 int nv , typ , ii ;
00026 MRI_IMAGE *im ;
00027 void *imar ;
00028
00029 ENTRY("THD_extract_series") ;
00030
00031 if( !ISVALID_DSET(dset) ) RETURN(NULL) ;
00032
00033 nv = dset->dblk->nvals ;
00034 if( raw ) typ = DSET_BRICK_TYPE(dset,0) ; /* type of output array */
00035 else typ = MRI_float ;
00036
00037 im = mri_new( nv , 1 , typ ) ; /* output image */
00038 imar = mri_data_pointer(im) ;
00039
00040 ii = THD_extract_array( ind , dset , raw , imar ) ; /* get data */
00041
00042 if( ii != 0 ){ mri_free(im) ; RETURN(NULL) ; } /* bad */
00043
00044 if( dset->taxis != NULL ){ /* 21 Oct 1996 */
00045 float zz , tt ;
00046 int kz = ind / ( dset->daxes->nxx * dset->daxes->nyy ) ;
00047
00048 zz = dset->daxes->zzorg + kz * dset->daxes->zzdel ;
00049 tt = THD_timeof( 0 , zz , dset->taxis ) ;
00050
00051 im->xo = tt ; im->dx = dset->taxis->ttdel ; /* origin and delta */
00052
00053 if( dset->taxis->units_type == UNITS_MSEC_TYPE ){ /* convert to sec */
00054 im->xo *= 0.001 ; im->dx *= 0.001 ;
00055 }
00056 } else {
00057 im->xo = 0.0 ; im->dx = 1.0 ; /* 08 Nov 1996 */
00058 }
00059
00060 RETURN(im) ;
00061 }
|