inline std::tuple<bool, bool, int> FindBestMatch ( std::string& seq, std::vector< float >& qprobs ) { bool match_flag = true; bool is_con; std::vector< int > best_vec; std::vector< float > best_qprobs; int best_length=0, best_shift=0, best_score=quality_score_trait_.mismatch_score_*seq.size();//INT_MIN; for ( auto shift = 0; shift < seq.size()-quality_score_trait_.min_l_; ++shift ) { if ( quality_score_trait_.min_l_ >= quality_score_trait_.adapter_seq_.size() ) { std::cerr << "Minimum match length (option -n) greater than or equal to length of adapter.\n"; std::cerr << "Minimum match length : length of adapter "<<quality_score_trait_.min_l_<<" : "<<quality_score_trait_.min_l_<<'\n'; exit(1); } int current_length = std::min ( quality_score_trait_.adapter_seq_.size(), seq.size()-shift ); std::string shift_seq (seq.begin()+shift, seq.end()); std::vector <int> curr_vec (0); int curr_score = GetMatchingScore ( shift_seq, quality_score_trait_.adapter_seq_, current_length, curr_vec ); if ( curr_score > best_score ) { best_score = curr_score, best_length = current_length, best_shift = shift, best_vec = curr_vec; best_qprobs.clear(); std::move (qprobs.begin()+shift, qprobs.end(), std::back_inserter(best_qprobs)); is_con = GetPosterior ( best_vec, best_qprobs, best_length ); if ( is_con ) break; else ; } else ; } if (!is_con) match_flag = false; return std::make_tuple (match_flag, is_con, best_shift); }
bool MatchStats<OpentableRestaurant>::IsMatched() const { return GetMatchingScore() > kOptimalThreshold; }
bool MatchStats<BookingHotel>::IsMatched() const { return GetMatchingScore() > kOptimalThreshold; }