diff --git a/modules/seq/alg/pymod/wrap_seq_alg.cc b/modules/seq/alg/pymod/wrap_seq_alg.cc index 8007201a917311bf6bae57bc0d2332336044a1c3..cf6018ae1f99a838a1992adc81cae263774355c2 100644 --- a/modules/seq/alg/pymod/wrap_seq_alg.cc +++ b/modules/seq/alg/pymod/wrap_seq_alg.cc @@ -260,6 +260,7 @@ void export_hmm_algorithms() { def("AddAAPseudoCounts", &AAPseudoCountsSimple, (arg("profile"))); def("AddAAPseudoCounts", &AAPseudoCountsAngermueller, (arg("profile"), arg("context_profile_db"))); def("AddTransitionPseudoCounts", &AddTransitionPseudoCounts, (arg("profile"))); + def("AddNullPseudoCounts", &AddNullPseudoCounts, (arg("profile"))); def("HMMScore", &HMMScore, (arg("profile_0"), arg("profile_1"), arg("alignment"), arg("s_0_idx"), arg("s_1_idx"))); } diff --git a/modules/seq/alg/src/hmm_pseudo_counts.cc b/modules/seq/alg/src/hmm_pseudo_counts.cc index 63bece4adff6af0da2bd71fd6b0b4c001f261dc4..7372e2a4c53b540ba98780a240306e83682a24b5 100644 --- a/modules/seq/alg/src/hmm_pseudo_counts.cc +++ b/modules/seq/alg/src/hmm_pseudo_counts.cc @@ -462,10 +462,6 @@ void AddTransitionPseudoCounts(ost::seq::ProfileHandle& profile) { void AddAAPseudoCounts(ost::seq::ProfileHandle& profile) { - - //////////////////// - // do frequencies // - //////////////////// Real full_admixture [20]; for(size_t col_idx = 0; col_idx < profile.size(); ++col_idx) { Real* col_freq = profile[col_idx].freqs_begin(); @@ -485,47 +481,12 @@ void AddAAPseudoCounts(ost::seq::ProfileHandle& profile) { col_freq[i] = (1. - tau) * col_freq[i] + tau * full_admixture[i]; } } - - ///////////////////////// - // do null_frequencies // - ///////////////////////// - Real mixing_factor = 100.0 / profile.GetNeff(); - const Real* current_null_freq = profile.GetNullModel().freqs_begin(); - Real null_freq[20]; - for(int i = 0; i < 20; ++i) { - null_freq[i] = current_null_freq[i] * mixing_factor; - } - for(size_t i = 0; i < profile.size(); ++i) { - const Real* freq = profile[i].freqs_begin(); - for(int j = 0; j < 20; ++j) { - null_freq[j] += freq[j]; - } - } - // normalize - Real summed_p = 0.0; - for(int i = 0; i < 20; ++i) { - summed_p += null_freq[i]; - } - Real factor = 1.0/summed_p; - for(int i = 0; i < 20; ++i) { - null_freq[i] *= factor; - } - // create new nullmodel and set it - ost::seq::ProfileColumn new_null_model; - Real* new_null_freq = new_null_model.freqs_begin(); - for(int i = 0; i < 20; ++i) { - new_null_freq[i] = null_freq[i]; - } - profile.SetNullModel(new_null_model); } void AddAAPseudoCounts(ost::seq::ProfileHandle& profile, const ContextProfileDB& db) { - //////////////////// - // do frequencies // - //////////////////// std::vector<Real> cp_scores(db.size(), 0.0); int cp_length = db.profile_length(); if(cp_length % 2 != 1) { @@ -613,11 +574,10 @@ void AddAAPseudoCounts(ost::seq::ProfileHandle& profile, col_freq[i] = tau*context[i] + (1.-tau)*counts[i]/neff; } } +} - ///////////////////////// - // do null_frequencies // - ///////////////////////// +void AddNullPseudoCounts(ost::seq::ProfileHandle& profile) { Real mixing_factor = 100.0 / profile.GetNeff(); const Real* current_null_freq = profile.GetNullModel().freqs_begin(); Real null_freq[20]; diff --git a/modules/seq/alg/src/hmm_pseudo_counts.hh b/modules/seq/alg/src/hmm_pseudo_counts.hh index 6042916dbe9b6de060d968353f39bee05df3d59b..bbc48e89a5299b93df5abda1d82a5e0b20720552 100644 --- a/modules/seq/alg/src/hmm_pseudo_counts.hh +++ b/modules/seq/alg/src/hmm_pseudo_counts.hh @@ -165,6 +165,8 @@ void AddAAPseudoCounts(ost::seq::ProfileHandle& profile); void AddAAPseudoCounts(ost::seq::ProfileHandle& profile, const ContextProfileDB& db); +void AddNullPseudoCounts(ost::seq::ProfileHandle& profile); + }}} // ns #endif