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  

3dAFNItoNIML.c File Reference

#include "mrilib.h"

Go to the source code of this file.


Functions

int main (int argc, char *argv[])

Function Documentation

int main int    argc,
char *    argv[]
 

convert three sub-briks to a raw dataset with consecutive triplets

Definition at line 6 of file 3dAFNItoNIML.c.

References argc, DSET_load, DSET_LOADED, DSET_NVALS, DSET_PREFIX, DSET_unload, enable_mcw_malloc(), machdep(), mainENTRY, NI_BINARY_MODE, NI_free_element(), NI_rename_group(), NI_set_attribute(), NI_stream_closenow(), NI_stream_open(), NI_stream_writecheck(), NI_TEXT_MODE, NI_write_element(), NI_write_procins(), PRINT_VERSION, SBFLAG_INDEX, STATUS, THD_dataset_to_niml(), THD_nimlize_dsetatr(), THD_open_dataset(), and THD_subbrick_to_niml().

00007 {
00008    THD_3dim_dataset *dset ;
00009    NI_group *ngr ;
00010    NI_stream ns_out ;
00011    int iarg=1 , dodata=0 , nout=0 ;
00012    char strname[256] = "stdout:" ;
00013 
00014    /*-- help me if you can --*/
00015 
00016    if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
00017      printf(
00018       "Usage: 3dAFNItoNIML [options] dset\n"
00019       " Dumps AFNI dataset header information to stdout in NIML format.\n"
00020       " Mostly for debugging and testing purposes!\n"
00021       "\n"
00022       " OPTIONS:\n"
00023       "  -data          == Also put the data into the output (will be huge).\n"
00024       "  -tcp:host:port == Instead of stdout, send the dataset to a socket.\n"
00025       "                    (implies '-data' as well)\n"
00026       "\n"
00027       "-- RWCox - Mar 2005\n"
00028      ) ;
00029      exit(0) ;
00030    }
00031 
00032    mainENTRY("3dAFNItoNIML main"); machdep(); PRINT_VERSION("3dAFNItoNIML");
00033    if( PRINT_TRACING ){ STATUS("Enable mcw_malloc()"); enable_mcw_malloc(); }
00034 
00035    /*-- read command line options --*/
00036 
00037    while( iarg < argc && argv[iarg][0] == '-' ){
00038 
00039      if( strcmp(argv[iarg],"-data") == 0 ){
00040        dodata++ ; iarg++ ; continue ;
00041      }
00042 
00043      if( strncmp(argv[iarg],"-tcp:",5) == 0 ){
00044        strcpy(strname,argv[iarg]+1) ; dodata++ ; iarg++ ; continue ;
00045      }
00046 
00047      fprintf(stderr,"** Illegal option: %s\n",argv[iarg]); exit(1);
00048    }
00049 
00050    if( iarg >= argc ){
00051      fprintf(stderr,"** Not enough arguments on command line!\n"); exit(1);
00052    }
00053 
00054    /*-- read dataset --*/
00055 
00056    dset = THD_open_dataset( argv[iarg++] ) ;
00057    if( dset == NULL ){
00058      fprintf(stderr,"** Can't open dataset %s\n",argv[iarg-1]); exit(1);
00059    }
00060 
00061    /*-- convert attributes to NIML --*/
00062 
00063    if( dodata ){
00064      DSET_load(dset) ;
00065      if( !DSET_LOADED(dset) ){
00066        fprintf(stderr,"** Can't load dataset %s\n",argv[iarg-1]); exit(1);
00067      }
00068    }
00069 
00070    switch( dodata ){
00071      default:
00072      case 1:
00073        ngr = THD_dataset_to_niml( dset ) ; /* header and data together */
00074        DSET_unload(dset) ;
00075        if( ngr == NULL ){
00076          fprintf(stderr,"** Can't do THD_dataset_to_niml()\n"); exit(1);
00077        }
00078      break ;
00079 
00080      case 0:
00081      case 2:
00082        ngr = THD_nimlize_dsetatr( dset ) ;      /* header only for now */
00083        if( ngr == NULL ){
00084          fprintf(stderr,"** Can't do THD_nimlize_dsetatr()\n"); exit(1);
00085        }
00086      break ;
00087 
00088      case 3:
00089        ngr = NULL ;           /* will send brick data only, not header */
00090      break ;
00091    }
00092 
00093    /*-- open output stream --*/
00094 
00095    ns_out = NI_stream_open( strname , "w" ) ;
00096    if( ns_out == NULL ){
00097      fprintf(stderr,"** Can't create NIML stream!?\n"); exit(1);
00098    }
00099 
00100    /*-- if have a tcp: stream, must wait for it to connect --*/
00101 
00102    if( strcmp(strname,"stdout:") != 0 ){
00103      int nn , nchk ;
00104      for( nchk=0 ; nchk < 99 ; nchk++ ){
00105        nn = NI_stream_writecheck( ns_out , 777 ) ;
00106        if( nn == 1 ){ if(nchk>0)fprintf(stderr,"\n"); break; }
00107        if( nn <  0 ){ fprintf(stderr,"** NIML stream failure!?\n"); exit(1); }
00108        if( nchk==0 ){ fprintf(stderr,"Waiting"); }
00109        fprintf(stderr,".") ;
00110      }
00111      nn = NI_stream_writecheck( ns_out , 1 ) ;
00112      if( nn <= 0 ){ fprintf(stderr,"** Can't connect!?\n"); exit(1); }
00113 
00114      if( dodata > 1 ) nout += NI_write_procins( ns_out , "keep_reading" ) ;
00115    }
00116 
00117    /*-- if have group element from above, send it now --*/
00118 
00119    if( ngr != NULL ){
00120      NI_rename_group( ngr , "AFNI_dataset" ) ;
00121      NI_set_attribute( ngr , "self_prefix" , DSET_PREFIX(dset) ) ;
00122      nout += NI_write_element( ns_out , ngr , NI_TEXT_MODE ) ;
00123      NI_free_element( ngr ) ;
00124    }
00125 
00126    /*-- if sending data sub-bricks separately, do that now --*/
00127 
00128    if( dodata > 1 ){
00129      int iv ; NI_element *nel ;
00130      for( iv=0 ; iv < DSET_NVALS(dset) ; iv++ ){
00131        nel = THD_subbrick_to_niml( dset , iv , SBFLAG_INDEX ) ;
00132        if( nel != NULL ) nout += NI_write_element( ns_out , nel , NI_BINARY_MODE ) ;
00133        NI_free_element(nel) ;
00134      }
00135    }
00136 
00137    /*-- Ciao baby --*/
00138 
00139    NI_stream_closenow( ns_out ) ;
00140    fprintf(stderr,"++ Wrote %d bytes\n",nout) ;
00141    exit(0) ;
00142 }
 

Powered by Plone

This site conforms to the following standards: