MRI_vectim * THD_vectim_copy_nonzero( MRI_vectim *mrv ) /* 21 Sep 2010 */ { MRI_vectim *qrv ; int nvals , nvec , ii,jj , ngood ; float *mar , *qar ; if( mrv == NULL ) return NULL ; nvals = mrv->nvals ; nvec = mrv->nvec ; for( ngood=ii=0 ; ii < nvec ; ii++ ){ mar = VECTIM_PTR(mrv,ii) ; for( jj=0 ; jj < nvals && mar[jj] == 0.0f ; jj++ ) ; /*nada*/ if( jj < nvals ) ngood++ ; } if( ngood == 0 ) return NULL ; /* nothing to do */ if( ngood == nvec ) return THD_vectim_copy(mrv) ; /* everything to do */ MAKE_VECTIM( qrv , ngood , nvals ) ; qrv->ignore = mrv->ignore ; for( ngood=ii=0 ; ii < nvec ; ii++ ){ mar = VECTIM_PTR(mrv,ii) ; for( jj=0 ; jj < nvals && mar[jj] == 0.0f ; jj++ ) ; /*nada*/ if( jj < nvals ){ qrv->ivec[ngood] = mrv->ivec[ii] ; qar = VECTIM_PTR(qrv,ngood) ; AAmemcpy(qar,mar,sizeof(float)*nvals) ; ngood++ ; } } qrv->nx = mrv->nx ; qrv->dx = mrv->dx ; qrv->ny = mrv->ny ; qrv->dy = mrv->dy ; qrv->nz = mrv->nz ; qrv->dz = mrv->dz ; qrv->dt = mrv->dt ; return qrv ; }
MRI_vectim * GRINCOR_extract_vectim_sbyte( MRI_shindss *shd , int ids ) { MRI_vectim *mv ; long long nvec=shd->nvec , nvals=shd->nvals[ids] , ii,nvv ; float fac=shd->fac[ids] , *fv ; sbyte *sv = shd->bv[ids] ; MAKE_VECTIM( mv , nvec , nvals ) ; fv = mv->fvec ; nvv = nvec * nvals ; for( ii=0 ; ii < nvv ; ii++ ) fv[ii] = fac * sv[ii] ; return mv ; }
MRI_vectim * GRINCOR_extract_vectim_short( MRI_shindss *shd , int ids ) { MRI_vectim *mv ; long long nvec=shd->nvec , nvals=shd->nvals[ids] , ii,nvv ; float fac=shd->fac[ids] , *fv ; short *sv = shd->sv[ids] ; ENTRY("GRINCOR_extract_vectim_short") ; MAKE_VECTIM( mv , nvec , nvals ) ; fv = mv->fvec ; nvv = nvec * nvals ; for( ii=0 ; ii < nvv ; ii++ ) fv[ii] = fac * sv[ii] ; RETURN(mv) ; }
MRI_vectim * THD_vectim_copy( MRI_vectim *mrv ) /* 08 Apr 2010 */ { MRI_vectim *qrv ; if( mrv == NULL ) return NULL ; MAKE_VECTIM( qrv , mrv->nvec , mrv->nvals ) ; qrv->ignore = mrv->ignore ; AAmemcpy( qrv->ivec , mrv->ivec , sizeof(int)*mrv->nvec ) ; AAmemcpy( qrv->fvec , mrv->fvec , sizeof(float)*(size_t)mrv->nvec*(size_t)mrv->nvals ) ; qrv->nx = mrv->nx ; qrv->dx = mrv->dx ; qrv->ny = mrv->ny ; qrv->dy = mrv->dy ; qrv->nz = mrv->nz ; qrv->dz = mrv->dz ; qrv->dt = mrv->dt ; return qrv ; }
MRI_vectim * THD_tcat_vectims( int nvim , MRI_vectim **vim ) { MRI_vectim *vout ; int iv , nvec , nvsum , vv , nvals ; size_t nvv ; float *vout_ptr , *vin_ptr ; if( nvim <= 0 || vim == NULL ) return NULL ; if( nvim == 1 ){ vout = THD_vectim_copy( vim[0] ) ; return vout ; } nvec = vim[0]->nvec ; nvsum = vim[0]->nvals ; for( iv=1 ; iv < nvim ; iv++ ){ if( vim[iv]->nvec != nvec ) return NULL ; nvsum += vim[iv]->nvals ; } MAKE_VECTIM(vout,nvec,nvsum) ; vout->ignore = 0 ; vout->nx = vim[0]->nx ; vout->dx = vim[0]->dx ; vout->ny = vim[0]->ny ; vout->dy = vim[0]->dy ; vout->nz = vim[0]->nz ; vout->dz = vim[0]->dz ; vout->dt = vim[0]->dt ; AAmemcpy( vout->ivec , vim[0]->ivec , sizeof(int)*vim[0]->nvec ) ; for( nvv=iv=0 ; iv < nvim ; iv++,nvv+=nvals ){ nvals = vim[iv]->nvals ; for( vv=0 ; vv < nvec ; vv++ ){ vout_ptr = VECTIM_PTR(vout,vv) + nvv ; vin_ptr = VECTIM_PTR(vim[iv],vv) ; AAmemcpy( vout_ptr , vin_ptr , sizeof(float)*nvals ) ; } } return vout ; }