45 #include <basic/Tracer.hh>
52 using namespace ObjexxFCL::fmt;
58 namespace kinematics {
61 ShortestPathInFoldTree::~ShortestPathInFoldTree() {}
63 static basic::Tracer
tr(
"core.kinematics.ShortestPathInFoldTree",basic::t_info);
67 ShortestPathInFoldTree::ShortestPathInFoldTree(
69 ) : nres_( f.nres() ), max_dist_( 0 )
102 using namespace core::kinematics;
115 tr.Trace <<
"add jump " <<
start <<
"-" <<
stop << std::endl;
123 std::map< Size, Size>::const_iterator fit;
128 my_start = fit->second;
137 my_stop = fit->second;
142 edges.push_back(
Edge(my_start, my_stop, jump ) );
147 if ( f.
root() > 1 ) {
155 if (
tr.Trace.visible() ) {
156 tr.Trace <<
" jump_res_nr - seqpos \n";
157 for ( std::map< Size, Size>::const_iterator it=
jump_res_.begin(), eit=
jump_res_.end();
159 tr.Trace << it->second <<
" - " << it->first << std::endl;
162 tr.Trace <<
" jump-edges -- internal enumeration \n" ;
163 for ( EdgeList::const_iterator it=edges.begin(), eit=edges.end(); it!=eit; ++it ) {
164 tr.Trace << it->start() <<
" -- " << it->stop() << std::endl;
179 Size const inf( 12345678 );
184 for ( EdgeList::const_iterator it=edges.begin(), eit=edges.end(); it!=eit; ++it ) {
206 if ( it->is_jump() )
continue;
207 std::map< Size, Size>::const_iterator fit;
216 my_start = fit->second;
222 my_stop = fit->second;
226 if ( my_start > 0 && my_stop > 0 ) {
227 Size dd =
node_dist_( my_start, my_stop ) = std::abs( it->start() - it->stop() );
243 Size const jj_2_ii_2_kk = jj_2_ii + ii_2_kk;
245 if ( jj_2_kk > jj_2_ii_2_kk ) {
276 using namespace core::kinematics;
277 using namespace ObjexxFCL::fmt;
286 int start_jump =
get_jump( it->start() );
287 int stop_jump =
get_jump( it->stop() );
288 if ( start_jump < 0 ) leaves.push_back( it->start() );
289 if ( stop_jump < 0 ) leaves.push_back( it->stop() );
290 if ( !it->is_jump() ) {
291 for (
int seqpos = std::min(it->start(),it->stop()); seqpos<=std::max( it->stop(),it->start() ); seqpos++ ) {
294 res2jumps_( seqpos, 3 ) = std::abs( (
int) seqpos - (
int) it->start() );
296 res2jumps_( seqpos, 5 ) = std::abs( (
int) seqpos - (
int) it->stop() );
318 for (
Size i1 = 1; i1 <= leaves.size() ; i1++ ) {
319 for (
Size i2 = i1; i2 <= leaves.size() ; i2++ ) {
357 return std::abs( (
int) pos1 - (
int) pos2 );
362 return std::abs( (
int) pos1 - (
int) pos2 );
366 int const inf( 12345678 );
371 for (
Size ii=1; ii<=2 ; ++ii ) {
373 for (
Size jj=1; jj<=2; ++jj ) {
379 if ( dist < min_dist ) min_dist =
dist;
382 assert ( min_dist <=
nres_ );