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 }