11 #include <basic/database/open.hh>
12 #include <basic/Tracer.hh>
13 #include <utility/io/izstream.hh>
15 #include <utility/vector1.hh>
22 static basic::Tracer
TR(
"core.scoring.Interface.DDPlookup");
44 myvec_2.push_back(0.);
48 left_.push_back(myvec_2);
50 mymyvec.push_back(myvec);
54 known_values.push_back(mymyvec);
64 distance_bin.push_back(e);
68 utility::io::izstream stream;
69 basic::database::open( stream, filename );
70 while ( getline( stream, line ) ) {
71 std::istringstream l(line);
72 l >> tag >> aa1 >> aa2;
73 for (
Size i=1; i<=n_bins; ++i ) {
74 l >> known_values[aa1][aa2][i];
76 if ( l.fail() || tag !=
"DDIPP:" )
78 TR <<
"bad format for interface_dd_score.txt" << std::endl;
79 TR <<
"fail: " << l.fail() <<
" tag: " << tag << std::endl;
88 while( !valey && leftidx < n_bins )
93 if ( known_values[aa1][aa2][i] < -1e-10 )
95 left_[aa1][aa2] = distance_bin[i-1];
105 auc += known_values[aa1][aa2][i] * (n_max/n_bins);
106 if ( !up && i>1 && known_values[aa1][aa2][i-1] < known_values[aa1][aa2][i])
110 if ( known_values[aa1][aa2][i] > -1e-10 )
112 right_[aa1][aa2] = distance_bin[i];
115 if ( up && known_values[aa1][aa2][i-1] > known_values[aa1][aa2][i] )
117 right_[aa1][aa2] = distance_bin[i-3];
120 right_[aa1][aa2] = distance_bin[1];
128 left_[aa1][aa2] = distance_bin[n_bins];
129 right_[aa1][aa2] = distance_bin[1];
137 lookup_table_ =
new numeric::interpolation::spline::SplineGenerator**[max_aa+1];
140 lookup_table_[i] =
new numeric::interpolation::spline::SplineGenerator*[max_aa+1];
146 core::Real upper_bound_x = distance_bin[n_bins] + stepsize/2;
147 core::Real lower_bound_y = *lower_bound_y_iterator;
150 lower_bound_y -= 0.1;
151 upper_bound_y += 0.1;
153 lookup_table_[i][j] =
new numeric::interpolation::spline::SplineGenerator(lower_bound_x, lower_bound_y, 0, upper_bound_x, upper_bound_y, 0);
154 for (
core::Size energy_index = 1; energy_index <= n_bins; energy_index++)
156 if (distance_bin[energy_index] >
left_[i][j] && distance_bin[energy_index] <
right_[i][j])
158 lookup_table_[i][j]->add_known_value( distance_bin[energy_index], known_values[i][j][energy_index]);
162 lookup_table_[i][j]->add_known_value( distance_bin[energy_index], -1e-5);
174 if ( aa1 < 1 || aa1 > 20 || aa2 < 1 || aa2 > 20 )
176 TR <<
"bad amino acid for DDPlookup" << std::endl;
185 numeric::interpolation::spline::InterpolatorOP interpolator =
187 interpolator->interpolate(distance, potential_energy, delta_potential_energy);
188 if ( potential_energy > 0. || distance < 2. || distance <
left_[aa1][aa2] || distance >
right_[aa1][aa2] )
194 result = potential_energy;