Mercurial > repos > ashvark > qiime_1_8_0
diff bwa-0.6.2/bwa.h @ 2:a294fbfcb1db draft default tip
Uploaded BWA
author | ashvark |
---|---|
date | Fri, 18 Jul 2014 07:55:59 -0400 |
parents | dd1186b11b3b |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bwa-0.6.2/bwa.h Fri Jul 18 07:55:59 2014 -0400 @@ -0,0 +1,107 @@ +#ifndef BWA_H_ +#define BWA_H_ + +#include <stdint.h> + +#define BWA_DEF_MAX_SCORE 2048 +#define BWA_MAX_QUERY_LEN 1024 + +// BWA index +struct bwa_idx_t; +typedef struct bwa_idx_t bwa_idx_t; + +// Buffer for BWA alignment +struct bwa_buf_t; +typedef struct bwa_buf_t bwa_buf_t; + +// BWA alignment options +typedef struct { + int s_gapo, s_gape; // gap open and extension penalties; the mismatch penalty is fixed at 3 + int max_diff, max_gapo, max_gape; // max differences (-1 to use fnr for length-adjusted max diff), gap opens and gap extensions + int seed_len, max_seed_diff; // seed length and max differences allowed in the seed + float fnr; // parameter for automatic length-adjusted max differences +} bwa_opt_t; + +// default BWA alignment options +extern bwa_opt_t bwa_def_opt; // = { 11, 4, -1, 1, 6, 32, 2, 0.04 } + +// an interval hit in the SA coordinate; basic unit in .sai files +typedef struct { + uint32_t n_mm:16, n_gapo:8, n_gape:8; + int score; + uint64_t k, l; // [k,l] is the SA interval; each interval has l-k+1 hits +} bwa_sai1_t; + +// all interval hits in the SA coordinate +typedef struct { + int n; // number of interval hits + bwa_sai1_t *sai; +} bwa_sai_t; + +// an alignment +typedef struct { + uint32_t n_n:8, n_gap:12, n_mm:12; // number of ambiguous bases, gaps and mismatches in the alignment + int32_t ref_id; // referece sequence index (the first seq is indexed by 0) + uint32_t offset; // coordinate on the reference; zero-based + uint32_t n_cigar:16, flag:16; // number of CIGAR operations; SAM flag + uint32_t *cigar; // CIGAR in the BAM 28+4 encoding; having n_cigar operations +} bwa_aln_t; + +typedef struct { + int mapQs, mapQ, c1, c2; + uint64_t sa; + bwa_sai1_t *which; + bwa_sai_t sai; + bwa_aln_t one; +} bwa_one_t; + +typedef struct { + double avg, std, ap_prior; + uint64_t low, high, high_bayesian; +} bwa_pestat_t; + +#ifdef __cplusplus +extern "C" { +#endif + + // load a BWA index + bwa_idx_t *bwa_idx_load(const char *prefix); + void bwa_idx_destroy(bwa_idx_t *p); + + // allocate a BWA alignment buffer; if unsure, set opt to &bwa_def_opt and max_score to BWA_DEF_MAX_SCORE + bwa_buf_t *bwa_buf_init(const bwa_opt_t *opt, int max_score); + void bwa_buf_destroy(bwa_buf_t *p); + + /** + * Find all the SA intervals + * + * @param idx BWA index; multiple threads can share the same index + * @param buf BWA alignment buffer; each thread should have its own buffer + * @param seq NULL terminated C string, consisting of A/C/G/T/N only + * + * @return SA intervals seq is matched to + */ + bwa_sai_t bwa_sai(const bwa_idx_t *idx, bwa_buf_t *buf, const char *seq); + + /** + * Construct an alignment in the base-pair coordinate + * + * @param idx BWA index + * @param buf BWA alignment buffer + * @param seq NULL terinated C string + * @param sa Suffix array value + * @param n_gaps Number of gaps (typically equal to bwa_sai1_t::n_gapo + bwa_sai1_t::n_gape + * + * @return An alignment + */ + void bwa_sa2aln(const bwa_idx_t *idx, bwa_buf_t *buf, const char *seq, uint64_t sa, int n_gaps, bwa_aln_t *aln); + + bwa_one_t *bwa_se(const bwa_idx_t *idx, bwa_buf_t *buf, const char *seq, int gen_cigar); + + void bwa_one_destroy(bwa_one_t *one); + +#ifdef __cplusplus +} +#endif + +#endif