17 #include <boost/algorithm/string.hpp>
22 #include <basic/datacache/BasicDataCache.hh>
23 #include <basic/datacache/CacheableString.hh>
24 #include <basic/Tracer.hh>
29 #include <utility/io/izstream.hh>
30 #include <utility/tag/Tag.hh>
36 #include <utility/vector0.hh>
37 #include <utility/vector1.hh>
41 using namespace boost;
44 using namespace protocols::jd2;
46 basic::Tracer
TR_SR(
"protocols.moves.StructureRestrictor");
51 StructureRestrictor::StructureRestrictor():
52 Mover(
"StructureRestrictor"),
91 if( tag->hasOption(
"relevant_chains") ){
98 string const & relevant_chains_fname,
99 map<string const, string const> & chain_map
101 if(relevant_chains_fname.length() == 0){
102 TR_SR.Error <<
" Cannot open relevant_chains_file '"<< relevant_chains_fname <<
"'" << endl;
105 utility::io::izstream relevant_chains_file( relevant_chains_fname );
106 if ( !relevant_chains_file ){
107 TR_SR.Error <<
" Cannot open relevant_chains_file '"<< relevant_chains_fname <<
"'" << endl;
110 TR_SR <<
"Reading in relevant chains from file '"<< relevant_chains_fname <<
"'" << endl;
114 vector<string> tokens;
115 getline(relevant_chains_file,line);
116 while( getline( relevant_chains_file, line ) ){
118 split(tokens, line, is_any_of(tab) );
119 chain_map.insert(std::pair<string const, string const>(tokens[0], tokens[1]));
128 string name =
"No_Name_Found";
131 }
else if ( pose.
data().has( datacache::CacheableDataType::JOBDIST_OUTPUT_TAG ) ) {
132 name =
static_cast< basic::datacache::CacheableString
const &
>
133 ( pose.
data().get( datacache::CacheableDataType::JOBDIST_OUTPUT_TAG ) ).
str();
135 name = JobDistributor::get_instance()->current_job()->input_tag();
149 map<string const, string const>::iterator i(
chain_map.find(name));
151 TR_SR <<
"No chain information found for structure " << name <<
"." << endl;
154 string chains = i->second;
155 TR_SR <<
"Restricting structure " << name <<
" to chains " << chains <<
"." << endl;
156 Size res_begin_delete = 1;
160 if(chains.find( pose.
pdb_info()->chain(i), 0) != string::npos){
162 if (res_begin_delete != i){
165 res_begin_delete = i+1;