THD_3dim_dataset * GRINCOR_extract_dataset( MRI_shindss *shd, int ids, char *pref ) { MRI_vectim *mv ; THD_3dim_dataset *dset ; char prefix[THD_MAX_NAME] ; int iv , nvals=shd->nvals[ids] ; static int nds=0 ; ENTRY("GRINCOR_extract_dataset") ; STATUS("extract vectim") ; mv = GRINCOR_extract_vectim( shd , ids ) ; STATUS("create empty copy of template") ; dset = EDIT_empty_copy( shd->tdset ) ; STATUS("edit prefix") ; prefix[0] = '\0' ; if( pref != NULL && *pref != '\0' ){ strcpy(prefix,pref) ; strcat(prefix,"_") ; } if( shd->dslab != NULL && shd->dslab[ids] != NULL ){ strcat(prefix,shd->dslab[ids]) ; } else { nds++ ; sprintf(prefix+strlen(prefix),"%03d",nds) ; } STATUS("edit empty copy header") ; EDIT_dset_items( dset , ADN_prefix , prefix , ADN_nvals , nvals , ADN_ntt , nvals , ADN_ttdel , 1.0 , ADN_tunits , UNITS_SEC_TYPE , ADN_brick_fac , NULL , ADN_type , HEAD_FUNC_TYPE , ADN_func_type , FUNC_FIM_TYPE , ADN_none ) ; STATUS("create empty float bricks") ; for( iv=0 ; iv < nvals ; iv++ ) EDIT_substitute_brick( dset , iv , MRI_float , NULL ) ; STATUS("copy index vector") ; if( shd->ivec != NULL ){ memcpy( mv->ivec , shd->ivec , sizeof(int)*shd->nvec ) ; } else { for( iv=0 ; iv < shd->nvec ; iv++ ) mv->ivec[iv] = iv ; } STATUS("convert vectim to dset") ; THD_vectim_to_dset( mv , dset ) ; STATUS("destroy vectim") ; VECTIM_destroy( mv ) ; RETURN(dset) ; }
THD_3dim_dataset * GRINCOR_extract_dataset( MRI_shindss *shd, int ids, char *pref ) { MRI_vectim *mv ; THD_3dim_dataset *dset ; char prefix[THD_MAX_NAME] ; int iv , nvals=shd->nvals[ids] ; mv = GRINCOR_extract_vectim( shd , ids ) ; dset = EDIT_empty_copy( shd->tdset ) ; prefix[0] = '\0' ; if( pref != NULL && *pref != '\0' ){ strcpy(prefix,pref) ; strcat(prefix,"_") ; } strcat(prefix,shd->dslab[ids]) ; EDIT_dset_items( dset , ADN_prefix , prefix , ADN_nvals , nvals , ADN_ntt , nvals , ADN_ttdel , 1.0 , ADN_tunits , UNITS_SEC_TYPE , ADN_brick_fac , NULL , ADN_type , HEAD_FUNC_TYPE , ADN_func_type , FUNC_FIM_TYPE , ADN_none ) ; for( iv=0 ; iv < nvals ; iv++ ) EDIT_substitute_brick( dset , iv , MRI_float , NULL ) ; if( shd->ivec != NULL ){ memcpy( mv->ivec , shd->ivec , sizeof(int)*shd->nvec ) ; } else { for( iv=0 ; iv < shd->nvec ; iv++ ) mv->ivec[iv] = iv ; } THD_vectim_to_dset( mv , dset ) ; VECTIM_destroy( mv ) ; return dset ; }