26 #include <utility/exit.hh>
37 #include <utility/vector1.hh>
49 std::map< char, Real > log_p_aa_;
50 log_p_aa_[
'A'] = -2.50775275017596;
51 log_p_aa_[
'C'] = -4.25443370709812;
52 log_p_aa_[
'D'] = -2.91635539230326;
53 log_p_aa_[
'E'] = -2.69728310210688;
54 log_p_aa_[
'F'] = -3.24970340180708;
55 log_p_aa_[
'G'] = -2.6536761536201;
56 log_p_aa_[
'H'] = -3.77884402329716;
57 log_p_aa_[
'I'] = -2.82635555265843;
58 log_p_aa_[
'K'] = -2.83305056323539;
59 log_p_aa_[
'L'] = -2.33558638262581;
60 log_p_aa_[
'M'] = -3.72639555635987;
61 log_p_aa_[
'N'] = -3.20234385542140;
62 log_p_aa_[
'P'] = -3.0416188351623;
63 log_p_aa_[
'Q'] = -3.22656571396179;
64 log_p_aa_[
'R'] = -2.89952136047537;
65 log_p_aa_[
'S'] = -2.70771691574528;
66 log_p_aa_[
'T'] = -2.9259691035378;
67 log_p_aa_[
'V'] = -2.68564236933079;
68 log_p_aa_[
'W'] = -4.51369283589433;
69 log_p_aa_[
'Y'] = -3.53006197206897;
75 for ( map< char, Real >::const_iterator it = log_p_aa_.begin(),
76 end = log_p_aa_.end();
96 runtime_assert( pos1 <= prof1->length() );
97 runtime_assert( pos2 <= prof2->length() );
99 runtime_assert( prof1->prof_row( pos1 ).size() == prof2->prof_row(pos2).size() );
102 Real divergence_score( 0.0 );
103 Real similarity_score( 0.0 );
104 Real const base( 2.0 );
106 Size n_aa( prof1->prof_row(pos1).size() );
108 for (
Size i = 1; i <= n_aa; ++i ) {
110 Real div_avg( ( prof1->prof_row(pos1)[i] + prof2->prof_row(pos2)[i] ) / 2 );
111 divergence_score += 0.5 * prof1->prof_row(pos1)[i]
112 * log( prof1->prof_row(pos1)[i] / div_avg ) / log( base );
113 divergence_score += 0.5 * prof2->prof_row(pos2)[i]
114 * log( prof2->prof_row(pos2)[i] / div_avg ) / log( base );
118 Real sim_avg( (div_avg + prior_prob) / 2 );
119 similarity_score += 0.5 * sim_avg * log( sim_avg / prior_prob ) / log( base );
120 similarity_score += 0.5 * prior_prob * log( prior_prob / sim_avg ) / log( base );
125 Real score = 0.5 * ( 1 - divergence_score ) * ( 1 + similarity_score );