Doxygen Source Code Documentation
edt_calcmask.c File Reference
#include "mrilib.h"
#include "parser.h"
Go to the source code of this file.
Defines | |
#define | DSHIFT_MODE_STOP 0 |
#define | DSHIFT_MODE_WRAP 1 |
#define | DSHIFT_MODE_ZERO 2 |
#define | HAS_I CALC_has_sym[ 8] |
#define | HAS_J CALC_has_sym[ 9] |
#define | HAS_K CALC_has_sym[10] |
#define | HAS_X CALC_has_sym[23] |
#define | HAS_Y CALC_has_sym[24] |
#define | HAS_Z CALC_has_sym[25] |
#define | PREDEFINED_MASK ((1<< 8)|(1<< 9)|(1<<10)|(1<<23)|(1<<24)|(1<<25)) |
#define | VAR_DEFINED(kv) (CALC_dset[kv] != NULL || CALC_dshift[kv] >= 0) |
#define | VSIZE 1024 |
Functions | |
int | CALC_read_opts (int argc, char *argv[]) |
byte * | EDT_calcmask (char *cmd, int *nxyz) |
Variables | |
int | CALC_nvox |
PARSER_code * | CALC_code |
int | CALC_dshift [26] |
int | CALC_dshift_i [26] |
int | CALC_dshift_j [26] |
int | CALC_dshift_k [26] |
int | CALC_dshift_l [26] |
int | CALC_dshift_mode [26] |
int | CALC_dshift_mode_current |
int | CALC_has_sym [26] |
char | abet [] = "abcdefghijklmnopqrstuvwxyz" |
int | CALC_has_predefined |
THD_3dim_dataset * | CALC_dset [26] |
int | CALC_type [26] |
byte * | CALC_byte [26] |
short * | CALC_short [26] |
float * | CALC_float [26] |
float | CALC_ffac [26] |
Define Documentation
|
Definition at line 21 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 22 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 23 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 39 of file edt_calcmask.c. |
|
Definition at line 40 of file edt_calcmask.c. |
|
Definition at line 41 of file edt_calcmask.c. |
|
Definition at line 42 of file edt_calcmask.c. |
|
Definition at line 43 of file edt_calcmask.c. |
|
Definition at line 44 of file edt_calcmask.c. |
|
Definition at line 46 of file edt_calcmask.c. Referenced by CALC_read_opts(). |
|
Definition at line 59 of file edt_calcmask.c. |
|
|
Function Documentation
|
Definition at line 343 of file edt_calcmask.c. References abet, argc, CALC_byte, CALC_dshift, CALC_dshift_i, CALC_dshift_j, CALC_dshift_k, CALC_dshift_l, CALC_dshift_mode, CALC_dshift_mode_current, CALC_ffac, CALC_float, CALC_has_predefined, CALC_has_sym, CALC_nvox, CALC_short, CALC_type, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, DSET_ARRAY, DSET_BRICK_FACTOR, DSET_BRICK_TYPE, DSET_LOADED, DSHIFT_MODE_STOP, DSHIFT_MODE_WRAP, DSHIFT_MODE_ZERO, ENTRY, free, malloc, MCW_get_intlist(), MCW_intlist_allow_negative(), THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, PARSER_generate_code(), PARSER_mark_symbols(), PREDEFINED_MASK, RETURN, THD_load_datablock(), THD_open_dataset(), and VAR_DEFINED.
00344 { 00345 int nopt = 0 ; 00346 int ids ; 00347 int ii ; 00348 00349 ENTRY("CALC_read_opts") ; 00350 00351 CALC_nvox = -1 ; 00352 CALC_code = NULL ; 00353 CALC_dshift_mode_current = DSHIFT_MODE_STOP ; 00354 CALC_has_predefined = 0 ; 00355 00356 for( ids=0 ; ids < 26 ; ids++ ){ 00357 CALC_dset[ids] = NULL ; 00358 CALC_type[ids] = -1 ; 00359 00360 CALC_dshift[ids] = -1 ; /* 22 Nov 1999 */ 00361 CALC_dshift_mode[ids] = CALC_dshift_mode_current ; 00362 } 00363 00364 while( nopt < argc && argv[nopt][0] == '-' ){ 00365 00366 /**** -expr expression ****/ 00367 00368 if( strncmp(argv[nopt],"-expr",4) == 0 ){ 00369 if( CALC_code != NULL ){ 00370 fprintf(stderr, 00371 "** -cmask: cannot have 2 -expr options!\n") ; RETURN(1) ; 00372 } 00373 nopt++ ; 00374 if( nopt >= argc ){ 00375 fprintf(stderr, 00376 "** -cmask: need argument after -expr!\n") ; RETURN(1) ; 00377 } 00378 CALC_code = PARSER_generate_code( argv[nopt++] ) ; 00379 if( CALC_code == NULL ){ 00380 fprintf(stderr, 00381 "** -cmask: illegal expression!\n") ; RETURN(1) ; 00382 } 00383 PARSER_mark_symbols( CALC_code , CALC_has_sym ) ; /* 15 Sep 1999 */ 00384 continue ; 00385 } 00386 00387 /**** -dsSTOP [22 Nov 1999] ****/ 00388 00389 if( strncmp(argv[nopt],"-dsSTOP",6) == 0 ){ 00390 CALC_dshift_mode_current = DSHIFT_MODE_STOP ; 00391 nopt++ ; continue ; 00392 } 00393 00394 /**** -dsWRAP [22 Nov 1999] ****/ 00395 00396 if( strncmp(argv[nopt],"-dsWRAP",6) == 0 ){ 00397 CALC_dshift_mode_current = DSHIFT_MODE_WRAP ; 00398 nopt++ ; continue ; 00399 } 00400 00401 /**** -dsZERO [22 Nov 1999] ****/ 00402 00403 if( strncmp(argv[nopt],"-dsZERO",6) == 0 ){ 00404 CALC_dshift_mode_current = DSHIFT_MODE_ZERO ; 00405 nopt++ ; continue ; 00406 } 00407 00408 /**** -<letter> dataset ****/ 00409 00410 ids = strlen( argv[nopt] ) ; 00411 00412 if( (argv[nopt][1] >= 'a' && argv[nopt][1] <= 'z') && ids == 2 ) { 00413 00414 int ival , nxyz , ll ; 00415 THD_3dim_dataset * dset ; 00416 00417 ival = argv[nopt][1] - 'a' ; 00418 if( VAR_DEFINED(ival) ){ 00419 fprintf(stderr, 00420 "** -cmask: Can't define %c symbol twice\n",argv[nopt][1]); 00421 RETURN(1) ; 00422 } 00423 00424 nopt++ ; 00425 if( nopt >= argc ){ 00426 fprintf(stderr, 00427 "** -cmask: need argument after %s\n",argv[nopt-1]); 00428 RETURN(1) ; 00429 } 00430 00431 /*-- 22 Nov 1999: allow for a differentially 00432 subscripted name, as in "-b a[1,0,0,0]" --*/ 00433 00434 ll = strlen(argv[nopt]) ; 00435 if( (argv[nopt][0] >= 'a' && argv[nopt][0] <= 'z') && /* legal name */ 00436 ( (ll >= 3 && argv[nopt][1] == '[') || /* subscript */ 00437 (ll == 3 && /* OR */ 00438 (argv[nopt][1] == '+' || argv[nopt][1] == '-')) /* +- ijkl */ 00439 ) ){ 00440 00441 int jds = argv[nopt][0] - 'a' ; /* actual dataset index */ 00442 int * ijkl ; /* array of subscripts */ 00443 00444 if( CALC_dset[jds] == NULL ){ 00445 fprintf(stderr, 00446 "** -cmask: Must define dataset %c before using it in %s\n", 00447 argv[nopt][0] , argv[nopt] ) ; 00448 RETURN(1) ; 00449 } 00450 00451 /*- get subscripts -*/ 00452 00453 if( argv[nopt][1] == '[' ){ /* format is [i,j,k,l] */ 00454 MCW_intlist_allow_negative(1) ; 00455 ijkl = MCW_get_intlist( 9999 , argv[nopt]+1 ) ; 00456 MCW_intlist_allow_negative(0) ; 00457 if( ijkl == NULL || ijkl[0] != 4 ){ 00458 fprintf(stderr, 00459 "** -cmask: Illegal differential subscripting %s\n", 00460 argv[nopt] ) ; 00461 RETURN(1) ; 00462 } 00463 } else { /* format is +i, -j, etc */ 00464 ijkl = (int *) malloc( sizeof(int) * 5 ) ; 00465 ijkl[1] = ijkl[2] = ijkl[3] = ijkl[4] = 0 ; /* initialize */ 00466 switch( argv[nopt][2] ){ 00467 default: 00468 fprintf(stderr, 00469 "** -cmask: Bad differential subscripting %s\n", 00470 argv[nopt] ) ; 00471 RETURN(1) ; 00472 00473 case 'i': ijkl[1] = (argv[nopt][1]=='+') ? 1 : -1 ; break ; 00474 case 'j': ijkl[2] = (argv[nopt][1]=='+') ? 1 : -1 ; break ; 00475 case 'k': ijkl[3] = (argv[nopt][1]=='+') ? 1 : -1 ; break ; 00476 case 'l': ijkl[4] = (argv[nopt][1]=='+') ? 1 : -1 ; break ; 00477 } 00478 } 00479 00480 if( ijkl[4] != 0 ){ /* disallow time subscripting */ 00481 fprintf(stderr, 00482 "++ -cmask: Warning: differential time shifting %s not allowed\n", 00483 argv[nopt] ) ; 00484 ijkl[4] = 0 ; 00485 } 00486 00487 /*- more sanity checks -*/ 00488 00489 if( ijkl[1]==0 && ijkl[2]==0 && ijkl[3]==0 && ijkl[4]==0 ){ 00490 fprintf(stderr, 00491 "++ -cmask: differential subscript %s is all zero\n", 00492 argv[nopt] ) ; 00493 } 00494 00495 /*- set values for later use -*/ 00496 00497 CALC_dshift [ival] = jds ; 00498 CALC_dshift_i[ival] = ijkl[1] ; 00499 CALC_dshift_j[ival] = ijkl[2] ; 00500 CALC_dshift_k[ival] = ijkl[3] ; 00501 CALC_dshift_l[ival] = ijkl[4] ; 00502 00503 CALC_dshift_mode[ival] = CALC_dshift_mode_current ; 00504 00505 /*- time to trot, Bwana -*/ 00506 00507 free(ijkl) ; nopt++ ; goto DSET_DONE ; 00508 00509 } /* end of _dshift */ 00510 00511 /*-- meanwhile, back at the "normal" dataset opening ranch --*/ 00512 00513 { char dname[512] ; /* 02 Nov 1999 */ 00514 00515 if( strstr(argv[nopt],"[") == NULL ){ 00516 sprintf(dname,"%s[0]",argv[nopt++]) ; /* add [0] */ 00517 } else { 00518 strcpy(dname,argv[nopt++]) ; /* don't mangle */ 00519 } 00520 dset = THD_open_dataset( dname ) ; /* open it */ 00521 if( dset == NULL ){ 00522 fprintf(stderr, 00523 "** -cmask: can't open dataset %s\n",dname) ; 00524 RETURN(1) ; 00525 } 00526 } 00527 CALC_dset[ival] = dset ; 00528 00529 /* set some parameters based on the dataset */ 00530 00531 nxyz = dset->daxes->nxx * dset->daxes->nyy * dset->daxes->nzz ; 00532 if( CALC_nvox < 0 ){ 00533 CALC_nvox = nxyz ; 00534 } else if( nxyz != CALC_nvox ){ 00535 fprintf(stderr, 00536 "** -cmask: dataset %s differs in size from others\n",argv[nopt-1]); 00537 RETURN(1) ; 00538 } 00539 00540 CALC_type[ival] = DSET_BRICK_TYPE(dset,0) ; 00541 00542 /* load floating scale factors */ 00543 00544 CALC_ffac[ival] = DSET_BRICK_FACTOR(dset,0) ; 00545 if (CALC_ffac[ival] == 0.0 ) CALC_ffac[ival] = 1.0 ; 00546 00547 /* read data from disk */ 00548 00549 THD_load_datablock( dset->dblk ) ; 00550 if( ! DSET_LOADED(dset) ){ 00551 fprintf(stderr, 00552 "** -cmask: Can't read data brick for dataset %s\n",argv[nopt-1]) ; 00553 RETURN(1) ; 00554 } 00555 00556 /* set pointers for actual dataset arrays */ 00557 00558 switch (CALC_type[ival]) { 00559 case MRI_short: 00560 CALC_short[ival] = (short *) DSET_ARRAY(dset,0) ; 00561 break; 00562 00563 case MRI_float: 00564 CALC_float[ival] = (float *) DSET_ARRAY(dset,0) ; 00565 break; 00566 00567 case MRI_byte: 00568 CALC_byte[ival] = (byte *) DSET_ARRAY(dset,0) ; 00569 break; 00570 00571 } /* end of switch over type */ 00572 00573 DSET_DONE: continue; 00574 00575 } /* end of dataset input */ 00576 00577 fprintf(stderr,"** -cmask: Unknown option: %s\n",argv[nopt]) ; 00578 RETURN(1) ; 00579 00580 } /* end of loop over options */ 00581 00582 /*---------------------------------------*/ 00583 /*** cleanup: check for various errors ***/ 00584 00585 for( ids=0 ; ids < 26 ; ids++ ) if( CALC_dset[ids] != NULL ) break ; 00586 if( ids == 26 ){ 00587 fprintf(stderr, 00588 "** -cmask: No actual input datasets given!\n") ; 00589 RETURN(1) ; 00590 } 00591 00592 if( CALC_code == NULL ){ 00593 fprintf(stderr,"** -cmask: No expression given!\n") ; 00594 RETURN(1) ; 00595 } 00596 00597 /* 15 Apr 1999: check if each input dataset is used, 00598 or if an undefined symbol is used. */ 00599 00600 for (ids=0; ids < 26; ids ++){ 00601 if( VAR_DEFINED(ids) && !CALC_has_sym[ids] ) 00602 fprintf(stderr , 00603 "++ -cmask: input '%c' is not used in the expression\n" , 00604 abet[ids] ) ; 00605 00606 else if( !VAR_DEFINED(ids) && CALC_has_sym[ids] ){ 00607 00608 if( ((1<<ids) & PREDEFINED_MASK) == 0 ) 00609 fprintf(stderr , 00610 "++ -cmask: symbol %c is used but not defined\n" , 00611 abet[ids] ) ; 00612 else { 00613 CALC_has_predefined++ ; 00614 } 00615 } 00616 } 00617 00618 RETURN(0) ; 00619 } |
|
Definition at line 83 of file edt_calcmask.c. References append_string_to_args(), CALC_byte, CALC_dshift, CALC_dshift_i, CALC_dshift_j, CALC_dshift_k, CALC_dshift_l, CALC_dshift_mode, CALC_ffac, CALC_float, CALC_nvox, CALC_read_opts(), CALC_short, CALC_type, THD_3dim_dataset::daxes, DSET_delete, DSET_index_to_ix, DSET_index_to_jy, DSET_index_to_kz, DSET_ixyz_to_index, DSET_NX, DSET_NY, DSET_NZ, DSHIFT_MODE_STOP, DSHIFT_MODE_WRAP, DSHIFT_MODE_ZERO, EDIT_empty_copy(), ENTRY, free, malloc, MIN, PARSER_evaluate_vector(), RETURN, THD_dataxes::xxdel, THD_dataxes::xxorg, THD_dataxes::yydel, THD_dataxes::yyorg, THD_dataxes::zzdel, and THD_dataxes::zzorg. Referenced by get_cmask(), main(), SUMA_Get_isosurface_datasets(), and validate_datasets().
00084 { 00085 int Argc=0 ; 00086 char ** Argv=NULL ; 00087 byte * bmask ; 00088 00089 #define VSIZE 1024 00090 00091 double * atoz[26] ; 00092 int ii , ids , jj, ll, jbot, jtop ; 00093 THD_3dim_dataset * new_dset ; 00094 double temp[VSIZE]; 00095 00096 int nx,nxy ; 00097 THD_dataxes * daxes ; 00098 00099 ENTRY("EDT_calcmask") ; 00100 00101 /*** parse input options ***/ 00102 00103 if( cmd == NULL ) RETURN( NULL ); 00104 append_string_to_args( cmd , 0,NULL , &Argc , &Argv ) ; 00105 if( Argc == 0 || Argv == NULL ) RETURN( NULL ); 00106 00107 jj = CALC_read_opts( Argc , Argv ) ; 00108 00109 for( ii=0 ; ii < Argc ; ii++ ) free(Argv[ii]) ; 00110 free(Argv) ; 00111 00112 if( jj != 0 ){ 00113 if( CALC_code != NULL ) free(CALC_code) ; 00114 for( ids=0 ; ids < 26 ; ids++ ){ 00115 if( CALC_dset[ids] != NULL ) DSET_delete( CALC_dset[ids] ) ; 00116 } 00117 RETURN( NULL ); 00118 } 00119 00120 /*** make output dataset ***/ 00121 00122 for( ids=0 ; ids < 26 ; ids++ ) if( CALC_dset[ids] != NULL ) break ; 00123 00124 new_dset = EDIT_empty_copy( CALC_dset[ids] ) ; 00125 00126 for (ids=0; ids<26; ids++) 00127 atoz[ids] = (double *) malloc(sizeof(double) * VSIZE ) ; 00128 00129 for( ids=0 ; ids < 26 ; ids++ ) /* initialize to all zeros */ 00130 for (ii=0; ii<VSIZE; ii++) 00131 atoz[ids][ii] = 0.0 ; 00132 00133 nx = DSET_NX(new_dset) ; 00134 nxy = nx * DSET_NY(new_dset) ; daxes = new_dset->daxes ; 00135 00136 bmask = (byte *) malloc(sizeof(byte) * CALC_nvox) ; 00137 00138 /*** loop over voxels ***/ 00139 00140 for ( ii = 0 ; ii < CALC_nvox ; ii += VSIZE ) { 00141 00142 jbot = ii ; 00143 jtop = MIN( ii + VSIZE , CALC_nvox ) ; 00144 00145 /* loop over datasets or other symbol definitions */ 00146 00147 for (ids = 0 ; ids < 26 ; ids ++ ) { 00148 00149 /* 22 Nov 1999: if a differentially subscripted dataset is here */ 00150 00151 if( CALC_dshift[ids] >= 0 ){ 00152 int jds = CALC_dshift[ids] ; /* actual dataset index */ 00153 int jjs , ix,jy,kz ; 00154 int id=CALC_dshift_i[ids] , jd=CALC_dshift_j[ids] , 00155 kd=CALC_dshift_k[ids] , ld=CALC_dshift_l[ids] ; 00156 int ijkd = ((id!=0) || (jd!=0) || (kd!=0)) ; 00157 int dsx = DSET_NX(CALC_dset[jds]) - 1 ; 00158 int dsy = DSET_NY(CALC_dset[jds]) - 1 ; 00159 int dsz = DSET_NZ(CALC_dset[jds]) - 1 ; 00160 int mode = CALC_dshift_mode[ids] , dun ; 00161 00162 for( dun=0,jj=jbot ; jj < jtop ; jj++ ){ 00163 jjs = jj ; 00164 if( ijkd ){ 00165 ix = DSET_index_to_ix(CALC_dset[jds],jj) ; 00166 jy = DSET_index_to_jy(CALC_dset[jds],jj) ; 00167 kz = DSET_index_to_kz(CALC_dset[jds],jj) ; 00168 00169 ix += id ; /* x shift */ 00170 if( ix < 0 || ix > dsx ){ 00171 switch( mode ){ 00172 case DSHIFT_MODE_ZERO: 00173 atoz[ids][jj-ii] = 0.0 ; dun = 1 ; 00174 break ; 00175 default: 00176 case DSHIFT_MODE_STOP: 00177 if( ix < 0 ) ix = 0 ; 00178 else if( ix > dsx ) ix = dsx ; 00179 break ; 00180 case DSHIFT_MODE_WRAP: 00181 while( ix < 0 ) ix += (dsx+1) ; 00182 while( ix > dsx ) ix -= (dsx+1) ; 00183 break ; 00184 } 00185 } 00186 if( dun ){ dun=0; continue; } /* go to next jj */ 00187 00188 jy += jd ; /* y shift */ 00189 if( jy < 0 || jy > dsy ){ 00190 switch( mode ){ 00191 case DSHIFT_MODE_ZERO: 00192 atoz[ids][jj-ii] = 0.0 ; dun = 1 ; 00193 break ; 00194 default: 00195 case DSHIFT_MODE_STOP: 00196 if( jy < 0 ) jy = 0 ; 00197 else if( jy > dsy ) jy = dsy ; 00198 break ; 00199 case DSHIFT_MODE_WRAP: 00200 while( jy < 0 ) jy += (dsy+1) ; 00201 while( jy > dsy ) jy -= (dsy+1) ; 00202 break ; 00203 } 00204 } 00205 if( dun ){ dun=0; continue; } /* go to next jj */ 00206 00207 kz += kd ; /* z shift */ 00208 if( kz < 0 || kz > dsz ){ 00209 switch( mode ){ 00210 case DSHIFT_MODE_ZERO: 00211 atoz[ids][jj-ii] = 0.0 ; dun = 1 ; 00212 break ; 00213 default: 00214 case DSHIFT_MODE_STOP: 00215 if( kz < 0 ) kz = 0 ; 00216 else if( kz > dsz ) kz = dsz ; 00217 break ; 00218 case DSHIFT_MODE_WRAP: 00219 while( kz < 0 ) kz += (dsz+1) ; 00220 while( kz > dsz ) kz -= (dsz+1) ; 00221 break ; 00222 } 00223 } 00224 if( dun ){ dun=0; continue; } /* go to next jj */ 00225 00226 jjs = DSET_ixyz_to_index(CALC_dset[jds],ix,jy,kz) ; 00227 } 00228 switch( CALC_type[jds] ) { 00229 case MRI_short: 00230 atoz[ids][jj-ii] = CALC_short[jds][jjs] 00231 * CALC_ffac[jds]; 00232 break ; 00233 case MRI_float: 00234 atoz[ids][jj-ii] = CALC_float[jds][jjs] 00235 * CALC_ffac[jds]; 00236 break ; 00237 case MRI_byte: 00238 atoz[ids][jj-ii] = CALC_byte[jds][jjs] 00239 * CALC_ffac[jds]; 00240 break ; 00241 } 00242 } 00243 } 00244 00245 /* the case of a 3D dataset (i.e., only 1 sub-brick) */ 00246 00247 else if ( CALC_type[ids] >= 0 ) { 00248 switch( CALC_type[ids] ) { 00249 case MRI_short: 00250 for (jj =jbot ; jj < jtop ; jj ++ ){ 00251 atoz[ids][jj-ii] = CALC_short[ids][jj] * CALC_ffac[ids] ; 00252 } 00253 break; 00254 00255 case MRI_float: 00256 for (jj =jbot ; jj < jtop ; jj ++ ){ 00257 atoz[ids][jj-ii] = CALC_float[ids][jj] * CALC_ffac[ids] ; 00258 } 00259 break; 00260 00261 case MRI_byte: 00262 for (jj =jbot ; jj < jtop ; jj ++ ){ 00263 atoz[ids][jj-ii] = CALC_byte[ids][jj] * CALC_ffac[ids] ; 00264 } 00265 break; 00266 } 00267 } 00268 00269 /* the case of a voxel (x,y,z) or (i,j,k) coordinate */ 00270 00271 else if( CALC_has_predefined ) { 00272 00273 switch( ids ){ 00274 case 23: /* x */ 00275 if( HAS_X ) 00276 for( jj=jbot ; jj < jtop ; jj++ ) 00277 atoz[ids][jj-ii] = daxes->xxorg + 00278 (jj%nx) * daxes->xxdel ; 00279 break ; 00280 00281 case 24: /* y */ 00282 if( HAS_Y ) 00283 for( jj=jbot ; jj < jtop ; jj++ ) 00284 atoz[ids][jj-ii] = daxes->yyorg + 00285 ((jj%nxy)/nx) * daxes->yydel ; 00286 break ; 00287 00288 case 25: /* z */ 00289 if( HAS_Z ) 00290 for( jj=jbot ; jj < jtop ; jj++ ) 00291 atoz[ids][jj-ii] = daxes->zzorg + 00292 (jj/nxy) * daxes->zzdel ; 00293 break ; 00294 00295 case 8: /* i */ 00296 if( HAS_I ) 00297 for( jj=jbot ; jj < jtop ; jj++ ) 00298 atoz[ids][jj-ii] = (jj%nx) ; 00299 break ; 00300 00301 case 9: /* j */ 00302 if( HAS_J ) 00303 for( jj=jbot ; jj < jtop ; jj++ ) 00304 atoz[ids][jj-ii] = ((jj%nxy)/nx) ; 00305 break ; 00306 00307 case 10: /* k */ 00308 if( HAS_K ) 00309 for( jj=jbot ; jj < jtop ; jj++ ) 00310 atoz[ids][jj-ii] = (jj/nxy) ; 00311 break ; 00312 00313 } /* end of switch on symbol subscript */ 00314 00315 } /* end of choice over data type (if-else cascade) */ 00316 } /* end of loop over datasets/symbols */ 00317 00318 /**** actually do the work! ****/ 00319 00320 PARSER_evaluate_vector(CALC_code, atoz, jtop-jbot, temp); 00321 for ( jj = jbot ; jj < jtop ; jj ++ ) 00322 bmask[jj] = (temp[jj-ii] != 0.0) ; 00323 00324 } /* end of loop over space (voxels) */ 00325 00326 /* cleanup and go home */ 00327 00328 for( ids=0 ; ids < 26 ; ids++ ){ 00329 free(atoz[ids]) ; 00330 if( CALC_dset[ids] != NULL ) DSET_delete( CALC_dset[ids] ) ; 00331 } 00332 DSET_delete(new_dset) ; 00333 free(CALC_code) ; 00334 00335 if( nxyz != NULL ) *nxyz = CALC_nvox ; 00336 RETURN( bmask ); 00337 } |
Variable Documentation
|
Definition at line 37 of file edt_calcmask.c. Referenced by CALC_read_opts(). |
|
Definition at line 52 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 17 of file edt_calcmask.c. |
|
Definition at line 50 of file edt_calcmask.c. |
|
Definition at line 25 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 26 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 27 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 28 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 29 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 30 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 32 of file edt_calcmask.c. Referenced by CALC_read_opts(). |
|
Definition at line 55 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 54 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 48 of file edt_calcmask.c. Referenced by CALC_read_opts(). |
|
Definition at line 36 of file edt_calcmask.c. Referenced by CALC_read_opts(). |
|
Definition at line 16 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 53 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |
|
Definition at line 51 of file edt_calcmask.c. Referenced by CALC_read_opts(), and EDT_calcmask(). |