go-distance seems to be able to calculate resnik now. Not asserted with

calculations by hand.
This commit is contained in:
Einar Ryeng 2007-04-04 19:08:50 +00:00
parent 28f0f53e8a
commit fefaffb2e3

View File

@ -13,6 +13,7 @@ struct node* get_bp();
struct node* get_term(char *);
void calc_ic(struct node *, unsigned int);
struct node *common_subsumer(struct node *, struct node *);
float resnik(struct node *, struct node *);
/* initialisation */
@ -91,6 +92,11 @@ int godist_init() {
/* calc_ic(get_bp(), 0xffff);*/
/* find_multi_parented();*/
common_subsumer(get_term("GO:0000003"), get_term("GO:0000004"));
/** should return go:0016032 */
common_subsumer(get_term("GO:0019081"), get_term("GO:0050434"));
printf("Resnik: %f\n", resnik(get_term("GO:0000003"), get_term("GO:0000004")));
}
void godist_exit() {
@ -271,10 +277,21 @@ struct node *common_subsumer(struct node *n1, struct node *n2) {
struct node *anc1[MAX_NODES];
struct node *anc2[MAX_NODES];
int ancc1=0, ancc2=0;
int i, j;
struct node *retval=NULL;
add_ancestors(&ancc1, anc1, n1);
add_ancestors(&ancc2, anc2, n2);
printf("Ancestors: %d %d\n", ancc1, ancc2);
for (i=0; i<ancc1; i++)
for (j=0; j<ancc2; j++)
if (anc1[i] == anc2[j])
if ((!retval) || (anc1[i]->ic > retval->ic))
retval = anc1[i];
if (retval)
printf("Retval: %s\n", retval->term);
else
printf("No value to return");
return retval;
}
void add_ancestors(int *ancc, struct node *anc[], struct node *n) {
@ -285,5 +302,10 @@ void add_ancestors(int *ancc, struct node *anc[], struct node *n) {
}
float resnik(struct node *n1, struct node *n2) {
struct node *subsumer = common_subsumer(n1, n2);
if (!subsumer)
return 20;
else
return n1->ic + n2->ic - 2.0 * subsumer->ic;
}