Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
thd_opendset.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008 #include "thd.h"
00009
00010 #undef CHECK_FOR_DATA
00011 #define CHECK_FOR_DATA(fn) \
00012 do{ if( fsize <= 0 ){ \
00013 if( fsize == 0 ) \
00014 fprintf(stderr,"** Can't read ANY data from file '%s'\n",(fn)); \
00015 RETURN(NULL) ; \
00016 }} while(0)
00017
00018
00019
00020
00021
00022
00023 THD_3dim_dataset * THD_open_one_dataset( char *pathname )
00024 {
00025 int ii , plen ;
00026 char dirname[THD_MAX_NAME] , fullname[THD_MAX_NAME] ;
00027 THD_3dim_dataset *dset ;
00028 THD_datablock *dblk ;
00029 char *sub ;
00030 char *fname ;
00031 int offset ;
00032 int fsize ;
00033
00034 ENTRY("THD_open_one_dataset") ;
00035
00036
00037
00038 if( pathname == NULL ||
00039 (plen=strlen(pathname)) == 0 ||
00040 pathname[plen-1] == '/' ) RETURN(NULL) ;
00041
00042
00043
00044 if( getenv("AFNI_USE_THD_open_dataset") != NULL &&
00045 strstr(pathname,"[") != NULL ){
00046
00047 RETURN( THD_open_dataset(pathname) ) ;
00048 }
00049
00050 fsize = THD_filesize(pathname) ;
00051 if( fsize == 0 && !THD_is_file(pathname) ) fsize = -1 ;
00052
00053
00054
00055 if( STRING_HAS_SUFFIX(pathname,".mnc") ){
00056 CHECK_FOR_DATA(pathname) ;
00057 RETURN( THD_open_minc(pathname) ) ;
00058 }
00059
00060
00061
00062 if( STRING_HAS_SUFFIX(pathname,".hdr") ){
00063 CHECK_FOR_DATA(pathname) ;
00064 RETURN( THD_open_analyze(pathname) ) ;
00065 }
00066
00067
00068
00069 if( STRING_HAS_SUFFIX(pathname,".mri") ){
00070 CHECK_FOR_DATA(pathname) ;
00071 RETURN( THD_open_ctfmri(pathname) ) ;
00072 } else if( STRING_HAS_SUFFIX(pathname,".svl") ){
00073 CHECK_FOR_DATA(pathname) ;
00074 RETURN( THD_open_ctfsam(pathname) ) ;
00075 }
00076
00077
00078
00079 if( STRING_HAS_SUFFIX(pathname,".1D") ){
00080 CHECK_FOR_DATA(pathname) ;
00081 RETURN( THD_open_1D(pathname) ) ;
00082 } else if( STRING_HAS_SUFFIX(pathname,".3D") ){
00083 CHECK_FOR_DATA(pathname) ;
00084 RETURN( THD_open_3D(pathname) ) ;
00085 }
00086
00087
00088
00089 if( STRING_HAS_SUFFIX(pathname,".nii") ||
00090 STRING_HAS_SUFFIX(pathname,".nii.gz") ||
00091 STRING_HAS_SUFFIX(pathname,".nia") ){
00092
00093 CHECK_FOR_DATA(pathname) ;
00094 RETURN( THD_open_nifti(pathname) ) ;
00095 }
00096
00097
00098
00099 if( STRING_HAS_SUFFIX(pathname,".mpg") ||
00100 STRING_HAS_SUFFIX(pathname,".MPG") ||
00101 STRING_HAS_SUFFIX(pathname,".MPEG") ||
00102 STRING_HAS_SUFFIX(pathname,".mpeg") ){
00103
00104 CHECK_FOR_DATA(pathname) ;
00105 RETURN( THD_open_mpeg(pathname) ) ;
00106 }
00107
00108
00109
00110
00111 for( ii=plen-1 ; ii >= 0 ; ii-- ) if( pathname[ii] == '/' ) break ;
00112
00113 if( ii < 0 ){
00114 strcpy( dirname , "./" ) ;
00115 } else {
00116 strcpy( dirname , pathname ) ;
00117 dirname[ii+1] = '\0' ;
00118 }
00119 offset = ii + 1 ;
00120
00121
00122
00123 strcpy( fullname , pathname ) ;
00124 fname = fullname + offset ;
00125
00126
00127 sub = strstr( fname , DATASET_HEADER_SUFFIX ) ;
00128
00129 if( sub == NULL ){
00130 sub = strstr( fname , DATASET_BRICK_SUFFIX ) ;
00131
00132 if( sub == NULL ){
00133 ii = strlen(fullname) ;
00134 if( fullname[ii-1] != '.' ) strcat( fullname , "." ) ;
00135 strcat( fullname , DATASET_HEADER_SUFFIX ) ;
00136
00137 } else {
00138 strcpy( sub , DATASET_HEADER_SUFFIX ) ;
00139 }
00140 }
00141
00142
00143
00144 fsize = THD_filesize(fullname) ;
00145 if( fsize == 0 && !THD_is_file(pathname) ) fsize = -1 ;
00146 CHECK_FOR_DATA(fullname) ;
00147
00148 dblk = THD_init_one_datablock( dirname , fullname ) ;
00149 if( dblk == NULL ) RETURN(NULL) ;
00150
00151 dset = THD_3dim_from_block( dblk ) ;
00152 RETURN(dset) ;
00153 }
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 int THD_is_dataset( char *sname , char *pname , int vt )
00165 {
00166 THD_3dim_dataset *dset ;
00167 int ii , vv ;
00168
00169 ENTRY("THD_is_dataset") ;
00170
00171 if( pname == NULL ) RETURN(-1) ;
00172
00173 dset = EDIT_empty_copy(NULL) ;
00174 EDIT_dset_items( dset , ADN_prefix , pname , ADN_none ) ;
00175
00176 if( sname != NULL )
00177 EDIT_dset_items( dset , ADN_directory_name , sname , ADN_none ) ;
00178
00179 if( vt >= FIRST_VIEW_TYPE && vt <= LAST_VIEW_TYPE ){
00180 EDIT_dset_items( dset , ADN_view_type , vt , ADN_none ) ;
00181 ii = THD_is_file(dset->dblk->diskptr->header_name);
00182 THD_delete_3dim_dataset(dset,False) ;
00183 if( ii ) RETURN(vt) ;
00184 RETURN(-1) ;
00185 }
00186
00187 for( vv=FIRST_VIEW_TYPE ; vv <= LAST_VIEW_TYPE ; vv++ ){
00188 EDIT_dset_items( dset , ADN_view_type , vv , ADN_none ) ;
00189 ii = THD_is_file(dset->dblk->diskptr->header_name);
00190 if( ii ){ THD_delete_3dim_dataset(dset,False); RETURN(vv); }
00191 }
00192
00193 THD_delete_3dim_dataset( dset , False ) ;
00194 RETURN(-1) ;
00195 }
00196
00197
00198
00199 char * THD_dataset_headname( char *sname , char *pname , int vt )
00200 {
00201 THD_3dim_dataset *dset ;
00202 char *str ; int ll ;
00203
00204 ENTRY("THD_dataset_headname") ;
00205
00206 if( pname == NULL ) RETURN(NULL) ;
00207
00208 dset = EDIT_empty_copy(NULL) ;
00209 EDIT_dset_items( dset , ADN_prefix , pname , ADN_none ) ;
00210
00211 if( sname != NULL )
00212 EDIT_dset_items( dset , ADN_directory_name , sname , ADN_none ) ;
00213
00214 if( vt >= FIRST_VIEW_TYPE && vt <= LAST_VIEW_TYPE )
00215 EDIT_dset_items( dset , ADN_view_type , vt , ADN_none ) ;
00216
00217 ll = strlen(dset->dblk->diskptr->header_name) + 1 ;
00218 str = (char *) malloc(sizeof(char)*ll ) ;
00219 strcpy( str , dset->dblk->diskptr->header_name ) ;
00220
00221 THD_delete_3dim_dataset( dset , False ) ;
00222 RETURN(str) ;
00223 }