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  

plug_copy.c File Reference

#include "afni.h"

Go to the source code of this file.


Defines

#define NFILL   3
#define NDTYPE   4

Functions

char * COPY_main (PLUGIN_interface *)
DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface * PLUGIN_init (int ncall)

Variables

char helpstring []
char * fill_options [NFILL] = { "Data [All]" , "Zero [All]" , "Zero [One]" }
char * dtype_options [NDTYPE]
int dtype_kinds [NDTYPE]

Define Documentation

#define NDTYPE   4
 

Definition at line 43 of file plug_copy.c.

Referenced by COPY_main(), and PLUGIN_init().

#define NFILL   3
 

Definition at line 40 of file plug_copy.c.

Referenced by COPY_main(), and PLUGIN_init().


Function Documentation

char * COPY_main PLUGIN_interface *    [static]
 

Definition at line 107 of file plug_copy.c.

References ADN_datum_all, ADN_func_type, ADN_label1, ADN_none, ADN_ntt, ADN_nvals, ADN_prefix, ADN_type, DSET_BRICK_ARRAY, DSET_BRICK_BYTES, DSET_BRICK_TYPE, DSET_delete, DSET_NVALS, DSET_unload, dtype_kinds, dtype_options, EDIT_BRICK_FACTOR, EDIT_dset_items(), EDIT_empty_copy(), EDIT_substitute_brick(), fill_options, free, FUNC_FIM_TYPE, HEAD_ANAT_TYPE, HEAD_FUNC_TYPE, ISFUNCTYPE, LAST_FUNC_TYPE, malloc, NDTYPE, NFILL, NUM_DSET_TYPES, PLUTO_add_dset(), PLUTO_commandstring(), PLUTO_copy_dset(), PLUTO_find_dset(), PLUTO_prefix_ok(), PLUTO_string_index(), THD_delete_3dim_dataset(), tross_Append_History(), tross_Copy_History(), and THD_3dim_dataset::type.

Referenced by PLUGIN_init().

