26 #include <basic/options/keys/out.OptionKeys.gen.hh>
29 #include <basic/Tracer.hh>
30 #include <utility/exit.hh>
31 #include <utility/string_util.hh>
32 #include <basic/MetricValue.hh>
37 #include <utility/vector1.hh>
42 using namespace core::pose;
43 using namespace core::pose::metrics;
45 static basic::Tracer
TR(
"protocols/toolbox/PoseMetricCalculators/NonlocalContactsCalculator");
49 namespace pose_metric_calculators {
52 NonlocalContactsCalculator::NonlocalContactsCalculator(
55 ) : total_nlcontacts_(0),
56 special_region1_nlcontacts_(0),
57 special_region2_nlcontacts_(0),
58 special_region1_intra_nlcontacts_(0),
59 special_region1_to_other_nlcontacts_(0),
60 region1_region2_nlcontacts_(0),
61 nlcontacts_graph_( NULL ),
62 min_seq_separation_(min_sequence_separation),
63 cutoffE_(contact_cutoffE)
73 std::set< core::Size >
const & special_region,
76 ) : total_nlcontacts_(0),
77 special_region1_nlcontacts_(0),
78 special_region2_nlcontacts_(0),
79 special_region1_intra_nlcontacts_(0),
80 special_region1_to_other_nlcontacts_(0),
81 region1_region2_nlcontacts_(0),
82 nlcontacts_graph_( NULL ),
83 min_seq_separation_(min_sequence_separation),
84 cutoffE_(contact_cutoffE),
85 special_region1_(special_region)
94 std::set< core::Size >
const & special_region1,
95 std::set< core::Size >
const & special_region2,
98 ) : total_nlcontacts_(0),
99 special_region1_nlcontacts_(0),
100 special_region2_nlcontacts_(0),
101 special_region1_intra_nlcontacts_(0),
102 special_region1_to_other_nlcontacts_(0),
103 region1_region2_nlcontacts_(0),
104 nlcontacts_graph_( NULL ),
105 min_seq_separation_(min_sequence_separation),
106 cutoffE_(contact_cutoffE),
107 special_region1_(special_region1),
108 special_region2_(special_region2)
120 basic::MetricValueBase * valptr
124 if ( key ==
"total_nlcontacts" ) {
125 basic::check_cast( valptr, &
total_nlcontacts_,
"total_nlcontacts expects to return a Size" );
128 }
else if ( (key ==
"special_region_nlcontacts") || (key ==
"special_region1_nlcontacts") ) {
132 }
else if ( key ==
"special_region2_nlcontacts_" ) {
136 }
else if ( key ==
"special_region1_intra_nlcontacts_" ) {
140 }
else if ( key ==
"special_region1_to_other_nlcontacts_" ) {
144 }
else if ( key ==
"region1_region2_nlcontacts_" ) {
148 }
else if ( key ==
"residue_nlcontacts" ) {
149 basic::check_cast( valptr, &
residue_nlcontacts_,
"residue_nlcontacts expects to return a utility::vector1< Size >" );
150 (
static_cast<basic::MetricValue<utility::vector1< Size >
> *>(valptr))->set(
residue_nlcontacts_ );
152 }
else if ( key ==
"residue_nlscore" ) {
153 basic::check_cast( valptr, &
residue_nlscore_,
"residue_nlscore expects to return a utility::vector1< Real >" );
154 (
static_cast<basic::MetricValue<utility::vector1< Real >
> *>(valptr))->set(
residue_nlscore_ );
156 }
else if ( key ==
"nlcontacts_graph" ) {
157 basic::check_cast( valptr, &
nlcontacts_graph_,
"nlcontacts_graph expects to return a core::Graph::GraphOP" );
158 (
static_cast<basic::MetricValue< core::graph::GraphOP > *
>(valptr))->set(
nlcontacts_graph_ );
163 basic::Error() <<
"NonlocalContactsCalculator cannot compute the requested metric " << key << std::endl;
176 basic::Error() <<
"NonlocalContactsCalculator cannot compute metric " << key << std::endl;
186 using namespace core::scoring;
209 core::Size other_res = (*egraph_it)->get_other_ind( i );
227 TR.Debug <<
"residues " << i <<
" and " << other_res <<
" make nonlocal contact, interactionE is " << resresE << std::endl;
256 if( basic::options::option[basic::options::OptionKeys::out::level] >= basic::t_debug ){