Projects/laydi
Projects
/
laydi
Archived
7
0
Fork 0

Works a bit better.

This commit is contained in:
Einar Ryeng 2007-03-26 17:18:26 +00:00
parent 947cf8385f
commit 11eb3306b9
2 changed files with 58 additions and 12 deletions

View File

@ -49,6 +49,7 @@ int godist_init() {
printf(" %d edges\n", link_count);
accumulate_evidence(get_bp());
print_term(get_bp());
}
void godist_exit() {
@ -83,6 +84,7 @@ int godist_read_term(FILE *fd) {
struct node *n = (struct node*) malloc(sizeof(struct node));
n->parentc = 0;
n->childrenc = 0;
n->visited = 0;
for (i=0; i<12; i++) {
n->evidence[i] = ev[i];
n->acc_evidence[i] = 0;
@ -91,8 +93,13 @@ int godist_read_term(FILE *fd) {
/* add to hash table */
e.key = n->term;
e.data = (void*)n;
res = hsearch(e, ENTER);
/* if (res);
printf("hash-insert: %s", ((struct node*)res->data)->term);
else
printf("hash-insert: error");
*/
term_array[term_array_size++] = n;
}
@ -106,6 +113,14 @@ float go_distance(char *term1, char *term2) {
void add_node(char *term, int parentc, struct node **parents) {
}
void clear_flags(struct node *n) {
int i;
for (i=0; i<n->childrenc; i++)
clear_flags(n->children[i]);
n->visited = 0;
}
void add_link(char *parent_id, char *child_id) {
@ -135,30 +150,43 @@ void add_link(char *parent_id, char *child_id) {
printf("FIXME: increase child count");
return;
}
parent->children[parent->childrenc++] = child;
child->parents[child->parentc++] = parent;
parent->children[parent->childrenc] = child;
parent->childrenc++;
/* printf("adding %x as child of %x\n", child, parent);*/
child->parents[child->parentc] = parent;
child->parentc++;
}
struct node *get_bp() {
ENTRY e, *ep;
e.key = "GO:0008150";
ep = hsearch(e, FIND);
if (ep)
return ep;
if (ep == ESRCH)
printf("ESRCH\n");
if (ep == ESRCH)
printf("ENOMEM\n");
if (ep) {
/* printf("BP is %x and %s\n", (int) ep->data, ep->key);
printf("%d\n", ((struct node*)ep->data)->childrenc );
printf("%s\n", ((struct node*)ep->data)->term);*/
return ep->data;
}
return NULL;
}
void accumulate_evidence(struct node *n) {
int i, j;
if (n->visited)
return;
for (i=0; i<12; i++)
n->acc_evidence[i] = n->evidence[i];
for (i=0; i<(n->childrenc); i++) {
accumulate_evidence(n->children[i]);
for (j=0; j<12; j++)
n->evidence[j] += n->children[i]->evidence[j];
if (!n->children[i]->visited) {
accumulate_evidence(n->children[i]);
for (j=0; j<12; j++)
n->acc_evidence[j] += n->children[i]->acc_evidence[j];
}
}
/* printf(".");*/
}
void print_terms() {
@ -168,3 +196,18 @@ void print_terms() {
}
}
void print_term(struct node *n) {
int i;
printf("%s\n", n->term);
printf(" children: %d\n", n->childrenc);
printf(" parents: %d\n", n->parentc);
printf(" evidence: ");
for (i=0; i<12; i++)
printf("%d ", n->evidence[i]);
printf("\n");
printf(" accumulated evidence: ");
for (i=0; i<12; i++)
printf("%d ", n->acc_evidence[i]);
printf("\n");
}

View File

@ -27,6 +27,9 @@ struct node {
/* Child count and children */
int childrenc;
struct node *children[MAX_CHILDREN];
/* Flag to ensure that a node is only visited once in DAG operations */
char visited;
};
struct node* term_array[MAX_NODES];