00108 {
00109    char * tag , * new_prefix , * cpt ;
00110    MCW_idcode * idc ;
00111    THD_3dim_dataset * dset , * new_dset ;
00112    int ival , zfill=0 , ftyp=-1 , dtyp=-1, type_index=-1, data_type=-1 ;
00113 
00114    /*--------------------------------------------------------------------*/
00115    /*----- Check inputs from AFNI to see if they are reasonable-ish -----*/
00116 
00117    if( plint == NULL )
00118       return "**********************\n"
00119              "COPY_main:  NULL input\n"
00120              "**********************"  ;
00121 
00122    PLUTO_next_option(plint) ;
00123    idc  = PLUTO_get_idcode(plint) ;
00124    dset = PLUTO_find_dset(idc) ;
00125    if( dset == NULL )
00126       return "*****************************\n"
00127              "COPY_main:  bad input dataset\n"
00128              "*****************************"  ;
00129 
00130    dtyp = dset->type ;
00131 
00132    PLUTO_next_option(plint) ;
00133    new_prefix = PLUTO_get_string(plint) ;
00134    if( ! PLUTO_prefix_ok(new_prefix) )
00135       return "**********************\n"
00136              "COPY_main:  bad prefix\n"
00137              "**********************"  ;
00138 
00139    tag = PLUTO_get_optiontag(plint) ;
00140    while( tag != NULL ){
00141 
00142       if( strcmp(tag,"Data Fill") == 0 ){
00143          cpt   = PLUTO_get_string(plint) ;
00144          if( cpt != NULL )
00145             zfill = PLUTO_string_index( cpt , NFILL , fill_options ) ;
00146       }
00147 
00148       else if( strcmp(tag,"Dataset") == 0 ){
00149          cpt  = PLUTO_get_string(plint) ;
00150          ftyp = PLUTO_string_index( cpt , NUM_DSET_TYPES,DSET_prefixstr ) ;
00151          if( ftyp >= 0 ){
00152             if( ftyp <= LAST_FUNC_TYPE ){
00153                dtyp = HEAD_FUNC_TYPE ;
00154             } else {
00155                ftyp -= (LAST_FUNC_TYPE+1) ;  /* 14 Jul 1998 */
00156                dtyp  = HEAD_ANAT_TYPE ;
00157             }
00158          }
00159       }
00160 
00161       else if( strcmp(tag, "Datum") == 0 ){
00162          cpt  = PLUTO_get_string(plint) ;
00163          type_index = PLUTO_string_index( cpt, NDTYPE, dtype_options ) ;
00164          if ( (type_index >= 0) && (type_index < NDTYPE) )
00165             data_type = dtype_kinds[type_index] ;
00166       }
00167 
00168       tag = PLUTO_get_optiontag(plint) ;
00169    }
00170 
00171    /*------------------------------------------------------*/
00172    /*---------- At this point, the inputs are OK ----------*/
00173 
00174    /*-- make a new dataset --*/
00175 
00176    if( zfill == 0 ){
00177       new_dset = PLUTO_copy_dset( dset , new_prefix ) ;
00178    } else {
00179       new_dset = EDIT_empty_copy( dset ) ;
00180 
00181       if( ISFUNCTYPE(dtyp) && ( zfill == 2 ) )
00182          ftyp = FUNC_FIM_TYPE ;  /* 14 Jul 1998 */
00183    }
00184 
00185    if( new_dset == NULL )
00186       return  "****************************************\n"
00187               "COPY_main:  failed to copy input dataset\n"
00188               "****************************************"  ;
00189 
00190    DSET_unload( dset ) ;  /* unload old one from memory */
00191 
00192    /*--- modify dataset, if desired ---*/
00193 
00194    if( ftyp >= 0 ) EDIT_dset_items( new_dset ,
00195                                        ADN_type      , dtyp ,
00196                                        ADN_func_type , ftyp ,
00197                                     ADN_none ) ;
00198 
00199    /*--- change type of data stored ---*/
00200 
00201    if ( (data_type >= 0) )
00202    {
00203       if ( zfill )
00204          EDIT_dset_items( new_dset ,
00205                              ADN_datum_all, data_type,
00206                           ADN_none ) ;
00207       else{
00208          DSET_delete(new_dset) ;
00209 
00210          return  "****************************************************\n"
00211                  "COPY_main:  Cannot change type of non-zeroed dataset\n"
00212                  "****************************************************"  ;
00213       }
00214    }
00215 
00216    /* if 'Zero [All]' or 'Zero [One]' */
00217 
00218    if( zfill ) {
00219       int ityp , nbytes , nvals , ival ;
00220       void * new_brick , * bp ;
00221 
00222       EDIT_dset_items( new_dset ,
00223                           ADN_prefix , new_prefix ,
00224                           ADN_label1 , new_prefix ,
00225                        ADN_none ) ;
00226 
00227       if ( zfill == 2 ) { /* for 'Zero [One]' case - just make one brick */
00228          EDIT_dset_items( new_dset ,
00229                              ADN_nvals  , 1 ,
00230                              ADN_ntt    , 0 ,
00231                           ADN_none ) ;
00232       }
00233 
00234       nvals = DSET_NVALS(new_dset) ;
00235 
00236       for ( ival = 0 ; ival < nvals ; ival++)        /* get memory for bricks */
00237       {                                              /* and zero fill */
00238          ityp      = DSET_BRICK_TYPE(new_dset,ival) ;
00239          nbytes    = DSET_BRICK_BYTES(new_dset,ival) ;   /* how much data */
00240          new_brick = malloc( nbytes ) ;
00241          EDIT_substitute_brick( new_dset , ival , ityp , new_brick ) ;
00242 
00243          bp     = DSET_BRICK_ARRAY(new_dset,ival) ;  /* brick pointer */
00244          EDIT_BRICK_FACTOR(new_dset,ival,0.0) ;      /* brick factor  */
00245          memset( bp , 0 , nbytes ) ;
00246       }
00247    }
00248 
00249    { char *his ;
00250      tross_Copy_History( dset , new_dset ) ;
00251      his = PLUTO_commandstring( plint ) ;
00252      tross_Append_History( new_dset , his ) ; free(his) ;
00253    }
00254 
00255    ival = PLUTO_add_dset( plint , new_dset , DSET_ACTION_MAKE_CURRENT ) ;
00256 
00257    if( ival ){
00258       THD_delete_3dim_dataset( new_dset , False ) ;
00259       return "**********************************************\n"
00260              "COPY_main:  failure to add new dataset to AFNI\n"
00261              "**********************************************" ;
00262    }
00263 
00264    /*-- done successfully!!! --*/
00265 
00266    return NULL ;
00267 }

DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface* PLUGIN_init int    ncall
 

Definition at line 56 of file plug_copy.c.

