24 #include <utility/tag/Tag.hh>
27 #include <basic/Tracer.hh>
36 #include <utility/vector1.hh>
39 #include <boost/foreach.hpp>
40 #define foreach BOOST_FOREACH
48 #include <utility/vector0.hh>
52 #include <utility/string_util.hh>
53 #include <ObjexxFCL/format.hh>
56 #include <utility/excn/Exceptions.hh>
57 #include <basic/options/keys/OptionKeys.hh>
60 namespace protein_interface_design{
63 static basic::Tracer
TR(
"protocols.protein_interface_design.filters.FilterScanFilter" );
69 task_factory_( NULL ),
70 triage_filter_( NULL ),
72 resfile_general_property_(
"nataa" ),
82 using namespace basic::options;
83 using namespace basic::options::OptionKeys;
85 temp_resfile_name = temp_resfile_name +
".resfile";
212 using namespace core::chemical;
213 using namespace core::pack::task;
214 using namespace core::pack::task::operation;
215 using namespace protocols::toolbox::task_operations;
220 allowed_aas[ target_aa ] =
true;
224 dao->include_residue( resi );
225 mut_res->push_back( dao );
226 PackerTaskOP mutate_residue = mut_res->create_task_and_apply_taskoperations( pose );
227 mutate_residue->initialize_from_command_line().or_include_current(
true );
230 mutate_residue->nonconst_residue_task( resj ).restrict_to_repacking();
232 mutate_residue->nonconst_residue_task( resj ).restrict_absent_canonical_aas( allowed_aas );
234 TR<<
"Mutating residue "<<pose.
residue( resi ).
name3()<<resi<<
" to ";
246 utility_exit_with_message(
"Cannot currently use FilterScan with rtmin on a symmetric pose!");
250 rtmin->apply( pose );
252 TR<<pose.
residue( resi ).
name3()<<
". Now relaxing..."<<std::endl;
264 using namespace core::pack::task;
265 using namespace core::pack::task::operation;
266 using namespace core::chemical;
272 being_designed.clear();
275 if( task->residue_task( resi ).being_designed() && pose.
residue(resi).
is_protein() )
276 being_designed.push_back( resi );
278 if( being_designed.empty() ) {
279 TR.Warning <<
"WARNING: No residues are listed as designable." << std::endl;
282 std::map< core::Size, utility::vector1< AA > > residue_id_map;
283 std::map< std::pair< core::Size, AA >, std::pair< core::Real, bool > > residue_id_val_map;
284 residue_id_map.clear(); residue_id_val_map.clear();
288 foreach(
core::Size const resi, being_designed ){
294 std::string const fname( delta_filter->get_user_defined_name() );
295 core::Real const fbaseline( delta_filter->filter()->report_sm( pose ) );
296 delta_filter->baseline( fbaseline );
297 TR<<
"Computed baseline at position "<<resi<<
" with filter "<<fname<<
" is "<<fbaseline<<std::endl;
300 baseline =
filter()->report_sm( pose );
301 typedef std::list< ResidueTypeCOP > ResidueTypeCOPList;
302 ResidueTypeCOPList
const & allowed( task->residue_task( resi ).allowed_residue_types() );
306 allow_temp.push_back( t->aa() );
308 foreach(
AA const target_aa, allow_temp ){
312 bool triage_filter_pass(
false );
315 triage_filter_pass = delta_filter->apply( pose );
316 if( !triage_filter_pass )
322 if( !triage_filter_pass ){
323 TR<<
"Triage filter fails"<<std::endl;
325 residue_id_val_map[ std::pair< core::Size, AA >( resi, target_aa ) ] = std::pair< core::Real, bool >(
filter()->report_sm( pose ),
false);
329 TR<<
"Triage filter succeeds"<<std::endl;
330 residue_id_val_map[ std::pair< core::Size, AA >( resi, target_aa ) ] = std::pair< core::Real, bool >(
filter()->report_sm( pose ),
true);
331 residue_id_map[ resi ].push_back( target_aa );
333 using namespace protocols::jd2;
335 std::stringstream fname;
337 TR<<
"Saving pose "<<fname.str();
344 std::ofstream resfile;
349 foreach(
AA const aa,
pair->second )
357 std::ofstream scorefile;
360 using namespace ObjexxFCL::fmt;
361 for( std::map< std::pair< core::Size, AA >, std::pair< core::Real, bool > >::const_iterator
pair = residue_id_val_map.begin();
pair != residue_id_val_map.end(); ++
pair ){
364 <<
pair->first.first <<
'\t'
367 << F(9,6,
pair->second.first) <<std::endl;
372 for( std::map< std::pair< core::Size, AA >, std::pair< core::Real, bool > >::const_iterator
pair = residue_id_val_map.begin();
pair != residue_id_val_map.end(); ++
pair ){
375 <<
pair->first.first<<
'\t'
377 <<(
delta() ?
pair->second.first - baseline :
pair->second.first )
378 <<(
pair->second.second?
"":
"\tTRIAGED")<<std::endl;
402 TR <<
"FilterScanFilter"<<std::endl;
403 runtime_assert( tag->hasOption(
"filter" ) || tag->hasOption(
"delta_filters" ));
406 protocols::filters::Filters_map::const_iterator triage_filter_it( filters.find( triage_filter_name ) );
410 if( triage_filter_it == filters.end() )
411 utility_exit_with_message(
"Triage filter "+triage_filter_name+
" not found" );
414 if( triage_filter_it == filters.end() )
415 throw utility::excn::EXCN_RosettaScriptsOption(
"Triage filter "+triage_filter_name+
" not found" );
421 protocols::filters::Filters_map::const_iterator filter_it( filters.find( filter_name ) );
424 if( filter_it == filters.end() )
425 utility_exit_with_message(
"Filter "+filter_name+
" not found" );
428 if( filter_it == filters.end() )
429 throw utility::excn::EXCN_RosettaScriptsOption(
"Filter "+filter_name+
" not found" );
432 filter( filter_it->second );
434 protocols::moves::Movers_map::const_iterator mover_it( movers.find( relax_mover_name ) );
437 if( mover_it == movers.end() )
438 utility_exit_with_message(
"Relax mover "+relax_mover_name+
" not found" );
441 if( mover_it == movers.end() )
442 throw utility::excn::EXCN_RosettaScriptsOption(
"Relax mover "+relax_mover_name+
" not found" );
447 delta( tag->getOption<
bool >(
"delta",
false ) );
448 report_all( tag->getOption<
bool >(
"report_all",
false ) );
452 rtmin( tag->getOption<
bool >(
"rtmin",
false ) );
454 dump_pdb( tag->getOption<
bool >(
"dump_pdb",
false ) );
458 delta_filter_names.clear();
459 if( tag->hasOption(
"delta_filters" ) ){
460 delta_filter_names = utility::string_split( tag->getOption<
std::string >(
"delta_filters" ),
',' );
461 TR<<
"Using delta filters: ";
462 foreach(
std::string const fname, delta_filter_names ){