106 lines
2.7 KiB
C
106 lines
2.7 KiB
C
#ifndef BWA_ERT_H
|
|
#define BWA_ERT_H
|
|
|
|
#include <stdint.h>
|
|
#include "kvec.h"
|
|
#include "bwa.h"
|
|
|
|
#define ERT_MAX_READ_LEN 301
|
|
#define kmerSize 15
|
|
#define numKmers 1073741824
|
|
#define xmerSize 4
|
|
#define numXmers 256
|
|
#define TILE_SIZE 64
|
|
// #define PRINT_SMEM
|
|
#define PREFIX_LENGTH 3
|
|
#define LEP_MASK 0x3FFF
|
|
#define KMER_DATA_BITWIDTH 24
|
|
#define KMER_DATA_MASK 0xFFFF
|
|
#define METADATA_BITWIDTH 2
|
|
#define METADATA_MASK 0x3
|
|
#define INVALID 0
|
|
#define SINGLE_HIT_LEAF 1
|
|
#define INFREQUENT 2
|
|
#define FREQUENT 3
|
|
#define HIT_THRESHOLD 256
|
|
#define DRAM_PAGE_SIZE 24576
|
|
#define LEAF_TBL_BASE_PTR_WIDTH 3
|
|
#define LEAF_TBL_HIT_COUNT_WIDTH 3
|
|
#define MAX_HITS_PER_READ 2000000
|
|
|
|
typedef enum
|
|
{
|
|
EMPTY,
|
|
LEAF,
|
|
UNIFORM,
|
|
DIVERGE
|
|
} note_type_t;
|
|
|
|
typedef struct _node_t
|
|
{
|
|
note_type_t type;
|
|
int pos;
|
|
int num_bp;
|
|
int l_seq;
|
|
int numChildren;
|
|
uint64_t numHits;
|
|
uint64_t start_addr;
|
|
uint64_t *hits;
|
|
uint8_t seq[ERT_MAX_READ_LEN + 1];
|
|
struct _node_t *parent_node;
|
|
struct _node_t *child_nodes[4];
|
|
} node_t;
|
|
|
|
typedef kvec_t(node_t) node_v;
|
|
|
|
typedef node_t *node_ptr_t;
|
|
|
|
typedef struct
|
|
{
|
|
int tid;
|
|
int step;
|
|
int readLength;
|
|
uint64_t *kmer_table;
|
|
uint64_t startKmer;
|
|
uint64_t endKmer;
|
|
bwaidx_t *bid;
|
|
uint64_t *numHits;
|
|
char *filePrefix;
|
|
uint64_t *byte_offsets;
|
|
uint64_t end_offset;
|
|
} thread_data_t;
|
|
|
|
// FIXME : Add to options later
|
|
extern const uint8_t char_count_size_in_bits;
|
|
extern const uint8_t hits_count_size_in_bits;
|
|
extern const uint8_t ref_ptr_size_in_bits;
|
|
extern const uint8_t leaf_offset_ptr_size_in_bits;
|
|
extern const uint8_t other_offset_ptr_size_in_bits;
|
|
|
|
typedef enum
|
|
{
|
|
CODE,
|
|
EMPTY_NODE,
|
|
LEAF_COUNT,
|
|
LEAF_HITS,
|
|
UNIFORM_COUNT,
|
|
UNIFORM_BP,
|
|
LEAF_PTR,
|
|
OTHER_PTR
|
|
} byte_type_t;
|
|
|
|
void ert_build_kmertree(const bwaidx_t *bid, bwtintv_t ik, bwtintv_t ok[4], int curDepth, node_t *parent_node, int step, int max_depth);
|
|
|
|
void handleDivergence(const bwaidx_t *bid, bwtintv_t ok[4], int depth, node_t *parent_node, int step, int max_depth);
|
|
|
|
void handleLeaf(const bwaidx_t *bid, bwtintv_t ik, node_t *n, int step);
|
|
|
|
void ert_build_table(const bwaidx_t *bid, bwtintv_t ik, bwtintv_t ok[4], uint8_t *mlt_data, uint8_t *mh_data, uint64_t *size, uint64_t *mh_size, uint8_t *aq, uint64_t *numHits, uint64_t *max_next_ptr, uint64_t next_ptr_width, int step, int max_depth);
|
|
|
|
void ert_traverse_kmertree(node_t *n, uint8_t *mlt_data, uint8_t *mh_data, uint64_t *byte_idx, uint64_t *mh_byte_idx, int depth, uint64_t *numHits, uint64_t *max_ptr, uint64_t next_ptr_width, int step);
|
|
|
|
void ert_destroy_kmertree(node_t *n);
|
|
|
|
void buildERTKmerTrees(char *kmer_tbl_file_name, bwaidx_t *bid, char *prefix, int num_threads, int readLength);
|
|
|
|
#endif |