23 #include <utility/io/ozstream.hh>
28 #include <basic/options/option.hh>
29 #include <basic/options/keys/OptionKeys.hh>
30 #include <basic/options/keys/in.OptionKeys.gen.hh>
31 #include <basic/options/keys/frags.OptionKeys.gen.hh>
36 #include <boost/tuple/tuple.hpp>
39 #include <basic/Tracer.hh>
42 #include <utility/vector1.hh>
46 namespace frag_picker {
49 using namespace basic::options;
50 using namespace basic::options::OptionKeys;
53 "protocols.frag_picker.scores.AmbigCSScore");
69 CS2ndShift secondary_shift_calculatorA(readerA,
false);
70 CS2ndShift secondary_shift_calculatorB(readerB,
false);
71 trAmbigCSScore <<
"SHOULD BE DONE WRITING 2nd SHIFTS" << std::endl;
87 trAmbigCSScore <<
"caching CS score for " << current_chunk->get_pdb_id()
88 <<
" of size " << current_chunk->size() << std::endl;
99 std::pair< Real, Real > empty(0,0);
105 Real a( option[frags::sigmoid_cs_A]() );
106 Real b( option[frags::sigmoid_cs_B]() );
114 if (query_residue_shiftsA.size() != query_residue_shiftsB.size()) {
115 utility_exit_with_message(
"ERROR: -in::file::ambig_talos_cs_A file does not have the same number of shifts as -in::file::ambig_talos_cs_B file, check your formatting, aside from the shifts themselves the files must be identical");
118 for (
Size i = 1; i <= current_chunk->size(); ++i) {
121 for (
Size d = 1; d <= query_residue_shiftsA.size(); ++d) {
124 Size q_shift_typeA(query_residue_shiftsA[d].first);
125 Real q_shiftA(query_residue_shiftsA[d].second);
127 Size q_shift_typeB(query_residue_shiftsB[d].first);
128 Real q_shiftB(query_residue_shiftsB[d].second);
130 if (q_shift_typeA != q_shift_typeB) {
131 utility_exit_with_message(
"ERROR: -in::file::ambig_talos_cs_A file does not match -in::file::ambig_talos_cs_B file, check your formatting, aside from the shifts themselves the files must be identical, even the order matters");
138 Real v_shift(res->secondary_shifts()[(q_shift_typeA*2)-1]);
139 Real v_sigma(res->secondary_shifts()[ q_shift_typeA*2 ]);
144 Real sig_diffA(std::abs((q_shiftA - v_shift) / v_sigma ));
145 Real sig_diffB(std::abs((q_shiftB - v_shift) / v_sigma ));
148 if ( sig_diffB < sig_diffA ) {
149 sig_diffA = sig_diffB;
152 Real sigmoid_diff( 1 / ( 1 + exp((-a*sig_diffA)+b) ) );
175 if ( ( count == 0 ) && ( query_residue_shiftsA.size() != 0 ) ) {
183 tmp = ( tmp / count ) * query_residue_shiftsA.size();
186 temp[i][r].first = tmp;
187 temp[i][r].second = count;
195 trAmbigCSScore <<
"caching CS score for " << current_chunk->get_pdb_id()
196 <<
" of size " << current_chunk->size()
197 <<
". The matrix is: "<<
scores_.size()<<
" x "<<
scores_[1].size()<<std::endl;
206 std::string & tmp = fragment->get_chunk()->chunk_key();
216 Real totalScore = 0.0;
217 Real totalCount = 0.0;
219 for (
Size i = 1; i <= fragment->get_length(); i++) {
220 runtime_assert(fragment->get_first_index_in_vall() + i - 1 <=
scores_.size());
221 runtime_assert(fragment->get_first_index_in_query() + i - 1 <=
scores_[1].size());
224 std::pair< Real, Real> tmp =
scores_[fragment->get_first_index_in_vall() + i - 1]
225 [fragment->get_first_index_in_query() + i - 1];
230 totalScore += tmp.first;
231 totalCount += tmp.second;
236 scores->set_score_component(totalScore,
id_);
251 if (option[in::file::ambig_talos_cs_A].user() &&
252 option[in::file::ambig_talos_cs_B].user()) {
253 CSTalosIO inA(option[in::file::ambig_talos_cs_A]());
254 CSTalosIO inB(option[in::file::ambig_talos_cs_B]());
255 inA.
write(std::cerr);
256 inB.
write(std::cerr);
258 lowest_acceptable_value,
262 utility_exit_with_message(
263 "Can't read ambiguous CS data. Provide two chemical shifts file in TALOS format using flags -in::file::ambig_talos_cs_A and in::file::ambig_talos_cs_B");