29 #include <basic/options/option.hh>
31 #include <basic/datacache/BasicDataCache.hh>
35 #include <basic/Tracer.hh>
51 #include <utility/vector1.hh>
56 #include <basic/options/keys/rdc.OptionKeys.gen.hh>
58 static basic::Tracer
tr(
"core.scoring.ResidualDipolarCouplingRigidSegments");
63 using namespace scoring;
100 using namespace basic::options;
101 using namespace basic::options::OptionKeys;
102 if ( !option[ OptionKeys::rdc::segment_scoring_mode ].user() ) {
103 tr.Warning <<
"no al.tensor scoring method specified" << std::endl;
107 if ( option[ OptionKeys::rdc::segment_scoring_mode ]() ==
"pairwise" ) {
108 core::Size n_of_exps = rdc_segments_[1]->get_n_alignments();
110 for (
Size exp=0; exp < n_of_exps; ++exp){
111 for (RDC_Segments::const_iterator it1=rdc_segments_.begin(); it1 != rdc_segments_.end(); ++it1){
112 for (RDC_Segments::const_iterator it2=it1; (it2+1) != rdc_segments_.end(); ++it2){
113 Tensor* S1 = (*it1)->tensor();
114 Tensor* S2 = (*it2)->tensor();
115 Real dot = (S1[exp][0][0] * S2[exp][0][0]) + (S1[exp][0][1] * S2[exp][0][1]) +
116 (S1[exp][0][2] * S2[exp][0][2]) + (S1[exp][1][1] * S2[exp][1][1]) + (S1[exp][1][2] * S2[exp][1][2]);
128 if ( option[ OptionKeys::rdc::segment_scoring_mode ]() ==
"fixed_sum" ) {
130 core::Size n_of_exps = rdc_segments_[1]->get_n_alignments();
135 for (
Size exp=0; exp < n_of_exps; ++exp){
138 for (RDC_Segments::const_iterator it1=rdc_segments_.begin(); it1 != rdc_segments_.end(); ++it1){
142 RDC_lines myrdcs = (*it1)->get_RDC_data();
143 for (RDC_lines::const_iterator it = myrdcs.begin();it!=myrdcs.end(); ++it){
145 if (
id == exp) { ++ndata_segment; }
148 trace = (*it1)->get_al_tensor_trace(exp);
149 score_temp += ( 3 - trace ) * ndata_segment;
150 ndata += ndata_segment;
153 score += score_temp / ndata;
160 if ( option[ OptionKeys::rdc::segment_scoring_mode ]() ==
"fixed_axis_z" ) {
162 core::Size n_of_exps = rdc_segments_[1]->get_n_alignments();
167 for (
Size exp=0; exp < n_of_exps; ++exp){
170 for (RDC_Segments::const_iterator it1=rdc_segments_.begin(); it1 != rdc_segments_.end(); ++it1){
174 RDC_lines myrdcs = (*it1)->get_RDC_data();
175 for (RDC_lines::const_iterator it = myrdcs.begin();it!=myrdcs.end(); ++it){
177 if (
id == exp) { ++ndata_segment; }
180 maxz = (*it1)->get_al_tensor_max_z(exp);
181 score_temp += ( 1 - maxz ) * ndata_segment;
182 ndata += ndata_segment;
185 score += score_temp / ndata;
198 for (RDC_Segments::const_iterator it=rdc_segments_.begin();it!=rdc_segments_.end();++it){
199 n_rdcs = (*it)->get_RDC_data().size();
200 total_lines += n_rdcs;
201 score += ( (*it)->compute_dipscore(pos) ) * n_rdcs;
203 return score / total_lines;
211 Size eff_plane(find_effective_plane(line));
212 Size segid (segment_definitions_.loop_index_of_residue(eff_plane));
218 read_RDC_segment_file( basic::options::option[ basic::options::OptionKeys::rdc::segment_file ]() );
224 std::ifstream is( filename.c_str() );
227 utility_exit_with_message(
"[ERROR] Error opening RBSeg file '" + filename +
"'" );
233 is, filename,
false );
248 for (RDC_lines::iterator line_it=all_rdcs.begin(); line_it!=all_rdcs.end(); ++line_it) {
250 Size segid( find_segid_from_RDC_line( *line_it ) );
252 rdc_segm_data[ segid ].push_back( *line_it );}
257 for ( RDC_lines_collection::iterator it=rdc_segm_data.begin(); it!=rdc_segm_data.end(); ++it ) {
264 for (RDC_Segments::const_iterator it=rdc_segments_.begin();it!=rdc_segments_.end();++it){
265 out <<
"SEGMENT " << ++ct <<std::endl;