Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
thd_auxdata.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008 #include "thd.h"
00009
00010 #if 0
00011 # define DQQ(s) fprintf(stderr,"THD_copy_datablock_auxdata %s\n",(s))
00012 #else
00013 # define DQQ(s)
00014 #endif
00015
00016
00017
00018 void THD_copy_datablock_auxdata( THD_datablock *old_dblk, THD_datablock *new_dblk )
00019 {
00020 int new_nvals , old_nvals , min_nvals , iv,kv , ibr ;
00021
00022 DQQ("entry") ;
00023
00024 if( ! ISVALID_DATABLOCK(new_dblk) ) return ;
00025
00026 new_nvals = new_dblk->nvals ;
00027
00028 if( new_dblk->brick_lab != NULL ){
00029 for( ibr=0 ; ibr < new_nvals ; ibr++ ) myXtFree( new_dblk->brick_lab[ibr] ) ;
00030 myXtFree( new_dblk->brick_lab ) ;
00031 }
00032
00033 if( new_dblk->brick_keywords != NULL ){
00034 for( ibr=0 ; ibr < new_nvals ; ibr++ ) myXtFree( new_dblk->brick_keywords[ibr] ) ;
00035 myXtFree( new_dblk->brick_keywords ) ;
00036 }
00037
00038 if( new_dblk->brick_statcode != NULL )
00039 myXtFree( new_dblk->brick_statcode ) ;
00040
00041 if( new_dblk->brick_stataux != NULL ){
00042 for( ibr=0 ; ibr < new_nvals ; ibr++ ) myXtFree( new_dblk->brick_stataux[ibr] ) ;
00043 myXtFree( new_dblk->brick_stataux ) ;
00044 }
00045
00046 new_dblk->brick_lab = NULL ;
00047 new_dblk->brick_keywords = NULL ;
00048 new_dblk->brick_statcode = NULL ;
00049 new_dblk->brick_stataux = NULL ;
00050
00051 DQQ("finish nulling") ;
00052
00053 if( ! ISVALID_DATABLOCK(old_dblk) ) return ;
00054
00055 old_nvals = old_dblk->nvals ;
00056 min_nvals = (old_nvals < new_nvals) ? old_nvals : new_nvals ;
00057
00058 DQQ("starting copy") ;
00059
00060 if( old_dblk->brick_lab != NULL ){
00061 DQQ("copy labels") ;
00062 THD_init_datablock_labels( new_dblk ) ;
00063 for( iv=0 ; iv < min_nvals ; iv++ )
00064 THD_store_datablock_label( new_dblk , iv , old_dblk->brick_lab[iv] ) ;
00065 }
00066
00067 if( old_dblk->brick_keywords != NULL ){
00068 DQQ("copy keywords") ;
00069 THD_init_datablock_keywords( new_dblk ) ;
00070 for( iv=0 ; iv < min_nvals ; iv++ )
00071 THD_store_datablock_keywords( new_dblk , iv , old_dblk->brick_keywords[iv] ) ;
00072 }
00073
00074 if( old_dblk->brick_statcode != NULL ){
00075 DQQ("copy statcode and stataux") ;
00076 THD_init_datablock_stataux( new_dblk ) ;
00077 for( iv=0 ; iv < min_nvals ; iv++ ){
00078 kv = old_dblk->brick_statcode[iv] ;
00079 THD_store_datablock_stataux( new_dblk , iv , kv ,
00080 FUNC_need_stat_aux[kv] ,
00081 old_dblk->brick_stataux[iv] ) ;
00082 }
00083 }
00084
00085 DQQ("exit") ;
00086 return ;
00087 }
00088
00089
00090
00091
00092
00093 void THD_init_datablock_labels( THD_datablock *dblk )
00094 {
00095 int ibr , nvals ;
00096
00097 if( ! ISVALID_DATABLOCK(dblk) ) return ;
00098
00099 nvals = dblk->nvals ;
00100
00101 if( dblk->brick_lab != NULL ){
00102 for( ibr=0 ; ibr < nvals ; ibr++ ) myXtFree( dblk->brick_lab[ibr] ) ;
00103 myXtFree( dblk->brick_lab ) ;
00104 }
00105
00106 dblk->brick_lab = (char **) XtMalloc( sizeof(char *) * nvals ) ;
00107 for( ibr=0 ; ibr < nvals ; ibr++ ){
00108 dblk->brick_lab[ibr] = (char *) XtMalloc(sizeof(char)*8) ;
00109 sprintf( dblk->brick_lab[ibr] , "#%d" , ibr ) ;
00110 }
00111
00112 return ;
00113 }
00114
00115
00116
00117 void THD_store_datablock_label( THD_datablock *dblk , int iv , char *str )
00118 {
00119 char *sss ;
00120
00121 if( ! ISVALID_DATABLOCK(dblk) || iv < 0 || iv >= dblk->nvals ) return ;
00122
00123 if( dblk->brick_lab == NULL ) THD_init_datablock_labels( dblk ) ;
00124
00125 myXtFree( dblk->brick_lab[iv] ) ;
00126 if( str != NULL && str[0] != '\0' ){
00127 sss = strdup(str) ;
00128 if( strlen(sss) > 32 ) sss[32] = '\0' ;
00129 dblk->brick_lab[iv] = XtNewString( sss ) ;
00130 free((void *)sss) ;
00131 } else {
00132 dblk->brick_lab[iv] = (char *) XtMalloc(sizeof(char)*8) ;
00133 sprintf( dblk->brick_lab[iv] , "#%d" , iv ) ;
00134 }
00135 return ;
00136 }
00137
00138
00139
00140 void THD_init_datablock_keywords( THD_datablock *dblk )
00141 {
00142 int ibr , nvals ;
00143
00144 if( ! ISVALID_DATABLOCK(dblk) ) return ;
00145
00146 nvals = dblk->nvals ;
00147
00148 if( dblk->brick_keywords != NULL ){
00149 for( ibr=0 ; ibr < nvals ; ibr++ ) myXtFree( dblk->brick_keywords[ibr] ) ;
00150 myXtFree( dblk->brick_keywords ) ;
00151 }
00152
00153 dblk->brick_keywords = (char **) XtMalloc( sizeof(char *) * nvals ) ;
00154 for( ibr=0 ; ibr < nvals ; ibr++ ){
00155 dblk->brick_keywords[ibr] = (char *) XtMalloc(sizeof(char)*4) ;
00156 dblk->brick_keywords[ibr][0] = '\0' ;
00157 }
00158
00159 return ;
00160 }
00161
00162
00163
00164 void THD_store_datablock_keywords( THD_datablock *dblk, int iv, char *str )
00165 {
00166 if( ! ISVALID_DATABLOCK(dblk) || iv < 0 || iv >= dblk->nvals ) return ;
00167
00168 if( dblk->brick_keywords == NULL ) THD_init_datablock_keywords( dblk ) ;
00169
00170 myXtFree( dblk->brick_keywords[iv] ) ;
00171 if( str != NULL && str[0] != '\0' )
00172 dblk->brick_keywords[iv] = XtNewString( str ) ;
00173 return ;
00174 }
00175
00176
00177
00178 void THD_append_datablock_keywords( THD_datablock *dblk, int iv , char *str )
00179 {
00180 if( ! ISVALID_DATABLOCK(dblk) ||
00181 iv < 0 || iv >= dblk->nvals || str == NULL ) return ;
00182
00183 if( dblk->brick_keywords == NULL ) THD_init_datablock_keywords( dblk ) ;
00184
00185 if( dblk->brick_keywords[iv] == NULL || dblk->brick_keywords[iv][0] == '\0' ){
00186 THD_store_datablock_keywords( dblk , iv , str ) ;
00187 } else if( str[0] != '\0' ){
00188 int ll = strlen(dblk->brick_keywords[iv]) + strlen(str) + 6 ;
00189 char *cc = (char*)XtMalloc( sizeof(char) * ll ) ;
00190 strcpy(cc,dblk->brick_keywords[iv]) ; strcat(cc," ; ") ; strcat(cc,str) ;
00191 myXtFree( dblk->brick_keywords[iv] ) ;
00192 dblk->brick_keywords[iv] = cc ;
00193 }
00194 return ;
00195 }
00196
00197
00198
00199 void THD_init_datablock_stataux( THD_datablock *dblk )
00200 {
00201 int ibr , nvals ;
00202
00203 if( ! ISVALID_DATABLOCK(dblk) ) return ;
00204
00205 nvals = dblk->nvals ;
00206
00207 if( dblk->brick_statcode != NULL )
00208 myXtFree( dblk->brick_statcode ) ;
00209
00210 if( dblk->brick_stataux != NULL ){
00211 for( ibr=0 ; ibr < nvals ; ibr++ ) myXtFree( dblk->brick_stataux[ibr] ) ;
00212 myXtFree( dblk->brick_stataux ) ;
00213 }
00214
00215
00216
00217 dblk->brick_statcode = (int *) XtMalloc( sizeof(int) * nvals ) ;
00218 dblk->brick_stataux = (float **) XtMalloc( sizeof(float *) * nvals ) ;
00219 for( ibr=0 ; ibr < nvals ; ibr++ ){
00220 dblk->brick_statcode[ibr] = 0 ;
00221 dblk->brick_stataux[ibr] = NULL ;
00222 }
00223
00224 return ;
00225 }
00226
00227
00228
00229 void THD_store_datablock_stataux( THD_datablock *dblk ,
00230 int iv , int scode , int npar , float *par )
00231 {
00232 int kv , jv ;
00233
00234 if( ! ISVALID_DATABLOCK(dblk) ) return ;
00235 if( iv < 0 || iv >= dblk->nvals || npar < 0 ) return ;
00236
00237 if( dblk->brick_statcode == NULL ) THD_init_datablock_stataux( dblk ) ;
00238
00239 dblk->brick_statcode[iv] = scode ;
00240
00241 if( ! FUNC_IS_STAT(scode) ) return ;
00242
00243
00244
00245 kv = FUNC_need_stat_aux[scode] ;
00246 if( npar > kv ) npar = kv ;
00247
00248 myXtFree( dblk->brick_stataux[iv] ) ;
00249
00250 if( kv > 0 ){
00251 dblk->brick_stataux[iv] = (float *) XtMalloc( sizeof(float) * kv ) ;
00252 for( jv=0 ; jv < npar ; jv++ )
00253 dblk->brick_stataux[iv][jv] = par[jv] ;
00254 for( ; jv < kv ; jv++ )
00255 dblk->brick_stataux[iv][jv] = 0.0 ;
00256 }
00257
00258 return ;
00259 }
00260
00261
00262
00263 int THD_string_has( char *strbig , char *strlit )
00264 {
00265 if( strbig == NULL || strbig[0] == '\0' ||
00266 strlit == NULL || strlit[0] == '\0' ) return 0 ;
00267
00268 return ( strstr(strbig,strlit) != NULL ) ;
00269 }
00270
00271
00272
00273 void THD_store_dataset_keywords( THD_3dim_dataset *dset , char *str )
00274 {
00275 if( ! ISVALID_3DIM_DATASET(dset) ) return ;
00276
00277 myXtFree( dset->keywords ) ;
00278 if( str != NULL && str[0] != '\0' )
00279 dset->keywords = XtNewString( str ) ;
00280 return ;
00281 }
00282
00283
00284
00285 void THD_append_dataset_keywords( THD_3dim_dataset *dset , char *str )
00286 {
00287 if( ! ISVALID_3DIM_DATASET(dset) || str == NULL ) return ;
00288
00289 if( dset->keywords == NULL || dset->keywords[0] == '\0' ){
00290 THD_store_dataset_keywords( dset , str ) ;
00291 } else if( str[0] != '\0' ){
00292 int ll = strlen(dset->keywords) + strlen(str) + 6 ;
00293 char *cc = (char*)XtMalloc( sizeof(char) * ll ) ;
00294 strcpy(cc,dset->keywords) ; strcat(cc," ; ") ; strcat(cc,str) ;
00295 myXtFree( dset->keywords ) ;
00296 dset->keywords = cc ;
00297 }
00298 return ;
00299 }