21 #include <basic/options/option.hh>
22 #include <basic/options/keys/OptionKeys.hh>
23 #include <basic/options/keys/abinitio.OptionKeys.gen.hh>
24 #include <basic/options/keys/cm.OptionKeys.gen.hh>
25 #include <basic/options/keys/constraints.OptionKeys.gen.hh>
26 #include <basic/options/keys/in.OptionKeys.gen.hh>
27 #include <basic/options/keys/jumps.OptionKeys.gen.hh>
28 #include <basic/Tracer.hh>
29 #include <numeric/interpolate.hh>
30 #include <numeric/prob_util.hh>
31 #include <numeric/xyzVector.hh>
32 #include <ObjexxFCL/FArray1D.hh>
33 #include <ObjexxFCL/FArray2D.hh>
34 #include <utility/exit.hh>
35 #include <utility/vector1.hh>
82 static basic::Tracer
TR(
"protocols.star.StarAbinitio");
100 probs->resize(num_residues, 1);
102 numeric::normalize(probs->begin(), probs->end());
103 numeric::print_probabilities(*probs,
TR);
114 new_cst->set_max_seq_sep(distance);
116 TR <<
"max_seq_sep => " << distance << std::endl;
127 using namespace basic::options;
128 using namespace basic::options::OptionKeys;
133 for (
Size i = 1; i <= aligned.
size(); ++i) {
134 const Loop& ci = aligned[i];
136 for (
Size j = i + 1; j <= aligned.
size(); ++j) {
137 const Loop& cj = aligned[j];
148 if (distance <= option[OptionKeys::abinitio::star::initial_dist_cutoff]()) {
150 TR <<
"AtomPair CA " << k <<
" CA " << l <<
" HARMONIC " << distance <<
" 2" << std::endl;
159 TR.Error <<
"Failed to define constraints between chunks in the non-local pairing" << std::endl;
160 TR.Error <<
"Check -abinitio:star:initial_dist_cutoff" << std::endl;
164 Size max_dist_ft = ShortestPathInFoldTree(pose->
fold_tree()).max_dist();
175 using namespace basic::options;
176 using namespace basic::options::OptionKeys;
197 assert(interior_cuts.size() == (aligned.
num_loop() - 1));
200 const Size vres = num_residues + 1;
208 jumps.push_back(std::make_pair(vres, aligned[i].midpoint()));
212 cuts.push_back(num_residues);
214 ObjexxFCL::FArray2D_int ft_jumps(2, jumps.size());
215 for (
Size i = 1; i <= jumps.size(); ++i) {
216 ft_jumps(1, i) = std::min(jumps[i].first, jumps[i].second);
217 ft_jumps(2, i) = std::max(jumps[i].first, jumps[i].second);
220 ObjexxFCL::FArray1D_int ft_cuts(cuts.size());
221 for (
Size i = 1; i <= cuts.size(); ++i) {
222 ft_cuts(i) = cuts[i];
232 runtime_assert(status);
240 using namespace basic::options;
241 using namespace basic::options::OptionKeys;
254 extender.extend_unaligned(&pose);
257 const Loops& aligned = *(extender.aligned());
259 TR <<
"Aligned: " << aligned << std::endl;
262 setup_kinematics(aligned, extender.cutpoints(), &pose);
269 MoverOP fragments_lg_uni =
new BiasedFragmentMover(PolicyFactory::get_policy(
"uniform", fragments_lg_, 25), probs_lg);
270 MoverOP fragments_sm_uni =
new BiasedFragmentMover(PolicyFactory::get_policy(
"uniform", fragments_sm_, 200), probs_sm);
271 MoverOP fragments_sm_smo =
new BiasedFragmentMover(PolicyFactory::get_policy(
"smooth", fragments_sm_, 200), probs_sm);
274 const Real mult = option[OptionKeys::abinitio::increase_cycles]();
275 const Real temperature = option[OptionKeys::abinitio::temperature]();
276 const Real chainbreak = option[OptionKeys::jumps::increase_chainbreak]();
285 TR <<
"Stage 1" << std::endl;
286 RationalMonteCarlo rmc(fragments_lg_uni, score_stage1, static_cast<Size>(mult * 2000), temperature,
true);
289 configure_rmc(fragments_sm_uni, score_stage1, static_cast<Size>(mult * 2000), temperature,
true, &rmc);
294 TR <<
"Stage 2" << std::endl;
295 configure_rmc(fragments_lg_uni, score_stage2, static_cast<Size>(mult * 4000), temperature,
true, &rmc);
299 configure_rmc(fragments_sm_uni, score_stage2, static_cast<Size>(mult * 4000), temperature,
true, &rmc);
304 TR <<
"Stage 3" << std::endl;
305 for (
Size i = 1; i <= 10; ++i) {
306 ScoreFunctionOP score = ((i % 2) == 0 && i <= 7) ? score_stage3a : score_stage3b;
307 configure_rmc(fragments_lg_uni, score, static_cast<Size>(mult * 4000), temperature,
true, &rmc);
310 configure_rmc(fragments_sm_uni, score, static_cast<Size>(mult * 4000), temperature,
true, &rmc);
316 TR <<
"Stage 4" << std::endl;
317 configure_rmc(fragments_sm_smo, score_stage4, static_cast<Size>(mult * 8000), temperature,
true, &rmc);
318 for (
Size i = 1; i <= 3; ++i) {
331 using namespace basic::options;
332 using namespace basic::options::OptionKeys;
342 fragments_lg_ = io.read_data(option[in::file::frag9]());
343 fragments_sm_ = io.read_data(option[in::file::frag3]());
346 if (option[in::file::psipred_ss2].user()) {
347 pred_ss_ =
new SecondaryStructure();
348 pred_ss_->read_psipred_ss2(option[in::file::psipred_ss2]());
350 pred_ss_ =
new SecondaryStructure(*fragments_sm_);
357 MinimizerOptionsOP min_options =
new MinimizerOptions(
"lbfgs_armijo_nonmonotone", 0.01,
true,
false,
false);
358 min_options->max_iter(100);
365 minimizer_ =
new SaneMinMover(mm, min_score, min_options,
true);
369 return "StarAbinitio";