Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

plug_betafit.c File Reference

#include "afni.h"
#include "betafit.c"

Go to the source code of this file.


Defines

#define NYESNO   2

Functions

char * BFIT_main (PLUGIN_interface *)
DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface * PLUGIN_init (int ncall)

Variables

char helpstring []
char * YESNO_strings [NYESNO] = { "No" , "Yes" }

Define Documentation

#define NYESNO   2
 

Definition at line 68 of file plug_betafit.c.

Referenced by BFIT_main(), and PLUGIN_init().


Function Documentation

char * BFIT_main PLUGIN_interface *    [static]
 

Definition at line 148 of file plug_betafit.c.

References BFIT_result::a, BFIT_result::b, beta_t2p(), BFIT_compute(), BFIT_free_data(), BFIT_free_result(), BFIT_prepare_dataset(), BFIT_data::bval, calloc, BFIT_data::cval, DSET_ARRAY, DSET_FILECODE, DSET_load, DSET_NVALS, DSET_NVOX, BFIT_result::eps, free, BFIT_data::ibot, BFIT_result::itop, BFIT_data::mcount, BFIT_result::mgood, mri_clear_data_pointer, mri_fix_data_pointer(), mri_free(), mri_histogram(), mri_new_vol_empty(), NYESNO, PLUTO_find_dset(), PLUTO_histoplot(), PLUTO_string_index(), BFIT_result::q_chisq, THD_MAX_NAME, xc, BFIT_result::xcut, and YESNO_strings.

Referenced by PLUGIN_init().

00149 {
00150    MCW_idcode * idc ;
00151    THD_3dim_dataset * input_dset , * mask_dset = NULL ;
00152 
00153    BFIT_data * bfd ;
00154    BFIT_result * bfr ;
00155 
00156    int nvals,ival , nran,nvox , nbin , miv , sqr,sqt ;
00157    float abot,atop,bbot,btop,pcut , eps,eps1 , hlast ;
00158    float *bval , *cval ;
00159    double aa,bb,xc ;
00160    double chq,ccc,cdf ;
00161    int    ihqbot,ihqtop ;
00162 
00163    int mcount,mgood , ii , jj , ibot,itop ;
00164    float mask_bot=666.0 , mask_top=-666.0 , hbot,htop,dbin ;
00165    char buf[THD_MAX_NAME+128] , tbuf[THD_MAX_NAME+128] , * tag ;
00166    int   * hbin , * jbin,*kbin=NULL , *jist[2] ;
00167    MRI_IMAGE * flim ;
00168 
00169    double aext=-1.0,bext=-1.0 ;
00170 
00171    /*--------------------------------------------------------------------*/
00172    /*----- Check inputs from AFNI to see if they are reasonable-ish -----*/
00173 
00174    if( plint == NULL )
00175       return "************************\n"
00176              "BFIT_main:  NULL input\n"
00177              "************************"  ;
00178 
00179    /*-- read 1st line --*/
00180 
00181    PLUTO_next_option(plint) ;
00182    idc        = PLUTO_get_idcode(plint) ;
00183    input_dset = PLUTO_find_dset(idc) ;
00184    if( input_dset == NULL )
00185       return "****************************\n"
00186              "BFIT_main: bad input dataset\n"
00187              "****************************"  ;
00188 
00189    nvox  = DSET_NVOX(input_dset) ;
00190    nvals = DSET_NVALS(input_dset) ;
00191    ival  = (int) PLUTO_get_number(plint) ;
00192    if( ival < 0 || ival >= nvals )
00193       return "**************************\n"
00194              "BFIT_main: bad Brick index\n"
00195              "**************************" ;
00196 
00197    DSET_load(input_dset) ;
00198    if( DSET_ARRAY(input_dset,0) == NULL )
00199       return "*****************************\n"
00200              "BFIT_main: can't load dataset\n"
00201              "*****************************"  ;
00202 
00203    tag = PLUTO_get_string(plint) ;
00204    sqr = PLUTO_string_index(tag,NYESNO,YESNO_strings) ;
00205 
00206    /*-- read 2nd line --*/
00207 
00208    PLUTO_next_option(plint) ;
00209    abot = PLUTO_get_number(plint) ;
00210    atop = PLUTO_get_number(plint) ;
00211    if( atop <= abot )
00212       return "*** atop <= abot! ***" ;
00213 
00214    PLUTO_next_option(plint) ;
00215    bbot = PLUTO_get_number(plint) ;
00216    btop = PLUTO_get_number(plint) ;
00217    if( atop <= abot )
00218       return "*** btop <= bbot! ***" ;
00219    hlast = PLUTO_get_number(plint) ;
00220 
00221    PLUTO_next_option(plint) ;
00222    nran = (int) PLUTO_get_number(plint) ;
00223    pcut = PLUTO_get_number(plint) ;
00224 
00225    tag = PLUTO_get_string(plint) ;
00226    sqt = PLUTO_string_index(tag,NYESNO,YESNO_strings) ;
00227 
00228    /*-- read optional lines --*/
00229 
00230    while( (tag=PLUTO_get_optiontag(plint)) != NULL ){
00231 
00232       /*-- Mask itself --*/
00233 
00234       if( strcmp(tag,"Mask") == 0 ){
00235 
00236          idc       = PLUTO_get_idcode(plint) ;
00237          mask_dset = PLUTO_find_dset(idc) ;
00238 
00239          if( mask_dset == NULL ){
00240             return "******************************\n"
00241                    "BFIT_main:  bad mask dataset\n"
00242                    "******************************"  ;
00243          }
00244 
00245          if( DSET_NVOX(mask_dset) != nvox ){
00246            return "************************************************************\n"
00247                   "BFIT_main: mask input dataset doesn't match source dataset\n"
00248                   "************************************************************" ;
00249          }
00250 
00251          miv = (int) PLUTO_get_number(plint) ;
00252          if( miv >= DSET_NVALS(mask_dset) || miv < 0 ){
00253             return "****************************************************\n"
00254                    "BFIT_main: mask dataset sub-brick index is illegal\n"
00255                    "****************************************************"  ;
00256          }
00257 
00258          DSET_load(mask_dset) ;
00259          if( DSET_ARRAY(mask_dset,miv) == NULL ){
00260             return "*************************************\n"
00261                    "BFIT_main:  can't load mask dataset\n"
00262                    "*************************************"  ;
00263          }
00264          continue ;
00265       }
00266 
00267       /*-- Mask range of values --*/
00268 
00269       if( strcmp(tag,"Range") == 0 ){
00270          if( mask_dset == NULL ){
00271             return "******************************************\n"
00272                    "BFIT_main:  Can't use Range without Mask\n"
00273                    "******************************************"  ;
00274          }
00275 
00276          mask_bot = PLUTO_get_number(plint) ;
00277          mask_top = PLUTO_get_number(plint) ;
00278          continue ;
00279       }
00280 
00281       /*-- Extra plot --*/
00282 
00283       if( strcmp(tag,"Extra") == 0 ){
00284          aext = PLUTO_get_number(plint) ;
00285          bext = PLUTO_get_number(plint) ;
00286          continue ;
00287       }
00288    }
00289 
00290    /*------------------------------------------------------*/
00291    /*---------- At this point, the inputs are OK ----------*/
00292 
00293    bfd = BFIT_prepare_dataset( input_dset , ival , sqr ,
00294                                mask_dset , miv , mask_bot , mask_top ) ;
00295 
00296    if( bfd == NULL ) return "*** BFIT_prepare_dataset fails ***" ;
00297 
00298    bfr = BFIT_compute( bfd ,
00299                        pcut , abot,atop , bbot,btop , nran,200 ) ;
00300 
00301    if( bfr == NULL ){
00302       BFIT_free_data( bfd ) ;
00303       return "*** BFIT_compute fails! ***" ;
00304    }
00305 
00306    itop  = bfr->itop ;
00307    mgood = bfr->mgood ;
00308 
00309    ibot   = bfd->ibot ;
00310    bval   = bfd->bval ;
00311    cval   = bfd->cval ;
00312    mcount = bfd->mcount ;
00313 
00314    xc   = bfr->xcut ;
00315    aa   = bfr->a ;
00316    bb   = bfr->b ;
00317    eps  = bfr->eps ;
00318    eps1 = 1.0 - eps ;
00319    if( eps1 > 1.0 ) eps1 = 1.0 ;
00320    eps1 = (mcount-ibot) * eps1 ;
00321 
00322    /*-- compute and plot histogram --*/
00323 
00324    /* original data was already squared (e.g., R**2 values) */
00325 
00326    if( !sqr ){
00327       hbot = 0.0 ; htop = 1.0 ; nbin = 200 ;
00328       if( bval[mcount-1] < 1.0 ) htop = bval[mcount-1] ;
00329       dbin = (htop-hbot)/nbin ;
00330 
00331       hbin = (int *) calloc((nbin+1),sizeof(int)) ;  /* actual histogram */
00332       jbin = (int *) calloc((nbin+1),sizeof(int)) ;  /* theoretical fit */
00333 
00334       for( ii=0 ; ii < nbin ; ii++ ){  /* beta fit */
00335          jbin[ii] = (int)( eps1 * ( beta_t2p(hbot+ii*dbin,aa,bb)
00336                                    -beta_t2p(hbot+ii*dbin+dbin,aa,bb) ) ) ;
00337       }
00338 
00339       jist[0] = jbin ;
00340 
00341       flim = mri_new_vol_empty( mcount-ibot,1,1 , MRI_float ) ;
00342       mri_fix_data_pointer( bval+ibot , flim ) ;
00343       mri_histogram( flim , hbot,htop , TRUE , nbin,hbin ) ;
00344 
00345       /* "extra" histogram (nominal values?) */
00346 
00347       if( aext > 0.0 ){
00348          kbin = (int *) calloc((nbin+1),sizeof(int)) ;
00349          jist[1] = kbin ;
00350          for( ii=0 ; ii < nbin ; ii++ ){  /* beta fit */
00351             kbin[ii] = (int)( eps1 * ( beta_t2p(hbot+ii*dbin,aext,bext)
00352                                       -beta_t2p(hbot+ii*dbin+dbin,aext,bext) ) ) ;
00353          }
00354       }
00355 
00356    } else {   /* original data was not squared (e.g., correlations) */
00357 
00358       double hb,ht ;
00359       htop = 1.0 ; nbin = 200 ;
00360       if( bval[mcount-1] < 1.0 ) htop = sqrt(bval[mcount-1]) ;
00361       hbot = -htop ;
00362       dbin = (htop-hbot)/nbin ;
00363 
00364       hbin = (int *) calloc((nbin+1),sizeof(int)) ;  /* actual histogram */
00365       jbin = (int *) calloc((nbin+1),sizeof(int)) ;  /* theoretical fit */
00366 
00367       for( ii=0 ; ii < nbin ; ii++ ){  /* beta fit */
00368          hb = hbot+ii*dbin ; ht = hb+dbin ;
00369          hb = hb*hb ; ht = ht*ht ;
00370          if( hb > ht ){ double qq=hb ; hb=ht ; ht=qq ; }
00371          jbin[ii] = (int)( 0.5*eps1 * ( beta_t2p(hb,aa,bb)
00372                                        -beta_t2p(ht,aa,bb) ) ) ;
00373       }
00374 
00375       jist[0] = jbin ;
00376 
00377       flim = mri_new_vol_empty( mcount-ibot,1,1 , MRI_float ) ;
00378       mri_fix_data_pointer( cval+ibot , flim ) ;
00379       mri_histogram( flim , hbot,htop , TRUE , nbin,hbin ) ;
00380 
00381       /* nominal fit */
00382 
00383       if( aext > 0.0 ){
00384          kbin = (int *) calloc((nbin+1),sizeof(int)) ;
00385          jist[1] = kbin ;
00386          for( ii=0 ; ii < nbin ; ii++ ){  /* beta fit */
00387             hb = hbot+ii*dbin ; ht = hb+dbin ;
00388             hb = hb*hb ; ht = ht*ht ;
00389             if( hb > ht ){ double qq=hb ; hb=ht ; ht=qq ; }
00390             kbin[ii] = (int)( 0.5*eps1 * ( beta_t2p(hb,aext,bext)
00391                                           -beta_t2p(ht,aext,bext) ) ) ;
00392          }
00393       }
00394    }
00395 
00396    sprintf(buf,"%s[%d] a=%.2f b=%.2f \\epsilon=%.2f %%=%.0f",
00397            DSET_FILECODE(input_dset),ival,aa,bb,eps,pcut ) ;
00398 
00399    ccc = bfr->q_chisq ;
00400 
00401    /* blow up histogram details by sqrt-ing, if ordered */
00402 
00403    if( sqt ){
00404       for( ii=0 ; ii < nbin ; ii++ ){
00405          hbin[ii] = (int) sqrt( (double)(100*hbin[ii]+0.5) ) ;
00406          jbin[ii] = (int) sqrt( (double)(100*jbin[ii]+0.5) ) ;
00407          if( kbin!=NULL )
00408             kbin[ii] = (int) sqrt( (double)(100*kbin[ii]+0.5) ) ;
00409       }
00410    }
00411 
00412    /* and plot */
00413 
00414    sprintf(tbuf,"\\beta fit: cutoff=%.2f nvox=%d q(\\chi^2)=%8.2e",
00415            (sqr)?sqrt(xc):xc , mgood , ccc ) ;
00416    if( sqt ){
00417       ii = strlen(tbuf) ;
00418       sprintf( tbuf+ii , " \\surd ogram" ) ;
00419    }
00420 
00421    if( hlast > 0.0 ){
00422       hbin[nbin-1] = jbin[nbin-1] = hlast ;
00423       if( kbin != NULL ) kbin[nbin-1] = hlast ;
00424    }
00425 
00426    PLUTO_histoplot( nbin,hbot,htop,hbin ,
00427                     tbuf,NULL,buf , (kbin==NULL)?1:2 , jist ) ;
00428 
00429    /* cleanup */
00430 
00431    mri_clear_data_pointer(flim) ; mri_free(flim) ;
00432    free(hbin) ; free(jbin) ; if( kbin != NULL ) free(kbin);
00433 
00434    BFIT_free_data(bfd) ; BFIT_free_result(bfr) ;
00435    return NULL ;
00436 }

DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface* PLUGIN_init int    ncall
 

Definition at line 74 of file plug_betafit.c.

References ANAT_ALL_MASK, BFIT_main(), FUNC_ALL_MASK, helpstring, NYESNO, PLUTO_add_hint(), PLUTO_set_sequence(), and YESNO_strings.

00075 {
00076    PLUGIN_interface * plint ;
00077 
00078    if( ncall > 0 ) return NULL ;  /* only one interface */
00079 
00080    /*-- set titles and call point --*/
00081 
00082    plint = PLUTO_new_interface( "Histogram: BFit" ,
00083                                 "Betafit Histogram" ,
00084                                 helpstring ,
00085                                 PLUGIN_CALL_VIA_MENU , BFIT_main  ) ;
00086 
00087    PLUTO_add_hint( plint , "Histogram: Betafit" ) ;
00088 
00089    PLUTO_set_sequence( plint , "A:afniinfo:dsethistog" ) ;
00090 
00091    /*-- first line of input --*/
00092 
00093    PLUTO_add_option( plint , "Source" , "Source" , TRUE ) ;
00094 
00095    PLUTO_add_dataset(  plint ,
00096                        "Dataset" ,        /* label next to button   */
00097                        ANAT_ALL_MASK ,    /* take any anat datasets */
00098                        FUNC_ALL_MASK ,    /* only allow fim funcs   */
00099                        DIMEN_3D_MASK |    /* need 3D+time datasets  */
00100                        BRICK_ALLREAL_MASK /* need real-valued datasets */
00101                     ) ;
00102    PLUTO_add_number( plint , "Brick"  , 0,9999,0, 0,1 ) ;
00103    PLUTO_add_string( plint , "Square" , NYESNO , YESNO_strings , 1 ) ;
00104 
00105    /*-- second line of input --*/
00106 
00107    PLUTO_add_option( plint , "a Params" , "Params" , TRUE ) ;
00108    PLUTO_add_number( plint , "a bot" , 2,50 ,1 ,  5 , 1 ) ;
00109    PLUTO_add_number( plint , "a top" , 2,500,1 , 20 , 1 ) ;
00110 
00111    PLUTO_add_option( plint , "b Params" , "Params" , TRUE ) ;
00112    PLUTO_add_number( plint , "b bot" , 10,400 ,0 ,  10 , 1 ) ;
00113    PLUTO_add_number( plint , "b top" , 10,9999,0 , 200 , 1 ) ;
00114    PLUTO_add_number( plint , "H last", 0,1000,-1 , 0,1 ) ;
00115 
00116    PLUTO_add_option( plint , "Misc" , "Params" , TRUE ) ;
00117    PLUTO_add_number( plint , "N ran" , 10,1000,-2 , 100 , 1 ) ;
00118    PLUTO_add_number( plint , "% cut" , 20,90,0 , 70,1 ) ;
00119    PLUTO_add_string( plint , "HSqrt"  , NYESNO , YESNO_strings , 0 ) ;
00120 
00121    /*-- (optional) line of input --*/
00122 
00123    PLUTO_add_option( plint , "Mask" , "Mask" , FALSE ) ;
00124    PLUTO_add_dataset( plint , "Dataset" ,
00125                                     ANAT_ALL_MASK , FUNC_ALL_MASK ,
00126                                     DIMEN_ALL_MASK | BRICK_ALLREAL_MASK ) ;
00127    PLUTO_add_number( plint , "Brick" , 0,9999,0 , 0,1 ) ;
00128 
00129    /*-- (optional) line of input --*/
00130 
00131    PLUTO_add_option( plint , "Range"  , "Range" , FALSE ) ;
00132    PLUTO_add_number( plint , "Bottom" , -99999,99999, 1, 0,1 ) ;
00133    PLUTO_add_number( plint , "Top"    , -99999,99999,-1, 0,1 ) ;
00134 
00135    /*-- (optional) line of input --*/
00136 
00137    PLUTO_add_option( plint , "Extra"  , "Extra" , FALSE ) ;
00138    PLUTO_add_number( plint , "a" , 2,50,1 ,  5 , 1 ) ;
00139    PLUTO_add_number( plint , "b" , 10,999,0 , 200 , 1 ) ;
00140 
00141    return plint ;
00142 }

Variable Documentation

char helpstring[] [static]
 

Definition at line 13 of file plug_betafit.c.

Referenced by PLUGIN_init().

char* YESNO_strings[NYESNO] = { "No" , "Yes" } [static]
 

Definition at line 69 of file plug_betafit.c.

Referenced by BFIT_main(), and PLUGIN_init().

 

Powered by Plone

This site conforms to the following standards: