Doxygen Source Code Documentation
thd_initdblk.c File Reference
#include "mrilib.h"
#include "thd.h"
Go to the source code of this file.
Defines | |
#define | MYHEAD ((headname==NULL) ? "UNKNOWN" : headname) |
#define | ATR_IS_STR(nnn) ( (atr_str = THD_find_string_atr(blk,nnn)) != NULL ) |
#define | ATR_IS_FLT(nnn) ( (atr_flt = THD_find_float_atr (blk,nnn)) != NULL ) |
#define | ATR_IS_INT(nnn) ( (atr_int = THD_find_int_atr (blk,nnn)) != NULL ) |
#define | TF(i, j) ( ((j)<nfper && (i)*nfper+(j)<nfl) ? atr_flt->fl[(i)*nfper+(j)] : -666.0 ) |
Functions | |
THD_datablock * | THD_init_one_datablock (char *dirname, char *headname) |
int | THD_datablock_from_atr (THD_datablock *dblk, char *dirname, char *headname) |
void | THD_datablock_apply_atr (THD_3dim_dataset *dset) |
void | THD_init_datablock_brick (THD_datablock *dblk, int ntype, void *btype) |
int | THD_need_brick_factor (THD_3dim_dataset *dset) |
Variables | |
int | native_order = -1 |
int | no_mmap = -1 |
int | no_ordwarn = -1 |
Define Documentation
|
Definition at line 431 of file thd_initdblk.c. Referenced by THD_datablock_apply_atr(). |
|
Definition at line 432 of file thd_initdblk.c. Referenced by THD_datablock_apply_atr(). |
|
Now create an empty shell of the "brick" == the data structure that will hold all the voxel data. Note that all datablocks will have a brick, even if they never actually contain data themselves (are only warp-on-demand). If the BRICK_TYPES input attribute doesn't exist, then all sub-bricks are shorts. This makes the code work with old-style datasets, which were always made up of shorts. Definition at line 430 of file thd_initdblk.c. Referenced by THD_datablock_apply_atr(). |
|
Definition at line 132 of file thd_initdblk.c. Referenced by THD_datablock_from_atr(). |
|
|
Function Documentation
|
Apply attributes to modify an existing datablock. Only some attributes have an effect. 09 May 2005 -- written to support NIfTI-ization, by allowing attributes to be applied AFTER a dataset is created. ----------------------------------------------------------------------------- Definition at line 441 of file thd_initdblk.c. References ADDTO_KILL, THD_marker_set::aflags, THD_3dim_dataset::anat_parent_idcode, THD_3dim_dataset::anat_parent_name, ATR_IS_FLT, ATR_IS_INT, ATR_IS_STR, ATRNAME_ANATOMY_PARENT, ATRNAME_BRICK_KEYWORDS, ATRNAME_BRICK_LABS, ATRNAME_BRICK_STATAUX, ATRNAME_BRICK_STATS, ATRNAME_DATANAME, ATRNAME_IDANATPAR, ATRNAME_IDDATE, ATRNAME_IDSTRING, ATRNAME_IDWARPPAR, ATRNAME_KEYWORDS, ATRNAME_MARKSFLAG, ATRNAME_MARKSHELP, ATRNAME_MARKSLAB, ATRNAME_MARKSXYZ, ATRNAME_TAGSET_FLOATS, ATRNAME_TAGSET_LABELS, ATRNAME_TAGSET_NUM, ATRNAME_WARP_DATA, ATRNAME_WARP_PARENT, ATRNAME_WARP_TYPE, THD_datablock::brick_keywords, THD_datablock::brick_lab, THD_statistics::bstat, ATR_string::ch, COPY_INTO_STRUCT, MCW_idcode::date, THD_3dim_dataset::daxes, THD_3dim_dataset::dblk, THD_datablock::diskptr, ENTRY, ATR_float::fl, THD_marker_set::help, THD_3dim_dataset::idcode, ATR_int::in, INVALIDATE_BSTAT, ISVALID_DSET, ISZERO_IDCODE, THD_3dim_dataset::keywords, THD_3dim_dataset::kl, THD_usertag::label, THD_usertaglist::label, THD_marker_set::label, MAPPING_LINEAR_FSIZE, MAPPING_LINEAR_FSTART, MAPPING_LINEAR_TYPE, THD_3dim_dataset::markers, MARKS_ASIZE, MARKS_ASTART, MARKS_FSIZE, MARKS_FSTART, MARKS_HSIZE, MARKS_HSTART, MARKS_LSIZE, MARKS_LSTART, MARKS_MAXFLAG, MARKS_MAXNUM, THD_brick_stats::max, MAX_TAG_NUM, MCW_IDDATE, MCW_IDSIZE, MCW_strncpy, THD_brick_stats::min, myXtNew, THD_statistics::nbstat, ATR_string::nch, ATR_float::nfl, ATR_int::nin, THD_usertaglist::num, THD_marker_set::numdef, THD_marker_set::numset, THD_datablock::nvals, nz, THD_marker_set::ovcolor, THD_statistics::parent, THD_talairach_12_warp::resam_type, THD_affine_warp::resam_type, THD_3dim_dataset::self_name, THD_usertag::set, STATISTICS_TYPE, THD_3dim_dataset::stats, STATUS, MCW_idcode::str, THD_usertaglist::tag, TAG_SETLABEL, THD_3dim_dataset::tagset, THD_init_datablock_keywords(), THD_init_datablock_labels(), THD_MAX_NAME, THD_store_datablock_stataux(), THD_usertag::ti, typ, THD_statistics::type, THD_talairach_12_warp::type, THD_linear_mapping::type, THD_affine_warp::type, THD_marker_set::type, THD_usertag::val, THD_marker_set::valid, THD_talairach_12_warp::warp, THD_affine_warp::warp, THD_3dim_dataset::warp, WARP_AFFINE_TYPE, THD_3dim_dataset::warp_parent_idcode, THD_3dim_dataset::warp_parent_name, WARP_TALAIRACH_12_TYPE, THD_usertag::x, XtFree, XtMalloc, THD_dataxes::xxmax, THD_dataxes::xxmin, THD_marker_set::xyz, THD_usertag::y, THD_dataxes::yymax, THD_dataxes::yymin, THD_usertag::z, THD_dataxes::zzmax, and THD_dataxes::zzmin. Referenced by THD_3dim_from_block(), and THD_open_nifti().
00442 { 00443 THD_datablock *blk ; 00444 THD_diskptr *dkptr ; 00445 THD_dataxes *daxes ; 00446 ATR_int *atr_int = NULL ; 00447 ATR_float *atr_flt = NULL; 00448 ATR_string *atr_str = NULL ; 00449 int ii , view_type , func_type , dset_type , nx,ny,nz,nvox , nvals , ibr,typ ; 00450 Boolean ok ; 00451 char prefix[THD_MAX_NAME]="Unknown" ; 00452 MRI_IMAGE *qim ; 00453 int brick_ccode ; 00454 00455 ENTRY("THD_datablock_apply_atr") ; 00456 00457 if( !ISVALID_DSET(dset) ) EXRETURN ; /* bad input */ 00458 00459 blk = dset->dblk ; if( blk == NULL ) EXRETURN ; 00460 nvals = blk->nvals ; if( nvals <= 0 ) EXRETURN ; 00461 daxes = dset->daxes ; if( daxes == NULL ) EXRETURN ; 00462 dkptr = blk->diskptr ; 00463 00464 /*-- brick labels --*/ 00465 00466 if( ATR_IS_STR(ATRNAME_BRICK_LABS) ){ 00467 int ipos = -1 , ipold , ngood ; 00468 00469 STATUS("brick labels") ; 00470 if( blk->brick_lab == NULL ) THD_init_datablock_labels( blk ) ; 00471 00472 for( ibr=0 ; ibr < nvals ; ibr++ ){ /* loop over bricks */ 00473 00474 for( ipold = ipos++ ; /* skip to */ 00475 ipos < atr_str->nch && atr_str->ch[ipos] != '\0' ; /* next \0 */ 00476 ipos++ ) /* nada */ ; /* or end. */ 00477 00478 ngood = ipos - ipold - 1 ; /* number of good chars */ 00479 if( ngood > 0 ){ 00480 XtFree(blk->brick_lab[ibr]) ; 00481 if( ngood > 32 ) ngood = 32 ; 00482 blk->brick_lab[ibr] = (char *) XtMalloc(sizeof(char)*(ngood+2)) ; 00483 memcpy( blk->brick_lab[ibr] , atr_str->ch+(ipold+1) , ngood ) ; 00484 blk->brick_lab[ibr][ngood] = '\0' ; 00485 } 00486 00487 if( ipos >= atr_str->nch ) break ; /* nothing more to do */ 00488 } /* end of loop over sub-bricks */ 00489 } 00490 00491 /*-- keywords for the dataset itself --*/ 00492 00493 if( ATR_IS_STR(ATRNAME_KEYWORDS) ){ 00494 STATUS("dataset keywords") ; 00495 dset->keywords = XtNewString( atr_str->ch ) ; 00496 } 00497 00498 /*-- keywords for sub-bricks --*/ 00499 00500 if( ATR_IS_STR(ATRNAME_BRICK_KEYWORDS) ){ 00501 int ipos = -1 , ipold , ngood ; 00502 00503 STATUS("brick keywords") ; 00504 if( blk->brick_keywords == NULL ) THD_init_datablock_keywords( blk ) ; 00505 00506 for( ibr=0 ; ibr < nvals ; ibr++ ){ /* loop over bricks */ 00507 00508 for( ipold = ipos++ ; /* skip to */ 00509 ipos < atr_str->nch && atr_str->ch[ipos] != '\0' ; /* next \0 */ 00510 ipos++ ) /* nada */ ; /* or end. */ 00511 00512 ngood = ipos - ipold - 1 ; /* number of good chars */ 00513 if( ngood > 0 ){ 00514 XtFree(blk->brick_keywords[ibr]) ; 00515 blk->brick_keywords[ibr] = (char *) XtMalloc(sizeof(char)*(ngood+2)) ; 00516 memcpy( blk->brick_keywords[ibr] , atr_str->ch+(ipold+1) , ngood ) ; 00517 blk->brick_keywords[ibr][ngood] = '\0' ; 00518 } 00519 00520 if( ipos >= atr_str->nch ) break ; /* nothing more to do */ 00521 } /* end of loop over sub-bricks */ 00522 } 00523 00524 /*-- auxiliary statistics stuff for each brick --*/ 00525 00526 if( ATR_IS_FLT(ATRNAME_BRICK_STATAUX) ){ 00527 int ipos=0 , iv,nv,jv ; 00528 00529 STATUS("brick stataux") ; 00530 00531 /* attribute stores all stataux stuff as follows: 00532 sub-brick-index statcode no.-of-values value ... value 00533 sub-brick-index statcode no.-of-values value ... value, etc. */ 00534 00535 while( ipos <= atr_flt->nfl - 3 ){ 00536 iv = (int) ( atr_flt->fl[ipos++] ) ; /* which sub-brick */ 00537 jv = (int) ( atr_flt->fl[ipos++] ) ; /* statcode */ 00538 nv = (int) ( atr_flt->fl[ipos++] ) ; /* # of values that follow */ 00539 00540 if( nv > atr_flt->nfl - ipos ) nv = atr_flt->nfl - ipos ; 00541 00542 THD_store_datablock_stataux( blk , iv , jv , nv , atr_flt->fl + ipos ) ; 00543 ipos += nv ; 00544 } 00545 } 00546 00547 /*-- ID codes --*/ 00548 00549 if( ATR_IS_STR(ATRNAME_IDSTRING) ) 00550 MCW_strncpy( dset->idcode.str , atr_str->ch , MCW_IDSIZE ) ; 00551 00552 if( ATR_IS_STR(ATRNAME_IDDATE) ) 00553 MCW_strncpy( dset->idcode.date , atr_str->ch , MCW_IDDATE ) ; 00554 00555 if( ATR_IS_STR(ATRNAME_IDANATPAR) ) 00556 MCW_strncpy( dset->anat_parent_idcode.str , atr_str->ch , MCW_IDSIZE ) ; 00557 00558 if( ATR_IS_STR(ATRNAME_IDWARPPAR) ) 00559 MCW_strncpy( dset->warp_parent_idcode.str , atr_str->ch , MCW_IDSIZE ) ; 00560 00561 /*-- parent names --*/ 00562 00563 if( ATR_IS_STR(ATRNAME_ANATOMY_PARENT) && 00564 ISZERO_IDCODE(dset->anat_parent_idcode) ) 00565 MCW_strncpy( dset->anat_parent_name , atr_str->ch , THD_MAX_NAME ) ; 00566 00567 if( ATR_IS_STR(ATRNAME_WARP_PARENT) && 00568 ISZERO_IDCODE(dset->warp_parent_idcode) ) 00569 MCW_strncpy( dset->warp_parent_name , atr_str->ch , THD_MAX_NAME ) ; 00570 00571 if( ATR_IS_STR(ATRNAME_DATANAME) ) 00572 MCW_strncpy( dset->self_name , atr_str->ch , THD_MAX_NAME ) ; 00573 00574 /*-- markers --*/ 00575 00576 if( ATR_IS_FLT(ATRNAME_MARKSXYZ) && ATR_IS_STR(ATRNAME_MARKSLAB) ){ 00577 int im , llen ; 00578 THD_ivec3 iv ; 00579 float xxdown,xxup , yydown,yyup , zzdown,zzup ; 00580 00581 STATUS("markers") ; 00582 00583 if( dset->markers == NULL ){ 00584 dset->markers = myXtNew( THD_marker_set ) ; /* new set */ 00585 ADDTO_KILL(dset->kl , dset->markers) ; 00586 } 00587 00588 COPY_INTO_STRUCT( *(dset->markers) , /* actual struct */ 00589 MARKS_FSTART , /* byte offset */ 00590 float , /* type being copied */ 00591 atr_flt->fl , /* start of source */ 00592 MARKS_FSIZE ) ; /* number of floats */ 00593 00594 COPY_INTO_STRUCT( *(dset->markers) , 00595 MARKS_LSTART , 00596 char , 00597 atr_str->ch , 00598 MARKS_LSIZE ) ; 00599 00600 xxdown = daxes->xxmin ; xxup = daxes->xxmax ; 00601 yydown = daxes->yymin ; yyup = daxes->yymax ; 00602 zzdown = daxes->zzmin ; zzup = daxes->zzmax ; 00603 00604 dset->markers->numdef = dset->markers->numset = 0 ; 00605 00606 for( im=0 ; im < MARKS_MAXNUM ; im++ ){ 00607 llen = strlen( &(dset->markers->label[im][0]) ) ; 00608 dset->markers->valid[im] = 00609 (llen > 0) && 00610 ( dset->markers->xyz[im][0] >= xxdown ) && 00611 ( dset->markers->xyz[im][0] <= xxup ) && 00612 ( dset->markers->xyz[im][1] >= yydown ) && 00613 ( dset->markers->xyz[im][1] <= yyup ) && 00614 ( dset->markers->xyz[im][2] >= zzdown ) && 00615 ( dset->markers->xyz[im][2] <= zzup ) ; 00616 00617 if( dset->markers->valid[im] ) (dset->markers->numset)++ ; 00618 00619 if( llen > 0 ) (dset->markers->numdef)++ ; 00620 00621 dset->markers->ovcolor[im] = -1 ; /* default color */ 00622 } 00623 00624 if( ATR_IS_STR(ATRNAME_MARKSHELP) ){ 00625 COPY_INTO_STRUCT( *(dset->markers) , 00626 MARKS_HSTART , 00627 char , 00628 atr_str->ch , 00629 MARKS_HSIZE ) ; 00630 } else { 00631 for( im=0 ; im < MARKS_MAXNUM ; im++ ) /* no help */ 00632 dset->markers->help[im][0] = '\0' ; 00633 } 00634 00635 if( ATR_IS_INT(ATRNAME_MARKSFLAG) ){ 00636 COPY_INTO_STRUCT( *(dset->markers) , 00637 MARKS_ASTART , 00638 int , 00639 atr_int->in , 00640 MARKS_ASIZE ) ; 00641 dset->markers->type = dset->markers->aflags[0] ; 00642 } else { 00643 for( im=0 ; im < MARKS_MAXFLAG ; im++ ) 00644 dset->markers->aflags[im] = -1 ; 00645 } 00646 } 00647 00648 /*-- warp --*/ 00649 00650 if( ATR_IS_INT(ATRNAME_WARP_TYPE) && ATR_IS_FLT(ATRNAME_WARP_DATA) ){ 00651 int wtype = atr_int->in[0] , rtype = atr_int->in[1] ; 00652 00653 STATUS("warp") ; 00654 00655 dset->warp = myXtNew( THD_warp ) ; 00656 ADDTO_KILL( dset->kl , dset->warp ) ; 00657 switch( wtype ){ 00658 case WARP_AFFINE_TYPE:{ 00659 THD_affine_warp *ww = (THD_affine_warp *) dset->warp ; 00660 ww->type = wtype ; 00661 ww->resam_type = rtype ; 00662 ww->warp.type = MAPPING_LINEAR_TYPE ; 00663 00664 COPY_INTO_STRUCT( ww->warp , 00665 MAPPING_LINEAR_FSTART , 00666 float , 00667 atr_flt->fl , 00668 MAPPING_LINEAR_FSIZE ) ; 00669 } 00670 break ; /* end affine warp */ 00671 00672 case WARP_TALAIRACH_12_TYPE:{ 00673 THD_talairach_12_warp *ww = 00674 (THD_talairach_12_warp *) dset->warp ; 00675 int iw , ioff ; 00676 ww->type = wtype ; 00677 ww->resam_type = rtype ; 00678 for( iw=0 ; iw < 12 ; iw++ ){ 00679 ww->warp[iw].type = MAPPING_LINEAR_TYPE ; 00680 00681 ioff = iw * MAPPING_LINEAR_FSIZE ; 00682 00683 COPY_INTO_STRUCT( ww->warp[iw] , 00684 MAPPING_LINEAR_FSTART , 00685 float , 00686 &(atr_flt->fl[ioff]) , 00687 MAPPING_LINEAR_FSIZE ) ; 00688 00689 } /* end loop over 12 warps */ 00690 } 00691 break ; /* end talairach_12 warp */ 00692 00693 } /* end of switch on warp type */ 00694 } 00695 00696 /*-- brick stats --*/ 00697 00698 if( ATR_IS_FLT(ATRNAME_BRICK_STATS) ){ 00699 int qq ; 00700 STATUS("brick statistics") ; 00701 dset->stats = myXtNew( THD_statistics ) ; 00702 dset->stats->type = STATISTICS_TYPE ; 00703 dset->stats->parent = (XtPointer) dset ; 00704 dset->stats->nbstat = blk->nvals ; 00705 dset->stats->bstat = (THD_brick_stats *) 00706 XtMalloc( sizeof(THD_brick_stats) * blk->nvals ) ; 00707 for( qq=0 ; qq < blk->nvals ; qq++ ){ 00708 if( 2*qq+1 < atr_flt->nfl ){ 00709 dset->stats->bstat[qq].min = atr_flt->fl[2*qq] ; 00710 dset->stats->bstat[qq].max = atr_flt->fl[2*qq+1] ; 00711 } else { 00712 INVALIDATE_BSTAT( dset->stats->bstat[qq] ) ; 00713 } 00714 } 00715 ADDTO_KILL( dset->kl , dset->stats->bstat ) ; 00716 ADDTO_KILL( dset->kl , dset->stats ) ; 00717 } 00718 00719 /*-- tagset --*/ 00720 00721 if( ATR_IS_INT(ATRNAME_TAGSET_NUM) && 00722 ATR_IS_FLT(ATRNAME_TAGSET_FLOATS) && 00723 ATR_IS_STR(ATRNAME_TAGSET_LABELS) ){ 00724 00725 int nin=atr_int->nin , nfl=atr_flt->nfl , nch=atr_str->nch ; 00726 int ii , ntag , nfper , jj , kk ; 00727 00728 STATUS("tagset") ; 00729 ntag = atr_int->in[0] ; /* number of tags */ 00730 nfper = atr_int->in[1] ; /* number of floats per tag */ 00731 00732 if( ntag > MAX_TAG_NUM ) ntag = MAX_TAG_NUM ; 00733 00734 dset->tagset = myXtNew( THD_usertaglist ) ; /* create tagset */ 00735 ADDTO_KILL( dset->kl , dset->tagset ) ; 00736 00737 dset->tagset->num = ntag ; 00738 strcpy( dset->tagset->label , "Bebe Rebozo" ) ; /* not used */ 00739 00740 /* read out tag values; allow for chance there isn't enough data */ 00741 00742 #undef TF 00743 #define TF(i,j) \ 00744 ( ((j)<nfper && (i)*nfper+(j)<nfl) ? atr_flt->fl[(i)*nfper+(j)] : -666.0 ) 00745 00746 for( ii=0 ; ii < ntag ; ii++ ){ 00747 dset->tagset->tag[ii].x = TF(ii,0) ; /* coords */ 00748 dset->tagset->tag[ii].y = TF(ii,1) ; 00749 dset->tagset->tag[ii].z = TF(ii,2) ; 00750 dset->tagset->tag[ii].val = TF(ii,3) ; /* value */ 00751 dset->tagset->tag[ii].ti = TF(ii,4) ; /* time index: if < 0, not set */ 00752 if( dset->tagset->tag[ii].ti >= 0 ){ 00753 dset->tagset->tag[ii].set = 1 ; 00754 } else { 00755 dset->tagset->tag[ii].set = 0 ; dset->tagset->tag[ii].ti = 0 ; 00756 } 00757 } 00758 #undef TF 00759 00760 /* read out tag labels; allow for empty labels */ 00761 00762 jj = 0 ; 00763 for( ii=0 ; ii < ntag ; ii++ ){ 00764 if( jj < nch ){ 00765 kk = strlen( atr_str->ch + jj ) ; 00766 if( kk > 0 ) TAG_SETLABEL( dset->tagset->tag[ii] , atr_str->ch + jj ); 00767 else sprintf( dset->tagset->tag[ii].label , "Tag %d" , ii+1 ); 00768 jj += kk+1 ; 00769 } else { 00770 sprintf( dset->tagset->tag[ii].label , "Tag %d" , ii+1 ) ; 00771 } 00772 } 00773 } 00774 00775 EXRETURN ; 00776 } |
|
Take the internal attributes and load the datablock struct up. ----------------------------------------------------------------------------- Definition at line 138 of file thd_initdblk.c. References AFNI_FIRST_STATCODE, AFNI_LAST_STATCODE, ATRNAME_BRICK_FLTFAC, ATRNAME_BRICK_KEYWORDS, ATRNAME_BRICK_LABS, ATRNAME_BRICK_STATAUX, ATRNAME_BRICK_TYPES, ATRNAME_BYTEORDER, ATRNAME_DATASET_DIMENSIONS, ATRNAME_DATASET_RANK, ATRNAME_SCENE_TYPE, THD_datablock::brick_fac, THD_datablock::brick_keywords, THD_datablock::brick_lab, THD_diskptr::brick_name, THD_diskptr::byte_order, BYTE_ORDER_STRING, ATR_string::ch, COMPRESS_filecode(), COMPRESS_NOFILE, DATABLOCK_MEM_MALLOC, DATABLOCK_MEM_MMAP, DBLK_BRICK_TYPE, DBLK_mmapfix, THD_diskptr::dimsizes, THD_datablock::diskptr, ENTRY, FILENAME_TO_PREFIX, ATR_float::fl, ATR_int::in, LSB_FIRST_STRING, THD_datablock::malloc_type, MCW_strncpy, MMAP_THRESHOLD, MSB_FIRST_STRING, MYHEAD, native_order, THD_datablock::natr, ATR_string::nch, ATR_float::nfl, NI_decode_string_list(), NI_delete_str_array, NI_stat_decode(), NI_stat_numparam(), ATR_int::nin, no_mmap, no_ordwarn, NI_str_array::num, THD_datablock::nvals, THD_diskptr::nvals, nz, ORDER_LEN, THD_diskptr::rank, RETURN, STATUS, STORAGE_BY_BRICK, STORAGE_BY_VOLUMES, THD_diskptr::storage_mode, STORAGE_UNDEFINED, NI_str_array::str, THD_datum_constant(), THD_find_float_atr(), THD_find_int_atr(), THD_find_string_atr(), THD_init_datablock_brick(), THD_init_datablock_keywords(), THD_init_datablock_labels(), THD_init_diskptr_names(), THD_MAX_NAME, THD_MAX_RANK, THD_MIN_RANK, THD_store_datablock_stataux(), THD_datablock::total_bytes, typ, XtFree, and XtMalloc. Referenced by THD_init_one_datablock(), and THD_niml_to_dataset().
00139 { 00140 THD_diskptr *dkptr ; 00141 ATR_int *atr_rank , *atr_dimen , *atr_scene , *atr_btype ; 00142 ATR_float *atr_flt ; 00143 ATR_string *atr_labs ; 00144 int ii , view_type , func_type , dset_type , nx,ny,nz,nvox , nvals , ibr,typ ; 00145 Boolean ok ; 00146 char prefix[THD_MAX_NAME]="Unknown" ; 00147 MRI_IMAGE *qim ; 00148 int brick_ccode ; 00149 00150 ENTRY("THD_datablock_from_atr") ; 00151 00152 if( dblk == NULL || dblk->natr <= 0 ) RETURN(0) ; /* bad input */ 00153 00154 dkptr = dblk->diskptr ; 00155 00156 /*-- get relevant attributes: rank, dimensions, view_type & func_type --*/ 00157 00158 atr_rank = THD_find_int_atr( dblk , ATRNAME_DATASET_RANK ) ; 00159 atr_dimen = THD_find_int_atr( dblk , ATRNAME_DATASET_DIMENSIONS ) ; 00160 atr_scene = THD_find_int_atr( dblk , ATRNAME_SCENE_TYPE ) ; 00161 00162 /*-- missing an attribute ==> quit now --*/ 00163 00164 if( atr_rank == NULL || atr_dimen == NULL || atr_scene == NULL ) RETURN(0) ; 00165 00166 /*-- load type codes from SCENE attribute --*/ 00167 00168 STATUS("loading *_type from SCENE") ; 00169 00170 view_type = atr_scene->in[0] ; 00171 func_type = atr_scene->in[1] ; 00172 dset_type = atr_scene->in[2] ; 00173 00174 /*-- load other values from attributes into relevant places --*/ 00175 00176 ok = True ; 00177 nvox = 1 ; 00178 00179 STATUS("loading from RANK") ; 00180 00181 dkptr->rank = atr_rank->in[0] ; /* N.B.: rank isn't used much */ 00182 dkptr->nvals = dblk->nvals = nvals = atr_rank->in[1] ; /* but nvals is used */ 00183 00184 STATUS("loading from DIMENSIONS") ; 00185 00186 for( ii=0 ; ii < dkptr->rank ; ii++ ){ 00187 dkptr->dimsizes[ii] = atr_dimen->in[ii] ; 00188 ok = ( ok && dkptr->dimsizes[ii] >= 1 ) ; 00189 nvox *= dkptr->dimsizes[ii] ; 00190 } 00191 00192 #if 0 00193 if( PRINT_TRACING ){ 00194 char str[256] ; 00195 sprintf(str,"rank=%d nvals=%d dim[0]=%d dim[1]=%d dim[2]=%d nvox=%d", 00196 dkptr->rank , dkptr->nvals , 00197 dkptr->dimsizes[0] , dkptr->dimsizes[1] , dkptr->dimsizes[2] , nvox ) ; 00198 STATUS(str) ; 00199 } 00200 #endif 00201 00202 if( !ok || nvals < 1 || 00203 dkptr->rank < THD_MIN_RANK || dkptr->rank > THD_MAX_RANK ){ 00204 STATUS("bad rank!!??") ; 00205 RETURN(0) ; 00206 } 00207 00208 /*-- create the storage filenames --*/ 00209 00210 STATUS("creating storage filenames") ; 00211 00212 if( headname != NULL && strchr(headname,'+') != NULL ){ 00213 FILENAME_TO_PREFIX(headname,prefix) ; 00214 THD_init_diskptr_names( dkptr, dirname,NULL,prefix , view_type , True ) ; 00215 } else { 00216 if( headname != NULL ) MCW_strncpy(prefix,headname,THD_MAX_NAME) ; 00217 THD_init_diskptr_names( dkptr, dirname,NULL,prefix , view_type , True ) ; 00218 } 00219 00220 /*-- determine if the BRIK file exists --*/ 00221 00222 STATUS("checking if .BRIK file exists") ; 00223 00224 brick_ccode = COMPRESS_filecode(dkptr->brick_name) ; 00225 if( brick_ccode != COMPRESS_NOFILE ) 00226 dkptr->storage_mode = STORAGE_BY_BRICK ; /* a .BRIK file */ 00227 00228 /*-- if VOLUME_FILENAMES attribute exists, make it so [20 Jun 2002] --*/ 00229 00230 if( headname != NULL && dkptr->storage_mode == STORAGE_UNDEFINED ){ 00231 atr_labs = THD_find_string_atr(dblk,"VOLUME_FILENAMES") ; 00232 if( atr_labs != NULL ){ 00233 dkptr->storage_mode = STORAGE_BY_VOLUMES ; 00234 dblk->malloc_type = DATABLOCK_MEM_MALLOC ; 00235 } 00236 } 00237 00238 /*-- now set the memory allocation codes, etc. --*/ 00239 00240 dblk->brick_fac = (float *) XtMalloc( sizeof(float) * nvals ) ; 00241 for( ibr=0 ; ibr < nvals ; ibr++ ) dblk->brick_fac[ibr] = 0.0 ; 00242 00243 /* scaling factors from short type to float type, if nonzero */ 00244 00245 atr_flt = THD_find_float_atr( dblk , ATRNAME_BRICK_FLTFAC ) ; 00246 if( atr_flt != NULL ){ 00247 for( ibr=0 ; ibr < nvals && ibr < atr_flt->nfl ; ibr++ ) 00248 dblk->brick_fac[ibr] = atr_flt->fl[ibr] ; 00249 } 00250 00251 /** Now create an empty shell of the "brick" == the data structure 00252 that will hold all the voxel data. Note that all datablocks 00253 will have a brick, even if they never actually contain data 00254 themselves (are only warp-on-demand). 00255 00256 If the BRICK_TYPES input attribute doesn't exist, then all 00257 sub-bricks are shorts. This makes the code work with old-style 00258 datasets, which were always made up of shorts. 00259 **/ 00260 00261 atr_btype = THD_find_int_atr( dblk , ATRNAME_BRICK_TYPES ) ; 00262 00263 if( atr_btype == NULL ){ 00264 THD_init_datablock_brick( dblk , MRI_short , NULL ) ; 00265 } else { 00266 THD_init_datablock_brick( dblk , atr_btype->nin , atr_btype->in ) ; 00267 } 00268 00269 if( !THD_datum_constant(dblk) ){ /* 15 Sep 2004 */ 00270 fprintf(stderr, 00271 "\n** WARNING: File %s has mixed-type sub-bricks. ", MYHEAD ) ; 00272 } 00273 00274 /* 25 April 1998: check if the byte order is stored inside */ 00275 00276 atr_labs = THD_find_string_atr( dblk , ATRNAME_BYTEORDER ) ; 00277 if( atr_labs != NULL && atr_labs->nch > 0 ){ 00278 00279 if( strncmp(atr_labs->ch,LSB_FIRST_STRING,ORDER_LEN) == 0 ) 00280 dkptr->byte_order = LSB_FIRST ; 00281 else if( strncmp(atr_labs->ch,MSB_FIRST_STRING,ORDER_LEN) == 0 ) 00282 dkptr->byte_order = MSB_FIRST ; 00283 else 00284 fprintf(stderr,"*** Unknown %s found in dataset %s\n", 00285 ATRNAME_BYTEORDER , MYHEAD ) ; 00286 00287 } else if( !no_ordwarn && 00288 DBLK_BRICK_TYPE(dblk,0) != MRI_byte && 00289 dblk->diskptr->storage_mode == STORAGE_BY_BRICK ){ /* 20 Sep 1999 */ 00290 00291 static int first=1 ; 00292 if( first ){ 00293 fprintf(stderr, 00294 "\n*** The situation below can be rectified with program '3drefit -byteorder':\n"); 00295 first = 0 ; 00296 } 00297 fprintf(stderr," ** Dataset %s: assuming byteorder %s\n", 00298 MYHEAD , BYTE_ORDER_STRING(dkptr->byte_order) ) ; 00299 } 00300 00301 /* if the data is not on disk, the flag remains at DATABLOCK_MEM_UNDEFINED, 00302 otherwise the flag says how the memory for the bricks is to be created. */ 00303 00304 if( dkptr->storage_mode == STORAGE_BY_BRICK ){ 00305 #if MMAP_THRESHOLD > 0 00306 dblk->malloc_type = (dblk->total_bytes > MMAP_THRESHOLD) 00307 ? DATABLOCK_MEM_MMAP : DATABLOCK_MEM_MALLOC ; 00308 DBLK_mmapfix(dblk) ; /* 18 Mar 2005 */ 00309 #else 00310 dblk->malloc_type = DATABLOCK_MEM_MALLOC ; 00311 #endif 00312 00313 /* must be malloc-ed if: 00314 data is compressed, 00315 data is not in native byte order, or 00316 user explicity forbids use of mmap */ 00317 00318 if( brick_ccode >= 0 || dkptr->byte_order != native_order || no_mmap ) 00319 dblk->malloc_type = DATABLOCK_MEM_MALLOC ; 00320 } 00321 00322 /* 30 Nov 1997: create the labels for sub-bricks */ 00323 00324 THD_init_datablock_labels( dblk ) ; 00325 00326 atr_labs = THD_find_string_atr( dblk , ATRNAME_BRICK_LABS ) ; 00327 00328 if( atr_labs != NULL && atr_labs->nch > 0 ){ /* create labels from attribute */ 00329 int ipos = -1 , ipold , ngood ; 00330 00331 for( ibr=0 ; ibr < nvals ; ibr++ ){ /* loop over bricks */ 00332 00333 for( ipold = ipos++ ; /* skip to */ 00334 ipos < atr_labs->nch && atr_labs->ch[ipos] != '\0' ; /* next \0 */ 00335 ipos++ ) /* nada */ ; /* or end. */ 00336 00337 ngood = ipos - ipold - 1 ; /* number of good chars */ 00338 if( ngood > 0 ){ 00339 XtFree(dblk->brick_lab[ibr]) ; 00340 if( ngood > 32 ) ngood = 32 ; /* 02 Sep 2004 */ 00341 dblk->brick_lab[ibr] = (char *) XtMalloc(sizeof(char)*(ngood+2)) ; 00342 memcpy( dblk->brick_lab[ibr] , atr_labs->ch+(ipold+1) , ngood ) ; 00343 dblk->brick_lab[ibr][ngood] = '\0' ; 00344 } 00345 00346 if( ipos >= atr_labs->nch ) break ; /* nothing more to do */ 00347 } /* end of loop over sub-bricks */ 00348 } 00349 00350 /* create the keywords for sub-bricks */ 00351 00352 THD_init_datablock_keywords( dblk ) ; 00353 00354 atr_labs = THD_find_string_atr( dblk , ATRNAME_BRICK_KEYWORDS ) ; 00355 00356 if( atr_labs != NULL && atr_labs->nch > 0 ){ /* create keywords from attribute */ 00357 int ipos = -1 , ipold , ngood ; 00358 00359 for( ibr=0 ; ibr < nvals ; ibr++ ){ /* loop over bricks */ 00360 00361 for( ipold = ipos++ ; /* skip to */ 00362 ipos < atr_labs->nch && atr_labs->ch[ipos] != '\0' ; /* next \0 */ 00363 ipos++ ) /* nada */ ; /* or end. */ 00364 00365 ngood = ipos - ipold - 1 ; /* number of good chars */ 00366 if( ngood > 0 ){ 00367 XtFree(dblk->brick_keywords[ibr]) ; 00368 dblk->brick_keywords[ibr] = (char *) XtMalloc(sizeof(char)*(ngood+2)) ; 00369 memcpy( dblk->brick_keywords[ibr] , atr_labs->ch+(ipold+1) , ngood ) ; 00370 dblk->brick_keywords[ibr][ngood] = '\0' ; 00371 } 00372 00373 if( ipos >= atr_labs->nch ) break ; /* nothing more to do */ 00374 } /* end of loop over sub-bricks */ 00375 } 00376 00377 /* create the auxiliary statistics stuff for each brick, if present */ 00378 00379 atr_labs = THD_find_string_atr( dblk , "BRICK_STATSYM" ) ; /* 01 Jun 2005 */ 00380 if( atr_labs != NULL && atr_labs->nch > 0 ){ 00381 NI_str_array *sar ; int scode,np ; float parm[3] ; 00382 sar = NI_decode_string_list( atr_labs->ch , ";" ) ; 00383 if( sar != NULL && sar->num > 0 ){ 00384 for( ibr=0 ; ibr < nvals && ibr < sar->num ; ibr++ ){ 00385 NI_stat_decode( sar->str[ibr] , &scode , parm,parm+1,parm+2 ) ; 00386 if( scode >= AFNI_FIRST_STATCODE && scode <= AFNI_LAST_STATCODE ){ 00387 np = NI_stat_numparam(scode) ; 00388 THD_store_datablock_stataux( dblk , ibr,scode,np,parm ) ; 00389 } 00390 } 00391 NI_delete_str_array(sar) ; 00392 } 00393 } else { /*--- the olde way to get ye brick stataux parameters ---*/ 00394 atr_flt = THD_find_float_atr( dblk , ATRNAME_BRICK_STATAUX ) ; 00395 if( atr_flt != NULL && atr_flt->nfl >= 3 ){ 00396 int ipos=0 , iv,nv,jv ; 00397 00398 /* attribute stores all stataux stuff as follows: 00399 sub-brick-index statcode no.-of-values value ... value 00400 sub-brick-index statcode no.-of-values value ... value, etc. */ 00401 00402 while( ipos <= atr_flt->nfl - 3 ){ 00403 iv = (int) ( atr_flt->fl[ipos++] ) ; /* which sub-brick */ 00404 jv = (int) ( atr_flt->fl[ipos++] ) ; /* statcode */ 00405 nv = (int) ( atr_flt->fl[ipos++] ) ; /* # of values that follow */ 00406 00407 if( nv > atr_flt->nfl - ipos ) nv = atr_flt->nfl - ipos ; 00408 00409 THD_store_datablock_stataux( dblk , iv , jv , nv , atr_flt->fl + ipos ) ; 00410 ipos += nv ; 00411 } 00412 } 00413 } 00414 #if 0 00415 if( PRINT_TRACING ){ 00416 char str[256] ; 00417 sprintf(str,"rank=%d nvals=%d dim[0]=%d dim[1]=%d dim[2]=%d", 00418 dkptr->rank , dkptr->nvals , 00419 dkptr->dimsizes[0] , dkptr->dimsizes[1] , dkptr->dimsizes[2] ) ; 00420 STATUS(str) ; 00421 } 00422 #endif 00423 00424 RETURN(1) ; 00425 } |
|
Definition at line 796 of file thd_initdblk.c. References ADDTO_IMARR, THD_datablock::brick, THD_datablock::brick_bytes, THD_datablock::brick_fac, DBLK_BRICK_TYPE, DESTROY_IMARR, THD_diskptr::dimsizes, THD_datablock::diskptr, ENTRY, INIT_IMARR, ISVALID_DATABLOCK, mri_new_vol_empty(), THD_datablock::nvals, MRI_IMAGE::nvox, nz, MRI_IMAGE::pixel_size, STATUS, THD_datablock::total_bytes, typ, and XtMalloc. Referenced by adwarp_follower_dataset(), adwarp_refashion_dataset(), AFNI_follower_dataset(), AFNI_init_warp(), AFNI_read_images(), AFNI_refashion_dataset(), EDIT_dset_items(), EDIT_empty_copy(), T3D_fix_dataset_dimen(), T3D_read_images(), THD_datablock_from_atr(), and THD_setup_mastery().
00797 { 00798 int ibr , nx,ny,nz , typ , nvals ; 00799 MRI_IMAGE *qim ; 00800 THD_datablock *pblk = NULL ; 00801 int *itype = NULL ; 00802 00803 ENTRY("THD_init_datablock_brick") ; 00804 00805 if( ! ISVALID_DATABLOCK(dblk) ) EXRETURN ; /* bad inputs */ 00806 if( ntype < 0 && btype == NULL ) EXRETURN ; 00807 if( ntype == 0 && btype != NULL ) EXRETURN ; 00808 00809 if( ntype < 0 ){ /* copy types from */ 00810 pblk = (THD_datablock *) btype ; /* datablock pblk */ 00811 if( ! ISVALID_DATABLOCK(pblk) ) EXRETURN ; 00812 } else { 00813 itype = (int *) btype ; 00814 } 00815 00816 nx = dblk->diskptr->dimsizes[0] ; 00817 ny = dblk->diskptr->dimsizes[1] ; 00818 nz = dblk->diskptr->dimsizes[2] ; 00819 nvals = dblk->nvals ; if( nvals < 1 ) EXRETURN ; /* something wrong */ 00820 00821 /** make brick information arrays, if not pre-existing **/ 00822 00823 if( dblk->brick_bytes == NULL ){ 00824 STATUS("making dblk->brick_bytes") ; 00825 dblk->brick_bytes = (int *) XtMalloc( sizeof(int) * nvals ) ; 00826 } 00827 00828 if( dblk->brick_fac == NULL ){ 00829 STATUS("making dblk->brick_fac") ; 00830 dblk->brick_fac = (float *) XtMalloc( sizeof(float) * nvals ) ; 00831 for( ibr=0 ; ibr < nvals ; ibr++ ) 00832 dblk->brick_fac[ibr] = (ntype < 0) ? pblk->brick_fac[ibr] : 0.0 ; 00833 } 00834 00835 dblk->total_bytes = 0 ; 00836 00837 if( dblk->brick != NULL ){ 00838 STATUS("destroying old dblk->brick") ; 00839 DESTROY_IMARR( dblk->brick ) ; 00840 } 00841 00842 STATUS("making new dblk->brick") ; 00843 INIT_IMARR( dblk->brick ) ; /* make the new brick */ 00844 00845 /** set up each sub-brick **/ 00846 00847 STATUS("starting sub-brick creations") ; 00848 for( ibr=0 ; ibr < nvals ; ibr++ ){ 00849 if( ntype < 0 ){ typ = DBLK_BRICK_TYPE(pblk,ibr) ; 00850 } else if( itype == NULL ){ 00851 typ = ntype ; /* all types are the same */ 00852 } else { 00853 if( ibr < ntype ) typ = itype[ibr] ; /* types may vary */ 00854 else typ = itype[ntype-1] ; 00855 } 00856 00857 qim = mri_new_vol_empty( nx,ny,nz , typ ) ; /* image with no data */ 00858 ADDTO_IMARR( dblk->brick , qim ) ; 00859 00860 dblk->brick_bytes[ibr] = qim->pixel_size * qim->nvox ; 00861 dblk->total_bytes += dblk->brick_bytes[ibr] ; 00862 } 00863 00864 STATUS("exiting") ; 00865 EXRETURN ; 00866 } |
|
Definition at line 19 of file thd_initdblk.c. References ADDTO_KILL, AFNI_yesenv(), THD_datablock::brick, THD_datablock::brick_bytes, THD_datablock::brick_fac, THD_datablock::brick_keywords, THD_datablock::brick_lab, THD_datablock::brick_stataux, THD_datablock::brick_statcode, THD_diskptr::byte_order, DATABLOCK_MEM_UNDEFINED, DATABLOCK_TYPE, DATASET_HEADER_SUFFIX, DBLK_unlock, THD_diskptr::dimsizes, THD_datablock::diskptr, DISKPTR_TYPE, EDIT_empty_datablock(), ENTRY, FILENAME_TO_PREFIX, getenv(), INIT_KILL, THD_datablock::kl, LSB_FIRST_STRING, THD_datablock::malloc_type, THD_datablock::master_bot, THD_datablock::master_bytes, THD_datablock::master_ival, THD_datablock::master_nvals, THD_datablock::master_top, mri_short_order(), MSB_FIRST_STRING, myXtFree, myXtNew, native_order, no_mmap, no_ordwarn, THD_diskptr::nvals, ORDER_LEN, THD_datablock::parent, THD_diskptr::rank, RETURN, THD_datablock::shm_idcode, STATUS, THD_diskptr::storage_mode, STORAGE_UNDEFINED, THD_datablock_from_atr(), THD_delete_datablock(), THD_MAX_NAME, THD_read_all_atr(), THD_datablock::total_bytes, THD_diskptr::type, and THD_datablock::type. Referenced by THD_init_prefix_datablocks(), and THD_open_one_dataset().
00020 { 00021 THD_datablock *dblk ; 00022 THD_diskptr *dkptr ; 00023 int ii ; 00024 char prefix[THD_MAX_NAME] = "\0" ; 00025 int default_order ; /* 21 Jun 2000 */ 00026 00027 ENTRY("THD_init_one_datablock") ; 00028 00029 /*-- sanity checks --*/ 00030 00031 if( dirname == NULL || strlen(dirname) == 0 || 00032 headname == NULL || strlen(headname) == 0 ) RETURN( NULL ) ; 00033 00034 FILENAME_TO_PREFIX(headname,prefix) ; 00035 if( strlen(prefix) == 0 || 00036 strstr(headname,DATASET_HEADER_SUFFIX) == NULL ) RETURN( NULL ) ; 00037 00038 /*-- byte ordering stuff --*/ 00039 00040 if( native_order < 0 ) native_order = mri_short_order() ; 00041 00042 no_mmap = AFNI_yesenv("AFNI_NOMMAP") ; 00043 no_ordwarn = AFNI_yesenv("AFNI_NO_BYTEORDER_WARNING") ; 00044 00045 { char *hh = getenv("AFNI_BYTEORDER_INPUT") ; /* 21 Jun 2000 */ 00046 default_order = native_order ; 00047 if( hh != NULL ){ 00048 if( strncmp(hh,LSB_FIRST_STRING,ORDER_LEN) == 0 ) 00049 default_order = LSB_FIRST ; 00050 else if( strncmp(hh,MSB_FIRST_STRING,ORDER_LEN) == 0 ) 00051 default_order = MSB_FIRST ; 00052 } 00053 } 00054 00055 #if 1 00056 00057 dblk = EDIT_empty_datablock() ; /* 11 Mar 2005 -- the new way */ 00058 dkptr = dblk->diskptr ; 00059 00060 #else 00061 /*-- create output datablock (the old way) --*/ 00062 00063 dblk = myXtNew( THD_datablock ) ; 00064 dblk->type = DATABLOCK_TYPE ; 00065 dblk->brick = NULL ; /* will be filled in below */ 00066 dblk->brick_bytes = NULL ; /* ditto */ 00067 dblk->brick_fac = NULL ; /* ditto */ 00068 dblk->total_bytes = 0 ; /* ditto */ 00069 dblk->malloc_type = DATABLOCK_MEM_UNDEFINED ; 00070 dblk->parent = NULL ; 00071 00072 dblk->brick_lab = NULL ; /* 30 Nov 1997 */ 00073 dblk->brick_keywords = NULL ; 00074 dblk->brick_statcode = NULL ; 00075 dblk->brick_stataux = NULL ; 00076 00077 dblk->master_nvals = 0 ; /* 11 Jan 1999 */ 00078 dblk->master_ival = NULL ; 00079 dblk->master_bytes = NULL ; 00080 00081 dblk->master_bot = 1.0 ; /* 21 Feb 2001 */ 00082 dblk->master_top = 0.0 ; 00083 00084 DBLK_unlock(dblk) ; /* Feb 1998 */ 00085 00086 dblk->shm_idcode[0] = '\0' ; /* 02 May 2003 */ 00087 00088 INIT_KILL(dblk->kl) ; 00089 00090 dblk->diskptr = dkptr = myXtNew( THD_diskptr ) ; 00091 dkptr->type = DISKPTR_TYPE ; 00092 dkptr->storage_mode = STORAGE_UNDEFINED ; 00093 #if 0 00094 dkptr->byte_order = native_order ; /* 25 April 1998 */ 00095 #else 00096 dkptr->byte_order = default_order; /* 21 June 2000 */ 00097 #endif 00098 00099 ADDTO_KILL(dblk->kl,dkptr) ; 00100 00101 #endif /* end of initializing empty datablock and diskptr */ 00102 00103 /*-- read attributes from disk, store in the datablock --*/ 00104 00105 THD_read_all_atr( headname , dblk ) ; 00106 00107 /*-- 09 Mar 2005: all the attribute processing is moved away --*/ 00108 00109 ii = THD_datablock_from_atr( dblk, dirname, headname ) ; 00110 if( ii == 0 ){ 00111 THD_delete_datablock( dblk ) ; 00112 myXtFree(dblk) ; 00113 RETURN( NULL ) ; 00114 } 00115 00116 #if 0 00117 if( PRINT_TRACING ){ 00118 char str[256] ; 00119 sprintf(str,"rank=%d nvals=%d dim[0]=%d dim[1]=%d dim[2]=%d", 00120 dkptr->rank , dkptr->nvals , 00121 dkptr->dimsizes[0] , dkptr->dimsizes[1] , dkptr->dimsizes[2] ) ; 00122 STATUS(str) ; 00123 } 00124 #endif 00125 00126 RETURN( dblk ) ; 00127 } |
|
set up each sub-brick * Definition at line 872 of file thd_initdblk.c. References THD_datablock::brick_fac, THD_3dim_dataset::dblk, DSET_BRICK_FACTOR, DSET_NVALS, ENTRY, ISVALID_DATABLOCK, ISVALID_DSET, and RETURN. Referenced by FD_brick_to_series(), main(), THD_extract_array(), THD_extract_many_series(), and THD_insert_series().
00873 { 00874 int ii , nval ; 00875 00876 ENTRY("THD_need_brick_factor") ; 00877 00878 if( ! ISVALID_DSET(dset) ) RETURN( 0 ) ; 00879 if( ! ISVALID_DATABLOCK(dset->dblk) ) RETURN( 0 ) ; 00880 if( dset->dblk->brick_fac == NULL ) RETURN( 0 ) ; 00881 00882 nval = DSET_NVALS(dset) ; 00883 for( ii=0 ; ii < nval ; ii++ ) 00884 if( DSET_BRICK_FACTOR(dset,ii) != 0.0 && 00885 DSET_BRICK_FACTOR(dset,ii) != 1.0 ) RETURN( 1 ) ; 00886 00887 RETURN( 0 ) ; 00888 } |
Variable Documentation
|
Definition at line 15 of file thd_initdblk.c. Referenced by THD_datablock_from_atr(), and THD_init_one_datablock(). |
|
Definition at line 16 of file thd_initdblk.c. Referenced by THD_datablock_from_atr(), and THD_init_one_datablock(). |
|
Definition at line 17 of file thd_initdblk.c. Referenced by THD_datablock_from_atr(), and THD_init_one_datablock(). |