20 #include <utility/tag/Tag.hh>
22 #include <basic/Tracer.hh>
25 #include <boost/foreach.hpp>
26 #define foreach BOOST_FOREACH
27 #include <utility/string_util.hh>
30 namespace simple_filters {
32 static basic::Tracer
TR(
"protocols.simple_filters.Operator" );
33 using namespace protocols::filters;
43 protocols::filters::
Filter(
"Operator" ),
56 if( filter->get_type() ==
"Sigmoid" ){
57 SigmoidOP sigmoid_filter( dynamic_cast< Sigmoid * >( filter() ) );
58 runtime_assert( sigmoid_filter );
59 sigmoid_filter->reset_baseline( pose, attempt_read_from_checkpoint );
60 TR<<
"Resetting Sigmoid filter's baseline"<<std::endl;
62 else if( filter->get_type() ==
"Operator" ){
63 OperatorOP operator_filter( dynamic_cast< Operator * >( filter() ) );
64 runtime_assert( operator_filter );
65 operator_filter->reset_baseline( pose, attempt_read_from_checkpoint );
66 TR<<
"Resetting Operator filter's baseline"<<std::endl;
68 else if( filter->get_type() ==
"CompoundStatement" ){
69 CompoundFilterOP comp_filt_op( dynamic_cast< CompoundFilter * >( filter() ) );
70 runtime_assert( comp_filt_op );
71 for( protocols::filters::CompoundFilter::CompoundStatement::iterator cs_it = comp_filt_op->begin(); cs_it != comp_filt_op->end(); ++cs_it ){
73 if( f->get_type() ==
"Sigmoid" ){
74 SigmoidOP sigmoid_filter( dynamic_cast< Sigmoid * >( f() ) );
75 runtime_assert( sigmoid_filter );
76 sigmoid_filter->reset_baseline( pose, attempt_read_from_checkpoint );
77 TR<<
"Resetting Sigmoid filter's baseline"<<std::endl;
79 else if( f->get_type() ==
"Operator" ){
80 OperatorOP operator_filter( dynamic_cast< Operator * >( f() ) );
81 runtime_assert( operator_filter );
82 operator_filter->reset_baseline( pose, attempt_read_from_checkpoint );
83 TR<<
"Resetting Operator filter's baseline"<<std::endl;
93 erase_filters.clear();
95 if( filter->get_type() ==
"Sigmoid" ){
96 SigmoidOP sigmoid_filter( dynamic_cast< Sigmoid * >( filter() ) );
97 runtime_assert( sigmoid_filter );
98 if( sigmoid_filter->filter()->get_type() ==
"RelativePose" ){
99 TR<<
"Replicating and changing RelativePose's filter pdb fname. File names: ";
101 SigmoidOP new_sigmoid( *sigmoid_filter );
102 RelativePoseFilterOP relative_pose( dynamic_cast< RelativePoseFilter * >( new_sigmoid->filter()() ) );
103 runtime_assert( relative_pose );
104 relative_pose->pdb_name( fname );
109 erase_filters.push_back( filter );
113 foreach(
FilterOP erase_f, erase_filters ){
127 if( op==
"NORMALIZED_SUM" )
137 if( op ==
"BOOLEAN_OR" )
139 if( op !=
"SUM" && op !=
"PRODUCT" && op !=
"NORMALIZED_SUM" && op !=
"MAX" && op !=
"MIN" && op !=
"SUBTRACT" && op !=
"ABS" && op !=
"BOOLEAN_OR" )
140 utility_exit_with_message(
"Operation " + op +
" not recognized" );
142 negate( tag->getOption<
bool >(
"negate",
false ) );
147 TR<<
"Adding filter "<<fname<<std::endl;
150 utility_exit_with_message(
"Operation "+op+
" requested, but the number of filters provided is different than 2. I only know how to "+op+
" one filter from another" );
152 utility_exit_with_message(
"Operation ABS requested, but the number of filters provided is different than 1. I only know how to take the absolute value of one filter" );
153 multi_relative( tag->getOption<
bool >(
"multi_relative",
false ) );
155 TR<<
"multi_relative is set. Duplicating filters to include relative_pose_names."<<std::endl;
159 TR<<
" using operator "<<op<<
" with "<<
filters_.size()<<
" filters "<<std::endl;
165 TR<<
"Filter returns "<<val<<std::endl;
175 o <<
"Operator returns "<<val<<std::endl;
181 TR<<
"Operator returning: "<<val<<std::endl;
195 core::Real const boolean_or(
negate() ? -( val1 + val2 - val1 * val2 ) : val1 + val2 - val1 * val2 );
196 TR<<
"Filters' values "<<val1<<
" "<<val2;
198 TR<<
" and the difference is "<<difference<<std::endl;
202 TR<<
" the boolean or value is "<<boolean_or<<std::endl;
210 TR<<
"Filter returns "<<val<<
" and its absolute value is "<<abs_val<<std::endl;
221 TR<<
"Filter "<<f()->get_type()<<
" return "<<filter_val<<std::endl;
227 if( filter_val <= val )
231 if( filter_val >= val )
240 TR<<
"Operator returns "<<val<<std::endl;