22 #include <utility/string_util.hh>
23 #include <utility/exit.hh>
30 #include <boost/lexical_cast.hpp>
31 #include <basic/Tracer.hh>
33 #include <utility/vector1.hh>
37 static basic::Tracer
TR(
"protocols.topology.StrandPairing" );
48 StrandPairing::StrandPairing():
82 runtime_assert( s1 < s2 );
83 runtime_assert( b1 < b2 );
86 residue_pair_.insert( std::map< Size, Size >::value_type( b1, b2 ) );
87 residue_pair_.insert( std::map< Size, Size >::value_type( b2, b1 ) );
109 runtime_assert( s1 < s2 );
123 runtime_assert( parts.size() == 3 );
126 s1_ = boost::lexical_cast<
Size>( st[1] );
127 s2_ = boost::lexical_cast<
Size>( st[2] );
128 runtime_assert(
s1_ < s2_ );
142 using namespace boost;
191 runtime_assert( r2 > r1 );
194 residue_pair_.insert( std::map< Size, Size >::value_type( r1, r2 ) );
195 residue_pair_.insert( std::map< Size, Size >::value_type( r2, r1 ) );
237 runtime_assert( r2 > r1 );
239 if(
orient_ != orient )
return false;
241 residue_pair_.insert( std::map< Size, Size >::value_type( r1, r2 ) );
242 residue_pair_.insert( std::map< Size, Size >::value_type( r2, r1 ) );
255 }
else if(
end1_ <= r1 ) {
262 }
else if(
end2_ <= r2 ) {
331 Real ir_ist = ss_info->strand(
s1_ )->begin();
332 Real len_ist = ss_info->strand(
s1_ )->length();
333 Real ir_jst = ss_info->strand(
s2_ )->begin();
334 Real er_jst = ss_info->strand(
s2_ )->end();
335 Real len_jst = ss_info->strand(
s2_ )->length();
337 Real start_ist, start_jst, len,inc;
346 if( len_ist >= (len_jst+rgstr_shift_) ) {
358 if( len_ist >= (len_jst+rgstr_shift_) ) {
376 if( len_ist >= (len_jst+rgstr_shift_) ) {
390 if( len_ist >= (len_jst+rgstr_shift_) ) {
404 for(
Size i=1; i<=len ;i++ ) {
405 runtime_assert( start_ist > 0 && start_jst > 0 );
407 TR <<
"elongation failed ! " << std::endl;
408 runtime_assert(
false );
421 spairset_name_(
"" ),
430 strand_pairings_( strand_pairings ),
431 spairset_name_(
"" ),
442 spairset_name_(
"" ),
447 if( spairstring ==
"" ) {
456 sp->redefine_begin_end( ssinfo );
466 spairset_name_(
"" ),
478 strand_pairings_( s.strand_pairings_ ),
479 spairset_name_( s.spairset_name_ ),
480 num_strands_( s.num_strands_ ),
481 finalized_( s.finalized_ ),
482 map_strand_pairings_( s.map_strand_pairings_ ),
483 neighbor_strands_( s.neighbor_strands_ ),
503 out <<
"#### StrandPairingSet Info " << std::endl;
504 out <<
"# " << s.
name() << std::endl;
507 for( StrandPairings::const_iterator iter = spairs.begin(); iter != spairs.end(); ++iter ) {
508 out <<
"# " << (**iter) << std::endl;
607 std::ostringstream
name;
612 runtime_assert( sp.size() == 3 );
614 spairs = sp[ 1 ] +
'.' + sp[ 2 ];
616 spairs = spairs +
';' + sp[ 1 ] +
'.' + sp[ 2 ];
626 return ( a->name() < b->name() );
680 neighbor1.push_back( spair->s2() );
681 neighbor2.push_back( spair->s1() );
692 return ( a->size1() > b->size1() );
704 for(
Size ii=1; ii<=drop_spairs.size(); ii++ ) {
734 bool modified(
false );
742 for ( VecSize::const_iterator
749 for(
Size i=3; i<=spairs.size(); i++ ) {
750 if( pairmap[ spairs[ i ]->s1() ][ spairs[ i ]->s2() ] )
continue;
751 pairmap[ spairs[ i ]->s1() ][ spairs[ i ]->s2() ] =
true;
752 pairmap[ spairs[ i ]->s2() ][ spairs[ i ]->s1() ] =
true;
753 drop_spairs.push_back( spairs[ i ] );
781 for ( DimerPairings::const_iterator it=dimer_pairs.begin(); it != dimer_pairs.end(); ++it ) {
791 Size ist_begin = ssinfo.
strand( istrand )->begin();
792 Size jst_begin = ssinfo.
strand( jstrand )->begin();
793 Size jst_length = ssinfo.
strand( jstrand )->length();
804 spop->add_pair( iaa, jaa+1, dp.
orient(), rgstr );
805 spop->add_pair( iaa+1, jaa, dp.
orient(), rgstr );
807 }
else if( dp.
orient() ==
'P' ) {
810 spop->add_pair( iaa, jaa, dp.
orient(), rgstr );
811 spop->add_pair( iaa+1, jaa+1, dp.
orient(), rgstr );
814 runtime_assert(
false );