//build_kmer_tree specification #include #include #include #include using namespace std; #include "mx_node.h" //In this version, gRNA is the barcode and the stgRNAs are the ones that we are interested in //extracting void build_kmer_tree(mx_node* master_node, const string& kmers_filename, const int& bc_length) { ifstream gRNA_file; string ipt_line; string gRNA; int gRNA_len; char curr_char; string curr_kmer; string stgRNA = ""; int curr_depth; bool end_of_gRNA; int curr_counter = 0; gRNA_file.open(kmers_filename); size_t gRNA_end; mx_node* iter_node; mx_node* parent_node_p; while (getline(gRNA_file, ipt_line)) { gRNA_end = ipt_line.find(" "); gRNA = ipt_line.substr(0, bc_length); gRNA_len = gRNA.length(); while(gRNA.length() == bc_length) { iter_node = master_node; end_of_gRNA = 0; for (int i = 1; i<=gRNA_len; i++) { curr_char = gRNA.back(); gRNA.pop_back(); curr_kmer = iter_node->get_kmer(); curr_depth = iter_node->get_depth(); if (i==gRNA_len) end_of_gRNA = 1; if (curr_char == 'M') { if(iter_node->is_pointer_M()) { parent_node_p = iter_node; iter_node = iter_node->get_pointer_M(end_of_gRNA, stgRNA); } else { parent_node_p = iter_node; iter_node = iter_node->set_pointer_M(curr_kmer, curr_depth, end_of_gRNA, stgRNA); curr_counter++; } } else if (curr_char == 'X') { if(iter_node->is_pointer_X()) { parent_node_p = iter_node; iter_node = iter_node->get_pointer_X(end_of_gRNA, stgRNA); } else { parent_node_p = iter_node; iter_node = iter_node->set_pointer_X(curr_kmer, curr_depth, end_of_gRNA, stgRNA); curr_counter++; } } else if (curr_char == 'I') { if(iter_node->is_pointer_I()) { parent_node_p = iter_node; iter_node = iter_node->get_pointer_I(end_of_gRNA, stgRNA); } else { parent_node_p = iter_node; iter_node = iter_node->set_pointer_I(curr_kmer, curr_depth, end_of_gRNA, stgRNA); curr_counter++; } } else if (curr_char == 'D') { if(iter_node->is_pointer_D()) { parent_node_p = iter_node; iter_node = iter_node->get_pointer_D(end_of_gRNA, stgRNA); } else { parent_node_p = iter_node; iter_node = iter_node->set_pointer_D(curr_kmer, curr_depth, end_of_gRNA, stgRNA); curr_counter++; } } else if (curr_char) { if(iter_node->is_pointer_M()) { parent_node_p = iter_node; iter_node = iter_node->get_pointer_M(end_of_gRNA, stgRNA); } else { parent_node_p = iter_node; iter_node = iter_node->set_pointer_M(curr_kmer, curr_depth, end_of_gRNA, stgRNA); curr_counter++; } } } } } }