22 #include <basic/Tracer.hh>
26 #include <utility/io/izstream.hh>
27 #include <utility/string_util.hh>
28 #include <boost/lexical_cast.hpp>
31 #include <utility/vector1.hh>
33 static basic::Tracer
TR(
"protocols.jd2.parser.BluePrint");
43 BluePrint::BluePrint() :
45 total_residue_wolig_( 0 ),
48 strand_pairings_(
"" ),
49 helix_pairings_(
"" ),
57 total_residue_wolig_( 0 ),
60 strand_pairings_(
"" ),
61 helix_pairings_(
"" ),
65 TR.Error <<
"Error in reading blueprint file " << filename << std::endl;
79 total_residue_( src.total_residue_ ),
80 total_residue_wolig_( src.total_residue_wolig_ ),
81 sequence_( src.sequence_ ),
82 secstruct_( src.secstruct_ ),
83 resnum_( src.resnum_ ),
84 resname_( src.resname_ ),
85 sstype_( src.sstype_ ),
87 buildtype_( src.buildtype_ ),
88 resnum_map_( src.resnum_map_ ),
89 strand_pairings_( src.strand_pairings_ ),
90 helix_pairings_( src.helix_pairings_ ),
91 hss_triplets_( src.hss_triplets_ )
123 assert( seqpos >= 1 );
146 runtime_assert( seqpos >= 1 && seqpos <=
abego_.size() );
154 assert( seqpos >= 1 && seqpos <=
buildtype_.size() );
163 assert( seqpos >= 1 && seqpos <=
buildtype_.size() );
172 std::map<Size,Size>::const_iterator itr;
175 Size resnum_blueprint = itr->second;
176 return resnum_blueprint;
187 assert( seqpos >= 1 && seqpos <=
buildtype_.size() );
195 assert( seqpos >= 1 && seqpos <=
extra_.size() );
244 using utility::string_split;
246 utility::io::izstream data( filename );
248 TR.Error <<
"can not open blueprint file " << filename << std::endl;
257 Size linecount( 0 ), count( 0 );
258 while( getline( data, line ) ) {
263 if( tokens[1][0] ==
'#' )
continue;
265 if( tokens[1] ==
"FOLDINFO" || tokens[1] ==
"SSPAIR" || tokens[1] ==
"HHPAIR" || tokens[1] ==
"HSSTRIPLET" ) {
268 if( tokens.size() > 2 ) {
269 TR.Error <<
"error parsing at " << linecount <<
" in " << filename << std::endl;
273 if( tokens[1] ==
"SSPAIR" || tokens[1] ==
"FOLDINFO" ) {
276 }
else if( tokens[1] ==
"HHPAIR" ) {
279 }
else if( tokens[1] ==
"HSSTRIPLET" ) {
284 }
else if( tokens[1] ==
"INSERT" ) {
294 for(
core::Size i(1); i <= tokens.size(); ++i ){
295 if( tokens[i][0] ==
'#' ){
296 tokens.resize( i - 1 );
300 runtime_assert( tokens.size() == 3 || tokens.size() == 4 || tokens.size() == 5 );
303 Size ii = boost::lexical_cast<
Size>( tokens[1] );
304 char aa ( tokens[2][0] );
305 char sec( tokens[3][0] );
307 if( tokens[3].length() > 1 ) {
310 for(
Size k=2; k<=tokens[3].length(); k++ ) {
313 abego = tokens[3].substr( 1, tokens[3].length() - 1 );
319 if ( sec !=
'E' && sec !=
'H' && sec !=
'L' && sec !=
'D' ) {
320 TR.Error <<
"unrecognized secstruct char : " << sec <<
" at lines " << linecount <<
" in " << filename << std::endl;
327 abego_.push_back( abego );
329 resnum_map_.insert( std::map<Size, Size>::value_type( ii, count ) );
332 if( tokens.size() >= 4 ) {
334 char build( tokens[4][0] );
335 if( build !=
'.' && build !=
'R' && build !=
'I' && build !=
'X' &&
336 build !=
'F' && build !=
'P' && build !=
'C' && build !=
'W' ) {
337 TR.Error <<
"unrecognized build char : " << build <<
" at lines " << linecount <<
" in " << filename << std::endl;
340 if( ii == 0 && build ==
'.' ) {
341 TR.Error <<
"Cannot have simultaneously '0' at 1st column and '.' in 4th column in blueprint " << std::endl;
346 if( tokens.size() >= 5 ) {
348 extra_.push_back( extra );
362 assert( total_residue_ > 0 );
366 if(
extra( ii ) ==
"LIGAND" )
continue;
396 movemap->set_bb( i,
true );
397 movemap->set_chi( i,
true );
399 movemap->set_bb( i,
false );
400 movemap->set_chi( i,
true );
401 TR.Debug <<
"At residue " << i <<
", Backbone is freezed." << std::endl;
403 movemap->set_bb( i,
true );
404 movemap->set_chi( i,
false );
405 TR.Debug <<
"At residue " << i <<
", Rotamer is freezed." << std::endl;
407 movemap->set_bb( i,
false );
408 movemap->set_chi( i,
false );
409 TR.Debug <<
"At residue " << i <<
", both backbone and rotamer are freezed. " << std::endl;
411 movemap->set_bb( i,
true );
412 movemap->set_chi( i,
true );
423 if( resi == 0 )
continue;