17 #include <basic/options/option.hh>
18 #include <basic/options/keys/OptionKeys.hh>
19 #include <basic/options/keys/abinitio.OptionKeys.gen.hh>
20 #include <numeric/random/random.hh>
21 #include <numeric/random/WeightedReservoirSampler.hh>
22 #include <utility/exit.hh>
23 #include <utility/vector1.hh>
67 for (
Size i = start; i <=
stop; ++i) {
78 : alignment_(alignment), num_residues_(num_residues) {
81 using namespace basic::options;
82 using namespace basic::options::OptionKeys;
85 assert(num_residues > 0);
87 SequenceMapping mapping = alignment->sequence_mapping(1, 2);
90 for (
int i = 1; i < num_residues; ++i) {
93 bool curr_aligned = mapping[i];
94 bool next_aligned = mapping[i + 1];
95 bool broke = (mapping[i] + 1 != mapping[i + 1]) && next_aligned;
98 unaligned_res.push_back(i);
100 unaligned_res.push_back(i);
101 unaligned_res.push_back(i+1);
105 if (!mapping[num_residues]) {
106 unaligned_res.push_back(num_residues);
109 std::sort(unaligned_res.begin(), unaligned_res.end());
111 unaligned_res.resize(i - unaligned_res.begin());
113 int min_len = option[OptionKeys::abinitio::star::min_unaligned_len]();
126 utility_exit_with_message(
"Unsupported operation");
132 const Pose reference = *pose;
137 const Loop& f1 = (*aligned_)[1];
138 const Loop& f2 = (*aligned_)[2];
159 using numeric::random::WeightedReservoirSampler;
161 assert(start <= stop);
164 return numeric::random::random_range(start, stop);
167 WeightedReservoirSampler<int> sampler(1);
169 for (
int i = start; i <=
stop; ++i) {
170 double weight =
pred_ss_->loop_fraction(i) + 1e-20;
171 sampler.consider_sample(i, weight);
175 sampler.samples(&samples);