annotate IMSAME/src/alignmentFunctions.h @ 0:762009a91895 draft

Uploaded
author bitlab
date Sat, 15 Dec 2018 18:04:10 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
762009a91895 Uploaded
bitlab
parents:
diff changeset
1 #define QF_LAMBDA 0.275
762009a91895 Uploaded
bitlab
parents:
diff changeset
2 #define QF_KARLIN 0.333
762009a91895 Uploaded
bitlab
parents:
diff changeset
3
762009a91895 Uploaded
bitlab
parents:
diff changeset
4
762009a91895 Uploaded
bitlab
parents:
diff changeset
5
762009a91895 Uploaded
bitlab
parents:
diff changeset
6 typedef struct {
762009a91895 Uploaded
bitlab
parents:
diff changeset
7 uint64_t id; //The thread id
762009a91895 Uploaded
bitlab
parents:
diff changeset
8 SeqInfo * database; //Database sequence and lengths
762009a91895 Uploaded
bitlab
parents:
diff changeset
9 SeqInfo * query; //Query sequence and lengths
762009a91895 Uploaded
bitlab
parents:
diff changeset
10 uint64_t from; //Starting READ to compute alignments from
762009a91895 Uploaded
bitlab
parents:
diff changeset
11 uint64_t to; //End READ to compute alignments from
762009a91895 Uploaded
bitlab
parents:
diff changeset
12 AVLContainer * container_a; //Container to hold the multidimensional array
762009a91895 Uploaded
bitlab
parents:
diff changeset
13 AVLContainer * container_b; //Container to hold the multidimensional array
762009a91895 Uploaded
bitlab
parents:
diff changeset
14 AVLContainer * container_c; //Container to hold the multidimensional array
762009a91895 Uploaded
bitlab
parents:
diff changeset
15 AVLContainer * container_d; //Container to hold the multidimensional array
762009a91895 Uploaded
bitlab
parents:
diff changeset
16 uint64_t * contained_reads;
762009a91895 Uploaded
bitlab
parents:
diff changeset
17 uint64_t * base_coordinates;
762009a91895 Uploaded
bitlab
parents:
diff changeset
18 uint64_t accepted_query_reads; //Number of reads that have a fragment with evalue less than specified
762009a91895 Uploaded
bitlab
parents:
diff changeset
19 long double min_e_value; //Minimum evalue to accept read
762009a91895 Uploaded
bitlab
parents:
diff changeset
20 long double min_coverage; //Minimum coverage percentage to accept read
762009a91895 Uploaded
bitlab
parents:
diff changeset
21 long double min_identity; //Minimum identity percentage to accept read
762009a91895 Uploaded
bitlab
parents:
diff changeset
22 long double window; //Percentage of window that will be explored (+-)
762009a91895 Uploaded
bitlab
parents:
diff changeset
23 FILE * out; //File to write alignments out
762009a91895 Uploaded
bitlab
parents:
diff changeset
24 int igap;
762009a91895 Uploaded
bitlab
parents:
diff changeset
25 int egap;
762009a91895 Uploaded
bitlab
parents:
diff changeset
26 uint64_t * hits; // To work in hits mode only
762009a91895 Uploaded
bitlab
parents:
diff changeset
27 struct positioned_cell * mc;
762009a91895 Uploaded
bitlab
parents:
diff changeset
28 struct cell ** table;
762009a91895 Uploaded
bitlab
parents:
diff changeset
29 char * reconstruct_X;
762009a91895 Uploaded
bitlab
parents:
diff changeset
30 char * reconstruct_Y;
762009a91895 Uploaded
bitlab
parents:
diff changeset
31 char * writing_buffer_alignment;
762009a91895 Uploaded
bitlab
parents:
diff changeset
32 unsigned char * my_x;
762009a91895 Uploaded
bitlab
parents:
diff changeset
33 unsigned char * my_y;
762009a91895 Uploaded
bitlab
parents:
diff changeset
34 Head * queue_head; //To tell where the queue starts after modifications
762009a91895 Uploaded
bitlab
parents:
diff changeset
35 pthread_mutex_t * lock;
762009a91895 Uploaded
bitlab
parents:
diff changeset
36 unsigned char full_comp; // Tells whether read reporting should stop at first match or keep reporting
762009a91895 Uploaded
bitlab
parents:
diff changeset
37 unsigned char * markers; // To tell which sequences were already used
762009a91895 Uploaded
bitlab
parents:
diff changeset
38 } HashTableArgs;
762009a91895 Uploaded
bitlab
parents:
diff changeset
39
762009a91895 Uploaded
bitlab
parents:
diff changeset
40
762009a91895 Uploaded
bitlab
parents:
diff changeset
41
762009a91895 Uploaded
bitlab
parents:
diff changeset
42 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
43 Nucleotides matching function
762009a91895 Uploaded
bitlab
parents:
diff changeset
44 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
45 int64_t compare_letters(unsigned char a, unsigned char b);
762009a91895 Uploaded
bitlab
parents:
diff changeset
46
762009a91895 Uploaded
bitlab
parents:
diff changeset
47 /**
762009a91895 Uploaded
bitlab
parents:
diff changeset
48 * Initialize the memory pool to later retrieve individual memory addresses for llpos
762009a91895 Uploaded
bitlab
parents:
diff changeset
49 *
762009a91895 Uploaded
bitlab
parents:
diff changeset
50 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
51 void init_mem_pool_llpos(Mempool_l * mp);
762009a91895 Uploaded
bitlab
parents:
diff changeset
52
762009a91895 Uploaded
bitlab
parents:
diff changeset
53 /**
762009a91895 Uploaded
bitlab
parents:
diff changeset
54 * Get a new memory address from the pool mp for a type llpos
762009a91895 Uploaded
bitlab
parents:
diff changeset
55 *
762009a91895 Uploaded
bitlab
parents:
diff changeset
56 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
57 llpos * getNewLocationllpos(Mempool_l * mp, uint64_t * n_pools_used);
762009a91895 Uploaded
bitlab
parents:
diff changeset
58
762009a91895 Uploaded
bitlab
parents:
diff changeset
59 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
60 Load input database using 4 threads
762009a91895 Uploaded
bitlab
parents:
diff changeset
61 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
62 void * load_input(void * a);
762009a91895 Uploaded
bitlab
parents:
diff changeset
63 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
64 Compute alignments by thread given a hash table argument
762009a91895 Uploaded
bitlab
parents:
diff changeset
65 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
66 void * computeAlignmentsByThread(void * a);
762009a91895 Uploaded
bitlab
parents:
diff changeset
67
762009a91895 Uploaded
bitlab
parents:
diff changeset
68
762009a91895 Uploaded
bitlab
parents:
diff changeset
69 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
70 Performs NW and backtracking to recover alignment
762009a91895 Uploaded
bitlab
parents:
diff changeset
71 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
72 void build_alignment(char * reconstruct_X, char * reconstruct_Y, uint64_t curr_db_seq, uint64_t curr_read, HashTableArgs * hta, unsigned char * my_x, unsigned char * my_y, struct cell ** table, struct positioned_cell * mc, char * writing_buffer_alignment, BasicAlignment * ba, uint64_t xlen, uint64_t ylen, int64_t * cell_path_y, long double * window);
762009a91895 Uploaded
bitlab
parents:
diff changeset
73
762009a91895 Uploaded
bitlab
parents:
diff changeset
74 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
75 Compute the alignment and evalue of a given hit
762009a91895 Uploaded
bitlab
parents:
diff changeset
76 The positions pos_database and pos_query refer to the last match in the hit
762009a91895 Uploaded
bitlab
parents:
diff changeset
77 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
78 void alignmentFromQuickHits(SeqInfo * database, SeqInfo * query, uint64_t pos_database, uint64_t pos_query, uint64_t curr_read, uint64_t curr_db_seq, Quickfrag * qf, uint64_t offset_db_reads, uint64_t offset_db_coordinates);
762009a91895 Uploaded
bitlab
parents:
diff changeset
79
762009a91895 Uploaded
bitlab
parents:
diff changeset
80 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
81 Computes the cell path for the y points given incremental x
762009a91895 Uploaded
bitlab
parents:
diff changeset
82 Only add +- window size to each to know which path to go through
762009a91895 Uploaded
bitlab
parents:
diff changeset
83 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
84 void calculate_y_cell_path(Point p0, Point p1, Point p2, Point p3, int64_t * cell_path_y);
762009a91895 Uploaded
bitlab
parents:
diff changeset
85 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
86 Calculates NW table with two rows and stores a cellpath of scores, identities, gaps and starting and ending positions
762009a91895 Uploaded
bitlab
parents:
diff changeset
87 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
88 struct best_cell NW(unsigned char * X, uint64_t Xstart, uint64_t Xend, unsigned char * Y, uint64_t Ystart, uint64_t Yend, int64_t iGap, int64_t eGap, struct cell ** table, struct positioned_cell * mc, int show, int64_t * cell_path_y, long double * window, uint64_t * curr_window_size);
762009a91895 Uploaded
bitlab
parents:
diff changeset
89
762009a91895 Uploaded
bitlab
parents:
diff changeset
90 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
91 Computes the alignment given a NW table
762009a91895 Uploaded
bitlab
parents:
diff changeset
92 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
93 void backtrackingNW(unsigned char * X, uint64_t Xstart, uint64_t Xend, unsigned char * Y, uint64_t Ystart, uint64_t Yend, struct cell ** table, char * rec_X, char * rec_Y, struct best_cell * bc, uint64_t * ret_head_x, uint64_t * ret_head_y, BasicAlignment * ba, int64_t * cell_path_y, uint64_t window_size);
762009a91895 Uploaded
bitlab
parents:
diff changeset
94
762009a91895 Uploaded
bitlab
parents:
diff changeset
95 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
96 Get memory for a new AVL tree node
762009a91895 Uploaded
bitlab
parents:
diff changeset
97 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
98 AVLTree * getNewLocationAVLTree(Mempool_AVL * mp, uint64_t * n_pools_used, uint64_t key);
762009a91895 Uploaded
bitlab
parents:
diff changeset
99
762009a91895 Uploaded
bitlab
parents:
diff changeset
100 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
101 Initialize a memory pool for AVL trees
762009a91895 Uploaded
bitlab
parents:
diff changeset
102 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
103 void init_mem_pool_AVL(Mempool_AVL * mp);
762009a91895 Uploaded
bitlab
parents:
diff changeset
104
762009a91895 Uploaded
bitlab
parents:
diff changeset
105 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
106 Right rotate an AVL tree to make it balanced
762009a91895 Uploaded
bitlab
parents:
diff changeset
107 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
108 AVLTree * right_rotate(AVLTree * y);
762009a91895 Uploaded
bitlab
parents:
diff changeset
109
762009a91895 Uploaded
bitlab
parents:
diff changeset
110 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
111 Left rotate an AVL tree to make it balanced
762009a91895 Uploaded
bitlab
parents:
diff changeset
112 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
113 AVLTree * left_rotate(AVLTree * x);
762009a91895 Uploaded
bitlab
parents:
diff changeset
114
762009a91895 Uploaded
bitlab
parents:
diff changeset
115
762009a91895 Uploaded
bitlab
parents:
diff changeset
116 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
117 Find a key in an AVL tree
762009a91895 Uploaded
bitlab
parents:
diff changeset
118 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
119 AVLTree * find_AVLTree(AVLTree * node, uint64_t key);
762009a91895 Uploaded
bitlab
parents:
diff changeset
120
762009a91895 Uploaded
bitlab
parents:
diff changeset
121 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
122 Find a key in an AVL tree but return its hit list
762009a91895 Uploaded
bitlab
parents:
diff changeset
123 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
124 llpos * find_AVLTree_llpos(AVLTree * node, uint64_t key);
762009a91895 Uploaded
bitlab
parents:
diff changeset
125
762009a91895 Uploaded
bitlab
parents:
diff changeset
126 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
127 Insert node in AVL tree
762009a91895 Uploaded
bitlab
parents:
diff changeset
128 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
129 AVLTree * insert_AVLTree(AVLTree * node, uint64_t key, Mempool_AVL * mp, uint64_t * n_pools_used, uint64_t pos, Mempool_l * mp_l, uint64_t * n_pools_used_l, uint64_t s_id);
762009a91895 Uploaded
bitlab
parents:
diff changeset
130
762009a91895 Uploaded
bitlab
parents:
diff changeset
131 /*
762009a91895 Uploaded
bitlab
parents:
diff changeset
132 Traverse AVL tree in pre order
762009a91895 Uploaded
bitlab
parents:
diff changeset
133 */
762009a91895 Uploaded
bitlab
parents:
diff changeset
134 void pre_order(AVLTree * root);
762009a91895 Uploaded
bitlab
parents:
diff changeset
135
762009a91895 Uploaded
bitlab
parents:
diff changeset
136