19 #include <cppdb/frontend.h>
20 #include <boost/uuid/uuid.hpp>
21 #include <boost/uuid/uuid_io.hpp>
24 #include <basic/database/sql_utils.hh>
25 #include <basic/database/schema_generator/PrimaryKey.hh>
26 #include <basic/database/schema_generator/ForeignKey.hh>
27 #include <basic/database/schema_generator/Column.hh>
28 #include <basic/database/schema_generator/Schema.hh>
29 #include <basic/database/schema_generator/Constraint.hh>
32 #include <basic/options/option.hh>
33 #include <basic/options/keys/inout.OptionKeys.gen.hh>
44 #include <utility/sql_database/DatabaseSessionManager.hh>
45 #include <utility/vector1.hh>
46 #include <utility/tag/Tag.hh>
47 #include <basic/database/sql_utils.hh>
48 #include <utility/tools/make_vector.hh>
50 #include <basic/database/insert_statement_generator/InsertGenerator.hh>
51 #include <basic/database/insert_statement_generator/RowData.hh>
58 #include <utility/excn/Exceptions.hh>
59 #include <utility/vector0.hh>
66 using std::stringstream;
92 using utility::sql_database::sessionOP;
94 using cppdb::statement;
96 using basic::database::insert_statement_generator::InsertGenerator;
97 using basic::database::insert_statement_generator::RowDataBaseOP;
98 using basic::database::insert_statement_generator::RowData;
110 utility_exit_with_message(
"StructureScoresFeatures may not be constructed with a null-pointer ScoreFunctionOP" );
128 utility::sql_database::sessionOP db_session
130 using namespace basic::database::schema_generator;
133 Column batch_id(
"batch_id",
new DbInteger(),
false);
134 Column struct_id(
"struct_id",
new DbUUID(),
false);
135 Column score_type_id(
"score_type_id",
new DbInteger(),
false);
136 Column score_value(
"score_value",
new DbInteger(),
false);
139 pkey_cols.push_back(batch_id);
140 pkey_cols.push_back(struct_id);
141 pkey_cols.push_back(score_type_id);
143 Columns foreign_key_columns1;
144 foreign_key_columns1.push_back(struct_id);
146 reference_columns1.push_back(
"struct_id");
147 ForeignKey foreign_key1(foreign_key_columns1,
"structures", reference_columns1,
true);
150 Columns foreign_key_columns2;
151 foreign_key_columns2.push_back(batch_id);
152 foreign_key_columns2.push_back(score_type_id);
154 reference_columns2.push_back(
"batch_id");
155 reference_columns2.push_back(
"score_type_id");
156 ForeignKey foreign_key2(foreign_key_columns2,
"score_types", reference_columns2,
true);
158 Schema structure_scores(
"structure_scores", PrimaryKey(pkey_cols));
159 structure_scores.add_column(score_value);
161 structure_scores.add_foreign_key(foreign_key1);
162 structure_scores.add_foreign_key(foreign_key2);
164 structure_scores.write(db_session);
171 dependencies.push_back(
"StructureFeatures");
172 dependencies.push_back(
"ScoreTypeFeatures");
184 if(tag->hasOption(
"scorefxn")){
185 string scorefxn_name = tag->getOption<
string>(
"scorefxn");
188 stringstream error_msg;
190 <<
"The " <<
type_name() <<
" reporter requires a 'scorefxn' tag:" << endl
192 <<
" <feature name=" <<
type_name() <<
" scorefxn=(name_of_score_function) />" << endl;
193 throw utility::excn::EXCN_RosettaScriptsOption(error_msg.str());
202 boost::uuids::uuid struct_id,
210 boost::uuids::uuid struct_id,
211 utility::sql_database::sessionOP db_session
214 std::string statement_string =
"DELETE FROM structure_scores WHERE struct_id = ?;\n";
215 statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
216 stmt.bind(1,struct_id);
217 basic::database::safely_write_to_database(stmt);
223 Pose const & pose_in,
234 vector1<bool> relevant_and_virtual_residues(relevant_residues);
239 bool all_residues(
true);
247 relevant_and_virtual_residues[i] =
true;
248 }
else if (relevant_and_virtual_residues[i] ==
false){
249 all_residues =
false;
255 scfxn_->get_sub_score(pose, relevant_and_virtual_residues, emap);
262 Pose const & pose_in,
264 boost::uuids::uuid struct_id,
268 InsertGenerator structure_scores_insert(
"structure_scores");
269 structure_scores_insert.add_column(
"batch_id");
270 structure_scores_insert.add_column(
"struct_id");
271 structure_scores_insert.add_column(
"score_type_id");
272 structure_scores_insert.add_column(
"score_value");
279 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
280 RowDataBaseOP batch_id_data =
new RowData<Size>(
"batch_id",batch_id);
283 ScoreType type(static_cast<ScoreType>(score_type_id));
284 Real const score_value( (*
scfxn_)[type] * emap[type] );
285 if(!score_value)
continue;
286 total_score += score_value;
288 RowDataBaseOP score_type_id_data =
new RowData<Size>(
"score_type_id",score_type_id);
289 RowDataBaseOP score_value_data =
new RowData<Real>(
"score_value",score_value);
291 structure_scores_insert.add_row(
292 utility::tools::make_vector(batch_id_data,struct_id_data,score_type_id_data,score_value_data));
297 RowDataBaseOP total_id_data =
new RowData<Size>(
"score_type_id",
n_score_types);
298 RowDataBaseOP total_score_data =
new RowData<Real>(
"score_value",
total_score);
300 structure_scores_insert.add_row(
301 utility::tools::make_vector(batch_id_data,struct_id_data,total_id_data,total_score_data));
302 structure_scores_insert.write_to_database(db_session);