30 #include <numeric/numeric.functions.hh>
32 #include <numeric/xyzVector.hh>
38 #include <utility/vector1.hh>
39 #include <utility/exit.hh>
40 #include <basic/Tracer.hh>
43 #include <ObjexxFCL/char.functions.hh>
44 #include <ObjexxFCL/string.functions.hh>
47 #include <utility/io/ozstream.hh>
49 #include <basic/options/option.hh>
50 #include <basic/options/keys/in.OptionKeys.gen.hh>
51 #include <basic/options/keys/rdc.OptionKeys.gen.hh>
57 #include <utility/string_util.hh>
58 #include <ObjexxFCL/format.hh>
61 static basic::Tracer
tr(
"core.scoring.ResidualDipolarCoupling");
67 using namespace ObjexxFCL::fmt;
132 ResidualDipolarCoupling::RDC_lines::const_iterator it;
134 for( it = All_RDC_lines.begin(); it != All_RDC_lines.end(); ++it) {
137 tr.Trace <<
"insert in atom-map " << atom1 <<
" " << atom2 << std::endl;
141 atm1_map.push_back( ct );
142 atm2_map.push_back( ct );
192 if ( basic::options::option[ basic::options::OptionKeys::rdc::iterate_weights ].user() ) {
194 Real const sigma2( basic::options::option[ basic::options::OptionKeys::rdc::iterate_weights ] );
195 Real const tol( basic::options::option[ basic::options::OptionKeys::rdc::iterate_tol ] );
196 bool const reset( basic::options::option[ basic::options::OptionKeys::rdc::iterate_reset ] );
199 if ( basic::options::option[ basic::options::OptionKeys::rdc::dump_weight_trajectory ].user() ) {
200 std::string const filename( basic::options::option[ basic::options::OptionKeys::rdc::dump_weight_trajectory ]() );
201 utility::io::ozstream out( filename , std::ios_base::out | std::ios_base::app );
203 for ( it = All_RDC_lines.begin(); it != All_RDC_lines.end(); ++it) {
204 out << RJ( 4, it->weight()) <<
" ";
210 basic::options::option[ basic::options::OptionKeys::rdc::fit_method ]()
212 if ( fit_method ==
"svd" ) {
213 tr.Trace <<
"residual-energy method chosen: 'svd' " << std::endl;
216 using namespace basic::options;
217 using namespace basic::options::OptionKeys;
218 if (option[ OptionKeys::rdc::fixDa].user()) {
219 if (option[ OptionKeys::rdc::fixR].user()) {
226 for (
core::Size i = 1; i <= option[ OptionKeys::rdc::fixR ]().
size(); ++i) {
227 if ( (tensorR[i] < 0) || (tensorR[i] > 2.0/3.0) ) {
228 utility_exit_with_message(
"0=< R <=2/3");
235 utility_exit_with_message(
"Number of Da and R must be the same as in number of experiment");
246 if (option[ OptionKeys::rdc::fixR].user()) {
250 for (
core::Size i = 1; i <= option[ OptionKeys::rdc::fixR ]().
size(); ++i) {
251 if ( (tensorR[i] < 0) || (tensorR[i] > 2.0/3.0) ) {
252 utility_exit_with_message(
"0=< R <=2/3");
281 if ( rdc_nrs.size() == 0 ) {
286 for (
core::Size ii=1; ii<=rdc_nrs.size(); ++ii) {
290 runtime_assert( rdc_nr <= All_RDC_lines.size() );
291 RDC const& rdc_data( All_RDC_lines[ rdc_nr ] );
294 if ( aid.rsd() == rdc_data.res1() && utility::trimmed_compare( rsd1.
atom_name( aid.atomno() ), rdc_data.atom1() ) ) {
295 fij += rdc_data.fij();
296 }
else if ( aid.rsd() == rdc_data.res2() && utility::trimmed_compare( rsd2.
atom_name( aid.atomno() ), rdc_data.atom2() ) ){
297 fij -= rdc_data.fij();
308 F1 += score_weights[
rdc ] * f1;
309 F2 += score_weights[
rdc ] * f2;