38 #include <utility/vector1.fwd.hh>
39 #include <utility/exit.hh>
41 #include <utility/pointer/owning_ptr.hh>
43 #include <basic/Tracer.hh>
50 #include <utility/vector1.hh>
56 using namespace kinematics;
58 static basic::Tracer
tr(
"core.fragment");
73 return region( move_map, start, end, min_overlap, min_length, frames );
85 for ( FragID_List::iterator it=list.begin(), eit=list.end(); it!=eit; ++it,++pos ) {
86 if ( !handled[ pos ] ) {
87 FrameOP new_frame = it->frame().clone();
89 for ( FragID_List::iterator sit=it; sit!=eit; ++sit, spos++ ) {
90 if ( sit->frame_ptr() == it->frame_ptr() ) {
91 handled[ spos ] =
true;
92 new_frame->add_fragment( &( sit->fragment() ) );
93 new_frame->clone_cache_data( it->frame(), it->id(), new_frame->nr_frags() );
97 tr.Debug << pos <<
": add frame " << new_frame <<
" " << new_frame->nr_frags() << std::endl;
106 runtime_assert( aFrame.nr_frags() );
109 Size length( aFrame.length() );
111 if ( min_pos() >
start ) {
112 set_min_pos(
start );
115 if ( max_pos() <
end ) {
120 if ( length > max_frag_length() ) {
121 tr.Trace <<
"set max frag length " << length << std::endl;
122 set_max_frag_length( length );
127 Size nr_present = frames(
start, present_frames );
129 for ( FrameList::iterator it = present_frames.begin(),
130 eit = present_frames.end(); it!=eit; ++it ) {
131 if ( (*it)->is_mergeable( aFrame ) ) {
132 Size const new_id( (*it)->add_fragment( const_cast< FragData*>( frag_id.
fragment_ptr().get() ) ) );
133 (*it)->clone_cache_data( aFrame, frag_id.
id(), new_id );
140 FrameOP new_frame = aFrame.clone();
141 Size const new_id( new_frame->add_fragment( const_cast< FragData*>( frag_id.
fragment_ptr().get() ) ) );
142 new_frame->clone_cache_data( aFrame, frag_id.
id(), new_id );
148 tr.Debug <<
"generate insert map from Movemap:\n";
149 for (
Size i = 1; i<=max_pos(); i++) {
150 if ( mm.
get_bb( i ) )
tr.Debug <<
"*";
151 else tr.Debug <<
"x";
153 tr.Debug << std::endl;
154 typedef std::map< Size, Size> InsertSet;
155 InsertSet insert_set;
158 Size size ( it->is_valid() ? it->is_applicable( mm ) : 0 );
160 if ( insert_set[ it->start() ] <
size ) insert_set[ it->start() ] =
size;
166 if( insert_set.size() != 0){
167 insert_size.resize( insert_set.rbegin()->first );
171 for ( InsertSet::const_iterator it=insert_set.begin(), eit=insert_set.end();
173 insert_map.push_back( it->first );
174 insert_size[ it->first ] = it->second;
181 tot+=(*it)->nr_frags();
197 runtime_assert( aFrame->nr_frags() );
200 Size length( aFrame->length() );
202 if ( min_pos() >
start ) {
203 set_min_pos(
start );
206 if ( max_pos() <
end ) {
211 if ( length > max_frag_length() ) {
212 tr.Trace <<
"set max frag length " << length << std::endl;
213 set_max_frag_length( length );
218 Size nr_present = frames(
start, present_frames );
222 for ( FrameList::iterator it = present_frames.begin(),
223 eit = present_frames.end(); it!=eit; ++it ) {
224 if ( (*it)->is_mergeable( *aFrame ) ) {
225 (*it)->merge( *aFrame );
236 for ( FrameList::const_iterator it=frames.begin(), eit=frames.end(); it!=eit; ++it ) {