示例#1
0
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) ;
}
示例#4
0
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 ;
}
示例#5
0
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 ;
}