163 std::deque<std::vector<std::vector<float>>> forward_probs_;
166 std::deque<std::vector<std::vector<float>>> forward_norecom_probs_;
169 std::vector<std::vector<float>> junction_prob_proportions_;
172 std::vector<bool> precision_jumps_;
175 float prob_threshold_ = 0.01f;
178 float s1_prob_threshold_ = -1.f;
181 float diff_threshold_ = 0.01f;
184 float background_error_ = 1e-5f;
190 static constexpr float jump_fix = 1e15f;
193 static constexpr float jump_threshold = 1e-10f;
196 const std::int16_t bin_scalar_ = 1000;
199 std::vector<std::uint32_t> best_s1_haps_;
202 std::vector<std::uint32_t> best_s2_haps_;
205 std::vector<std::uint32_t> best_s3_haps_;
208 std::vector<float> best_s1_probs_;
211 std::vector<float> best_s2_probs_;
214 std::vector<float> s2_probs_;
217 std::vector<std::size_t> s2_cardinalities_;
220 std::vector<float> best_s3_probs_;
238 hidden_markov_model(
float s3_prob_threshold,
float s1_prob_threshold,
float diff_threshold,
float background_error,
float decay);
274 const std::vector<target_variant>& tar_variant,
275 std::size_t hap_idx);
315 const std::vector<target_variant>& tar_variant,
318 const std::vector<std::vector<std::vector<std::size_t>>>& reverse_maps,
348 void condition(std::vector<float>& probs, std::vector<float>& probs_norecom,
const std::vector<std::int8_t>& template_haps, std::int8_t observed,
float err,
float freq);
380 bool transpose(
const std::vector<float>& from, std::vector<float>& to,
const std::vector<float>& from_norecom, std::vector<float>& to_norecom,
const std::vector<std::size_t>& uniq_cardinalities,
double recom, std::size_t n_templates);
423 void impute_typed_site(
double& prob_sum, std::size_t& prev_best_hap,
424 const std::vector<float>& left_probs,
425 const std::vector<float>& right_probs,
426 const std::vector<float>& left_probs_norecom,
427 const std::vector<float>& right_probs_norecom,
428 const std::vector<float>& left_junction_proportions,
429 const std::vector<float>& right_junction_proportions,
430 const std::vector<float>& constants,
431 const std::vector<std::vector<std::size_t>>& reverse_map,
432 const std::vector<std::int8_t>& template_haps,
433 std::int8_t observed,
float err,
float af,
434 std::vector<std::uint32_t>& best_uniq_haps, std::vector<float>& best_uniq_probs,
float& dose,
float& loo_dose);
482 void impute(
double& prob_sum, std::size_t& prev_best_expanded_hap,
483 const std::vector<float>& left_probs,
484 const std::vector<float>& right_probs,
485 const std::vector<float>& left_probs_norecom,
486 const std::vector<float>& right_probs_norecom,
487 const std::vector<float>& left_junction_proportions,
488 const std::vector<float>& right_junction_proportions,
489 const std::vector<float>& constants,
490 const std::vector<std::int64_t>& uniq_map,
491 const std::vector<std::vector<std::size_t>>& reverse_map,
492 const std::vector<std::int8_t>& template_haps,
493 const std::vector<target_variant>& tar_variants,
494 std::size_t row, std::size_t column, std::size_t out_column,
497 std::size_t& prev_block_idx);
499 void initialize_likelihoods(std::vector<float>& probs, std::vector<float>& probs_norecom, std::vector<float>& proportions,
const unique_haplotype_block& ref_block);
502 const std::vector<float>& left_probs,
const std::vector<float>& right_probs,
503 const std::vector<float>& left_probs_norecom,
const std::vector<float>& right_probs_norecom,
504 const std::vector<float>& left_junction_proportions,
const std::vector<float>& right_junction_proportions,
505 const std::vector<std::vector<std::size_t>>& s3_reverse_map,
double prob_sum);
506 void s1_to_s2_probs(std::vector<std::size_t>& cardinalities,
const std::vector<std::int64_t>& uniq_map, std::size_t s2_size);