References ANAT_ALL_MASK, COPY_main(), dtype_options, fill_options, FUNC_ALL_MASK, helpstring, NDTYPE, NFILL, NUM_DSET_TYPES, PLUTO_add_hint(), PLUTO_set_runlabels(), and PLUTO_set_sequence().

00057 {
00058    PLUGIN_interface * plint ;
00059 
00060    if( ncall > 0 ) return NULL ;  /* only one interface */
00061 
00062    /*-- set titles and call point --*/
00063 
00064    plint = PLUTO_new_interface( "Dataset Copy" , "Make a Copy of a Dataset" , helpstring ,
00065                                  PLUGIN_CALL_VIA_MENU , COPY_main  ) ;
00066 
00067    PLUTO_add_hint( plint , "Make a Copy of a Dataset" ) ;
00068 
00069    PLUTO_set_sequence( plint , "A:newdset:copy" ) ;
00070 
00071    PLUTO_set_runlabels( plint , "Copy+Keep" , "Copy+Close" ) ;  /* 04 Nov 2003 */
00072 
00073    /*-- first line of input: Dataset --*/
00074 
00075    PLUTO_add_option( plint , "Input" , "Input" , TRUE ) ;
00076    PLUTO_add_dataset(plint , "Dataset" ,
00077                                     ANAT_ALL_MASK , FUNC_ALL_MASK ,
00078                                     DIMEN_ALL_MASK | BRICK_ALLTYPE_MASK ) ;
00079 
00080    /*-- second line of input: Prefix for output dataset --*/
00081 
00082    PLUTO_add_option( plint , "Output" , "Output" , TRUE ) ;
00083    PLUTO_add_string( plint , "Prefix" , 0,NULL , 19 ) ;
00084 
00085    /*-- third line of input: Fill option --*/
00086 
00087    PLUTO_add_option( plint , "Data Fill" , "Data Fill" , FALSE ) ;
00088    PLUTO_add_string( plint , "Method" ,  NFILL,fill_options , 0 ) ;
00089 
00090    /*-- fourth line of input: Type option --*/
00091 
00092    PLUTO_add_option( plint , "Dataset" , "Dataset" , FALSE ) ;
00093    PLUTO_add_string( plint , "Type" , NUM_DSET_TYPES,DSET_prefixstr , 0 ) ;
00094 
00095    /*-- fifth line of input: Datum option --*/
00096 
00097    PLUTO_add_option( plint , "Datum" , "Datum" , FALSE ) ;
00098    PLUTO_add_string( plint , "Datum" , NDTYPE,dtype_options, 2 ) ;
00099 
00100    return plint ;
00101 }

Variable Documentation

int dtype_kinds[NDTYPE] [static]
 

Initial value:

 {
  MRI_byte , MRI_short , MRI_float , MRI_complex }

Definition at line 46 of file plug_copy.c.

Referenced by COPY_main().

char* dtype_options[NDTYPE] [static]
 

Initial value:

 {
  "byte" , "short" , "float" , "complex" }

Definition at line 44 of file plug_copy.c.

Referenced by COPY_main(), and PLUGIN_init().

char* fill_options[NFILL] = { "Data [All]" , "Zero [All]" , "Zero [One]" } [static]
 

Definition at line 41 of file plug_copy.c.

Referenced by COPY_main(), and PLUGIN_init().

char helpstring[] [static]
 

Initial value:

   " Purpose: Creating a copy of a dataset.\n"
   " Inputs:\n"
   " Dataset = A dataset in the current session that exists in memory\n"
   "               (not warp-on-demand).\n"
   " Prefix  = Filename prefix to be used for the output dataset.\n"
   " Fill    = How to fill voxel data in new dataset:\n"
   "             Data [All] = copy all sub-bricks from input\n"
   "             Zero [All] = fill all sub-bricks with zero\n"
   "             Zero [One] = make new dataset have only 1 sub-brick,\n"
   "                          and fill with zero -- this is useful for\n"
   "                          creating mask datasets using the\n"
   "                          'Draw Dataset' plugin.\n"
   " Type    = Lets you change the 'type' of the output dataset, for\n"
   "             example from anat to func.\n"
   " Datum   = Lets you set the data type of the new brick.  This will\n"
   "             only work when using \"Zero [All]\" or \"Zero [One]\"\n"
   "             Fill modes.\n"
   "Author -- RWCox"

Definition at line 19 of file plug_copy.c.

Referenced by PLUGIN_init().

 

Powered by Plone

This site conforms to the following standards: