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); 
	}
Ejemplo n.º 2
0
bool MatchStats<OpentableRestaurant>::IsMatched() const
{
  return GetMatchingScore() > kOptimalThreshold;
}
Ejemplo n.º 3
0
bool MatchStats<BookingHotel>::IsMatched() const
{
  return GetMatchingScore() > kOptimalThreshold;
}