mirror of
https://github.com/lh3/minimap2.git
synced 2026-10-02 14:38:13 +08:00
r367: index reader optionally writes index
This commit is contained in:
@@ -25,21 +25,16 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
uint64_t x, y;
|
||||
} mm128_t;
|
||||
// hidden structures
|
||||
struct mm_idx_bucket_s;
|
||||
struct mm_bseq_file_s;
|
||||
struct mm_tbuf_s;
|
||||
|
||||
// emulate 128-bit integers and arrays
|
||||
typedef struct { uint64_t x, y; } mm128_t;
|
||||
typedef struct { size_t n, m; mm128_t *a; } mm128_v;
|
||||
typedef struct { size_t n, m; uint64_t *a; } uint64_v;
|
||||
typedef struct { size_t n, m; uint32_t *a; } uint32_v;
|
||||
|
||||
typedef struct {
|
||||
mm128_v a; // (minimizer, position) array
|
||||
int32_t n; // size of the _p_ array
|
||||
uint64_t *p; // position array for minimizers appearing >1 times
|
||||
void *h; // hash table indexing _p_ and minimizers appearing once
|
||||
} mm_idx_bucket_t;
|
||||
|
||||
// minimap2 index
|
||||
typedef struct {
|
||||
char *name; // name of the db sequence
|
||||
uint64_t offset; // offset in mm_idx_t::S
|
||||
@@ -48,43 +43,50 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
int32_t b, w, k, is_hpc;
|
||||
uint32_t n_seq; // number of reference sequences
|
||||
mm_idx_seq_t *seq; // sequence name, length and offset
|
||||
uint32_t *S; // 4-bit packed sequence
|
||||
mm_idx_bucket_t *B; // index
|
||||
uint32_t n_seq; // number of reference sequences
|
||||
mm_idx_seq_t *seq; // sequence name, length and offset
|
||||
uint32_t *S; // 4-bit packed sequence
|
||||
struct mm_idx_bucket_s *B; // index (hidden)
|
||||
void *km;
|
||||
} mm_idx_t;
|
||||
|
||||
// minimap2 alignment
|
||||
typedef struct {
|
||||
uint32_t capacity;
|
||||
int32_t dp_score, dp_max, dp_max2;
|
||||
uint32_t blen;
|
||||
uint32_t n_diff;
|
||||
uint32_t n_ambi:30, trans_strand:2;
|
||||
uint32_t n_cigar;
|
||||
uint32_t capacity; // the capacity of cigar[]
|
||||
int32_t dp_score, dp_max, dp_max2; // DP score; score of the max-scoring segment; score of the best alternate mappings
|
||||
uint32_t blen; // block length
|
||||
uint32_t n_diff; // number of differences, including ambiguous bases
|
||||
uint32_t n_ambi:30, trans_strand:2; // number of ambiguous bases; transcript strand: 0 for unknown, 1 for +, 2 for -
|
||||
uint32_t n_cigar; // number of cigar operations in cigar[]
|
||||
uint32_t cigar[];
|
||||
} mm_extra_t;
|
||||
|
||||
typedef struct {
|
||||
int32_t id;
|
||||
uint32_t cnt:31, rev:1;
|
||||
uint32_t rid:31, inv:1;
|
||||
int32_t score;
|
||||
int32_t qs, qe, rs, re;
|
||||
int32_t parent, subsc;
|
||||
int32_t as;
|
||||
int32_t fuzzy_mlen, fuzzy_blen;
|
||||
uint32_t mapq:8, split:2, sam_pri:1, n_sub:21; // TODO: n_sub is not used for now
|
||||
int32_t id; // ID for internal uses (see also parent below)
|
||||
uint32_t cnt:31, rev:1; // number of minimizers; if on the reverse strand
|
||||
uint32_t rid:31, inv:1; // reference index; if this is an alignment from inversion rescue
|
||||
int32_t score; // DP alignment score
|
||||
int32_t qs, qe, rs, re; // query start and end; reference start and end
|
||||
int32_t parent, subsc; // parent==id if primary; best alternate mapping score
|
||||
int32_t as; // offset in the a[] array (for internal uses only)
|
||||
int32_t fuzzy_mlen, fuzzy_blen; // seeded exact match length; seeded alignment block length (approximate)
|
||||
uint32_t mapq:8, split:2, sam_pri:1, n_sub:21; // mapQ; split pattern; if SAM primary; number of suboptimal mappings
|
||||
mm_extra_t *p;
|
||||
} mm_reg1_t;
|
||||
|
||||
// indexing and mapping options
|
||||
typedef struct {
|
||||
float max_occ_frac;
|
||||
float mid_occ_frac;
|
||||
int sdust_thres; // score threshold for SDUST; 0 to disable
|
||||
int flag; // see MM_F_* macros
|
||||
short k, w, is_hpc, bucket_bits;
|
||||
int mini_batch_size;
|
||||
uint64_t batch_size;
|
||||
} mm_idxopt_t;
|
||||
|
||||
int bw; // bandwidth
|
||||
typedef struct {
|
||||
float mid_occ_frac;
|
||||
int sdust_thres; // score threshold for SDUST; 0 to disable
|
||||
int flag; // see MM_F_* macros
|
||||
|
||||
int bw; // bandwidth
|
||||
int max_gap, max_gap_ref; // break a chain if there are no minimizers in a max_gap window
|
||||
int max_chain_skip;
|
||||
int min_cnt;
|
||||
@@ -104,63 +106,44 @@ typedef struct {
|
||||
int min_ksw_len;
|
||||
|
||||
int mini_batch_size;
|
||||
int32_t max_occ, mid_occ;
|
||||
int32_t mid_occ;
|
||||
} mm_mapopt_t;
|
||||
|
||||
typedef struct {
|
||||
short k, w, is_hpc, bucket_bits;
|
||||
int mini_batch_size;
|
||||
uint64_t batch_size;
|
||||
} mm_idxopt_t;
|
||||
|
||||
struct mm_bseq_file_s;
|
||||
|
||||
// index reader
|
||||
typedef struct {
|
||||
int is_idx, n_parts;
|
||||
mm_idxopt_t opt;
|
||||
FILE *fp_out;
|
||||
union {
|
||||
struct mm_bseq_file_s *seq;
|
||||
FILE *idx;
|
||||
} fp;
|
||||
} mm_idx_reader_t;
|
||||
|
||||
extern int mm_verbose, mm_dbg_flag;
|
||||
extern double mm_realtime0;
|
||||
|
||||
struct mm_tbuf_s;
|
||||
// memory buffer for thread-local storage during mapping
|
||||
typedef struct mm_tbuf_s mm_tbuf_t;
|
||||
|
||||
#define mm_seq4_set(s, i, c) ((s)[(i)>>3] |= (uint32_t)(c) << (((i)&7)<<2))
|
||||
#define mm_seq4_get(s, i) ((s)[(i)>>3] >> (((i)&7)<<2) & 0xf)
|
||||
// global variables
|
||||
extern int mm_verbose, mm_dbg_flag; // verbose level: 0 for no info, 1 for error, 2 for warning, 3 for message (default); debugging flag
|
||||
extern double mm_realtime0; // wall-clock timer
|
||||
|
||||
void mm_idxopt_init(mm_idxopt_t *opt);
|
||||
void mm_mapopt_init(mm_mapopt_t *opt);
|
||||
int mm_preset(const char *preset, mm_idxopt_t *io, mm_mapopt_t *mo);
|
||||
int mm_set_opt(const char *preset, mm_idxopt_t *io, mm_mapopt_t *mo);
|
||||
void mm_mapopt_update(mm_mapopt_t *opt, const mm_idx_t *mi);
|
||||
|
||||
mm_idx_reader_t *mm_idx_reader_open(const char *fn, const mm_idxopt_t *opt);
|
||||
int mm_idx_reader_is_idx(const mm_idx_reader_t *r);
|
||||
mm_idx_reader_t *mm_idx_reader_open(const char *fn, const mm_idxopt_t *opt, const char *fn_out);
|
||||
mm_idx_t *mm_idx_reader_read(mm_idx_reader_t *r, int n_threads);
|
||||
void mm_idx_reader_close(mm_idx_reader_t *r);
|
||||
void mm_idx_stat(const mm_idx_t *idx);
|
||||
int mm_idx_getseq(const mm_idx_t *mi, uint32_t rid, uint32_t st, uint32_t en, uint8_t *seq);
|
||||
void mm_idx_destroy(mm_idx_t *mi);
|
||||
|
||||
// minimizer indexing
|
||||
void mm_idx_stat(const mm_idx_t *idx);
|
||||
const uint64_t *mm_idx_get(const mm_idx_t *mi, uint64_t minier, int *n);
|
||||
int mm_idx_getseq(const mm_idx_t *mi, uint32_t rid, uint32_t st, uint32_t en, uint8_t *seq);
|
||||
|
||||
// minimizer index I/O
|
||||
void mm_idx_dump(FILE *fp, const mm_idx_t *mi);
|
||||
mm_idx_t *mm_idx_load(FILE *fp);
|
||||
|
||||
// mapping
|
||||
mm_tbuf_t *mm_tbuf_init(void);
|
||||
void mm_tbuf_destroy(mm_tbuf_t *b);
|
||||
mm_reg1_t *mm_map(const mm_idx_t *mi, int l_seq, const char *seq, int *n_regs, mm_tbuf_t *b, const mm_mapopt_t *opt, const char *name);
|
||||
|
||||
int mm_map_file(const mm_idx_t *idx, const char *fn, const mm_mapopt_t *opt, int n_threads);
|
||||
|
||||
// obsolete APIs (for backward compatibility)
|
||||
// deprecated APIs for backward compatibility
|
||||
void mm_mapopt_init(mm_mapopt_t *opt);
|
||||
mm_idx_t *mm_idx_build(const char *fn, int w, int k, int is_hpc, int n_threads);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user