Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DeltaFilter.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 sw=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 /// @author Sarel Fleishman (sarelf@uw.edu)
15 
16 #include <core/pose/Pose.hh>
17 #include <utility/tag/Tag.hh>
20 #include <basic/Tracer.hh>
23 
24 #include <utility/vector0.hh>
25 #include <utility/vector1.hh>
26 
27 namespace protocols {
28 namespace simple_filters {
29 
30 static basic::Tracer TR( "protocols.simple_filters.DeltaFilter" );
31 
32 ///@brief default ctor
34  parent( "Delta" ),
35  filter_( NULL ),
36  baseline_( 0.0 ),
37  range_( 0.0 ),
38  lower_( false ),
39  upper_( true ),
40  unbound_( false ),
41  relax_unbound_( false ),
42  jump_( 0 ),
43  reference_pose_(NULL),
44  ref_baseline_( 1234567890.0 ) // unlikely "uninitialized" sentinel value
45 {}
46 
47 bool
49  return unbound_;
50 }
51 
52 void
53 DeltaFilter::unbound( bool const u ){
54  unbound_ = u;
55 }
56 
57 bool
59  return relax_unbound_;
60 }
61 
62 void
64  relax_unbound_ = u;
65 }
66 
69  return jump_;
70 }
71 
72 void
74  jump_ = j;
75 }
76 
79  if( reference_pose_ ){
80  //Hack to avoid keep re-applying (potentially computationally expensive) filter to reference pose
81  //This should probably be replaced by some pose observer magic instead
82  if ( ref_baseline_ == 1234567890.0 ) { // unlikely "uninitialized" sentinel value
84  if(p.total_residue() == 0) { // If reference pose wasn't properly initialized, fast fail with interpretable error message
85  utility_exit_with_message("Reference pose used with DeltaFilter wasn't initialized properly!");
86  }
87  relax_mover()->apply( p );
88  unbind( p );
89  ref_baseline_ = filter_->report_sm( p );
90  TR << "Reference pose baseline is " << ref_baseline_ << "." << std::endl;
91  }
92  return ref_baseline_;
93  }
94 
95  return baseline_;
96 }
97 
98 void
100  ref_baseline_ = rb;
101 }
102 
103 void
105  baseline_ = b;
106 }
107 
110  return range_;
111 }
112 
113 void
115  range_ = r;
116 }
117 
118 bool
120  return lower_;
121 }
122 
123 void
124 DeltaFilter::lower( bool const l ){
125  lower_ = l;
126 }
127 
128 void
129 DeltaFilter::upper( bool const u ){
130  upper_ = u;
131 }
132 
133 bool
135  return( upper_ );
136 }
137 
138 void
140  filter_ = filter;
141 }
142 
145  return filter_;
146 }
147 
148 bool
150 {
151  core::Real const delta( compute( pose ) );
152  if( upper() && lower() )
153  return( delta <= range() && delta >= range() );
154  if( ( upper() && delta <= range() ) || ( lower() && delta >= range() ) ) return true;
155  return( false );
156 }
157 
158 void
160  if( !unbound() ) return;
162  rbtm.step_size( 10000.0 );
163  rbtm.apply( pose );
164  if( relax_unbound() ) relax_mover()->apply( pose );
165 }
166 
169  core::pose::Pose pose( p );
170  unbind( pose );
171  core::Real const filter_val( filter()->report_sm( pose ) );
172  TR<<"Filter "<<filter()->get_user_defined_name()<<" returns "<<filter_val<<". Baseline is "<<baseline()<<std::endl;
173  return( filter_val - baseline() );
174 }
175 
178 {
179  core::pose::Pose p( pose );
180  unbind( p );
181  return( compute( p ) );
182 }
183 
184 void
185 DeltaFilter::report( std::ostream & out, core::pose::Pose const & pose ) const
186 {
187  out<<"DeltaFilter returns "<<compute( pose )<<std::endl;
188 }
189 
190 void
193  protocols::filters::Filters_map const & filters,
194  protocols::moves::Movers_map const & movers,
195  core::pose::Pose const & pose )
196 {
197  TR << "DeltaFilter"<<std::endl;
198  range( tag->getOption< core::Real >( "range", 0.0 ) );
199  lower( tag->getOption< bool >( "lower", false ) );
200  upper( tag->getOption< bool >( "upper", true ) );
201  runtime_assert( lower() || upper() );
202  filter( protocols::rosetta_scripts::parse_filter( tag->getOption< std::string >( "filter" ), filters ) );
203  relax_mover( protocols::rosetta_scripts::parse_mover( tag->getOption< std::string >( "relax_mover", "null" ), movers ) );
204  unbound( tag->getOption< bool >( "unbound", false ) );
205  relax_unbound( tag->getOption< bool >( "relax_unbound", false ) );
206  if( unbound() )
207  jump( tag->getOption< core::Size >( "jump", 1 ) );
208  // need to score the pose before packing...
209  if( tag->hasOption("reference_name") ){
211  TR << "baseline will be caculated once, when first needed..." << std::endl;
212  }
213  else if( tag->hasOption("reference_pdb") ){
214  std::string reference_pdb_filename( tag->getOption< std::string >( "reference_pdb", "" ) );
215  reference_pose_ = core::import_pose::pose_from_pdb( reference_pdb_filename );
216  TR << "baseline will be caculated once, when first needed..." << std::endl;
217  }
218  else{
219  core::pose::Pose p( pose );
220  core::scoring::ScoreFunctionOP score12 = data.get< core::scoring::ScoreFunction *>( "scorefxns", "score12" );
221  (*score12)(p);
222  relax_mover()->apply( p );
223  unbind( p );
224  baseline( filter()->report_sm( p ) );
225  }
226 
227  TR<<"with options baseline: ";
228  if (reference_pose_) TR << "(deferred)";
229  else TR << baseline(); // only called if reference_pose_ is NULL
230  TR <<" range: "<<range()<<" upper: "<<upper()<<" unbound: "<<unbound()<<" jump: "<<jump()<<" and lower: "<<lower()<<std::endl;
231 }
232 
235  return new DeltaFilter();
236 }
237 
239 
242  return new DeltaFilter( *this );
243 }
244 
247 
249 DeltaFilterCreator::keyname() const { return "Delta"; }
250 
253  return relax_mover_;
254 }
255 
256 void
258  relax_mover_ = m;
259 }
260 
261 } // simple_filters
262 } // protocols