/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#include "mrilib.h"
#include "thd.h"
/*=============================================================================*/
/*** Read all *.1D (time series) files from a list of directories ***/
MRI_IMARR * THD_get_many_timeseries( THD_string_array * dlist )
{
int id , ii , ndir ;
MRI_IMARR * outar , * tmpar ;
char * epath , * eee ;
char efake[] = "./" ;
THD_string_array *qlist ; /* 02 Feb 2002 */
ENTRY("THD_get_many_timeseries") ;
/*----- sanity check and initialize -----*/
epath = my_getenv( "AFNI_TSPATH" ) ;
if( epath == NULL ) epath = my_getenv( "AFNI_TS_PATH" ) ; /* 07 Oct 1996 */
if( epath == NULL ) epath = efake ; /* 07 Oct 1996 */
ndir = (dlist != NULL) ? dlist->num : 0 ;
if( ndir == 0 && epath == NULL ) RETURN( NULL ) ;
INIT_IMARR( outar ) ;
INIT_SARR( qlist ) ;
/*----- for each input directory, find all *.1D files -----*/
for( id=0 ; id < ndir ; id++ ){
ADDTO_SARR(qlist,dlist->ar[id]) ;
tmpar = THD_get_all_timeseries( dlist->ar[id] ) ;
if( tmpar == NULL ) continue ;
for( ii=0 ; ii < tmpar->num ; ii++ ) /* move images to output array */
ADDTO_IMARR( outar , tmpar->imarr[ii] ) ;
FREE_IMARR(tmpar) ; /* don't need this no more */
}
/*----- also do directories in environment path, if any -----*/
if( epath != NULL ){
int epos =0 , ll = strlen(epath) ;
char * elocal ;
char ename[THD_MAX_NAME] ;
/* copy path list into local memory */
elocal = (char *) malloc( sizeof(char) * (ll+2) ) ;
if( elocal == NULL ){
fprintf(stderr,
"\n*** THD_get_many_timeseries malloc failure - is memory full? ***\n");
EXIT(1) ;
}
strcpy( elocal , epath ) ; elocal[ll] = ' ' ; elocal[ll+1] = '\0' ;
/* replace colons with blanks */
for( ii=0 ; ii < ll ; ii++ )
if( elocal[ii] == ':' ) elocal[ii] = ' ' ;
/* extract blank delimited strings,
use as directory names to get timeseries files */
do{
ii = sscanf( elocal+epos , "%s%n" , ename , &id ) ;
if( ii < 1 ) break ; /* no read --> end of work */
epos += id ; /* epos = char after last one scanned */
ii = strlen(ename) ; /* make sure name has */
if( ename[ii-1] != '/' ){ /* a trailing '/' on it */
ename[ii] = '/' ; ename[ii+1] = '\0' ;
}
if( !THD_is_directory(ename) ) continue ; /* 21 May 2002 - rcr */
/* 02 Feb 2002: check if scanned this directory before */
for( ii=0 ; ii < qlist->num ; ii++ )
if( THD_equiv_files(qlist->ar[ii],ename) ) break ;
if( ii < qlist->num ) continue ; /* skip to end of do loop */
ADDTO_SARR(qlist,ename) ;
tmpar = THD_get_all_timeseries( ename ) ; /* read this directory */
if( tmpar != NULL ){
for( ii=0 ; ii < tmpar->num ; ii++ ) /* move images to output array */
ADDTO_IMARR( outar , tmpar->imarr[ii] ) ;
FREE_IMARR(tmpar) ; /* don't need this no more */
}
} while( epos < ll ) ; /* scan until 'epos' is after end of epath */
free(elocal) ;
}
if( IMARR_COUNT(outar) == 0 ) DESTROY_IMARR(outar) ;
DESTROY_SARR(qlist) ;
RETURN( outar ) ;
}
/*---------------------------------------------------*/
/* Read all *.1D (time series) files from directory */
/*---------------------------------------------------*/
#define NEWWAY
MRI_IMARR * THD_get_all_timeseries( char * dname )
{
THD_string_array * flist , * rlist ;
int ir , ll , ii ;
char * fname , * tname ;
float * far ;
MRI_IMARR * outar ;
MRI_IMAGE * outim , * flim ;
#ifdef NEWWAY
char * pat ;
#endif
unsigned long max_fsize ; /* 20 Jul 2004: max 1D file size to load */
max_fsize = (unsigned long) AFNI_numenv( "AFNI_MAX_1DSIZE" ) ;
if( max_fsize == 0 ) max_fsize = 123*1024 ;
/*----- sanity check and initialize -----*/
if( dname == NULL || strlen(dname) == 0 ) return NULL ;
INIT_IMARR( outar ) ;
/*----- find all *.1D files -----*/
#ifdef NEWWAY
ii = strlen(dname) ;
pat = (char *) malloc(sizeof(char)*(ii+8)) ;
strcpy(pat,dname) ;
if( pat[ii-1] != '/' ) strcat(pat,"/") ;
strcat(pat,"*.1D*") ;
flist = THD_get_wildcard_filenames( pat ) ;
free(pat) ;
#else
flist = THD_get_all_filenames( dname ) ;
#endif
if( flist == NULL || flist->num <= 0 ){
DESTROY_SARR(flist) ;
DESTROY_IMARR(outar) ;
return NULL ;
}
rlist = THD_extract_regular_files( flist ) ;
DESTROY_SARR(flist) ;
if( rlist == NULL || rlist->num <= 0 ){
DESTROY_SARR(rlist) ;
DESTROY_IMARR(outar) ;
return NULL ;
}
for( ir=0 ; ir < rlist->num ; ir++ ){
fname = rlist->ar[ir] ; if( fname == NULL ) continue ;
ll = strlen(fname) - 3 ; if( ll < 1 ) continue ;
if( strcmp(fname+ll,".1D")==0 ||
strcmp(fname+ll,"1Dx")==0 ||
strcmp(fname+ll,"1Dv")==0 ){
if( THD_filesize(fname) > max_fsize ) continue ; /* 20 Jul 2004 */
flim = mri_read_1D( fname ) ;
if( flim != NULL ){
far = MRI_FLOAT_PTR(flim) ;
for( ii=0 ; ii < flim->nvox ; ii++ )
if( fabs(far[ii]) >= 33333.0 ) far[ii] = WAY_BIG ;
tname = THD_trailname(fname,1) ;
mri_add_name( tname , flim ) ;
ADDTO_IMARR( outar , flim ) ;
}
}
}
DESTROY_SARR(rlist) ;
if( IMARR_COUNT(outar) == 0 ) DESTROY_IMARR(outar) ;
return outar ;
}
syntax highlighted by Code2HTML, v. 0.9.1