41 #include <basic/options/option.hh>
48 #include <ObjexxFCL/string.functions.hh>
51 #include <numeric/random/random.hh>
55 #include <basic/Tracer.hh>
64 #include <basic/options/keys/loops.OptionKeys.gen.hh>
66 #include <utility/vector1.hh>
70 static basic::Tracer
tr(
"protocols.general_abinitio",basic::t_info);
71 static numeric::random::RandomGenerator
RG(19879234);
82 return "DoubleLayerKinematicAbinitio";
93 while (loops_out.
size() == 0 && ntries++ < 50) {
96 if (
RG.uniform() >= it->skip_rate() ) {
101 if ( loops_out.
size() == 0 ) {
102 loops_out = rigid_loops_;
115 using namespace basic::options;
116 using namespace basic::options::OptionKeys;
120 if ( rigid_loops_.size() > 0 ) {
121 select_core_loops( rigid_core );
123 tr.Debug << rigid_core << std::endl;
126 if ( rigid_core.size() && coordinate_constraint_weight_ > 0.0 ) {
133 bool loop_file_is_present = option[ OptionKeys::loops::mm_loop_file ].user();
136 if( !loop_file_is_present ) {
137 mmloops = flexible_part;
144 if ( mmloops.
size() && coordinate_constraint_weight_ == 0.0 ) {
145 rigid_core.switch_movemap( *movemap,
id::BB,
false );
149 movemap->set_bb(
true );
154 bool success(
true );
155 current_kinematics->set_final_fold_tree( pose.
fold_tree() );
156 success = parse_jump_def( current_kinematics, movemap );
158 current_kinematics->set_movemap( movemap );
160 if ( rigid_core.size() ) {
161 success &= add_rigidity_jumps( rigid_core, current_kinematics );
163 tr.Warning <<
"[WARNING] was not able to fix rigid regions with jumps...retry" << std::endl;
168 pose.
fold_tree( current_kinematics->sampling_fold_tree() );
172 if ( rigid_core.size() && coordinate_constraint_weight_ != 0.0 ) {
173 success = add_coord_cst( rigid_core, pose );
175 return current_kinematics;
182 bool success(
false );
185 current_kinematics_ = NULL;
186 while ( fail++ <= 10 && !current_kinematics_ ) {
188 current_kinematics_ = new_kinematics( pose );
192 if ( current_kinematics_ &&
tr.Info.visible() ) {
193 tr.Info <<
"kinematic choice:\n";
195 current_kinematics_->sampling_fold_tree(),
196 current_kinematics_->movemap(),
199 tr.Info <<
"\nfinal_fold-tree:\n";
204 if ( current_kinematics_ ) {
209 extended_movemap->set_bb(
false );
210 extended_loops_.switch_movemap( *extended_movemap,
id::BB,
true );
213 stage1_kinematics->set_movemap( extended_movemap );
214 stage1_sampler_->set_kinematics( stage1_kinematics );
215 stage1_sampler_->set_current_tag( get_current_tag() +
"_presampled" );
216 stage1_sampler_->apply( pose );
218 sampling_protocol()->set_kinematics( current_kinematics() );
219 sampling_protocol()->apply( pose );