22 #include <basic/options/option.hh>
29 #include <numeric/random/random.hh>
30 #include <basic/prof.hh>
31 #include <basic/Tracer.hh>
41 #include <basic/options/keys/run.OptionKeys.gen.hh>
43 #include <utility/vector1.hh>
44 #include <ObjexxFCL/format.hh>
52 namespace simple_moves {
54 static numeric::random::RandomGenerator
RG(489);
57 using namespace fragment;
58 using namespace basic;
60 static basic::Tracer
tr(
"protocols.simple_moves.FragmentMover");
73 movemap->set_bb(
true );
96 return "FragmentMover";
103 if ( !
fragset_->frames( *it, frames ) )
continue;
104 for ( FrameList::const_iterator fit = frames.begin(); fit != frames.end(); ++fit ) {
106 one_frame.push_back( *fit );
161 ) :
FragmentMover( fragset, movemap,
"ClassicFragmentMover" )
171 ) :
FragmentMover(fragset.
clone(), new core::kinematics::MoveMap(movemap),
"ClassicFragmentMover" )
200 return "ClassicFragmentMover";
205 FrameList
const& frames,
211 runtime_assert( frames.size() );
212 for (
Size nfail = 1; nfail <= 100; nfail ++ ) {
215 frame_num =
static_cast< int >(
RG.uniform() * frames.size() ) + 1;
216 Size N ( frames[ frame_num ]->nr_frags() );
220 frag_num =
static_cast< int >(
RG.uniform() *
N ) + 1;
229 using namespace basic::options;
230 check_ss_ = !option[ basic::options::OptionKeys::run::remove_ss_length_screen ]();
251 runtime_assert( begin > 0 && begin <=
insert_size_.size() );
257 tr.Error <<
"BEGIN: " << begin <<
" SIZE: " << size <<
" TOTAL_RES: " << pose.
total_residue() << std::endl;
258 tr.Error <<
"Are the fragments compatible with the fasta or the input PDB used to extract the folding sequence ? " << std::endl;
259 tr.Error <<
"It appears that the fragments go up to residue " << begin + size - 1 <<
" while the pose only has " << pose.
total_residue() <<
" residues!" << std::endl;
260 utility_exit_with_message(
"Assertion failure: runtime_assert( ( begin + size - 1 ) <= pose.total_residue() ); " );
264 Size min_fixed_residues;
268 Size const fixed_residues =
277 Real bias = std::exp( factor * ( (
Real) min_fixed_residues - fixed_residues ) /
end_bias() );
280 return ( r <= bias );
297 if (
tr.Trace.visible() ) {
298 tr.Trace <<
"size of insertmap: " << total_insert <<
" -- ";
299 tr.Trace <<
"insert_size: ";
301 tr.Trace << std::endl;
304 if ( !total_insert ) {
305 tr.Warning <<
"empty insert map ... no fragment insertion attempted" << std::endl;
310 while ( nfail < 100 ) {
312 begin =
insert_map_[
static_cast< int >(
RG.uniform() * total_insert ) + 1 ];
332 return frame.apply( movemap, frag_num, pose );
338 return "LoggedFragmentMover";
348 bool success = Parent::apply_fragment( frame, frag_num, movemap, pose );
350 logs_.push_back(
Item( frame.
start(), frag_num ) );
357 using namespace ObjexxFCL::fmt;
358 for ( Storage::const_iterator it=logs_.begin(), eit=logs_.end(); it!=eit; ++it) {
359 out << RJ(5, it->frame_pos) <<
' ' << RJ(5, it->frag_num) << std::endl;
376 for (
Size i = 1; i < new_ss.size(); ++i ) {
377 if ( new_ss[i-1] ==
'H' ) ++helix_len;
378 if ( new_ss[i-1] ==
'E' ) ++strand_len;
379 if ( new_ss[i-1] != new_ss[i] ) {
380 if ( helix_len != 0 && helix_len < 3 ) {
381 tr.Trace <<
"short helix_len" << std::endl;
385 if ( strand_len != 0 && strand_len < 2 ) {
386 tr.Trace <<
"short strand_len" << std::endl;
400 PROF_START( basic::FRAGMENT_MOVER );
410 bool success (
false );
414 bool insert_map_definitely_right(
false );
417 while ( !success && ( nfail < 100 ) ) {
421 while ( nfail < 100 && frames.size() == 0 ) {
438 if ( !
fragset_->region( *
movemap(), frag_begin, frag_begin + window_length - 1,
441 if ( !insert_map_definitely_right ) {
442 insert_map_definitely_right =
true;
443 tr.Debug <<
"didn't find fragment at predicted position ==> update_insert_map() " << std::endl;
446 utility_exit_with_message(
" couldn't find fragments --- inconsistency in the insert map " );
456 if ( frames.size() ) {
463 tr.Error <<
"couldn't find fragment to insert!!" << std::endl;
466 PROF_STOP( basic::FRAGMENT_MOVER );
473 bool success(
false );
474 if ( !
choose_fragment( frames, pose, frame_num , frag_num ) )
return false;
475 if (
tr.Trace.visible() )
tr.Trace
476 <<
"frag (" << frames[ frame_num ]->start() <<
","
478 << frames[ frame_num ]->nr_res_affected( *
movemap_ )
496 frames[ frame_num ]->apply_ss( *
movemap_, frag_num, proposed_ss );
513 os <<
"-------------------Settings--------------------" << std::endl;
514 os <<
"End bias: " << cfmover.
end_bias_ << std::endl <<
517 "Check ss: " << ( (cfmover.
check_ss_) ?
"True" :
"False" ) << std::endl <<
518 "bApplyEndBias: " << ( ( cfmover.
bApplyEndBias_ ) ?
"True" :
"False" ) << std::endl <<
521 os <<
"-----------------------------------------------" << std::endl;
522 os <<
"Movemap: " << std::endl;
524 os <<
"**Unless a movemap is specified above, all backbone torsion angles are set to TRUE**" << std::endl;
530 if ( !
fragset_->frames( pos, frames ) )
return false;