23 #include <basic/basic.hh>
26 #include <numeric/angle.functions.hh>
27 #include <numeric/constants.hh>
28 #include <numeric/MathMatrix.hh>
31 #include <utility/pointer/ReferenceCount.hh>
32 #include <utility/io/izstream.hh>
35 #include <ObjexxFCL/FArray1D.hh>
37 #include <utility/vector1.hh>
38 #include <ObjexxFCL/FArray2D.hh>
40 #include <basic/database/open.hh>
41 #include <basic/options/option.hh>
42 #include <basic/options/keys/corrections.OptionKeys.gen.hh>
43 #include <basic/options/keys/OptionKeys.hh>
51 using namespace basic::options;
52 use_phipsi_dep_ = option[ OptionKeys::corrections::score::bbdep_omega ]();
73 for (
int ii = 1; ii <= total_residue; ++ii )
77 Real omega_score,dscore_domega, dscore_dphi, dscore_dpsi ;
79 pose_energies.onebody_energies( ii )[
omega] = omega_score;
96 Real score, dscore_domega, dscore_dphi, dscore_dpsi ;
107 Real & dscore_domega,
112 using namespace numeric;
120 Real const omega_angle
125 dscore_domega = dscore_dphi = dscore_dpsi = 0.0;
142 Real & dscore_domega,
147 using basic::subtract_degree_angles;
150 while( omega_p < -90.0 ) omega_p += 360.0;
151 while( omega_p > 270.0 ) omega_p -= 360.0;
159 if( omega_p >= 90.0 ){
161 dangle = subtract_degree_angles(omega_p, 180);
164 dangle = subtract_degree_angles(omega_p, 0);
167 score = weight*dangle*dangle;
168 dscore_domega = weight*2*dangle;
169 dscore_dphi = dscore_dpsi = 0.0;
184 core::Real mu, sigma, dmu_dphi, dmu_dpsi, dsigma_dphi, dsigma_dpsi;
195 core::Real normalization = log( 1/ (6* sqrt(2*numeric::constants::f::pi) ) );
196 core::Real entropy = -log( 1/ (sigma* sqrt(2*numeric::constants::f::pi) ) );
197 core::Real offset = subtract_degree_angles(omega_p, mu);
198 core::Real logprob = offset*offset / (2*sigma*sigma);
199 score = normalization + entropy + logprob;
203 dscore_domega = offset / (sigma*sigma);
207 core::Real dscore_dsigma = 1/(sigma) - 2*logprob/sigma;
210 dscore_dphi = dscore_dmu*dmu_dphi + dscore_dsigma*dsigma_dphi;
211 dscore_dpsi = dscore_dmu*dmu_dpsi + dscore_dsigma*dsigma_dpsi;
224 for (
int i=1; i<=5; ++i) {
225 utility::io::izstream stream;
226 if (i==1) basic::database::open( stream,
"scoring/score_functions/omega/omega_ppdep.all.txt");
227 else if (i==2) basic::database::open( stream,
"scoring/score_functions/omega/omega_ppdep.gly.txt");
228 else if (i==3) basic::database::open( stream,
"scoring/score_functions/omega/omega_ppdep.pro.txt");
229 else if (i==4) basic::database::open( stream,
"scoring/score_functions/omega/omega_ppdep.valile.txt");
231 else if (i==5)
continue;
241 ObjexxFCL::FArray2D< Real > & x,
242 numeric::interpolation::spline::BicubicSpline &sx
244 using namespace numeric;
245 using namespace numeric::interpolation::spline;
248 MathMatrix< Real > energy_vals( 36, 36 );
249 for (
Size jj = 0; jj < 36; ++jj ) {
250 for (
Size kk = 0; kk < 36; ++kk ) {
251 energy_vals( jj, kk ) = x(jj+1,kk+1);
254 BorderFlag periodic_boundary[2] = { e_Periodic, e_Periodic };
255 Real start_vals[2] = {5.0, 5.0};
256 Real deltas[2] = {10.0, 10.0};
257 bool lincont[2] = {
false,
false};
258 std::pair< Real, Real > unused[2];
259 unused[0] = std::make_pair( 0.0, 0.0 );
260 unused[1] = std::make_pair( 0.0, 0.0 );
261 sx.train( periodic_boundary, start_vals, deltas, energy_vals, lincont, unused );
267 utility::io::izstream &stream,
268 ObjexxFCL::FArray2D< Real > &mus,
269 ObjexxFCL::FArray2D< Real > &sigmas
275 mus.dimension(36,36);
276 sigmas.dimension(36,36);
278 while ( getline( stream, line ) ) {
279 std::istringstream l(line);
280 l >> i >> j >> phi >> psi >> mu >> sig;
282 sigmas(i+1,j+1) = sig;