Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HbondsToResidueFilter.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file protocols/protein_interface_design/filters/HbondsToResidueFilter.cc
11 /// @brief
12 /// @author Sarel Fleishman (sarelf@u.washington.edu), Jacob Corn (jecorn@u.washington.edu)
15 
16 
17 // Project Headers
18 #include <core/types.hh>
19 #include <core/pose/Pose.hh>
20 #include <core/pose/PDBInfo.hh>
21 #include <basic/Tracer.hh>
28 #include <core/scoring/Energies.hh>
30 #include <utility/tag/Tag.hh>
36 #include <core/pose/selection.hh>
39 //#include <protocols/moves/ResidueMover.hh>
41 #include <basic/MetricValue.hh>
42 #include <numeric/random/random.hh>
43 // AUTO-REMOVED #include <boost/foreach.hpp>
44 #define foreach BOOST_FOREACH
46 
50 // AUTO-REMOVED #include <core/conformation/symmetry/util.hh>
51 
53 
54 //Objectxxxx header
55 #include <ObjexxFCL/FArray1D.hh>
56 #include <ObjexxFCL/FArray1D.fwd.hh>
57 
58 // Utility Headers
59 
60 // Unit Headers
63 
64 // C++ headers
65 #include <map>
66 
69 #include <utility/vector0.hh>
70 #include <utility/vector1.hh>
71 #include <ObjexxFCL/format.hh>
72 
73 //Auto Headers
75 
76 
77 using namespace core;
78 using namespace core::scoring;
79 using namespace ObjexxFCL::fmt;
80 
81 static numeric::random::RandomGenerator RG( 140845 ); // <- Magic number, do not change it!!!
82 
83 namespace protocols {
84 namespace protein_interface_design {
85 namespace filters {
86 
87 static basic::Tracer TR( "protocols.protein_interface_design.filters.HbondsToResidueFilter" );
88 using core::pose::Pose;
89 
91 HbondsToResidueFilterCreator::create_filter() const { return new HbondsToResidueFilter; }
92 
94 HbondsToResidueFilterCreator::keyname() const { return "HbondsToResidue"; }
95 
96 bool
97 HbondsToResidueFilter::apply( Pose const & pose ) const {
98  core::Size hbonded_res( compute( pose ) );
99  TR<<"found "<<hbonded_res<< " hbond to target residue " << resnum_;
100  if( hbonded_res >= partners_ ) {
101  TR << ". passing." << std::endl;
102  return( true );
103  }
104  else {
105  TR << ". failing." << std::endl;
106  return( false );
107  }
108 }
109 
110 void
111 HbondsToResidueFilter::parse_my_tag( utility::tag::TagPtr const tag, moves::DataMap &, filters::Filters_map const &, moves::Movers_map const &, core::pose::Pose const & pose )
112 {
113  partners_ = tag->getOption<core::Size>( "partners" );
114  energy_cutoff_ = tag->getOption<core::Real>( "energy_cutoff", -0.5 );
115  bb_bb_ = tag->getOption<bool>( "bb_bb", 0 );
116  backbone_ = tag->getOption<bool>( "backbone", 0 );
117  sidechain_ = tag->getOption<bool>( "sidechain", 1 );
118  resnum_ = core::pose::get_resnum( tag, pose );
119 
120  TR<<"Hbonds to residue filter for resnum "<<resnum_<<" with "<<partners_<<" hbonding partners"<<std::endl;
121 }
122 
123 void
124 HbondsToResidueFilter::report( std::ostream & out, core::pose::Pose const & pose ) const {
125  core::Size hbonded_res( compute( pose ) );
126 
127  out<<"Number of residues hbonded to "<<resnum_<< " is " << hbonded_res <<'\n';
128 }
129 
131 HbondsToResidueFilter::report_sm( core::pose::Pose const & pose ) const {
132  core::Size hbonded_res( compute( pose ) );
133  return( hbonded_res );
134 }
135 
137 HbondsToResidueFilter::compute( Pose const & pose ) const {
138  typedef core::Size Size;
139  typedef core::Real Real;
140 
141  core::pose::Pose temp_pose( pose );
143  (*scorefxn)(temp_pose);
144  /// Now handled automatically. scorefxn->accumulate_residue_total_energies( temp_pose );
145 
146  core::Size const chain2begin( temp_pose.conformation().chain_begin( 2 ) );
147  core::Size partner_begin, partner_end;
148  if( resnum_ >= chain2begin ) {
149  partner_begin = 1; partner_end = chain2begin-1;
150  }
151  else {
152  partner_begin = chain2begin; partner_end = temp_pose.total_residue();
153  }
154  std::set<Size> binders;
155  for( Size i=partner_begin; i<=partner_end; ++i ) binders.insert( i );
156 
157  std::list< Size> hbonded_res( hbonded( temp_pose, resnum_, binders, backbone_, sidechain_, energy_cutoff_, bb_bb_) );
158 
159  return( hbonded_res.size() );
160 }
161 
162 HbondsToResidueFilter::~HbondsToResidueFilter() {}
163 
164 }
165 } // protein_interface_design
166 } // devel