26 #include <basic/MetricValue.hh>
27 #include <basic/Tracer.hh>
30 #include <utility/exit.hh>
31 #include <utility/string_util.hh>
34 #include <ObjexxFCL/format.hh>
39 #include <utility/vector1.hh>
44 using namespace core::pose;
45 using namespace core::pose::metrics;
46 using namespace utility;
47 using namespace ObjexxFCL::fmt;
51 namespace pose_metric_calculators {
55 DecomposeAndReweightEnergiesCalculator::DecomposeAndReweightEnergiesCalculator(
std::string const & NameOfResidueDecompositionCalculator ) :
57 name_of_ResidueDecompositionCalculator_(NameOfResidueDecompositionCalculator)
60 basic::Error() <<
"Tried to tie DecomposeAndReweightEnergiesCalculator to ResidueDecompositionCalculator " <<
70 name_of_ResidueDecompositionCalculator_(calculator.residue_decomposition_calculator()),
71 original_weights_(calculator.original_weights()),
72 other_energies_(calculator.other_energies()),
73 onebody_energies_(calculator.onebody_energies()),
74 twobody_energies_(calculator.twobody_energies()),
75 set_names_(calculator.set_names()),
76 weighted_total_(calculator.weighted_total())
81 if ( key ==
"weighted_total" ) {
82 basic::check_cast( valptr, &
weighted_total_,
"weighted_total expects to return a Real" );
83 (
static_cast<basic::MetricValue<Real> *
>(valptr))->set(
weighted_total_ );
85 }
else if ( key ==
"master_weight_vector" ) {
87 basic::check_cast( valptr, &master_weight_vector_copy,
"master_weight_vector expects to return a utility::vector1< core::Real >" );
88 (
static_cast<basic::MetricValue<utility::vector1<core::Real>
> *>(valptr))->set( master_weight_vector_copy );
90 }
else if ( key ==
"weighted_total_vector" ) {
92 basic::check_cast( valptr, &weighted_total_vector_copy,
"weighted_total_vector expects to return a utility::vector1< core::Real >" );
93 (
static_cast<basic::MetricValue<utility::vector1<core::Real>
> *>(valptr))->set( weighted_total_vector_copy );
95 }
else if ( key ==
"weighted_total_no_master_vector" ) {
97 basic::check_cast( valptr, &weighted_total_no_master_vector_copy,
"weighted_total_no_master_vector expects to return a utility::vector1< core::Real >" );
98 (
static_cast<basic::MetricValue<utility::vector1<core::Real>
> *>(valptr))->set( weighted_total_no_master_vector_copy );
100 }
else if ( key ==
"summary" ) {
101 std::ostringstream sstream;
104 basic::check_cast( valptr, &summary,
"summary expects to return a std::string" );
105 (
static_cast<basic::MetricValue<std::string> *
>(valptr))->set( summary );
108 basic::Error() <<
"DecomposeAndReweightEnergiesCalculator cannot compute the requested metric " << key << std::endl;
116 if ( key ==
"weighted_total" ) {
118 }
else if ( key ==
"master_weight_vector" ) {
120 std::ostringstream sstream;
122 for (
core::Size i = 1; i <= master_weight_vector_copy.size(); ++i) {
123 if (i > 1) sstream <<
", ";
124 sstream << master_weight_vector_copy[i];
127 return sstream.str();
128 }
else if ( key ==
"weighted_total_vector" ) {
130 std::ostringstream sstream;
132 for (
core::Size i = 1; i <= weighted_total_vector_copy.size(); ++i) {
133 if (i > 1) sstream <<
", ";
134 sstream << weighted_total_vector_copy[i];
137 return sstream.str();
138 }
else if ( key ==
"weighted_total_no_master_vector" ) {
140 std::ostringstream sstream;
142 for (
core::Size i = 1; i <= weighted_total_no_master_vector_copy.size(); ++i) {
143 if (i > 1) sstream <<
", ";
144 sstream << weighted_total_no_master_vector_copy[i];
147 return sstream.str();
148 }
else if ( key ==
"summary" ) {
149 std::ostringstream sstream;
151 return sstream.str();
154 basic::Error() <<
"This Calculator cannot compute metric " << key << std::endl;
162 Pose const & this_pose
167 basic::MetricValue<utility::vector1<std::set<core::Size> > > residue_decomposition_value;
168 basic::MetricValue<utility::vector1<core::Size> > residue_set_numbers_value;
169 basic::MetricValue<utility::vector1<std::string > > set_names_value;
176 runtime_assert(residue_set_numbers.size() == this_pose.
total_residue());
178 core::Size num_sets_from_decomposition = residue_decomposition.size();
189 core::Size const set_num(residue_set_numbers[i]);
197 iter != energy_graph.const_edge_list_end(); ++iter) {
202 if (first_set_num && second_set_num) {
203 if (first_set_num == second_set_num) {
217 if( !lrec )
continue;
218 if( lrec->empty() )
continue;
222 core::Size const first_set_num(residue_set_numbers[i]);
223 if (!first_set_num)
continue;
226 *rni != *( lrec->const_upper_neighbor_iterator_end(i) ); ++(*rni) ) {
227 core::Size const second_set_num(residue_set_numbers[rni->upper_neighbor_id()]);
229 if (!second_set_num)
continue;
230 if (first_set_num == second_set_num) {
298 for (set1 = 1; index >
num_sets() - set1; ++set1) {
319 for (set1 = 1; index >
num_sets() - set1; ++set1) {
331 for (
core::Size i = 1; i <= master_weight_vector.size(); ++i) {
344 core::Size num_sets_for_vector =
static_cast<core::Size> (floor(sqrt(
float((master_weight_vector.size()-1)*2))));
346 runtime_assert(master_weight_vector.size() == 1+(num_sets_for_vector+1)*num_sets_for_vector/2);
350 runtime_assert(
num_sets() == num_sets_for_vector);
352 for (
core::Size i = 1; i <= master_weight_vector.size(); ++i) {
362 names_vec.push_back(
"Other");
380 for (
core::Size i = 1; i <= weighted_energy_map_vector_result.size(); ++i) {
384 return weighted_energy_map_vector_result;
392 for (
core::Size i = 1; i <= weighted_total_vector_result.size(); ++i) {
396 return weighted_total_vector_result;
404 for (
core::Size i = 1; i <= weighted_total_vector_result.size(); ++i) {
408 return weighted_total_vector_result;
416 for (
core::Size i = 1; i <= weight_map_vector.size(); ++i) {
423 for (
core::Size j = 1; j < weight_map_vector.size(); ++j) {
444 out <<
"------------------------";
445 for (
core::Size i = 1; i <= names_vec.size(); ++i) out <<
"---------";
446 out <<
"---------" << std::endl;
448 out << LJ(24,
"Score Type");
449 for (
core::Size i = 1; i <= names_vec.size(); ++i) out << RJ(9,names_vec[i]);
450 out << RJ(9,
"Total") << std::endl;
452 out <<
"------------------------";
453 for (
core::Size i = 1; i <= names_vec.size(); ++i) out <<
"---------";
454 out <<
"---------" << std::endl;
456 for (
core::Size i = 1; i <= score_types.size(); ++i) {
458 out << LJ(24,score_types[i]);
459 for (
core::Size j = 1; j <= weighted_energy_map_vec.size(); ++j) {
460 out << F(9,3, weighted_energy_map_vec[j][score_types[i]]);
461 total += weighted_energy_map_vec[j][score_types[i]];
463 out << F(9,3, total) << std::endl;
466 out <<
"------------------------";
467 for (
core::Size i = 1; i <= names_vec.size(); ++i) out <<
"---------";
468 out <<
"---------" << std::endl;
470 out << LJ(24,
"Total");
471 for (
core::Size i = 1; i <= weighted_total_vec.size(); ++i) out << F(9,3, weighted_total_vec[i]);