Doxygen Source Code Documentation
thd_fetchdset.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Functions | |
THD_3dim_dataset * | THD_fetch_dataset (char *url) |
MRI_IMAGE * | THD_fetch_1D (char *url) |
XtPointer_array * | THD_fetch_many_datasets (char *url) |
Function Documentation
|
perhaps need to swap bytes * Definition at line 116 of file thd_fetchdset.c. References ENTRY, far, free, mri_add_name(), MRI_FLOAT_PTR, mri_read_1D(), NI_read_URL_tmpdir(), MRI_IMAGE::nvox, MRI_IMAGE::nx, MRI_IMAGE::ny, RETURN, and unlink. Referenced by THD_fetch_many_datasets().
00117 { 00118 char *fname ; 00119 int nhp , ii ; 00120 MRI_IMAGE * flim ; 00121 float * far ; 00122 00123 ENTRY("THD_fetch_1D") ; 00124 00125 if( url == NULL || url[0] == '\0' ) RETURN(NULL) ; 00126 00127 fprintf(stderr,"\n+++ Trying to fetch %s",url) ; 00128 nhp = NI_read_URL_tmpdir( url , &fname ) ; 00129 if( nhp <= 0 ){ fprintf(stderr," **FAILED\n"); RETURN(NULL); } 00130 fprintf(stderr,": %d bytes read",nhp) ; 00131 flim = mri_read_1D(fname) ; unlink(fname) ; free(fname) ; 00132 if( flim != NULL ){ 00133 mri_add_name( url , flim ) ; fprintf(stderr,": %dx%d file\n",flim->nx,flim->ny) ; 00134 far = MRI_FLOAT_PTR(flim) ; 00135 for( ii=0 ; ii < flim->nvox ; ii++ ) 00136 if( fabs(far[ii]) >= 33333.0 ) far[ii] = WAY_BIG ; 00137 } else { 00138 fprintf(stderr," **Can't read as a .1D file!\n") ; 00139 } 00140 RETURN(flim) ; 00141 } |
|
Definition at line 7 of file thd_fetchdset.c. References AFMALL, THD_diskptr::byte_order, THD_3dim_dataset::dblk, DBLK_ARRAY, DBLK_BRICK, DBLK_BRICK_BYTES, DBLK_BRICK_NVOX, DBLK_BRICK_TYPE, THD_datablock::diskptr, DSET_delete, DSET_IS_MINC, DSET_IS_NIFTI, DSET_IS_VOLUMES, DSET_load, DSET_mallocize, DSET_NVALS, DSET_superlock, ENTRY, free, iochan_sleep(), mri_fix_data_pointer(), mri_short_order(), mri_swap2(), mri_swap4(), NI_read_URL(), NI_read_URL_tmpdir(), RETURN, STRING_HAS_SUFFIX, THD_allow_empty_dataset(), THD_open_one_dataset(), THD_datablock::total_bytes, and unlink. Referenced by AFNI_finalize_read_Web_CB(), THD_fetch_many_datasets(), and THD_open_dataset().
00008 { 00009 char *cp,*hp,*bp , *thp ; 00010 int nhp,nbp , iv ; 00011 THD_3dim_dataset * dset ; 00012 int native_order ; 00013 00014 ENTRY("THD_fetch_dset") ; 00015 00016 if( url == NULL || url[0] == '\0' ) RETURN(NULL) ; 00017 00018 if( STRING_HAS_SUFFIX(url,".hdr") ) RETURN(NULL) ; /* 27 Aug 2002 */ 00019 00020 /*** do we have to add .HEAD? ***/ 00021 00022 hp = AFMALL(char, sizeof(char)*(strlen(url)+32)) ; strcpy(hp,url) ; 00023 cp = strstr(hp,".HEAD") ; 00024 if( cp == NULL && 00025 !STRING_HAS_SUFFIX(hp,".nii") && /* 28 Aug 2003 */ 00026 !STRING_HAS_SUFFIX(hp,".nii.gz") && /* 06 Apr 2005 */ 00027 !STRING_HAS_SUFFIX(hp,".mnc") && 00028 !STRING_HAS_SUFFIX(hp,".mnc.gz") ) strcat(hp,".HEAD") ; 00029 00030 /*** read the .HEAD file to a temporary file ***/ 00031 00032 fprintf(stderr,"\n+++ Trying to fetch %s",hp) ; 00033 nhp = NI_read_URL_tmpdir( hp , &thp ) ; 00034 if( nhp <= 0 ){ fprintf(stderr," **FAILED\n"); free(hp); RETURN(NULL); } 00035 00036 /*** try to open it as a dataset header ***/ 00037 00038 fprintf(stderr,": %d bytes read\n ++ Trying to initialize dataset %s\n",nhp,thp) ; 00039 THD_allow_empty_dataset(1) ; 00040 dset = THD_open_one_dataset(thp) ; 00041 if( DSET_IS_MINC(dset) || DSET_IS_NIFTI(dset) ) DSET_load(dset) ; /* 29 Oct 2001 */ 00042 THD_allow_empty_dataset(0) ; 00043 unlink(thp) ; free(thp) ; 00044 if( dset == NULL ){ fprintf(stderr," ** Can't decode %s\n",hp); free(hp); RETURN(NULL); } 00045 00046 if( DSET_IS_VOLUMES(dset) ){ /* 20 Jun 2002 */ 00047 fprintf(stderr," ** Can't load %s by volumes!\n",hp); free(hp); 00048 DSET_delete(dset); RETURN(NULL); 00049 } 00050 00051 DSET_superlock(dset) ; /* don't let be deleted from memory */ 00052 if( DSET_IS_MINC(dset) || DSET_IS_NIFTI(dset) ) RETURN(dset) ; /* 29 Oct 2001 */ 00053 DSET_mallocize(dset) ; 00054 00055 /*** try to read the .BRIK or .BRIK.gz file into memory ***/ 00056 00057 strcpy( hp+(strlen(hp)-5) , ".BRIK.gz" ) ; 00058 fprintf(stderr," ++ Trying to fetch %s",hp) ; iochan_sleep(100) ; 00059 nbp = NI_read_URL( hp , &bp ) ; 00060 if( nbp <= 0 ){ 00061 iv = strlen(hp) ; hp[iv-3] = '\0' ; /* remove the .gz and try again */ 00062 fprintf(stderr," ** FAILED!\n ++ Trying to fetch %s",hp) ; iochan_sleep(100) ; 00063 nbp = NI_read_URL( hp , &bp ) ; 00064 if( nbp <= 0 ){ 00065 fprintf(stderr," ** FAILED\n"); 00066 free(hp); DSET_delete(dset); RETURN(NULL); 00067 } 00068 } 00069 if( nbp < dset->dblk->total_bytes ){ 00070 fprintf(stderr,"\n ** Got %s but only had %d bytes, but needed %lld\n", 00071 hp,nbp,dset->dblk->total_bytes) ; 00072 free(bp) ; free(hp) ; DSET_delete(dset) ; RETURN(NULL) ; 00073 } 00074 fprintf(stderr,": %d bytes read\n",nbp) ; 00075 00076 /** now have data: build pointers, load bricks, return **/ 00077 00078 for( iv=0 ; iv < DSET_NVALS(dset) ; iv++ ){ 00079 mri_fix_data_pointer( bp , DBLK_BRICK(dset->dblk,iv) ) ; 00080 bp += DBLK_BRICK_BYTES(dset->dblk,iv) ; 00081 } 00082 00083 /** perhaps need to swap bytes **/ 00084 00085 native_order = mri_short_order() ; 00086 00087 if( dset->dblk->diskptr->byte_order <= 0 ) 00088 dset->dblk->diskptr->byte_order = native_order ; 00089 00090 if( dset->dblk->diskptr->byte_order != native_order ){ 00091 for( iv=0 ; iv < DSET_NVALS(dset) ; iv++ ){ 00092 switch( DBLK_BRICK_TYPE(dset->dblk,iv) ){ 00093 case MRI_short: 00094 mri_swap2( DBLK_BRICK_NVOX(dset->dblk,iv) , DBLK_ARRAY(dset->dblk,iv) ) ; 00095 break ; 00096 00097 case MRI_complex: /* 14 Sep 1999: swap complex also! */ 00098 mri_swap4( 2*DBLK_BRICK_NVOX(dset->dblk,iv), DBLK_ARRAY(dset->dblk,iv)) ; 00099 break ; 00100 00101 case MRI_float: 00102 case MRI_int: 00103 mri_swap4( DBLK_BRICK_NVOX(dset->dblk,iv) , DBLK_ARRAY(dset->dblk,iv) ) ; 00104 break ; 00105 } 00106 } 00107 } 00108 00109 free(hp) ; RETURN(dset) ; 00110 } |
|
Definition at line 148 of file thd_fetchdset.c. References ADDTO_XTARR, ENTRY, free, FREE_XTARR, i1, i2, IC_DSET, IC_FLIM, INIT_XTARR, iochan_sleep(), ISVALID_DSET, malloc, NI_read_URL(), XtPointer_array::num, RETURN, THD_fetch_1D(), THD_fetch_dataset(), THD_trailname(), XTARR_IC, and XTARR_NUM. Referenced by AFNI_finalize_read_Web_CB(), and AFNI_read_inputs().
00149 { 00150 XtPointer_array * dsar ; 00151 int nlist , i1,i2 , nh , ll , nx ; 00152 char * list ; 00153 char * tnam , * hnam , * dnam ; 00154 THD_3dim_dataset * dset ; 00155 00156 ENTRY("THD_fetch_many_datasets") ; 00157 00158 if( url == NULL || url[0] == '\0' ) RETURN(NULL) ; 00159 00160 /* make hnam be the URL directory (without the trailing filename) */ 00161 00162 hnam = (char *) malloc(sizeof(char)*(strlen(url)+16)) ; 00163 strcpy(hnam,url) ; 00164 tnam = THD_trailname( hnam , 0 ) ; /* start of trailing name */ 00165 if( tnam == hnam ){ free(hnam); RETURN(NULL); } 00166 *tnam = '\0' ; nh = strlen(hnam) ; /* cut trailing name off */ 00167 00168 /* get the list of filenames */ 00169 00170 fprintf(stderr,"\n+++ Trying to fetch %s",url) ; 00171 nlist = NI_read_URL( url , &list ) ; 00172 if( nlist <= 0 ){ 00173 fprintf(stderr," **FAILED\n"); free(hnam); RETURN(NULL); 00174 } 00175 fprintf(stderr,": %d bytes read\n",nlist) ; 00176 00177 /* scan from list[i1] forward, looking for filenames to fetch */ 00178 00179 i1 = 0 ; INIT_XTARR(dsar) ; 00180 00181 while( i1 < nlist ){ 00182 00183 for( ; i1 < nlist && isspace(list[i1]) ; i1++ ) ; /* skip whitespace */ 00184 if( i1 >= nlist ) break ; 00185 if( list[i1] == '#' ){ /* skip comment line */ 00186 for( ; i1 < nlist && list[i1] != '\n' ; i1++ ) ; /* skip to EOL */ 00187 continue ; /* restart while loop */ 00188 } 00189 00190 for( i2=i1+1 ; i2 < nlist && !isspace(list[i2]) ; i2++ ) ; /* skip to next blank */ 00191 00192 /* filename is list[i1..i2-1] */ 00193 00194 dnam = (char *)malloc(sizeof(char)*(nh+i2-i1+16)) ; /* space for new URL */ 00195 strcpy(dnam,hnam); /* put header on */ 00196 memcpy(dnam+nh,list+i1,i2-i1); /* put filename on */ 00197 dnam[nh+i2-i1] = '\0'; /* and end it */ 00198 00199 iochan_sleep(100) ; 00200 ll = strlen(dnam)-3 ; if( ll < 1 ) continue ; 00201 if( strcmp(dnam+ll,".1D")==0 || 00202 strcmp(dnam+ll,"1Dx")==0 || 00203 strcmp(dnam+ll,"1Dv")==0 ){ /** get a 1D file **/ 00204 00205 MRI_IMAGE * im = THD_fetch_1D( dnam ) ; 00206 00207 if( im != NULL ){ 00208 ADDTO_XTARR(dsar,im) ; 00209 nx = XTARR_NUM(dsar)-1 ; 00210 XTARR_IC(dsar,nx) = IC_FLIM ; 00211 } 00212 00213 } else { /** get a dataset **/ 00214 dset = THD_fetch_dataset( dnam ) ; 00215 if( ISVALID_DSET(dset) ){ 00216 ADDTO_XTARR(dsar,dset) ; 00217 nx = XTARR_NUM(dsar)-1 ; 00218 XTARR_IC(dsar,nx) = IC_DSET ; 00219 } 00220 } 00221 free(dnam) ; 00222 00223 i1 = i2 ; /* restart scan at next position */ 00224 } 00225 00226 /* toss the trash and go home */ 00227 00228 free(list) ; free(hnam) ; 00229 if( dsar->num == 0 ){ FREE_XTARR(dsar) ; dsar = NULL ; } 00230 RETURN(dsar) ; 00231 } |