code backup

This commit is contained in:
Heng Li 2014-04-14 09:33:45 -04:00
parent c9645579bd
commit d5877ad0a9
1 changed files with 20 additions and 7 deletions

View File

@ -23,7 +23,7 @@ static int lo_verbose = 3;
#define LO_T_I 16 #define LO_T_I 16
typedef struct { typedef struct {
int min_ext; int min_ext, fuzzy_dist;
float min_aln_ratio; float min_aln_ratio;
} lo_opt_t; } lo_opt_t;
@ -68,6 +68,7 @@ void lo_opt_init(lo_opt_t *opt)
{ {
opt->min_ext = 50; opt->min_ext = 50;
opt->min_aln_ratio = 0.9; opt->min_aln_ratio = 0.9;
opt->fuzzy_dist = 500;
} }
const char *lo_edge_label[] = { const char *lo_edge_label[] = {
@ -279,8 +280,6 @@ void lo_print_nei(ograph_t *g)
int i; int i;
for (i = 0; i < g->v.n; ++i) { for (i = 0; i < g->v.n; ++i) {
vertex_t *p = &g->v.a[i]; vertex_t *p = &g->v.a[i];
if (p->nei[0]) ks_introsort(nei, p->nei[0]->n, p->nei[0]->a);
if (p->nei[1]) ks_introsort(nei, p->nei[1]->n, p->nei[1]->a);
if (p->nei[0]) { if (p->nei[0]) {
int j, k; int j, k;
printf("%s\t%ld,%ld", p->name, p->nei[0]->n, p->nei[1]->n); printf("%s\t%ld,%ld", p->name, p->nei[0]->n, p->nei[1]->n);
@ -322,6 +321,11 @@ void lo_populate_nei(ograph_t *g)
p = kv_pushp(lo_nei_t, *g->v.a[id[1]].nei[e->type&1]); p = kv_pushp(lo_nei_t, *g->v.a[id[1]].nei[e->type&1]);
p->dist = e->d[1], p->id = id[0], p->ori = e->type>>1^1, p->reduced = 0; p->dist = e->d[1], p->id = id[0], p->ori = e->type>>1^1, p->reduced = 0;
} }
for (i = 0; i < g->v.n; ++i) {
vertex_t *p = &g->v.a[i];
if (p->nei[0]) ks_introsort(nei, p->nei[0]->n, p->nei[0]->a);
if (p->nei[1]) ks_introsort(nei, p->nei[1]->n, p->nei[1]->a);
}
} }
static inline edgeinfo_t *lo_get_edge(ehash_t *e, int id0, int id1) static inline edgeinfo_t *lo_get_edge(ehash_t *e, int id0, int id1)
@ -339,6 +343,7 @@ void lo_trans_reduce(ograph_t *g, int fd) // fd: fuzzy distance
for (i = 0; i < g->v.n; ++i) { for (i = 0; i < g->v.n; ++i) {
vertex_t *pi = &g->v.a[i]; vertex_t *pi = &g->v.a[i];
if (pi->nei[0] == 0) continue; if (pi->nei[0] == 0) continue;
//printf("===> vertex %s <===\n", pi->name);
for (j = 0; j < 2; ++j) { for (j = 0; j < 2; ++j) {
int max; int max;
lo_nei_v *q = pi->nei[j]; lo_nei_v *q = pi->nei[j];
@ -346,13 +351,20 @@ void lo_trans_reduce(ograph_t *g, int fd) // fd: fuzzy distance
for (k = 0; k < q->n; ++k) for (k = 0; k < q->n; ++k)
g->v.a[q->a[k].id].state = 1; g->v.a[q->a[k].id].state = 1;
max = q->a[q->n - 1].dist + fd; max = q->a[q->n - 1].dist + fd;
//printf("* max[%c]=%d, %ld, %d\n", "<>"[j], max, q->n, q->a[q->n - 1].dist);
// loop between line 9--14 // loop between line 9--14
for (k = 0; k < q->n; ++k) { for (k = 0; k < q->n; ++k) {
vertex_t *pk = &g->v.a[q->a[k].id]; vertex_t *pk = &g->v.a[q->a[k].id];
if (pk->state == 1) { if (pk->state == 1) {
lo_nei_v *r = pk->nei[q->a[k].ori^1]; lo_nei_v *r = pk->nei[q->a[k].ori^1];
for (l = 0; l < r->n && r->a[l].dist + q->a[k].dist < max; ++l) /*
if (g->v.a[r->a[l].id].state == 1) printf("** %s: ", pk->name);
for (l = 0; l < r->n; ++l)
printf("%s,%d", g->v.a[r->a[k].id].name, r->a[l].dist + q->a[k].dist);
printf("\n");
*/
for (l = 0; l < r->n; ++l)
if (r->a[l].dist + q->a[k].dist < max && g->v.a[r->a[l].id].state == 1)
g->v.a[r->a[l].id].state = 2; g->v.a[r->a[l].id].state = 2;
} }
} }
@ -395,8 +407,9 @@ int main_layout(int argc, char *argv[])
int c; int c;
lo_opt_init(&opt); lo_opt_init(&opt);
while ((c = getopt(argc, argv, "v:")) >= 0) { while ((c = getopt(argc, argv, "v:d:")) >= 0) {
if (c == 'v') lo_verbose = atoi(optarg); if (c == 'v') lo_verbose = atoi(optarg);
else if (c == 'd') opt.fuzzy_dist = atoi(optarg);
} }
if (argc == optind && isatty(fileno(stdin))) { if (argc == optind && isatty(fileno(stdin))) {
fprintf(stderr, "Usage: bwa layout <in.ovlp>\n"); fprintf(stderr, "Usage: bwa layout <in.ovlp>\n");
@ -409,7 +422,7 @@ int main_layout(int argc, char *argv[])
lo_rm_conflict(g); lo_rm_conflict(g);
lo_populate_nei(g); lo_populate_nei(g);
if (lo_verbose == 6) lo_print_edge(g); if (lo_verbose == 6) lo_print_edge(g);
lo_trans_reduce(g, 10); lo_trans_reduce(g, opt.fuzzy_dist);
lo_graph_destroy(g); lo_graph_destroy(g);
ks_destroy(ks); ks_destroy(ks);
gzclose(fp); gzclose(fp);