annotate bwa-0.7.9a/ksw.h @ 0:ce5a8082bbb8 draft

Uploaded
author xilinxu
date Thu, 14 Aug 2014 02:16:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
1 #ifndef __AC_KSW_H
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
2 #define __AC_KSW_H
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
3
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
4 #include <stdint.h>
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
5
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
6 #define KSW_XBYTE 0x10000
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
7 #define KSW_XSTOP 0x20000
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
8 #define KSW_XSUBO 0x40000
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
9 #define KSW_XSTART 0x80000
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
10
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
11 struct _kswq_t;
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
12 typedef struct _kswq_t kswq_t;
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
13
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
14 typedef struct {
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
15 int score; // best score
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
16 int te, qe; // target end and query end
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
17 int score2, te2; // second best score and ending position on the target
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
18 int tb, qb; // target start and query start
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
19 } kswr_t;
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
20
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
21 #ifdef __cplusplus
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
22 extern "C" {
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
23 #endif
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
24
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
25 /**
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
26 * Aligning two sequences
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
27 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
28 * @param qlen length of the query sequence (typically <tlen)
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
29 * @param query query sequence with 0 <= query[i] < m
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
30 * @param tlen length of the target sequence
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
31 * @param target target sequence
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
32 * @param m number of residue types
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
33 * @param mat m*m scoring matrix in one-dimension array
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
34 * @param gapo gap open penalty; a gap of length l cost "-(gapo+l*gape)"
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
35 * @param gape gap extension penalty
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
36 * @param xtra extra information (see below)
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
37 * @param qry query profile (see below)
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
38 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
39 * @return alignment information in a struct; unset values to -1
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
40 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
41 * When xtra==0, ksw_align() uses a signed two-byte integer to store a
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
42 * score and only finds the best score and the end positions. The 2nd best
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
43 * score or the start positions are not attempted. The default behavior can
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
44 * be tuned by setting KSW_X* flags:
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
45 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
46 * KSW_XBYTE: use an unsigned byte to store a score. If overflow occurs,
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
47 * kswr_t::score will be set to 255
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
48 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
49 * KSW_XSUBO: track the 2nd best score and the ending position on the
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
50 * target if the 2nd best is higher than (xtra&0xffff)
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
51 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
52 * KSW_XSTOP: stop if the maximum score is above (xtra&0xffff)
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
53 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
54 * KSW_XSTART: find the start positions
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
55 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
56 * When *qry==NULL, ksw_align() will compute and allocate the query profile
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
57 * and when the function returns, *qry will point to the profile, which can
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
58 * be deallocated simply by free(). If one query is aligned against multiple
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
59 * target sequences, *qry should be set to NULL during the first call and
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
60 * freed after the last call. Note that qry can equal 0. In this case, the
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
61 * query profile will be deallocated in ksw_align().
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
62 */
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
63 kswr_t ksw_align(int qlen, uint8_t *query, int tlen, uint8_t *target, int m, const int8_t *mat, int gapo, int gape, int xtra, kswq_t **qry);
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
64 kswr_t ksw_align2(int qlen, uint8_t *query, int tlen, uint8_t *target, int m, const int8_t *mat, int o_del, int e_del, int o_ins, int e_ins, int xtra, kswq_t **qry);
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
65
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
66 /**
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
67 * Banded global alignment
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
68 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
69 * @param qlen query length
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
70 * @param query query sequence with 0 <= query[i] < m
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
71 * @param tlen target length
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
72 * @param target target sequence with 0 <= target[i] < m
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
73 * @param m number of residue types
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
74 * @param mat m*m scoring mattrix in one-dimension array
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
75 * @param gapo gap open penalty; a gap of length l cost "-(gapo+l*gape)"
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
76 * @param gape gap extension penalty
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
77 * @param w band width
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
78 * @param n_cigar (out) number of CIGAR elements
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
79 * @param cigar (out) BAM-encoded CIGAR; caller need to deallocate with free()
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
80 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
81 * @return score of the alignment
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
82 */
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
83 int ksw_global(int qlen, const uint8_t *query, int tlen, const uint8_t *target, int m, const int8_t *mat, int gapo, int gape, int w, int *n_cigar, uint32_t **cigar);
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
84 int ksw_global2(int qlen, const uint8_t *query, int tlen, const uint8_t *target, int m, const int8_t *mat, int o_del, int e_del, int o_ins, int e_ins, int w, int *n_cigar, uint32_t **cigar);
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
85
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
86 /**
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
87 * Extend alignment
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
88 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
89 * The routine aligns $query and $target, assuming their upstream sequences,
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
90 * which are not provided, have been aligned with score $h0. In return,
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
91 * region [0,*qle) on the query and [0,*tle) on the target sequences are
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
92 * aligned together. If *gscore>=0, *gscore keeps the best score such that
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
93 * the entire query sequence is aligned; *gtle keeps the position on the
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
94 * target where *gscore is achieved. Returning *gscore and *gtle helps the
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
95 * caller to decide whether an end-to-end hit or a partial hit is preferred.
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
96 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
97 * The first 9 parameters are identical to those in ksw_global()
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
98 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
99 * @param h0 alignment score of upstream sequences
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
100 * @param _qle (out) length of the query in the alignment
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
101 * @param _tle (out) length of the target in the alignment
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
102 * @param _gtle (out) length of the target if query is fully aligned
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
103 * @param _gscore (out) score of the best end-to-end alignment; negative if not found
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
104 *
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
105 * @return best semi-local alignment score
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
106 */
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
107 int ksw_extend(int qlen, const uint8_t *query, int tlen, const uint8_t *target, int m, const int8_t *mat, int gapo, int gape, int w, int end_bonus, int zdrop, int h0, int *qle, int *tle, int *gtle, int *gscore, int *max_off);
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
108 int ksw_extend2(int qlen, const uint8_t *query, int tlen, const uint8_t *target, int m, const int8_t *mat, int o_del, int e_del, int o_ins, int e_ins, int w, int end_bonus, int zdrop, int h0, int *qle, int *tle, int *gtle, int *gscore, int *max_off);
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
109
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
110 #ifdef __cplusplus
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
111 }
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
112 #endif
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
113
ce5a8082bbb8 Uploaded
xilinxu
parents:
diff changeset
114 #endif