static void get_bar(QSP_ARG_DECL int index, float (*func)(SINGLE_QSP_ARG_DECL), float *ptr ) { Opt_Param op1, *opp=(&op1); /* initialize optimization vars */ delete_opt_params(SINGLE_QSP_ARG); opp->op_name = TP_NAME; opp->ans= 0.5; opp->maxv= 1.0; opp->minv= 0.0; opp->delta= (float) 0.2; opp->mindel= (float) 1.0e-30; opp=add_opt_param(QSP_ARG opp); optimize(QSP_ARG func); *ptr = opp->ans; }
static void weibull_fit(QSP_ARG_DECL Data_Tbl *dp,int ntrac) /** maximum liklihood fit */ { Opt_Param op1, *alpha_opp=(&op1); Opt_Param op2, *beta_opp=(&op2); /* initialize global */ the_dtp = dp; /* initialize the parameters */ delete_opt_params(SINGLE_QSP_ARG); /* clear any existing parameters */ alpha_opp->op_name = ALPHA_NAME; alpha_opp->ans = xval_array[ _nvals/2 ]; if( xval_array[0] < xval_array[_nvals-1] ){ alpha_opp->maxv = xval_array[_nvals-1]; alpha_opp->minv = xval_array[0]; } else { alpha_opp->maxv = xval_array[0]; alpha_opp->minv = xval_array[_nvals-1]; } if( alpha_opp->minv < 0.0 ){ WARN("wiebull fit will blow up for negative x values"); return; } alpha_opp->delta = (float) fabs( xval_array[_nvals/2] - xval_array[ (_nvals/2)+1 ] ); alpha_opp->mindel = (float) 1.0e-30; add_opt_param(QSP_ARG alpha_opp); beta_opp->op_name = BETA_NAME; beta_opp->ans = 2; beta_opp->maxv = 10000.0; beta_opp->minv = 0.0; beta_opp->delta = 0.5; beta_opp->mindel = (float) 1.0e-30; add_opt_param(QSP_ARG beta_opp); if( fc_flag ){ w_gamma = 0.5; } else { w_gamma = error_rate; } optimize(QSP_ARG w_likelihood); alpha_opp=get_opt_param(QSP_ARG ALPHA_NAME); //#ifdef CAUTIOUS // if( alpha_opp==NO_OPT_PARAM ){ // ERROR1("CAUTIOUS: missing alpha param"); // IOS_RETURN // } //#endif assert( alpha_opp != NO_OPT_PARAM ); alpha = alpha_opp->ans; beta_opp=get_opt_param(QSP_ARG BETA_NAME); //#ifdef CAUTIOUS // if( beta_opp==NO_OPT_PARAM ){ // ERROR1("CAUTIOUS: missing beta param"); // IOS_RETURN // } //#endif assert( beta_opp != NO_OPT_PARAM ); beta = beta_opp->ans; /* clean up */ del_opt_param(QSP_ARG beta_opp); del_opt_param(QSP_ARG alpha_opp); }