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  

thd_writeatr.c File Reference

#include "mrilib.h"
#include "thd.h"

Go to the source code of this file.


Functions

Boolean THD_write_atr (THD_datablock *blk)
Boolean THD_write_nimlatr (THD_datablock *blk)

Function Documentation

Boolean THD_write_atr THD_datablock   blk
 

Definition at line 12 of file thd_writeatr.c.

References AFNI_yesenv(), THD_datablock::atr, ATR_FLOAT_TYPE, ATR_INT_TYPE, ATR_STRING_TYPE, ATR_string::ch, DBLK_IS_ANALYZE, DBLK_IS_CTFMRI, DBLK_IS_CTFSAM, DBLK_IS_MINC, DBLK_IS_MPEG, DBLK_IS_NIFTI, THD_datablock::diskptr, ENTRY, FAIL, ATR_float::fl, THD_diskptr::header_name, ATR_int::in, ISVALID_DATABLOCK, ISVALID_DISKPTR, ATR_string::name, ATR_int::name, ATR_float::name, THD_datablock::natr, ATR_string::nch, ATR_float::nfl, ATR_int::nin, RETURN, SUCCESS, THD_unzblock(), THD_write_nimlatr(), THD_zblock(), and ATR_any::type.

Referenced by THD_write_datablock().

00013 {
00014    THD_diskptr *dkptr ;
00015    int ia , code , ii ;
00016    ATR_any *atr_any ;
00017    Boolean good = True ;
00018    FILE *header_file ;
00019 
00020 ENTRY("THD_write_atr") ;
00021 
00022    /*--- sanity checks ---*/
00023 
00024    if( ! ISVALID_DATABLOCK(blk) ) RETURN( False );
00025 
00026    dkptr = blk->diskptr ;
00027    if( ! ISVALID_DISKPTR(dkptr) || strlen(dkptr->header_name) == 0 ) RETURN( False );
00028 
00029    if( DBLK_IS_MINC(blk)    ) RETURN( False ); /* 29 Oct 2001 */
00030    if( DBLK_IS_ANALYZE(blk) ) RETURN( False ); /* 27 Aug 2002 */
00031    if( DBLK_IS_NIFTI(blk)   ) RETURN( False ); /* 28 Aug 2003 */
00032    if( DBLK_IS_CTFMRI(blk)  ) RETURN( False );
00033    if( DBLK_IS_CTFSAM(blk)  ) RETURN( False );
00034    if( DBLK_IS_MPEG(blk)    ) RETURN( False );
00035 
00036    /** 01 Jun 2005: perhaps write in the new NIML format? **/
00037 
00038    if( AFNI_yesenv("AFNI_WRITE_NIML") ){
00039      return THD_write_nimlatr( blk ) ;
00040    }
00041 
00042    /** Write the old AFNI format **/
00043 
00044    header_file = fopen( dkptr->header_name , "w" ) ;
00045    if( header_file == NULL ){
00046       fprintf(stderr,
00047               "*** ERROR: failed to open file %s for attribute writing;\n"
00048               "         - Do you have permission to write to this disk?\n"
00049               "         - Is the disk full?\n" ,
00050               dkptr->header_name) ;
00051       RETURN( False );
00052    }
00053 
00054    for( ia=0 ; ia < blk->natr ; ia++ ){
00055 
00056       atr_any = &(blk->atr[ia]) ;
00057       if( atr_any == NULL ) continue ;
00058 
00059       code = SUCCESS ;
00060       switch( atr_any->type ){
00061 
00062          case ATR_FLOAT_TYPE:{
00063             ATR_float * atr_flo = (ATR_float *) atr_any ;
00064 
00065             code = fprintf( header_file ,
00066                             "\ntype  = %s\nname  = %s\ncount = %d\n" ,
00067                             ATR_typestr[ATR_FLOAT_TYPE] ,
00068                             atr_flo->name , atr_flo->nfl ) ;
00069 
00070             if( code < 1 ){ code = FAIL ; break ; }
00071 
00072             for( ii=0 ; ii < atr_flo->nfl ; ii++ ){
00073                code = fprintf( header_file , " %14.7g" , atr_flo->fl[ii] ) ;
00074                if( ii % 5 == 4 && ii < atr_flo->nfl-1 )
00075                   fprintf( header_file , "\n" ) ;
00076             }
00077 
00078             code = (code < 1 ) ? FAIL : SUCCESS ;
00079          }
00080          break ;
00081 
00082          case ATR_INT_TYPE:{
00083             ATR_int * atr_int = (ATR_int *) atr_any ;
00084 
00085             code = fprintf( header_file ,
00086                             "\ntype = %s\nname = %s\ncount = %d\n" ,
00087                             ATR_typestr[ATR_INT_TYPE] ,
00088                             atr_int->name , atr_int->nin ) ;
00089 
00090             if( code < 1 ){ code = FAIL ; break ; }
00091 
00092             for( ii=0 ; ii < atr_int->nin ; ii++ ){
00093                code = fprintf( header_file , " %d" , atr_int->in[ii] ) ;
00094                if( ii % 5 == 4 && ii < atr_int->nin-1 )
00095                   fprintf( header_file , "\n" ) ;
00096             }
00097 
00098             code = (code < 1 ) ? FAIL : SUCCESS ;
00099          }
00100          break ;
00101 
00102          case ATR_STRING_TYPE:{
00103             ATR_string * atr_str = (ATR_string *) atr_any ;
00104 
00105             code = fprintf( header_file ,
00106                             "\ntype = %s\nname = %s\ncount = %d\n" ,
00107                             ATR_typestr[ATR_STRING_TYPE] ,
00108                             atr_str->name , atr_str->nch ) ;
00109 
00110 
00111             if( code < 1 ){ code = FAIL ; break ; }
00112 
00113             THD_zblock( atr_str->nch , atr_str->ch ) ;
00114 
00115             fprintf( header_file , "'" ) ;
00116             for( ii=0 ; ii < atr_str->nch ; ii++ ){
00117                code = fprintf( header_file , "%c" , atr_str->ch[ii] ) ;
00118             }
00119 
00120             code = (code < 1) ? FAIL : SUCCESS ;
00121 
00122             THD_unzblock( atr_str->nch , atr_str->ch ) ;
00123          }
00124          break ;
00125 
00126       } /* end of switch on atr type */
00127 
00128       good = good && (code != FAIL) ;  /* all must not FAIL */
00129       fprintf(header_file,"\n") ;
00130 
00131    } /* end of loop over all atr's */
00132 
00133    if( good == False ){
00134       fprintf(stderr,
00135               "*** WARNING: error in output to attribute file %s;\n"
00136               "           - Is the disk full?\n" ,
00137               dkptr->header_name) ;
00138    }
00139 
00140    /*--- close it down ---*/
00141 
00142    fclose( header_file ) ;
00143    RETURN( True );
00144 }

Boolean THD_write_nimlatr THD_datablock   blk
 

Write the old AFNI format *

Definition at line 148 of file thd_writeatr.c.

References THD_datablock::diskptr, ENTRY, THD_diskptr::header_name, ISVALID_DSET, NI_set_attribute(), NI_stream_close(), NI_stream_open(), NI_stream_writestring(), NI_TEXT_MODE, NI_write_element(), THD_datablock::parent, THD_diskptr::prefix, RETURN, STATUS, and THD_nimlize_dsetatr().

Referenced by THD_write_atr().

00149 {
00150    NI_stream ns ;
00151    NI_group  *ngr ;
00152    char sname[2048] ;
00153    THD_3dim_dataset *dset ;
00154 
00155 ENTRY("THD_write_nimlatr") ;
00156 
00157    /* get dataset that contains this datablock */
00158 
00159    dset = (THD_3dim_dataset *)blk->parent ;
00160    if( !ISVALID_DSET(dset) ){
00161      STATUS("parent is not valid dataset!"); RETURN(False);      /* bad */
00162    }
00163 
00164    /* convert dataset struct AFNI attributes into a NIML element */
00165 
00166    ngr = THD_nimlize_dsetatr( dset ) ;
00167    if( ngr == NULL ){
00168      STATUS("can't create NIML header element!"); RETURN(False); /* bad */
00169    }
00170    NI_set_attribute( ngr , "self_prefix" , blk->diskptr->prefix ) ;
00171 
00172    /* open output NIML stream (to file) */
00173 
00174    sprintf(sname,"file:%s",blk->diskptr->header_name) ;
00175    ns = NI_stream_open( sname , "w" ) ;
00176    if( ns == (NI_stream)NULL ){
00177      STATUS("can't open output NIML stream!"); RETURN(False);    /* bad */
00178    }
00179 
00180    /* write XML header and then the AFNI header element */
00181 
00182    STATUS("writing NIML header") ;
00183    NI_stream_writestring( ns , "<?xml version='1.0' ?>\n" ) ;
00184    NI_write_element( ns , ngr , NI_TEXT_MODE ) ;
00185    NI_stream_close( ns ) ;
00186    RETURN(True) ;
00187 }
 

Powered by Plone

This site conforms to the following standards: