亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bz_table.c

?? 一個類似于blast算法的基因數(shù)據(jù)快速搜索算法
?? C
字號:
#ifndef __lintstatic const char rcsid[] ="$Id: bz_table.c,v 1.15 2003/01/09 19:33:56 schwartz Exp $";#endif#ifdef DEBUG#include "valgrind.h"#endif#include "util.h"#include "seq.h"#include "dna.h"#include "bz_table.h"#include "astack.c"typedef struct blast_table_w bt_t;typedef struct blast_epos_node {	struct blast_epos_node *link;	/* next occurrence of the word */	blast_ecode_t ecode;	int pos;		/* position where word occurs in seq #1 */} blast_epos_node_t;static void blast_free_chain(bt_t *bt, blast_ecode_t ecode);/* -------------   build table of W-tuples in the first sequence ------------*/#ifdef USE_OBSTACK  /* ifdef considered harmful !!! */#define obstack_chunk_alloc ckalloc#define obstack_chunk_free ckfree#include <obstack.h> /* GNU-ism */static struct obstack bt_obstk;#endifmsp_table_t *msp_new_table(void){	msp_table_t *mt = ckallocz(sizeof(*mt));	return mt;}static blast_epos_node_t *cons_epos_node(int pos, blast_ecode_t ecode, blast_epos_node_t *link){#ifdef USE_OBSTACK	blast_epos_node_t *n = obstack_alloc(&bt_obstk, sizeof(blast_epos_node_t));#else	blast_epos_node_t *n = ckalloc(sizeof(struct blast_epos_node));#endif	n->link = link;	n->pos = pos;	n->ecode = ecode;	return n;}static unsigned int pos_add(bt_t *bt, blast_ecode_t ecode, int pos){	unsigned int e = ecode % BLAST_POS_TAB_SIZE;	bt->epos_tab[e] = cons_epos_node(pos, ecode, bt->epos_tab[e]);	bt->num++;	return e;}static blast_epos_node_t **pos_getp(const bt_t *bt, blast_ecode_t ecode){	unsigned int e = ecode % BLAST_POS_TAB_SIZE;	return &bt->epos_tab[e];}static blast_epos_node_t *pos_get(const bt_t *bt, blast_ecode_t ecode){	return *pos_getp(bt, ecode);}static blast_table_t *cons_blast_table(int W, const signed char *encoding){	blast_table_t *bt = ckallocz(sizeof(*bt));	bt->w.encoding = encoding;	if ((unsigned int)W > sizeof(blast_ecode_t)*8/2)		W = sizeof(blast_ecode_t)*8/2;	bt->w.W = W;	bt->w.epos_tab=ckallocz(BLAST_POS_TAB_SIZE*sizeof(blast_epos_node_t));#ifdef USE_OBSTACK	obstack_begin(&bt_obstk, 10*1024*1024);#endif	return bt;}static blast_table_t *blast_table_enc_new(SEQ *seq, int W,  const signed char *enc){	blast_ecode_t ecode;	int i;	uchar *s;	uchar *const seq_beg = SEQ_CHARS(seq);	uchar *const seq_end = seq_beg+SEQ_LEN(seq);	blast_table_t *const bt = cons_blast_table(W, enc);	const signed char *const encoding = bt->w.encoding;	const blast_ecode_t mask = (1UL << ((W-1)*2)) - 1;        if (W<=1) return 0;	for (s = seq_beg; s < seq_end; ) {	restart:		/* init */		ecode = 0L;		for (i = 1; i < W && s < seq_end; ++i) {			const int e = encoding[*s++];			if (e < 0) goto restart; /* hit a run of 'X's */			ecode = (ecode << 2) + e;		}		/* compute */		for (; s < seq_end; ++s) {			const int e = encoding[*s];			if (e < 0) goto restart; /* hit a run of 'X's */			ecode = ((ecode & mask) << 2) + e;			pos_add(&bt->w, ecode, s-seq_beg+1);		} 	}	return bt;}static blast_table_t *blast_table_masked_new(SEQ *seq, int W){	return blast_table_enc_new(seq, W, fasta_encoding);}blast_table_t *blast_table_new(SEQ *seq, int W){	return blast_table_masked_new(seq, W);}#if 0     static int chain_len(bt_t *bt, blast_ecode_t ecode){        blast_epos_node_t *p;	int count = 0;	for (p = pos_get(bt, ecode); p; p = p->link)		++count;	return count;}static int pos_density(bt_t *bt, blast_ecode_t ecode){        blast_epos_node_t *p;	int count = 0;	for (p = pos_get(bt, ecode); p; p = p->link)		++count;	return count;}bt_t *blast_table_pare(bt_t *bt, int surfeit){        blast_ecode_t ecode;        if (bt == 0) return 0;         for (ecode = 0; ecode < BLAST_POS_TAB_SIZE; ++ecode) {		/* Delete ecodes whose chains are too long. */		if (chain_len(bt, ecode) > surfeit)			blast_free_chain(bt, ecode);		/* Delete ecodes whose positions are too dense. */		if (pos_density(bt, ecode) > density)			blast_free_chain(bt, ecode);	}	return bt;}#endif/* -----------------------   search the second sequence   --------------------*/static double entropy(const uchar *s, int n){	double pA, pC, pG, pT, qA, qC, qG, qT, e;	int count[128];	int i, cA, cC, cG, cT;	for (i = 0; i < 128; ++i)		count[i] = 0;	for (i = 0; i < n; ++i)		++count[s[i]];	cA = count['A'];	cC = count['C'];	cG = count['G'];	cT = count['T'];	pA = ((double)count['A']) / ((double)n);	pC = ((double)count['C']) / ((double)n);	pG = ((double)count['G']) / ((double)n);	pT = ((double)count['T']) / ((double)n);	qA = (cA ? log(pA) : 0.0);	qC = (cC ? log(pC) : 0.0);	qG = (cG ? log(pG) : 0.0);	qT = (cT ? log(pT) : 0.0);	e = -(pA*qA + pC*qC + pG*qG + pT*qT)/log(4.0);	return e;}int msp_add(msp_table_t *mt, 		int len, int pos1, int pos2, score_t score, int filter){	/* XXX - use vec */	/*printf("add %d %d %d %d %d\n", len, pos1, pos2, score, filter);*/	if (mt->num >= mt->size) {		/*fprintf(stderr, "grow(%d/%d) ", mt->num, mt->size);*/		mt->size += 15;		mt->size += mt->size/2;		mt->msp = ckrealloc(mt->msp, mt->size*sizeof(*mt->msp));	}	{ msp_t *const msp = mt->msp + mt->num;	  msp->len = len;	  msp->pos1 = pos1;	  msp->pos2 = pos2;	  msp->score = score;	  msp->filter = filter;	}	mt->num++;	/*fprintf(stderr, "(%d/%d)\n", mt->num, mt->size);*/	return mt->num;}/* extend_hit - extend a word-sized hit to a longer match */int msp_extend_hit(msp_table_t *mt,			SEQ *s1, SEQ *s2, ss_t ss, int X, int K, int W, int P,			int pos1, int pos2,			comb_t *diag_lev			){	const uchar *beg1, *end1;	int left_sum, right_sum;	const uchar *const seq1 = SEQ_CHARS(s1);	const uchar *const seq2 = SEQ_CHARS(s2);	const int diag = pos2 - pos1;	if (seq1 == seq2 && pos1 >= pos2)		return 0;		if (comb_get(diag_lev,diag) > pos1)		return 0;        	{ /* extend to the right */	    const uchar *q = end1 = seq1 + pos1;	    const uchar *s = seq2 + pos2;            const int end = SEQ_LEN(s2)-diag;	    const int end_ = (end < SEQ_LEN(s1)) ? end : SEQ_LEN(s1);	    const uchar *const seq1_end = seq1 + end_;	    int sum;	    right_sum = sum = 0;	    while (q < seq1_end && sum >= right_sum - X) {		if ((sum += ss[*s++][*q++]) > right_sum) {			right_sum = sum;			end1 = q;		}	    }	}	{ /* extend to the left */	    const uchar *q = beg1 = (seq1 + pos1) - W;	    const uchar *s = (seq2+pos2)-W;	    const int end = comb_get(diag_lev,diag)-W;	    const int end_ = (end < 0) ? 0 : end;	    const int end__ = (end_ < -diag) ? -diag : end_;	    const uchar *const seq1_end = seq1+end__;	    int sum;	    left_sum = sum = 0;	    while (q > seq1_end  && sum >= left_sum - X) {		if ((sum += ss[*--s][*--q]) > left_sum) {			left_sum = sum;			beg1 = q;		}	    }	}	{   score_t score = right_sum + left_sum;	    const uchar *q = (seq1 + pos1) - W;	    const uchar *s = (seq2 + pos2) - W;	    const uchar *qend = seq1 + pos1;#ifdef DEBUGfprintf(stderr, "seq1=%p\n", seq1);fprintf(stderr, "end1=%p\n", seq1+SEQ_LEN(s1));fprintf(stderr, "q=   %p\n", q);fprintf(stderr, "seq2=%p\n", seq2);fprintf(stderr, "end2=%p\n", seq1+SEQ_LEN(s2));fprintf(stderr, "pos2=%d W=%d\n", pos2, W);fprintf(stderr, "s=   %p\n", s);assert(q >= seq1);assert(s >= seq2);#endif	    while (q < qend) {#ifdef DEBUGif (VALGRIND_CHECK_READABLE(q, sizeof(*q))) fatalf("\nq=%p %d",q, *q);if (VALGRIND_CHECK_READABLE(s, sizeof(*s))) fatalf("\ns=%p %d",s, *s);#endif		score += ss[*q++][*s++];	    }            if (P && score >= K && score <= 10*K) {                double ent = entropy(beg1, end1-beg1);		int old_score = score;                score = (int) ((double)score * ent);		if (score <= K && P > 1)			fprintf(stderr, "pruned hit of score %d at (%d,%d)\n",			   old_score, beg1-seq1, beg1-seq1+diag);	    }	    	    if (score >= K)		msp_add(mt, end1-beg1, beg1-seq1, beg1-seq1+diag, score, 0);	}	comb_set(diag_lev,diag, (end1 - seq1) + W);	return 0;}static msp_table_t *blast_search_unchecked(SEQ *seq1, SEQ *seq2, blast_table_t *bt, msp_table_t *msp_tab, ss_t ss, int X, int K, int P){	uchar *s;	blast_ecode_t ecode;	static comb_t *diag_lev = 0;	int i;	const int W = bt->w.W;	const int len1 = SEQ_LEN(seq1);	const int len2 = SEQ_LEN(seq2);	uchar *const beg2 = SEQ_CHARS(seq2);	uchar *const end2 = beg2+len2;	const signed char *const encoding = bt->w.encoding;	const blast_ecode_t mask = (1UL << ((W-1)*2)) - 1;        if (W<=1) return 0;	{ unsigned int n = (len1+len2+1)*sizeof(int);	  n = roundup(n, 64*1024);	  diag_lev = comb_resize(diag_lev,n,len1);        }	for (s = beg2; s < end2; ) {	restart:		/* init */		ecode = 0;		for (i = 1; i < W && s < end2; ++i) {			const int e = encoding[*s++];			if (e < 0) goto restart;			ecode = (ecode << 2) + e;		}		/* compute */		for (; s < end2; ++s) {			const int e = encoding[*s];			const blast_epos_node_t *h;			if (e < 0) goto restart; /* hit a run of 'X's */			ecode = ((ecode & mask) << 2) + e;			for (h = pos_get(&bt->w, ecode); h; h = h->link)				if (h->ecode == ecode)					msp_extend_hit(msp_tab, seq1, seq2, 						ss, X, K, W, P,						h->pos, s-beg2+1, diag_lev);		} 	}	comb_clear(diag_lev);	return msp_tab;}msp_table_t *blast_search(SEQ *seq1, SEQ *seq2, blast_table_t *bt, msp_table_t *msp, ss_t ss, int X, int K, int P, int T){	if (seq1 == 0) return 0;	if (seq2 == 0) return 0;	if (bt == 0) return 0;	if (T != 0) fatal("blast_search: T must be zero (for now)");	return blast_search_unchecked(seq1, seq2, bt, msp, ss, X, K, P);}static void blast_free_chain(bt_t *bt, blast_ecode_t ecode){	blast_epos_node_t **p = pos_getp(bt, ecode);	blast_epos_node_t *q = *p;	while (q) {		blast_epos_node_t *t = q->link;		ZFREE(q);		q = t;	}	*p = 0; /* clear table entry too */}void blast_table_free(blast_table_t *bt){        if (bt == 0) return;#ifdef USE_OBSTACK	obstack_free(&bt_obstk, (void*)0);#else	{blast_ecode_t ecode;	 for (ecode = 0; ecode < BLAST_POS_TAB_SIZE; ++ecode)		blast_free_chain(&bt->w, ecode);	}#endif	ZFREE(bt->w.epos_tab);	ZFREE(bt);}void msp_free_table(msp_table_t *mt){	if (mt && mt->msp) ZFREE(mt->msp);	if (mt) ZFREE(mt);}/* -----------------------------  filter the MSPs  ---------------------------*/msp_table_t *msp_compress(msp_table_t *mt){	msp_t *p, *q;	int i = 0;	if (mt == 0)		return 0;	if (mt->msp == 0)		return 0;	for (q=p=MSP_TAB_FIRST(mt); MSP_TAB_MORE(mt,p); p=MSP_TAB_NEXT(p)) {		if (p->filter == 0) {			if (p != q)				*q = *p;			q = MSP_TAB_NEXT(q);					++i;		} 	}	mt->num = i;	return mt;}#define DEFINE_MSP_CMP(f) \static int msp_cmp_##f(const void *a, const void *b) { \	return ((const msp_t*)a)->f - ((const msp_t*)b)->f; \}DEFINE_MSP_CMP(pos1)static msp_table_t *msp_sort_by(msp_table_t *mt, msp_cmp_t cmp){	msp_t *msp; 	unsigned int num;	if ((mt == NULL) || ((num = mt->num) == 0))		return 0;        msp = mt->msp;	qsort((char *) msp, num, sizeof(msp_t), cmp);	return mt;}#define DEFINE_MSP_SORT(f) \msp_table_t *msp_sort_##f(msp_table_t *mt) { \      return msp_sort_by(mt, msp_cmp_##f); \}DEFINE_MSP_SORT(pos1)/* --------------------------  sort the MSPs  ------------------------------- *//* sort MSPs by score */static int msp_cmp_score(const void *e, const void *f){	int i;	const msp_t *ee = (const msp_t *)e;	const msp_t *ff = (const msp_t *)f;		if ((i = (ee->score - ff->score)) < 0)                return 1;        else if (i > 0)                return -1;        else if ((i = (ee->pos1 - ff->pos1)) > 0)                return 1;	else if (i < 0)		return -1;        else if ((i = (ee->pos2 - ff->pos2)) > 0)                return 1;	else if (i < 0)		return -1;	else                return 0;} msp_table_t *msp_sort(msp_table_t *mt){	return msp_sort_by(mt, msp_cmp_score);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美腿欧美偷拍| 成人性视频免费网站| 亚洲愉拍自拍另类高清精品| 国产精品女主播av| 久久久久国产精品厨房| 久久久影院官网| 久久久精品免费网站| 久久精品欧美一区二区三区不卡| 久久亚洲精品小早川怜子| 久久久久99精品一区| 国产亚洲一区字幕| 国产精品久久久久久久久图文区| 国产精品国产三级国产aⅴ中文| 日本一区二区成人| 日韩伦理av电影| 亚洲最大的成人av| 午夜在线成人av| 蜜桃av噜噜一区| 国产一区二区女| 99久久99久久精品免费观看| 一本一本大道香蕉久在线精品| 欧美色精品在线视频| 欧美精品三级在线观看| 精品精品欲导航| 欧美国产97人人爽人人喊| 亚洲色图欧美偷拍| 日韩成人一区二区三区在线观看| 久久99久久99| 成人av电影观看| 欧美视频日韩视频| 日韩欧美高清一区| 国产精品视频免费看| 亚洲夂夂婷婷色拍ww47| 毛片基地黄久久久久久天堂| 国产**成人网毛片九色| 在线观看免费亚洲| 337p日本欧洲亚洲大胆精品| 亚洲人成在线播放网站岛国| 婷婷开心激情综合| 国产一区二区三区免费看 | 972aa.com艺术欧美| 欧美色视频在线| 久久综合九色综合欧美就去吻| 国产精品久久久久久久久免费丝袜| 亚洲黄色性网站| 麻豆91免费看| 91丝袜国产在线播放| 日韩一区二区三区高清免费看看 | 亚洲成人免费影院| 精品一区二区三区免费毛片爱| 成人午夜免费电影| 欧美日韩国产高清一区二区三区 | 欧美午夜一区二区三区| 久久综合九色综合欧美就去吻| 亚洲视频网在线直播| 韩国欧美国产1区| 色噜噜狠狠色综合欧洲selulu| 精品久久久久香蕉网| 亚洲一二三四区不卡| 国产风韵犹存在线视精品| 欧美日韩亚洲综合在线| 国产三级一区二区| 日韩精品91亚洲二区在线观看 | 2017欧美狠狠色| 一区二区三国产精华液| 国产成人欧美日韩在线电影| 在线成人午夜影院| 亚洲日本中文字幕区| 国产乱妇无码大片在线观看| 7777精品伊人久久久大香线蕉的| 最新高清无码专区| 国产一区二区三区在线看麻豆| 欧美久久一二三四区| 亚洲精选一二三| 国产**成人网毛片九色| 精品国产91九色蝌蚪| 日韩国产精品大片| 欧美性色黄大片手机版| 国产精品久久精品日日| 国产a级毛片一区| 日韩免费高清电影| 日韩精品每日更新| 欧洲av在线精品| 日韩伦理免费电影| 成人国产视频在线观看| 久久精品人人做| 国产乱码精品一区二区三区忘忧草| 91精品国产91久久综合桃花| 亚洲3atv精品一区二区三区| 91黄色激情网站| 亚洲另类在线视频| 不卡视频在线看| 亚洲国产精品成人综合色在线婷婷| 韩国理伦片一区二区三区在线播放| 欧美一区二区三区视频在线| 天涯成人国产亚洲精品一区av| 色av成人天堂桃色av| 亚洲欧美日韩一区二区三区在线观看| 国产 日韩 欧美大片| 亚洲国产精品传媒在线观看| 国产a视频精品免费观看| 国产欧美日韩不卡免费| 懂色av一区二区三区免费观看| 国产欧美综合色| 成人在线一区二区三区| 国产精品网站在线| 成人教育av在线| 国产精品国产三级国产aⅴ无密码| 国产精品18久久久久久vr| 久久只精品国产| 国产精品一区二区在线观看网站| 国产亚洲福利社区一区| 国产91在线看| 中文字幕五月欧美| 色综合久久综合| 亚洲国产美女搞黄色| 337p亚洲精品色噜噜狠狠| 麻豆精品久久久| 久久综合精品国产一区二区三区| 韩日精品视频一区| 国产精品卡一卡二卡三| 色婷婷亚洲综合| 午夜国产精品一区| 日韩三级精品电影久久久| 久久精品国产久精国产爱| 久久精品一区二区三区四区| 成人高清av在线| 亚洲综合清纯丝袜自拍| 7777精品伊人久久久大香线蕉超级流畅 | 久久欧美中文字幕| 波多野结衣视频一区| 一级日本不卡的影视| 91精品麻豆日日躁夜夜躁| 国产麻豆精品久久一二三| 中文字幕一区二| 欧美日韩激情在线| 国产精品亚洲第一| 一区二区三区电影在线播| 日韩欧美国产一区二区在线播放| 国产成人在线观看免费网站| 亚洲视频一区在线观看| 欧美一区二区福利视频| 丰满少妇久久久久久久| 亚洲影视在线播放| 精品国产露脸精彩对白| 成人高清av在线| 首页欧美精品中文字幕| 久久久久久电影| 欧美中文字幕一二三区视频| 韩国三级中文字幕hd久久精品| 亚洲特级片在线| 欧美一区三区二区| 丰满白嫩尤物一区二区| 亚洲成av人片在www色猫咪| 国产午夜精品久久久久久久| 欧美在线视频日韩| 国产精品一二三四五| 亚洲国产中文字幕| 亚洲国产成人在线| 777色狠狠一区二区三区| 99视频有精品| 美女精品自拍一二三四| 亚洲精品老司机| 国产色产综合色产在线视频| 欧美天堂亚洲电影院在线播放| 国产黄人亚洲片| 首页国产丝袜综合| 亚洲欧洲中文日韩久久av乱码| 欧美精品一区二区三区视频| 一本色道亚洲精品aⅴ| 国产精品99久久久| 免费观看久久久4p| 亚洲一区二区三区在线| 国产欧美1区2区3区| 精品成人私密视频| 欧美精品一卡二卡| 色综合久久88色综合天天6 | 欧美丝袜丝nylons| 成人午夜激情视频| 九九视频精品免费| 五月婷婷综合在线| 亚洲精品中文字幕乱码三区| 久久久综合网站| 欧美mv和日韩mv国产网站| 欧美巨大另类极品videosbest| 色综合天天综合色综合av| 高清在线不卡av| 国产一级精品在线| 久草这里只有精品视频| 欧美aaaaa成人免费观看视频| 亚洲午夜日本在线观看| 亚洲色图欧洲色图婷婷| 中文字幕一区二区不卡 | 午夜成人在线视频| 亚洲成人黄色小说| 亚洲一二三区不卡| 亚洲综合视频在线| 亚洲精品久久久久久国产精华液| 亚洲同性同志一二三专区| 中文字幕一区二区三区av|