Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
thd_1Dtodset.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008 #include "thd.h"
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 void THD_insert_series( int ind , THD_3dim_dataset * dset ,
00024 int npt , int typ , void * dar , int raw )
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;
00038
00039 if( !DSET_LOADED(dset) ) DSET_load(dset) ;
00040 if( !DSET_LOADED(dset) ) return ;
00041
00042 dtyp = DSET_BRICK_TYPE(dset,0) ;
00043
00044
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 ){
00054
00055 complex * car = (complex *) malloc( sizeof(complex) * npt ) ;
00056 complex * bar ;
00057
00058 switch( typ ){
00059 default:
00060 free(car) ; return ;
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
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
00099
00100 far = (float *) malloc( sizeof(float) * npt ) ;
00101 switch( typ ){
00102 default:
00103 free(far) ; return ;
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
00131
00132 switch( dtyp ){
00133
00134 default:
00135 free(far) ; return ;
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 }