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

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

?? bz_align.c

?? 一個(gè)類似于blast算法的基因數(shù)據(jù)快速搜索算法
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
static const char rcsid[]="$Id: bz_align.c,v 1.8 2001/08/26 21:16:52 schwartz Exp $";/* bz_align.c -- The only entry point is:**  void Align(AlignIOPtr align_IO)**  The X-drop variant of dynamic programming is applied to create a gapped*  alignment by extending in both directions from a "seed point".**  Procedures in this file are not allowed to modify any of the data structures*  controlled by bz_extend.c, namely the Msp structures and the alignments and*  blocks that they point to.*//* WHEN ADDING TO THE BLIST, CAN WE PRUNE ALIGNMENTS OUTSIDE OF [L,R]? */#include "bz_all.h"#define MININT      -9999999#define TRUE 1#define FALSE 0#define Boolean int/* Dynamic Programming structure. */typedef struct DP {	int DD, CC, FF;	/* FF is unused, but it adds speed under linux */	int mask;       /* mask out previously used points */ } *dp_ptr, dp_node;typedef struct dyn_prog {	dp_node *p;	unsigned int len;} dyn_prog;/* List of blocks maintained herein. */typedef struct _list {       	block_ptr block;	int x, /* column position where block intersects the sweep row */	    last_row;	char type, filter;	struct _list *next;} blist_node, *blist_ptr;/* The trace-back information, i.e., to trace backwards along an optimal path,*  is packed into one byte per dynamic-programming grid point.  At each grid*  point there are three nodes: C which is entered by one diagonal edge,  D*  which is entered by two vertical edges (from a D node and a C node),*  and I which is entered by two horizontal edges.  If this is new to you,*  please consult Myers and Miller, Bull. Math. Biol. 51 (1989), pp. 5-37.**  The right-most two bits hold FLAG_C or FLAG_I or FLAG_D, telling which*  node gets the maximum score from an entering edge.  FLAG_DD (third bit*  from the right) is 1 iff it is better to take a vertical edge from the D*  node than a vertical edge from the C node.  FLAG_II does the same for*  horizontal edges.*/#define FLAG_C (0)#define FLAG_I (1<<0)#define FLAG_D (1<<1)#define FLAG_DD (1<<2)#define FLAG_II (1<<3)#define SELECT_CID (FLAG_I | FLAG_D | FLAG_C)#define PRUNE \{\    c = dp->CC + wa[*(b++)];\    if (Lcol == col) Lcol++;\    else {i = dq->DD = dq->CC = MININT; dq++;}\    dp++; *(tbp++) = 0;\    continue;\}/* ------------- allocate the dynamic-programming "sweep row" array --------- *//* ensure that the first n elements exist and have been initialized */static void dp_ready(dyn_prog *dp, int n){	int old_len, added;	if (dp == NULL)		fatal("dp_ready called with NULL pointer");	n = MAX(n,0);	/* make sure that there is room for n of them */	if (dp->p) {		old_len = dp->len;		if (n > old_len) {			dp->len = dp->len/16 + n + 1000;			dp->p = ckrealloc(dp->p, dp->len * sizeof(dp_node));		}	} else {		old_len = 0;		dp->len = n + 1000;		dp->p = (dp_node *) ckalloc(dp->len * sizeof(dp_node));	}	/* 0..old_len-1 are already in use, but zero the rest */	if ((added = dp->len - old_len) > 0)		memset(dp->p + old_len, 0, sizeof(dp->p[0])*added);	/* {int i; for (i = old_len; i < dp->len; ++i) dp->p[i].mask = 0;} */}/* ---------------------------    Data Structures    ------------------------ *//* As the dynamic-programming "sweep row" advances, we need to update the*  following information:** 1.  The alignment and the specific block that constrain the feasible region*     below (down_align and down_block) and above (up_align and up_block), if they*     exist.  These are initially given for the alignment's seed-point, and*     information passed to this file allows efficient updating.  The column*     indices just inside where the two alignments intersect the current row*     are called L and R.** 2.  The blocks (gap-free segments of earlier alignments) that intersect*     the sweep row within the feasible region.  These are keep in a list*     (blist) that supports insertion and deletion when the sweep row reaches*     an end of an alignment.*//* --------------------- procedures to update L and R ----------------------- *//* next_b -- move to the next down_block or up_block in a forward sweep;*  return its column position */static int next_b(block_ptr *bp, Msp_ptr *mp, int is_up, int row, int seed1,  int seed2){	*bp = (*bp)->next_block;	if (*bp) {		if ((*bp)->type == HOR && (*bp = (*bp)->next_block) == NULL)			fatal("Last alignment block was horizontal");		return (*bp)->b2 - seed2;	}	/* we've run off the end of an alignment; move to the next one */	if (is_up) {		*bp = (*mp)->up_block2;		*mp = (*mp)->up_align2;	} else {		*bp = (*mp)->down_block2;		*mp = (*mp)->down_align2;	}	/* if indeed there was a next one .. */	if (*bp) {		if ((*bp)->type == DIA)			return (*bp)->b2 + row + seed1 - (*bp)->b1 - seed2;		return (*bp)->b2 - seed2; /* jumped to a vertical block */	}	return 0;	/* no constraint; there was no "next alignment" */}/* prev_b -- move to the previous down_block or up_block in a reverse sweep;*  return its column position */static int prev_b(block_ptr *bp, Msp_ptr *mp, int is_up, int row, int seed1,  int seed2){	*bp = (*bp)->prev_block;	if (*bp) {		if ((*bp)->type == HOR && (*bp = (*bp)->prev_block) == NULL)			fatal("First alignment block was horizontal");		return seed2 - (*bp)->e2;	}	/* we've run off the front of an alignment; move to the previous one */	if (is_up) {		*bp = (*mp)->up_block1;		*mp = (*mp)->up_align1;	} else {		*bp = (*mp)->down_block1;		*mp = (*mp)->down_align1;	}	/* if indeed there was a previous one .. */ 	if (*bp) {		if ((*bp)->type == DIA) 			return seed2 - ((*bp)->e2 + seed1 - row - (*bp)->e1);		return seed2 - (*bp)->e2; /* jumped to a vertical block */	}	return 0;	/* no constraint; there was no "previous alignment" */}/* update_LR -- also update Lc and Rc, the actual column limits for*  dynamic programming, which may lie strictly inside L and R because of the*  X-drop constraint. */static void update_LR(block_ptr *Up_block, block_ptr *Down_block, int row,  int *pL, int *pR, int *pLc, int *pRc, int seed1, int seed2,  Boolean reversed, Msp_ptr *Up_align, Msp_ptr *Down_align){	 int L = *pL, R = *pR, Lc = *pLc, Rc = *pRc;	if (!reversed) {		if (*Down_block) {			if ((*Down_block)->e1 >= row + seed1) {				if ((*Down_block)->type == DIA)					L++;			} else				L = next_b(Down_block, Down_align, 0, row,				  seed1, seed2) + 1;		}		if (*Down_block)			Lc = MAX(Lc, L);		if (*Up_block) {			if ((*Up_block)->e1 >= row + seed1) {				if ((*Up_block)->type == DIA)					R++; 			} else				R = next_b(Up_block, Up_align, 1, row,				  seed1, seed2) - 1;		}		if (*Up_block)			Rc = MIN(Rc, R);	} else {      		/* reversed */		if (*Up_block) {			if ((*Up_block)->b1 <= seed1 - row) {				if ((*Up_block)->type == DIA)					L++;			} else				L = prev_b(Up_block, Up_align, 1, row,				  seed1, seed2) + 1;		}		if (*Up_block)			Lc = MAX(Lc, L);		if (*Down_block) {			if ((*Down_block)->b1 <= seed1 - row) {				if ((*Down_block)->type == DIA)					R++; 			} else				R = prev_b(Down_block, Down_align, 0, row,				  seed1, seed2) - 1;		}		if (*Down_block)			Rc = MIN(Rc, R);	}	*pL = L; *pR = R; *pLc = Lc; *pRc = Rc;}/* ------------------- procedures to update the blist ----------------------- *//* build_lp -- set the p and e fields of a blist entry and mask the*  corresponding positions in the dynamic programming array */static void build_lp(blist_ptr lp, int reversed, dp_ptr CD, int b, int e,  int row, int seed1, int seed2){	int i;	lp->type = lp->block->type;	if (reversed) {		lp->x = seed2 - lp->block->e2;		lp->last_row = seed1 - lp->block->b1;	} else {		lp->x = lp->block->b2 - seed2;		lp->last_row = lp->block->e1 - seed1;	}	if (lp->type != HOR) {		if (lp->x >= b && lp->x <= e)			CD[lp->x].mask = row;	} else {		int end_hor = 		  (reversed) ? seed2 - lp->block->b2 : lp->block->e2 - seed2;		for (i = MAX(b,lp->x); i <= MIN(e,end_hor); i++)			CD[i].mask = row;	}}/* add_new_align -- add an alignment's terminal block to the blist */static blist_ptr add_new_align(blist_ptr list, Msp_ptr right_list, int reversed,  dp_ptr CD, int b, int e, int row, int seed1, int seed2){	blist_ptr lp = (blist_ptr) ckalloc(sizeof(blist_node));	lp->filter = 0;	if (reversed)		lp->block = right_list->last_block;	else		lp->block = right_list->first_block;	lp->next = list;	build_lp(lp, reversed, CD, b, e, row, seed1, seed2);	return lp;}/* filter_blist -- remove blist nodes with filter values != i */static void filter_blist(blist_ptr *list, int i){	blist_ptr pp, lp;	for (pp = NULL, lp = *list; lp; )		if (lp->filter != i) {			if (pp) {				pp->next = lp->next;				ckfree(lp);				lp = pp->next;			} else {				*list = lp->next;				ckfree(lp);				lp = *list;			}		} else {			pp = lp;			lp = lp->next;		}}static block_ptr next_block(block_ptr bp, Boolean reversed)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区在线看| 日韩欧美国产电影| 亚洲青青青在线视频| 99精品偷自拍| 亚洲五码中文字幕| 日韩一区二区三区三四区视频在线观看 | 国产欧美一区二区精品久导航| 精品一区二区三区的国产在线播放| 欧美α欧美αv大片| 狠狠色伊人亚洲综合成人| 美女爽到高潮91| 26uuu精品一区二区| 国产精品一区二区在线观看不卡| 国产日韩精品一区二区三区| 色综合久久天天| 亚洲v中文字幕| 国产亚洲综合在线| 欧美专区亚洲专区| 国内精品久久久久影院色| 欧美激情综合五月色丁香| 色8久久精品久久久久久蜜 | 欧美国产成人在线| 欧美在线|欧美| 经典一区二区三区| 亚洲精品成人悠悠色影视| 宅男噜噜噜66一区二区66| 国产精品中文有码| 伊人开心综合网| 精品国产乱码久久久久久闺蜜| 成人午夜碰碰视频| 香蕉久久一区二区不卡无毒影院| 久久精品亚洲麻豆av一区二区 | 久久九九99视频| 91久久精品一区二区| 久久精工是国产品牌吗| 亚洲黄色性网站| 久久久久久9999| 色哟哟国产精品| 国产在线精品一区二区夜色| 亚洲制服丝袜一区| 国产精品入口麻豆原神| 欧美一区二区视频在线观看| 不卡一二三区首页| 久久精品国产亚洲aⅴ| 亚洲综合在线五月| 国产三级欧美三级| 欧美大片在线观看一区| 在线免费不卡电影| www.爱久久.com| 国产一区二区看久久| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精品国产一区二区精华液 | 色综合天天天天做夜夜夜夜做| 狠狠色狠狠色合久久伊人| 亚洲丶国产丶欧美一区二区三区| 中文字幕第一页久久| 天天综合网天天综合色| 最新热久久免费视频| xvideos.蜜桃一区二区| 欧美一级免费大片| 欧美日韩第一区日日骚| 99精品桃花视频在线观看| 国产一区二区伦理片| 久久国产人妖系列| 日本成人中文字幕在线视频| 亚洲最新在线观看| 亚洲激情成人在线| 一区二区三区四区高清精品免费观看 | 国产suv精品一区二区三区| 免费久久99精品国产| 午夜婷婷国产麻豆精品| 亚洲一二三四久久| 亚洲高清中文字幕| 偷偷要91色婷婷| 石原莉奈在线亚洲二区| 偷窥少妇高潮呻吟av久久免费| 亚洲精品免费看| 一级特黄大欧美久久久| 一区二区成人在线| 亚洲成人av电影| 日韩经典一区二区| 久久99蜜桃精品| 国产一区二区三区在线观看免费视频 | 不卡免费追剧大全电视剧网站| 风间由美性色一区二区三区| 国产二区国产一区在线观看| 国产精品一区二区在线播放| 国产成人av自拍| 不卡一二三区首页| 色婷婷狠狠综合| 欧美日韩情趣电影| 欧美一二三四在线| 国产欧美一区二区三区在线老狼| 亚洲国产高清不卡| 亚洲黄网站在线观看| 日韩精品视频网站| 国产精品18久久久久久久久久久久| 国产精品亚洲午夜一区二区三区| 高潮精品一区videoshd| 色婷婷激情一区二区三区| 欧美日韩国产bt| 精品久久国产老人久久综合| 中文字幕第一区| 亚洲第一电影网| 久久99精品久久久久久| 波多野结衣亚洲一区| 日韩理论片网站| 亚洲444eee在线观看| 久久电影网电视剧免费观看| 成人性色生活片| 欧美日韩亚洲国产综合| 精品国产一区二区国模嫣然| 国产精品欧美经典| 天堂va蜜桃一区二区三区| 国产麻豆视频一区二区| 在线一区二区三区| 2欧美一区二区三区在线观看视频| 18欧美亚洲精品| 久久精品国产99| 91国产成人在线| 久久日一线二线三线suv| 亚洲精品欧美二区三区中文字幕| 精品在线一区二区三区| 91久久精品午夜一区二区| 精品国产乱码91久久久久久网站| 亚洲精品欧美激情| 国产精品自拍在线| 欧美一卡2卡三卡4卡5免费| 中文字幕精品一区二区三区精品| 三级一区在线视频先锋 | 国产午夜三级一区二区三| 亚洲无人区一区| 成人污视频在线观看| 欧美美女一区二区| 自拍偷自拍亚洲精品播放| 国产一区二区在线观看免费| 欧美久久高跟鞋激| 亚洲图片你懂的| 国产成人免费在线视频| 日韩精品一区国产麻豆| 亚洲高清免费视频| 色视频成人在线观看免| 中文字幕精品一区| 国产剧情一区二区三区| 日韩欧美一级片| 视频一区欧美精品| 欧美无砖砖区免费| 亚洲美女免费在线| 91片黄在线观看| 国产精品成人免费精品自在线观看| 久久99精品国产麻豆不卡| 欧美精品久久99| 亚洲成年人网站在线观看| 日本高清不卡一区| 亚洲色图在线视频| 不卡视频在线观看| 中文字幕一区二区三区av| 国产成人av一区二区三区在线| 欧美不卡视频一区| 美女国产一区二区| 日韩精品一区二区三区蜜臀| 男人的天堂久久精品| 欧美精品亚洲二区| 免费看欧美女人艹b| 51久久夜色精品国产麻豆| 日日噜噜夜夜狠狠视频欧美人| 欧美午夜在线观看| 亚洲成av人片一区二区| 4438成人网| 日本sm残虐另类| 日韩精品一区二区三区视频在线观看 | 色悠悠久久综合| 99精品国产视频| 亚洲三级视频在线观看| 91首页免费视频| 亚洲精品日产精品乱码不卡| 欧美午夜在线观看| 日韩av中文字幕一区二区| 欧美一区二区三区爱爱| 激情综合网av| 久久久蜜桃精品| 国产成a人亚洲| 亚洲女同ⅹxx女同tv| 色婷婷国产精品综合在线观看| 亚洲国产日日夜夜| 日韩视频123| 国产成人综合视频| 一区二区三区在线观看动漫| 欧美三级乱人伦电影| 免费观看日韩av| 欧美国产日本韩| 在线观看亚洲精品| 久久精工是国产品牌吗| 国产精品丝袜91| 欧美亚洲高清一区| 激情图片小说一区| 亚洲欧美日韩中文字幕一区二区三区| 欧美午夜宅男影院| 国产精品18久久久久久久久久久久| 亚洲三级在线免费|