/* Loads a boolean parameter */ int load_builtin_param_bool(const char * name, void * engine_val, short int flags, int init_val, const char * alt_name) { param_t * param; value_t iv, ub, lb; iv.int_val = init_val; ub.int_val = TRUE; lb.int_val = FALSE; param = create_param(name, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb); if (param == NULL) { return OUTOFMEM_ERROR; } if (insert_builtin_param(param) < 0) { free_param(param); return ERROR; } if (alt_name != NULL) { insert_param_alt_name(param, alt_name); } return SUCCESS; }
/* Creates a user defined parameter */ param_t * create_user_param(char * name) { param_t * param; value_t iv; value_t ub; value_t lb; double * engine_val; /* Set initial values to default */ iv.double_val = DEFAULT_DOUBLE_IV; ub.double_val = DEFAULT_DOUBLE_UB; lb.double_val = DEFAULT_DOUBLE_LB; /* Argument checks */ if (name == NULL) return NULL; /* Allocate space for the engine variable */ if ((engine_val = (double*)malloc(sizeof(double))) == NULL) return NULL; (*engine_val) = iv.double_val; /* set some default init value */ /* Create the new user parameter */ if ((param = create_param(name, P_TYPE_DOUBLE, P_FLAG_USERDEF, engine_val, NULL, iv, ub, lb)) == NULL) { free(engine_val); return NULL; } if (PARAM_DEBUG) printf("create_param: \"%s\" initialized\n", param->name); /* Return the instantiated parameter */ return param; }
int main(){ const int N=5, L=10; int i,j; double alpha=0.5, tau=2.0; /* create a list of sequences */ struct list_dnaseq * test = create_list_dnaseq(N, L); for(i=0;i<N;i++){ for(j=0;j<L;j++){ if(i*j % 5 ==0) test->list[i]->seq[j] = 'a'; else if(i*j % 3 ==0)test->list[i]->seq[j] = 't'; else if(i*j % 2 ==0)test->list[i]->seq[j] = 'g'; else test->list[i]->seq[j] = 'c'; } } for(i=5;i<L;i++) test->list[0]->seq[i] = '-'; for(i=0;i<5;i++) test->list[N-1]->seq[i] = '-'; print_list_dnaseq(test); /* COMPUTE DISTANCES */ struct dna_dist *distinfo = compute_dna_distances(test); print_dna_dist(distinfo); /* COMPUTE LIKELIHOOD */ struct param *par = create_param(); double out=0, nu1 = 0.01, nu2=0.02, t_vec[5]={0.0, 10.0, 12.0, 50.0, 100.0}, T; int count=0; par->weightNaGen = 0.001; /* near zero if no data */ for(i=0;i<N-1;i++){ for(j=i+1;j<N;j++){ T = t_vec[i]>t_vec[j] ? t_vec[i] - t_vec[j] : t_vec[j]-t_vec[i]; printf("\npair %d <-> %d:",i+1,j+1); printf("\nnb transi %d:", get_transi(distinfo,i,j)); printf(" (esperance: %.1f)", T*nu1*get_nbcommon(distinfo,i,j)); printf("\nnb transv %d:", get_transv(distinfo,i,j)); printf(" (esperance: %.1f)", T*nu2*get_nbcommon(distinfo,i,j)); out = compute_genlike(i, j, t_vec[i], t_vec[j], nu1, nu2, alpha, tau, distinfo, par); printf("\npseudo-likelihood %d <-> %d: %.5f\n",i+1,j+1, out); } } printf("\n"); /* free and return */ free_list_dnaseq(test); free_dna_dist(distinfo); free_param(par); return 0; }
/* Loads a double parameter into the builtin database */ int load_builtin_param_double(const char * name, void * engine_val, void * matrix, short int flags, double init_val, double upper_bound, double lower_bound, const char * alt_name) { param_t * param = NULL; value_t iv, ub, lb; iv.double_val = init_val; ub.double_val = upper_bound; lb.double_val = lower_bound; /* Create new parameter of type double */ if (PARAM_DEBUG == 2) { printf("load_builtin_param_double: (name \"%s\") (alt_name = \"%s\") ", name, alt_name); fflush(stdout); } if ((param = create_param(name, P_TYPE_DOUBLE, flags, engine_val, matrix, iv, ub, lb)) == NULL) { return OUTOFMEM_ERROR; } if (PARAM_DEBUG == 2) { printf("created..."); fflush(stdout); } /* Insert the paremeter into the database */ if (insert_builtin_param(param) < 0) { free_param(param); return ERROR; } if (PARAM_DEBUG == 2) { printf("inserted..."); fflush(stdout); } /* If this parameter has an alternate name, insert it into the database as link */ if (alt_name != NULL) { insert_param_alt_name(param, alt_name); if (PARAM_DEBUG == 2) { printf("alt_name inserted..."); fflush(stdout); } } if (PARAM_DEBUG == 2) printf("finished\n"); /* Finished, return success */ return SUCCESS; }
/* Creates a new parameter of type bool */ param_t * new_param_bool(const char * name, short int flags, void * engine_val, int upper_bound, int lower_bound, int init_val) { param_t * param; value_t iv, ub, lb; iv.bool_val = init_val; ub.bool_val = upper_bound; lb.bool_val = lower_bound; if ((param = create_param(name, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb)) == NULL) return NULL; /* Finished, return success */ return param; }
/* Loads a double parameter into the builtin database */ param_t * new_param_double(const char * name, short int flags, void * engine_val, void * matrix, double upper_bound, double lower_bound, double init_val) { param_t * param; value_t iv, ub, lb; iv.double_val = init_val; ub.double_val = upper_bound; lb.double_val = lower_bound; if ((param = create_param(name, P_TYPE_DOUBLE, flags, engine_val, matrix,iv, ub, lb)) == NULL) return NULL; /* Finished, return success */ return param; }