29 #include <basic/database/sql_utils.hh>
30 #include <basic/Tracer.hh>
31 #include <basic/database/schema_generator/PrimaryKey.hh>
32 #include <basic/database/schema_generator/ForeignKey.hh>
33 #include <basic/database/schema_generator/Column.hh>
34 #include <basic/database/schema_generator/Schema.hh>
37 #include <numeric/xyzVector.hh>
38 #include <utility/tag/Tag.hh>
39 #include <utility/vector1.hh>
40 #include <utility/sql_database/DatabaseSessionManager.hh>
43 #include <cppdb/frontend.h>
44 #include <boost/uuid/uuid_io.hpp>
48 #include <utility/excn/Exceptions.hh>
56 using std::stringstream;
74 using basic::database::safely_write_to_database;
75 using utility::sql_database::sessionOP;
76 using cppdb::statement;
78 static basic::Tracer
TR(
"protocols.features.ResidueTotalScoresFeatures" );
111 using namespace basic::database::schema_generator;
113 Column struct_id(
"struct_id",
new DbUUID());
114 Column resNum(
"resNum",
new DbInteger());
115 Column score_value(
"score_value",
new DbReal());
117 Columns primary_key_columns;
118 primary_key_columns.push_back(struct_id);
119 primary_key_columns.push_back(resNum);
120 PrimaryKey primary_key(primary_key_columns);
122 Columns foreign_key_columns;
123 foreign_key_columns.push_back(struct_id);
124 foreign_key_columns.push_back(resNum);
126 reference_columns.push_back(
"struct_id");
127 reference_columns.push_back(
"resNum");
128 ForeignKey foreign_key(foreign_key_columns,
"residues", reference_columns,
true);
130 Schema table(
"residue_total_scores", primary_key);
131 table.add_foreign_key(foreign_key);
132 table.add_column(score_value);
134 table.write(db_session);
140 dependencies.push_back(
"ResidueFeatures");
141 dependencies.push_back(
"ScoreTypeFeatures");
153 if(tag->hasOption(
"scorefxn")){
154 string const scorefxn_name(tag->getOption<
string>(
"scorefxn"));
157 stringstream error_msg;
159 <<
"The " <<
type_name() <<
" reporter requires a 'scorefxn' tag:" << endl
161 <<
" <feature name=" <<
type_name() <<
" scorefxn=(name_of_score_function) />" << endl;
162 throw utility::excn::EXCN_RosettaScriptsOption(error_msg.str());
170 boost::uuids::uuid
const struct_id,
183 boost::uuids::uuid
const struct_id,
186 if(!
scfxn_->energy_method_options().hbond_options().decompose_bb_hb_into_pair_energies()){
187 TR.Warning <<
"The backbone-backbone hydrogen bonds being stored in the per-residue scores. Please enable the decompose_bb_hb_into_pair_energies option if you want this behavior." << endl;
194 Pose temp_pose = pose;
195 (*scfxn_)(temp_pose);
199 string const stmt_string(
"INSERT INTO residue_total_scores (struct_id, resNum, score_value ) VALUES (?,?,?);");
202 basic::database::safely_prepare_statement(stmt_string, db_session));
205 if(!relevant_residues[resNum])
continue;
209 stmt.bind(1, struct_id);
210 stmt.bind(2, resNum);
211 stmt.bind(3, score_value);
212 safely_write_to_database(stmt);