Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

edt_emptycopy.c

Go to the documentation of this file.
00001 /*****************************************************************************
00002    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006 
00007 #include "mrilib.h"
00008 
00009 /*****************  New routines for AFNI-96  ***************************/
00010 
00011 #define DUMMY_NAME "zyxt"  /* 07 Mar 2000: changed from Elvis */
00012 
00013 /*--------------------------------------------------------------------
00014   Routine to make a dataset that is an empty copy of an input dataset.
00015   Will usually be followed by EDIT_dset_items to alter some internals.
00016   Note that old_dset can be NULL, in which case EDIT_dset_items
00017   will definitely need to be called before the new dataset is of use.
00018 ----------------------------------------------------------------------*/
00019 
00020 THD_3dim_dataset * EDIT_empty_copy( THD_3dim_dataset *old_dset )
00021 {
00022    THD_3dim_dataset *new_dset ;
00023    THD_datablock    *new_dblk ;
00024    THD_dataxes      *new_daxes ;
00025    THD_timeaxis     *new_taxis ;
00026    THD_diskptr      *new_dkptr ;
00027    int               new_nvals , old_good ;
00028 
00029 ENTRY("EDIT_empty_copy") ; /* 29 Aug 2001 */
00030 
00031    old_good = ISVALID_3DIM_DATASET(old_dset) ;
00032 
00033    /** make some new places to store stuff **/
00034 
00035    new_dset                      = myXtNew( THD_3dim_dataset ) ;
00036    new_dblk  = new_dset->dblk    = myXtNew( THD_datablock ) ;
00037    new_daxes = new_dset->daxes   = myXtNew( THD_dataxes ) ;
00038    new_dkptr = new_dblk->diskptr = myXtNew( THD_diskptr ) ;
00039 
00040    INIT_KILL(new_dset->kl) ; INIT_KILL(new_dblk->kl) ;
00041    ADDTO_KILL(new_dset->kl,new_dblk)  ;
00042    ADDTO_KILL(new_dset->kl,new_daxes) ;
00043    ADDTO_KILL(new_dset->kl,new_dkptr) ;
00044 
00045    new_dset->wod_daxes         = myXtNew(THD_dataxes) ;
00046    new_dset->wod_daxes->parent = (XtPointer) new_dset ;
00047    new_dset->wod_flag          = False ;
00048 
00049    ADDTO_KILL(new_dset->kl,new_dset->wod_daxes) ;
00050 
00051    new_dset->idcode = MCW_new_idcode() ;
00052    ZERO_IDCODE(new_dset->anat_parent_idcode) ;
00053    ZERO_IDCODE(new_dset->warp_parent_idcode) ;
00054 
00055    if( old_good ){
00056       new_dset->type      = old_dset->type ;      /* data types */
00057       new_dset->func_type = old_dset->func_type ;
00058       new_dset->view_type = old_dset->view_type ;
00059       new_nvals           = old_dset->dblk->nvals ;
00060    } else {
00061       new_dset->type      = HEAD_ANAT_TYPE ;
00062       new_dset->func_type = ANAT_SPGR_TYPE ;
00063       new_dset->view_type = VIEW_ORIGINAL_TYPE ;
00064       new_nvals           = ANAT_nvals[new_dset->func_type] ;
00065    }
00066 
00067    new_dset->warp        = NULL ;
00068    new_dset->anat_parent = NULL ;
00069    new_dset->markers     = NULL ;
00070    new_dset->warp_parent = NULL ;
00071 
00072    /*-- 14 Dec 1999: copy the anat_parent, too --*/
00073 
00074    if( old_good ){
00075       new_dset->anat_parent = old_dset->anat_parent  ; /* actual link, for use now */
00076       EDIT_COPY_ANATOMY_PARENT_ID(new_dset,old_dset) ; /* idcode, for HEAD file later */
00077    }
00078 
00079    /*-- end of anat_parent copy --*/
00080 
00081    new_dset->vox_warp       = myXtNew( THD_warp ) ;  /* create a voxel warp */
00082    new_dset->vox_warp->type = ILLEGAL_TYPE ;         /* but don't put anything in it */
00083    new_dset->self_warp      = NULL ;                 /* 26 Aug 2002 */
00084 
00085    new_dset->warp_parent_name[0] = '\0' ;
00086    new_dset->anat_parent_name[0] = '\0' ;
00087 
00088    MCW_strncpy( new_dset->self_name , DUMMY_NAME , THD_MAX_NAME  ) ;
00089    MCW_strncpy( new_dset->label1    , DUMMY_NAME , THD_MAX_LABEL ) ;
00090    MCW_strncpy( new_dset->label2    , DUMMY_NAME , THD_MAX_LABEL ) ;
00091 
00092    new_dset->death_mark  = 0 ;
00093    new_dset->tcat_list   = NULL ;
00094    new_dset->tcat_num    = 0 ;
00095    new_dset->tcat_len    = NULL ;
00096 #ifdef ALLOW_DATASET_VLIST
00097    new_dset->pts         = NULL ;
00098 #endif
00099    new_dset->tagset      = NULL ;  /* Oct 1998 */
00100 
00101    new_dkptr->type         = DISKPTR_TYPE ;
00102    new_dkptr->rank         = 3 ;
00103    new_dkptr->nvals        = new_nvals ;
00104    new_dkptr->storage_mode = STORAGE_BY_BRICK ;
00105    new_dkptr->byte_order   = THD_get_write_order() ;  /* 25 April 1998 */
00106    if( old_good ){
00107       new_dkptr->dimsizes[0]  = old_dset->daxes->nxx ;
00108       new_dkptr->dimsizes[1]  = old_dset->daxes->nyy ;
00109       new_dkptr->dimsizes[2]  = old_dset->daxes->nzz ;
00110    } else {
00111       new_dkptr->dimsizes[0]  = 2 ;
00112       new_dkptr->dimsizes[1]  = 2 ;
00113       new_dkptr->dimsizes[2]  = 2 ;
00114    }
00115 
00116    if( old_good )
00117       THD_init_diskptr_names( new_dkptr ,
00118                               old_dset->dblk->diskptr->directory_name ,
00119                               NULL , DUMMY_NAME ,
00120                               new_dset->view_type , True ) ;
00121    else
00122       THD_init_diskptr_names( new_dkptr ,
00123                               "./" , NULL , DUMMY_NAME ,
00124                               new_dset->view_type , True ) ;
00125 
00126    new_dblk->type        = DATABLOCK_TYPE ;
00127    new_dblk->nvals       = new_nvals ;
00128    new_dblk->malloc_type = DATABLOCK_MEM_MALLOC ;
00129    new_dblk->natr        = new_dblk->natr_alloc = 0 ;
00130    new_dblk->atr         = NULL ;
00131    new_dblk->parent      = (XtPointer) new_dset ;
00132 
00133    DBLK_unlock(new_dblk) ;  /* Feb 1998 */
00134 
00135    new_dblk->brick_fac   = NULL ;
00136    new_dblk->brick_bytes = NULL ;
00137    new_dblk->brick       = NULL ;
00138    if( old_good )
00139       THD_init_datablock_brick( new_dblk , -1 , old_dset->dblk ) ;
00140    else
00141       THD_init_datablock_brick( new_dblk , MRI_short , NULL ) ;
00142 
00143    if( old_good && old_dset->keywords != NULL )
00144       THD_store_dataset_keywords( new_dset , old_dset->keywords ) ;
00145    else
00146       new_dset->keywords = NULL ;
00147 
00148    THD_null_datablock_auxdata( new_dblk ) ;
00149    if( old_good ) THD_copy_datablock_auxdata( old_dset->dblk , new_dblk ) ;
00150 
00151    new_dblk->master_nvals = 0 ;     /* 11 Jan 1999 */
00152    new_dblk->master_ival  = NULL ;  /* Copy does not inherit mastery */
00153    new_dblk->master_bytes = NULL ;
00154 
00155    if( old_good )
00156      *new_daxes  = *(old_dset->daxes) ;    /* copy all contents */
00157    else {
00158      new_daxes->type = DATAXES_TYPE ;      /* make up contents */
00159 
00160      new_daxes->nxx = new_dkptr->dimsizes[0] ;
00161      new_daxes->nyy = new_dkptr->dimsizes[1] ;
00162      new_daxes->nzz = new_dkptr->dimsizes[2] ;
00163 
00164      new_daxes->xxorg = new_daxes->yyorg = new_daxes->zzorg = -0.5 ;
00165      new_daxes->xxdel = new_daxes->yydel = new_daxes->zzdel =  1.0 ;
00166 
00167      new_daxes->xxorient = ORI_R2L_TYPE ;
00168      new_daxes->yyorient = ORI_A2P_TYPE ;
00169      new_daxes->zzorient = ORI_I2S_TYPE ;
00170      LOAD_DIAG_MAT(new_daxes->to_dicomm,1,1,1) ;
00171 
00172      new_daxes->xxmin = new_daxes->yymin = new_daxes->zzmin = -0.5 ;
00173      new_daxes->xxmax = new_daxes->yymax = new_daxes->zzmax =  0.5 ;
00174    }
00175    new_daxes->parent = (XtPointer) new_dset ;
00176 
00177    new_dset->stats   = NULL ;
00178    new_dset->parent  = NULL ;
00179 
00180    if( old_good )
00181      INIT_STAT_AUX( new_dset , MAX_STAT_AUX , old_dset->stat_aux ) ;
00182    else
00183      ZERO_STAT_AUX( new_dset ) ;
00184 
00185    if( old_good && ISVALID_TIMEAXIS(old_dset->taxis) ){
00186      new_taxis = new_dset->taxis = myXtNew( THD_timeaxis ) ;
00187 
00188      *new_taxis = *old_dset->taxis ;  /* copy contents */
00189 
00190      if( new_taxis->nsl > 0 ){        /* copy toff_sl array, if present */
00191        int isl ;
00192        new_taxis->toff_sl = (float *) XtMalloc( sizeof(float) * new_taxis->nsl ) ;
00193        for( isl = 0 ; isl < new_taxis->nsl ; isl++ )
00194          new_taxis->toff_sl[isl] = old_dset->taxis->toff_sl[isl] ;
00195      } else {
00196        new_taxis->toff_sl = NULL ;
00197      }
00198    } else {
00199      new_dset->taxis = NULL ;
00200    }
00201 
00202    RETURN( new_dset );
00203 }
00204 
00205 /*-----------------------------------------------------------------------*/
00206 /*! Create a simple empty datablock, to be filled in later. */
00207 
00208 THD_datablock * EDIT_empty_datablock(void)
00209 {
00210    THD_datablock *new_dblk ;
00211    THD_diskptr   *new_dkptr ;
00212 
00213 ENTRY("EDIT_empty_datablock") ;
00214 
00215    /** make some new places to store stuff **/
00216 
00217    new_dblk                 = myXtNew( THD_datablock ) ;
00218    new_dblk->type           = DATABLOCK_TYPE ;
00219    new_dblk->brick          = NULL ;
00220    new_dblk->brick_bytes    = NULL ;
00221    new_dblk->brick_fac      = NULL ;
00222    new_dblk->total_bytes    = 0    ;
00223    new_dblk->malloc_type    = DATABLOCK_MEM_UNDEFINED ;
00224    new_dblk->parent         = NULL ;
00225    new_dblk->brick_lab      = NULL ;
00226    new_dblk->brick_keywords = NULL ;
00227    new_dblk->brick_statcode = NULL ;
00228    new_dblk->brick_stataux  = NULL ;
00229    new_dblk->master_nvals   = 0    ; 
00230    new_dblk->master_ival    = NULL ;
00231    new_dblk->master_bytes   = NULL ;
00232    new_dblk->master_bot     = 1.0  ;
00233    new_dblk->master_top     = 0.0  ;
00234    new_dblk->shm_idcode[0]  = '\0' ;
00235    new_dblk->nvals          = 1 ;
00236    new_dblk->natr           = new_dblk->natr_alloc = 0 ;
00237    new_dblk->atr            = NULL ;
00238 
00239    new_dkptr = new_dblk->diskptr = myXtNew( THD_diskptr ) ;
00240 
00241    new_dkptr->type         = DISKPTR_TYPE ;
00242    new_dkptr->rank         = 3 ;
00243    new_dkptr->nvals        = 1 ;
00244    new_dkptr->storage_mode = STORAGE_UNDEFINED ;
00245    new_dkptr->byte_order   = THD_get_write_order() ;
00246    new_dkptr->dimsizes[0]  = 2 ;
00247    new_dkptr->dimsizes[1]  = 2 ;
00248    new_dkptr->dimsizes[2]  = 2 ;
00249 
00250    THD_init_diskptr_names( new_dkptr ,
00251                            "./" , NULL , DUMMY_NAME ,
00252                            VIEW_ORIGINAL_TYPE , True ) ;
00253 
00254    INIT_KILL(new_dblk->kl) ;
00255    ADDTO_KILL(new_dblk->kl,new_dkptr) ;
00256 
00257    DBLK_unlock(new_dblk) ;
00258    THD_null_datablock_auxdata( new_dblk ) ;
00259 
00260    RETURN( new_dblk ) ;
00261 }
 

Powered by Plone

This site conforms to the following standards: