Doxygen Source Code Documentation
thd_1Dtodset.c File Reference
#include "mrilib.h"#include "thd.h"Go to the source code of this file.
Defines | |
| #define | FAC(q) ( (fac[q] != 0.0) ? 1.0/fac[q] : 1.0 ) |
Functions | |
| void | THD_insert_series (int ind, THD_3dim_dataset *dset, int npt, int typ, void *dar, int raw) |
Define Documentation
|
|
|
Function Documentation
|
||||||||||||||||||||||||||||
|
Definition at line 23 of file thd_1Dtodset.c. References a, THD_datablock::brick_fac, BYTEIZE, CABS, THD_3dim_dataset::dblk, DSET_ARRAY, DSET_BRICK_TYPE, DSET_IS_MALLOC, DSET_load, DSET_LOADED, DSET_NVALS, DSET_NVOX, FAC, far, free, complex::i, ind, ISVALID_DSET, malloc, complex::r, SHORTIZE, THD_need_brick_factor(), and typ. Referenced by main(), and THD_dataset_tshift().
00025 {
00026 int nv , ival , dtyp , ii ;
00027 float * far=NULL , * fac ;
00028
00029 if( ind < 0 ||
00030 npt <= 0 ||
00031 dar == NULL ||
00032 !ISVALID_DSET(dset) ||
00033 ind >= DSET_NVOX(dset) ||
00034 !DSET_IS_MALLOC(dset) ) return ;
00035
00036
00037 nv = DSET_NVALS(dset) ; if( npt > nv ) npt = nv; /* truncate input? */
00038
00039 if( !DSET_LOADED(dset) ) DSET_load(dset) ; /* read from disk? */
00040 if( !DSET_LOADED(dset) ) return ;
00041
00042 dtyp = DSET_BRICK_TYPE(dset,0) ; /* dataset array type */
00043
00044 /* convert input to a floating point type */
00045
00046 if( !raw && THD_need_brick_factor(dset) )
00047 fac = dset->dblk->brick_fac ;
00048 else
00049 raw = 1 ;
00050
00051 #define FAC(q) ( (fac[q] != 0.0) ? 1.0/fac[q] : 1.0 )
00052
00053 if( dtyp == MRI_complex ){ /* complex output ?! */
00054
00055 complex * car = (complex *) malloc( sizeof(complex) * npt ) ;
00056 complex * bar ;
00057
00058 switch( typ ){
00059 default:
00060 free(car) ; return ; /* bad input */
00061
00062 case MRI_complex:
00063 memcpy( car , dar , sizeof(complex)*npt ) ;
00064 break ;
00065
00066 case MRI_float:{
00067 float * a = (float *) dar ;
00068 for( ii=0 ; ii < npt ; ii++ ){ car[ii].r = a[ii] ; car[ii].i = 0.0 ; }
00069 }
00070 break ;
00071
00072 case MRI_short:{
00073 short * a = (short *) dar ;
00074 for( ii=0 ; ii < npt ; ii++ ){ car[ii].r = a[ii] ; car[ii].i = 0.0 ; }
00075 }
00076 break ;
00077
00078 case MRI_byte:{
00079 byte * a = (byte *) dar ;
00080 for( ii=0 ; ii < npt ; ii++ ){ car[ii].r = a[ii] ; car[ii].i = 0.0 ; }
00081 }
00082 break ;
00083 }
00084
00085 /* can now copy car into dataset, and exit */
00086
00087 if( !raw )
00088 for( ii=0 ; ii < npt ; ii++ ){ car[ii].r *= FAC(ii) ; car[ii].i *= FAC(ii) ; }
00089
00090 for( ii=0 ; ii < npt ; ii++ ){
00091 bar = (complex *) DSET_ARRAY(dset,ii) ;
00092 bar[ind] = car[ii] ;
00093 }
00094
00095 free(car) ; return ;
00096 }
00097
00098 /* otherwise, compute a temporary float array */
00099
00100 far = (float *) malloc( sizeof(float) * npt ) ;
00101 switch( typ ){
00102 default:
00103 free(far) ; return ; /* bad input */
00104
00105 case MRI_complex:{
00106 complex * a = (complex *) dar ;
00107 for( ii=0 ; ii < npt ; ii++ ) far[ii] = CABS(a[ii]) ;
00108 }
00109 break ;
00110
00111 case MRI_float:
00112 memcpy( far , dar , sizeof(float)*npt ) ;
00113 break ;
00114
00115 case MRI_short:{
00116 short * a = (short *) dar ;
00117 for( ii=0 ; ii < npt ; ii++ ) far[ii] = a[ii] ;
00118 }
00119 break ;
00120
00121 case MRI_byte:{
00122 byte * a = (byte *) dar ;
00123 for( ii=0 ; ii < npt ; ii++ ) far[ii] = a[ii] ;
00124 }
00125 break ;
00126 }
00127
00128 if( !raw ) for( ii=0 ; ii < npt ; ii++ ) far[ii] *= FAC(ii) ;
00129
00130 /* now convert this to the output */
00131
00132 switch( dtyp ){
00133
00134 default:
00135 free(far) ; return ; /* bad dataset? */
00136
00137 case MRI_float:{
00138 float * bar ;
00139 for( ii=0 ; ii < npt ; ii++ ){
00140 bar = (float *) DSET_ARRAY(dset,ii) ;
00141 bar[ind] = far[ii] ;
00142 }
00143 }
00144 break ;
00145
00146 case MRI_short:{
00147 short * bar ;
00148 for( ii=0 ; ii < npt ; ii++ ){
00149 bar = (short *) DSET_ARRAY(dset,ii) ;
00150 bar[ind] = SHORTIZE(far[ii]) ;
00151 }
00152 }
00153 break ;
00154
00155 case MRI_byte:{
00156 byte * bar ;
00157 for( ii=0 ; ii < npt ; ii++ ){
00158 bar = (byte *) DSET_ARRAY(dset,ii) ;
00159 bar[ind] = BYTEIZE(far[ii]) ;
00160 }
00161 }
00162 break ;
00163 }
00164
00165 free(far) ; return ;
00166 }
|