📄 bz_print.c
字号:
#include "bz_all.h"#ifndef __lintstatic const char rcsid[] ="$Id: bz_print.c,v 1.9 2002/08/19 19:47:49 schwartz Exp $";#endifstatic int isrev(SEQ *s){ return (s->flags & SEQ_IS_REVCOMP);}static const char* revflag(SEQ *s){ return (s->flags & SEQ_IS_REVCOMP) ? "-" : "";}static const char* revlabel(SEQ *s){ return (s->flags & SEQ_IS_REVCOMP) ? " (reverse complement)" : "";}static int align_match_percent(int run, int match){ return (run > 0) ? ((100*match + run/2)/run) : 0; /* round */}void print_job_footer(){ printf("#:eof\n");}void print_job_header (ss_t ss, gap_scores_t *ds, int K, int L, int M){ int i, j; uchar b[] = "ACGT"; printf("#:lav\nd {\n \""); ck_argc("print_align_header"); fprintf_argv(stdout); printf("\n A C G T\n "); for (i = 0; i < 4; ++i) { for (j = 0; j < 4; ++j) printf("%5d", ss[b[i]][b[j]]); printf("\n "); } if (ds->O) printf(" O = %d, E = %d, K = %d, L = %d, M = %d", ds->O, ds->E, K, L, M); printf("\"\n}\n");}/* print_align_header ------------ print the top part of an alignment file */void print_align_header (SEQ * seq1, SEQ * seq2, ss_t ss, gap_scores_t * ds, int K, int L){ printf("#:lav\n"); printf("s {\n"); printf(" \"%s%s\" %d %d %d %d\n", SEQ_NAME(seq1), revflag(seq1), SEQ_FROM(seq1), SEQ_TO(seq1), (seq1->flags & SEQ_IS_REVCOMP) > 0, seq1->count); printf(" \"%s%s\" %d %d %d %d\n", SEQ_NAME(seq2), revflag(seq2), SEQ_FROM(seq2), SEQ_TO(seq2), (seq2->flags & SEQ_IS_REVCOMP) > 0, seq2->count); printf("}\n"); printf("h {\n \"%s%s\"\n \"%s%s\"\n}\n", SEQ_HEAD(seq1), revlabel(seq1), SEQ_HEAD(seq2), revlabel(seq2)); // pacify lint if (ss == 0 || ds == 0 || K == 0 || L == 0) { L = 0; }}static void print_align_lav(int score, const uchar *seq1, const uchar *seq2, int beg1, int end1, int beg2, int end2, edit_script_t *S){ int M, N, i, j, o, nG = 0, lG = 0; int total_run = 0, total_match = 0; M = end1 - beg1 + 1; N = end2 - beg2 + 1; printf("a {\n s %d\n b %d %d\n e %d %d\n", score, beg1, beg2, end1, end2); for (o = i = j = 0; i < M || j < N; ) { int start_i = i; int start_j = j; int match = 0; int run; run = es_rep_len(S, &o, seq1+beg1+i-1, seq2+beg2+j-1, &match); i += run; j += run; total_match += match; total_run += run; printf(" l %d %d %d %d %d\n", beg1+start_i, beg2+start_j, beg1+i-1, beg2+j-1, align_match_percent(run, match)); if (i < M || j < N) { nG++; lG += es_indel_len(S, &o, &i, &j); } } printf("}\n");}void print_align_list(align_t *a) { while (a) { print_align_lav(a->score, a->seq1, a->seq2, a->beg1, a->end1, a->beg2, a->end2, a->script); a = a->next_align; }}void free_align_list(align_t *a){ align_t *b; while (a) { edit_script_free(a->script); b = a->next_align; ckfree(a); a = b; }}static int percent_match(SEQ *sf1, SEQ *sf2, int len, int pos1, int pos2){ uchar *p = SEQ_CHARS(sf1) + pos1; uchar *q = SEQ_CHARS(sf2) + pos2; int m = 0, i = len; while (i-- > 0) m += (*p++ == *q++); return align_match_percent (len, m);}void print_msp_list(SEQ *sf1, SEQ *sf2, struct msp_table *mt){ int len, beg1, beg2, end1, end2, score, pm; msp_t *mp; /* print each maximal segment pair */ for (mp=MSP_TAB_FIRST(mt); MSP_TAB_MORE(mt,mp); mp=MSP_TAB_NEXT(mp)) { beg1 = mp->pos1 + 1; beg2 = mp->pos2 + 1; len = mp->len - 1; end1 = beg1 + len; end2 = beg2 + len; score = mp->score; pm = percent_match(sf1, sf2, len, beg1 - 1, beg2 - 1); printf("a {\n s %d\n b %d %d\n e %d %d\n", score, beg1, beg2, end1, end2); printf(" l %d %d %d %d %d\n}\n", beg1, beg2, end1, end2, pm); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -