/* * rna_interaction_search.h * * Created on: 2016/8/31 * Author: Tsukasa Fukunaga */ #ifndef RNA_INTERACTION_SEARCH_H #define RNA_INTERACTION_SEARCH_H #include "rna_interaction_search_parameters.h" #include "hit.h" #include #include class CheckFlag{ public: bool operator()(const Hit &a) const { return(a.GetFlag()); } }; class RnaInteractionSearch { public: RnaInteractionSearch(int hash_size) { int nucleotide_size = 4; _start_hash.reserve(hash_size); _end_hash.reserve(hash_size); for(int i = 0; i < hash_size; i++){ vector temp_vector; temp_vector.resize((int)pow(nucleotide_size,i+1), 0); _start_hash.push_back(temp_vector); vector temp2_vector; temp_vector.resize((int)pow(nucleotide_size,i+1), 0); _end_hash.push_back(temp_vector); } } void Run(const RnaInteractionSearchParameters parameters); private: void ReadFastaFile(const RnaInteractionSearchParameters parameters, string &query_sequence, string &query_name); void CalculateAccessibility(const RnaInteractionSearchParameters parameters, string &query_sequence, vector &query_accessibility, vector &query_conditional_accessibility); void ConstructSuffixArray(const RnaInteractionSearchParameters parameters, string &query_sequence, vector &query_encoded_sequence, vector &query_suffix_array); void SearchSeed(const RnaInteractionSearchParameters parameters, vector &hit_result, vector &query_encoded_sequence, vector &query_suffix_array, vector &query_accessibility, vector &query_conditional_accessibility); void ExtendWithoutGap(const RnaInteractionSearchParameters parameters, vector &hit_result, vector &query_encoded_sequence, vector &query_accessibility, vector &query_conditional_accessibility); void ExtendWithGap(const RnaInteractionSearchParameters parameters, vector &hit_result, vector &query_encoded_sequence, vector &query_accessibility, vector &query_conditional_accessibility); void GetBasePair(vector &hit_result, vector &query_encoded_sequence); void Output(const RnaInteractionSearchParameters parameters, vector &hit_result, string q_name); void LoadDatabase(string db_file_name, int hash_size); bool SameHitCheckWithGap(Hit a, Hit b); vector > _db_accessibility; vector > _db_conditional_accessibility; vector _db_seq_name; vector _db_suffix_array; vector _db_seq; vector > _start_hash; vector > _end_hash; vector _db_seq_start_position; vector _db_seq_length; int _number_of_db_seq; }; #endif