/** * Sets the prior. Must not change the label argument if one is set already. */ void prior(const F& prior) { check_prior(prior); if (prior_.empty() || prior_.arguments() == prior.arguments()) { prior_ = prior; } else { throw std::invalid_argument("attempt to change the label argument"); } }
//! Creates a naive Bayes model with the given label and uniform prior. explicit naive_bayes(argument_type label) : prior_({label}, result_type(1)) { check_prior(prior_); }
//! Creates a naive Bayes model with given prior distribution and CPDs. explicit naive_bayes(const LabelF& prior) : prior_(prior) { check_prior(prior_); }
static void calculate_result_set(const strelka_options& opt, const double* normal_lnprior, const double lnmatch, const double lnmismatch, const double* normal_lhood, const double* tumor_lhood, result_set& rs) { #ifdef SOMATIC_DEBUG std::vector<double> check_prior(DDIINDEL::SIZE); for (unsigned ngt(0); ngt<STAR_DIINDEL::SIZE; ++ngt) { const double base_prior(normal_lnprior[ngt]); for (unsigned tgt(0); tgt<STAR_DIINDEL::SIZE; ++tgt) { const unsigned dgt(DDIINDEL::get_state(ngt,tgt)); check_prior[dgt] = base_prior+ ((tgt==ngt) ? lnmatch : lnmismatch); } } check_ln_distro(check_prior.begin(), check_prior.end(), "somatic indel full prior"); #endif // get unnormalized posterior: std::vector<double> pprob(DDIINDEL::SIZE); for (unsigned ngt(0); ngt<STAR_DIINDEL::SIZE; ++ngt) { const double base_prior(normal_lnprior[ngt]); for (unsigned tgt(0); tgt<STAR_DIINDEL::SIZE; ++tgt) { const unsigned dgt(DDIINDEL::get_state(ngt,tgt)); pprob[dgt] = normal_lhood[ngt]+ tumor_lhood[tgt]+ base_prior+ ((tgt==ngt) ? lnmatch : lnmismatch); } } normalize_ln_distro(pprob.begin(),pprob.end(),rs.max_gt); #ifdef DEBUG_INDEL_CALL log_os << "INDEL_CALL pprob(noindel),pprob(hom),pprob(het): " << pprob[STAR_DIINDEL::NOINDEL] << " " << pprob[STAR_DIINDEL::HOM] << " " << pprob[STAR_DIINDEL::HET] << "\n"; #endif double nonsomatic_sum(0); for (unsigned gt(0); gt<STAR_DIINDEL::SIZE; ++gt) { nonsomatic_sum += pprob[DDIINDEL::get_state(gt,gt)]; } rs.sindel_qphred=error_prob_to_qphred(nonsomatic_sum); double not_somfrom_sum[STAR_DIINDEL::SIZE]; for (unsigned sgt(0); sgt<STAR_DIINDEL::SIZE; ++sgt) { not_somfrom_sum[sgt]=nonsomatic_sum; for (unsigned ngt(0); ngt<STAR_DIINDEL::SIZE; ++ngt) { if (sgt==ngt) continue; for (unsigned tgt(0); tgt<STAR_DIINDEL::SIZE; ++tgt) { if (tgt==ngt) continue; not_somfrom_sum[sgt] += pprob[DDIINDEL::get_state(ngt,tgt)]; } } } rs.sindel_from_ref_qphred=error_prob_to_qphred(not_somfrom_sum[STAR_DIINDEL::NOINDEL]); rs.sindel_from_het_qphred=error_prob_to_qphred(not_somfrom_sum[STAR_DIINDEL::HET]); rs.sindel_from_hom_qphred=error_prob_to_qphred(not_somfrom_sum[STAR_DIINDEL::HOM]); double not_somfromanyhom_sum(nonsomatic_sum); for (unsigned ngt(0); ngt<STAR_DIINDEL::SIZE; ++ngt) { if (STAR_DIINDEL::HET != ngt) continue; for (unsigned tgt(0); tgt<STAR_DIINDEL::SIZE; ++tgt) { if (tgt==ngt) continue; not_somfromanyhom_sum += pprob[DDIINDEL::get_state(ngt,tgt)]; } } rs.sindel_from_anyhom_qphred=error_prob_to_qphred(not_somfromanyhom_sum); rs.max_gt_qphred=error_prob_to_qphred(prob_comp(pprob.begin(),pprob.end(),rs.max_gt)); }