31 #include <ObjexxFCL/format.hh>
32 #include <numeric/xyz.functions.hh>
33 #include <numeric/random/random.hh>
34 #include <numeric/model_quality/rms.hh>
35 #include <numeric/model_quality/maxsub.hh>
37 #include <basic/options/option.hh>
38 #include <basic/options/keys/OptionKeys.hh>
39 #include <basic/options/keys/in.OptionKeys.gen.hh>
40 #include <basic/options/keys/constraints.OptionKeys.gen.hh>
41 #include <basic/options/keys/cm.OptionKeys.gen.hh>
42 #include <basic/options/keys/rigid.OptionKeys.gen.hh>
43 #include <basic/Tracer.hh>
45 static numeric::random::RandomGenerator
RG(57029435);
46 static basic::Tracer
TR(
"protocols.hybridization.ChunkTrialMover" );
49 namespace hybridization {
52 using namespace core::kinematics;
53 using namespace ObjexxFCL;
54 using namespace protocols::moves;
55 using namespace protocols::loops;
56 using namespace numeric::model_quality;
58 using namespace basic::options;
59 using namespace basic::options::OptionKeys;
67 Size max_registry_shift ) :
68 template_poses_(template_poses),
69 template_chunks_(template_chunks),
70 random_template_(random_template),
71 align_option_(align_option),
73 max_registry_shift_input_(max_registry_shift)
76 bool alignment_from_template = option[cm::hybridize::alignment_from_template_seqpos]();
83 utility_exit_with_message(
"Template structures need at least one secondary structure for this protocol");
88 std::map <core::Size, core::Size> sequence_alignment;
90 sequence_alignment.clear();
91 if (alignment_from_template) {
95 std::map <core::Size, core::Size> chunk_mapping;
96 if (option[cm::hybridize::alignment_from_chunk_mapping].user()) {
97 for (
Size i=1;i<=option[cm::hybridize::alignment_from_chunk_mapping]().
size();++i) {
98 chunk_mapping[i] = option[cm::hybridize::alignment_from_chunk_mapping]()[i];
111 std::map <core::Size, core::Size> & seqpos_alignment
114 for (
core::Size ires=1; ires<=template_pose->total_residue(); ++ires) {
115 TR.Debug <<
"Sequence aln: " << template_pose->pdb_info()->number(ires) <<
" " << ires << std::endl;
116 seqpos_alignment[template_pose->pdb_info()->number(ires)] = ires;
122 Loops const template_ss_chunks,
123 Loops const target_ss_chunks,
124 std::map <core::Size, core::Size> & sequence_alignment)
127 for (
Size i_chunk_pose = 1; i_chunk_pose <= target_ss_chunks.
size(); ++i_chunk_pose) {
128 if (chunk_mapping.find(i_chunk_pose) == chunk_mapping.end())
continue;
129 core::Size j_chunk_template = chunk_mapping.find(i_chunk_pose)->second;
131 Size respos_mid_pose = (target_ss_chunks[i_chunk_pose].start() + target_ss_chunks[i_chunk_pose].stop()) / 2;
132 Size respos_mid_template = (template_ss_chunks[j_chunk_template].start() + template_ss_chunks[j_chunk_template].stop()) / 2;
133 int offset = respos_mid_template - respos_mid_pose;
135 using namespace ObjexxFCL::fmt;
136 if (target_ss_chunks[i_chunk_pose].length() <= template_ss_chunks[j_chunk_template].length()) {
138 for (
Size ires=target_ss_chunks[i_chunk_pose].
start(); ires<=target_ss_chunks[i_chunk_pose].stop(); ++ires) {
139 sequence_alignment[ires] = ires+offset;
145 for (
Size ires_templ=template_ss_chunks[j_chunk_template].
start(); ires_templ<=template_ss_chunks[j_chunk_template].stop(); ++ires_templ) {
146 sequence_alignment[ires_templ-offset] = ires_templ;
163 utility_exit_with_message(
"Fatal error in ChunkTrialMover::pick_random_template()");
186 utility_exit_with_message(
"Fatal error in ChunkTrialMover::pick_random_chunk()");
230 TR.Debug <<
"Warning! This chunk might not be aligned, jump number " << jump_number << std::endl;
238 return "ChunkTrialMover";