aboutsummaryrefslogtreecommitdiff
path: root/qidx.h
blob: c5c1f2fbe385ad916dbf580f7556b6d54f5b626f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef _QIDX
#define _QIDX

#include <htslib/hts.h>
#include <stdbool.h>

// @abstract Structure representing an unique alignment and virtual file pointer
// @field tid   chromosome ID
// @field pos   0-based leftmost coordinate
// @field vptr  virtual pointer
typedef struct {
	uint32_t tid;
	uint32_t pos;
	uint64_t vptr;
} aln_spec_t;

// @abstract Structure representing all alignments by queryname
// @field qname    queryname (name for the given read)
// @field n_alns   number of alignments
// @field alns     array with alignments structures
typedef struct {
	char * qname;
	uint16_t n_alns;
	aln_spec_t * alns;
} qidx_record_t;

typedef enum {
	QIDX_OK = 0,
	QIDX_ITER_DONE,
	QIDX_NO_MEM,
	QIDX_NO_BAM_HDR,
	QIDX_BAM_READ_FAILURE,
	QIDX_REC_ITER_FAILURE,
	QIDX_NOT_SORTED,
	QIDX_BUCKET_MAX_SIZE_EXCEEDED,
	QIDX_MAP_FAIL,
	QIDX_IO_FAIL,
	QIDX_FAILED_TO_OPEN_BAMFILE,
	QIDX_FAILED_TO_OPEN_INDEX_FILE,
	QIDX_INVALID_VERSION,
	QIDX_INVALID_MAGIC,
} qidx_err_t;

bool qidx_errno(qidx_err_t err);

char const * qidx_strerr(qidx_err_t err);

#define QIDX_MAGIC 0x5d1de6b4
#define QIDX_VERSION 1

struct qidx_fp;
typedef struct qidx_fp qidx_fp_t;

qidx_err_t qidx_open(qidx_fp_t ** fp, int fd);
qidx_err_t qidx_create(qidx_fp_t ** fp, int fd, uint32_t _n_buckets,
		uint32_t max_bucket_size);
qidx_err_t qidx_lookup_alnrec(qidx_fp_t * fp,
		char const * qname, qidx_record_t ** rec);
void qidx_free_alnrec(qidx_record_t * rec);
qidx_err_t qidx_close(qidx_fp_t * fp);

qidx_err_t qidx_create_index3(htsFile * fp, int fd, qidx_fp_t ** q_fp,
		uint32_t n_buckets, uint32_t max_bucket_size);
qidx_err_t qidx_create_index2(htsFile * fp, int fd, qidx_fp_t ** q_fp,
		double soft_limit, double z, uint32_t n_buckets, uint32_t max_bucket_size);
qidx_err_t qidx_create_index1(char const * bamfile, char const * indexfile, uint32_t n_buckets, uint32_t max_bucket_size);
qidx_err_t qidx_create_index(char const * bamfile, char const * indexfile);

// DO NOT USE
qidx_err_t qidx_search_index(char const * indexfile,
		char const * bamfile, char const * qname);

#endif /* ifndef _QIDX */