Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
edt_addbrick.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 void EDIT_add_bricklist( THD_3dim_dataset * dset ,
00025 int nbr, int * tbr, float * fbr , void *sbr[] )
00026 {
00027 int ibr , typ , nx,ny,nz , nvals,new_nvals ;
00028 THD_datablock * dblk ;
00029 MRI_IMAGE * qim ;
00030 char str[32] ;
00031
00032 ENTRY("EDIT_add_bricklist") ;
00033
00034
00035
00036 if( ! ISVALID_3DIM_DATASET(dset) || nbr <= 0 ) EXRETURN;
00037 if( dset->dblk->brick == NULL ) EXRETURN;
00038 if( dset->dblk->malloc_type != DATABLOCK_MEM_MALLOC )EXRETURN;
00039
00040 dblk = dset->dblk ;
00041 nvals = dblk->nvals ;
00042 nx = dblk->diskptr->dimsizes[0] ;
00043 ny = dblk->diskptr->dimsizes[1] ;
00044 nz = dblk->diskptr->dimsizes[2] ;
00045
00046
00047
00048 new_nvals = nvals + nbr ;
00049 dblk->brick_bytes = (int *) XtRealloc( (char *) dblk->brick_bytes ,
00050 sizeof(int) * new_nvals ) ;
00051
00052 dblk->brick_fac = (float *) XtRealloc( (char *) dblk->brick_fac ,
00053 sizeof(float) * new_nvals ) ;
00054
00055 dblk->nvals = dblk->diskptr->nvals = new_nvals ;
00056
00057
00058
00059 for( ibr=0 ; ibr < nbr ; ibr++ ){
00060 typ = (tbr != NULL ) ? tbr[ibr] : MRI_short ;
00061 qim = mri_new_vol_empty( nx,ny,nz , typ ) ;
00062
00063 if( sbr != NULL && sbr[ibr] != NULL )
00064 mri_fix_data_pointer( sbr[ibr] , qim ) ;
00065
00066 ADDTO_IMARR( dblk->brick , qim ) ;
00067
00068 dblk->brick_fac[nvals+ibr] = (fbr != NULL) ? fbr[ibr] : 0.0 ;
00069 dblk->brick_bytes[nvals+ibr] = qim->pixel_size * qim->nvox ;
00070 dblk->total_bytes += dblk->brick_bytes[ibr] ;
00071 }
00072
00073
00074
00075 if( dblk->brick_lab == NULL )
00076 THD_init_datablock_labels( dblk ) ;
00077 else
00078 dblk->brick_lab = (char **) XtRealloc( (char *) dblk->brick_lab ,
00079 sizeof(char *) * new_nvals ) ;
00080 for( ibr=0 ; ibr < nbr ; ibr++ ){
00081 sprintf( str , "#%d" , nvals+ibr ) ;
00082 dblk->brick_lab[nvals+ibr] = NULL ;
00083 THD_store_datablock_label( dblk , nvals+ibr , str ) ;
00084 }
00085
00086
00087
00088 if( dblk->brick_keywords == NULL )
00089 THD_init_datablock_keywords( dblk ) ;
00090 else
00091 dblk->brick_keywords = (char **) XtRealloc( (char *) dblk->brick_keywords ,
00092 sizeof(char *) * new_nvals ) ;
00093 for( ibr=0 ; ibr < nbr ; ibr++ ){
00094 dblk->brick_keywords[nvals+ibr] = NULL ;
00095 THD_store_datablock_keywords( dblk , nvals+ibr , NULL ) ;
00096 }
00097
00098
00099
00100 if( dblk->brick_statcode != NULL ){
00101 dblk->brick_statcode = (int *) XtRealloc( (char *) dblk->brick_statcode ,
00102 sizeof(int) * new_nvals ) ;
00103 dblk->brick_stataux = (float **) XtRealloc( (char *) dblk->brick_stataux ,
00104 sizeof(float *) * new_nvals ) ;
00105
00106 for( ibr=0 ; ibr < nbr ; ibr++ ){
00107 dblk->brick_statcode[nvals+ibr] = 0 ;
00108 dblk->brick_stataux[nvals+ibr] = NULL ;
00109 }
00110 }
00111
00112 EXRETURN;
00113 }
00114
00115 void EDIT_add_brick( THD_3dim_dataset * dset, int typ , float fac , void * br )
00116 {
00117 int ttt = typ ;
00118 float fff = fac ;
00119 void * bbb = br ;
00120
00121 EDIT_add_bricklist( dset , 1 , &ttt , &fff , &bbb ) ;
00122 return ;
00123 }