20 #include <basic/options/option.hh>
21 #include <basic/options/keys/packing.OptionKeys.gen.hh>
27 #include <basic/Tracer.hh>
31 #include <numeric/angle.functions.hh>
32 #include <numeric/conversions.hh>
35 #include <utility/vector1.hh>
39 namespace ligand_docking {
41 static basic::Tracer
TR(
"protocols.ligand_docking.ligand_functions");
49 utility::vector1< std::pair< core::Real, core::Real > >
const & mean_sd_degrees
53 using namespace core::scoring::constraints;
57 TR <<
"Torsion constraint for Rsd " << rsd_no <<
" chi " << chino <<
" =";
59 for(
Size j = 1; j <= mean_sd_degrees.size(); ++j) {
60 TR <<
" " << mean_sd_degrees[j].first;
61 TR <<
" std dev " << mean_sd_degrees[j].second;
63 Real const chi_radians = numeric::conversions::radians( mean_sd_degrees[j].first );
64 Real const stddev_radians = numeric::conversions::radians( mean_sd_degrees[j].second );
68 AtomID(chi_idx[1], rsd_no),
69 AtomID(chi_idx[2], rsd_no),
70 AtomID(chi_idx[3], rsd_no),
71 AtomID(chi_idx[4], rsd_no),
74 csts.push_back( constraint );
93 Real const tol_d = stddev_degrees / 10.0;
95 for(
Size i = 1; i <= rsds.size(); ++i) {
97 Real const chi_d = rsds[i]->chi(chino);
99 for(
Size j = 1; j <= minima_d.size(); ++j) {
100 Real const min = minima_d[j].first;
101 if(std::abs(min - numeric::nearest_angle_degrees(chi_d, min)) < tol_d) {
107 minima_d.push_back( std::make_pair(chi_d, stddev_degrees) );
132 bool const constrain_all_torsions_equally
135 using namespace core;
136 using namespace basic::options;
140 for(
Size i = 1; i <= rsdtype.nchi(); ++i) {
141 bool has_diversity(
false);
142 if( rsdtype.chi_rotamers(i).size() == 0 ) {
145 if( rotamers.empty() || option[ OptionKeys::packing::use_input_sc ]() ) {
147 if ( (rotamers.size()==1) && constrain_all_torsions_equally) has_diversity=
true;
149 for (
Size j=2;j<=rotamers.size();++j) {
150 Real const chi_d1 = rotamers[j]->chi(i);
151 Real const chi_d2 = rotamers[j-1]->chi(i);
152 if (std::abs(chi_d2 - chi_d1)> stddev_degrees ){
171 bool constrain_all_torsions_equally
174 using namespace core;
175 using namespace core::scoring::constraints;
181 for(
Size cstno = 1; cstno <= csts.size(); ++cstno) {
183 new_constraint_set->add_constraint( csts[cstno] );