Rosetta 3.5
Main Page
Related Pages
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
src
protocols
simple_filters
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)
11
#include <
protocols/simple_filters/DeltaFilter.hh
>
12
#include <
protocols/simple_filters/DeltaFilterCreator.hh
>
13
#include <
protocols/rigid/RigidBodyMover.hh
>
14
#include <
core/scoring/ScoreFunction.hh
>
15
16
#include <
core/pose/Pose.hh
>
17
#include <utility/tag/Tag.hh>
18
#include <
protocols/filters/Filter.hh
>
19
#include <
protocols/moves/DataMap.hh
>
20
#include <basic/Tracer.hh>
21
#include <
protocols/rosetta_scripts/util.hh
>
22
#include <
core/import_pose/import_pose.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
33
DeltaFilter::DeltaFilter
() :
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
48
DeltaFilter::unbound
()
const
{
49
return
unbound_
;
50
}
51
52
void
53
DeltaFilter::unbound
(
bool
const
u ){
54
unbound_
= u;
55
}
56
57
bool
58
DeltaFilter::relax_unbound
()
const
{
59
return
relax_unbound_
;
60
}
61
62
void
63
DeltaFilter::relax_unbound
(
bool
const
u ){
64
relax_unbound_
= u;
65
}
66
67
core::Size
68
DeltaFilter::jump
()
const
{
69
return
jump_
;
70
}
71
72
void
73
DeltaFilter::jump
(
core::Size
const
j ){
74
jump_
= j;
75
}
76
77
core::Real
78
DeltaFilter::baseline
()
const
{
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
83
core::pose::Pose
p( *
reference_pose_
);
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
99
DeltaFilter::ref_baseline
(
core::Real
const
rb ){
100
ref_baseline_
= rb;
101
}
102
103
void
104
DeltaFilter::baseline
(
core::Real
const
b
){
105
baseline_
=
b
;
106
}
107
108
core::Real
109
DeltaFilter::range
()
const
{
110
return
range_
;
111
}
112
113
void
114
DeltaFilter::range
(
core::Real
const
r ){
115
range_
= r;
116
}
117
118
bool
119
DeltaFilter::lower
()
const
{
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
134
DeltaFilter::upper
()
const
{
135
return
(
upper_
);
136
}
137
138
void
139
DeltaFilter::filter
(
protocols::filters::FilterOP
filter ){
140
filter_
=
filter
;
141
}
142
143
protocols::filters::FilterOP
144
DeltaFilter::filter
()
const
{
145
return
filter_
;
146
}
147
148
bool
149
DeltaFilter::apply
(
core::pose::Pose
const
& pose )
const
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
159
DeltaFilter::unbind
(
core::pose::Pose
& pose )
const
{
160
if
( !
unbound
() )
return
;
161
protocols::rigid::RigidBodyTransMover
rbtm( pose,
jump
() );
162
rbtm.
step_size
( 10000.0 );
163
rbtm.
apply
( pose );
164
if
(
relax_unbound
() )
relax_mover
()->apply( pose );
165
}
166
167
core::Real
168
DeltaFilter::compute
(
core::pose::Pose
const
& p )
const
{
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
176
core::Real
177
DeltaFilter::report_sm
(
core::pose::Pose
const
& pose )
const
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
191
DeltaFilter::parse_my_tag
(
utility::tag::TagPtr
const
tag,
192
protocols::moves::DataMap
& data,
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"
) ){
210
reference_pose_
=
protocols::rosetta_scripts::saved_reference_pose
(tag,data );
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
233
protocols::filters::FilterOP
234
DeltaFilter::fresh_instance
()
const
{
235
return
new
DeltaFilter
();
236
}
237
238
DeltaFilter::~DeltaFilter
(){}
239
240
protocols::filters::FilterOP
241
DeltaFilter::clone
()
const
{
242
return
new
DeltaFilter
( *
this
);
243
}
244
245
protocols::filters::FilterOP
246
DeltaFilterCreator::create_filter
()
const
{
return
new
DeltaFilter
; }
247
248
std::string
249
DeltaFilterCreator::keyname
()
const
{
return
"Delta"
; }
250
251
protocols::moves::MoverOP
252
DeltaFilter::relax_mover
()
const
{
253
return
relax_mover_
;
254
}
255
256
void
257
DeltaFilter::relax_mover
(
protocols::moves::MoverOP
const
m ){
258
relax_mover_
= m;
259
}
260
261
}
// simple_filters
262
}
// protocols
Generated on Sat Jun 1 2013 12:13:17 for Rosetta 3.5 by
1.8.4