Mercurial > repos > bitlab > imsame
diff IMSAME/src/alignmentFunctions.h @ 0:762009a91895 draft
Uploaded
author | bitlab |
---|---|
date | Sat, 15 Dec 2018 18:04:10 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IMSAME/src/alignmentFunctions.h Sat Dec 15 18:04:10 2018 -0500 @@ -0,0 +1,136 @@ +#define QF_LAMBDA 0.275 +#define QF_KARLIN 0.333 + + + +typedef struct { + uint64_t id; //The thread id + SeqInfo * database; //Database sequence and lengths + SeqInfo * query; //Query sequence and lengths + uint64_t from; //Starting READ to compute alignments from + uint64_t to; //End READ to compute alignments from + AVLContainer * container_a; //Container to hold the multidimensional array + AVLContainer * container_b; //Container to hold the multidimensional array + AVLContainer * container_c; //Container to hold the multidimensional array + AVLContainer * container_d; //Container to hold the multidimensional array + uint64_t * contained_reads; + uint64_t * base_coordinates; + uint64_t accepted_query_reads; //Number of reads that have a fragment with evalue less than specified + long double min_e_value; //Minimum evalue to accept read + long double min_coverage; //Minimum coverage percentage to accept read + long double min_identity; //Minimum identity percentage to accept read + long double window; //Percentage of window that will be explored (+-) + FILE * out; //File to write alignments out + int igap; + int egap; + uint64_t * hits; // To work in hits mode only + struct positioned_cell * mc; + struct cell ** table; + char * reconstruct_X; + char * reconstruct_Y; + char * writing_buffer_alignment; + unsigned char * my_x; + unsigned char * my_y; + Head * queue_head; //To tell where the queue starts after modifications + pthread_mutex_t * lock; + unsigned char full_comp; // Tells whether read reporting should stop at first match or keep reporting + unsigned char * markers; // To tell which sequences were already used +} HashTableArgs; + + + +/* + Nucleotides matching function +*/ +int64_t compare_letters(unsigned char a, unsigned char b); + +/** + * Initialize the memory pool to later retrieve individual memory addresses for llpos + * + */ +void init_mem_pool_llpos(Mempool_l * mp); + +/** + * Get a new memory address from the pool mp for a type llpos + * + */ +llpos * getNewLocationllpos(Mempool_l * mp, uint64_t * n_pools_used); + +/* + Load input database using 4 threads +*/ +void * load_input(void * a); +/* + Compute alignments by thread given a hash table argument +*/ +void * computeAlignmentsByThread(void * a); + + +/* + Performs NW and backtracking to recover alignment +*/ +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); + +/* + Compute the alignment and evalue of a given hit + The positions pos_database and pos_query refer to the last match in the hit +*/ +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); + +/* + Computes the cell path for the y points given incremental x + Only add +- window size to each to know which path to go through +*/ +void calculate_y_cell_path(Point p0, Point p1, Point p2, Point p3, int64_t * cell_path_y); +/* + Calculates NW table with two rows and stores a cellpath of scores, identities, gaps and starting and ending positions +*/ +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); + +/* + Computes the alignment given a NW table +*/ +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); + +/* + Get memory for a new AVL tree node +*/ +AVLTree * getNewLocationAVLTree(Mempool_AVL * mp, uint64_t * n_pools_used, uint64_t key); + +/* + Initialize a memory pool for AVL trees +*/ +void init_mem_pool_AVL(Mempool_AVL * mp); + +/* + Right rotate an AVL tree to make it balanced +*/ +AVLTree * right_rotate(AVLTree * y); + +/* + Left rotate an AVL tree to make it balanced +*/ +AVLTree * left_rotate(AVLTree * x); + + +/* + Find a key in an AVL tree +*/ +AVLTree * find_AVLTree(AVLTree * node, uint64_t key); + +/* + Find a key in an AVL tree but return its hit list +*/ +llpos * find_AVLTree_llpos(AVLTree * node, uint64_t key); + +/* + Insert node in AVL tree +*/ +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); + +/* + Traverse AVL tree in pre order +*/ +void pre_order(AVLTree * root); + +