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