19 #include <basic/options/option.hh>
20 #include <basic/options/keys/in.OptionKeys.gen.hh>
23 #include <basic/Tracer.hh>
34 #include <numeric/xyzVector.hh>
35 #include <utility/vector1.hh>
36 #include <utility/tag/Tag.hh>
37 #include <utility/sql_database/DatabaseSessionManager.hh>
40 #include <basic/options/keys/inout.OptionKeys.gen.hh>
41 #include <basic/database/sql_utils.hh>
42 #include <basic/database/schema_generator/PrimaryKey.hh>
43 #include <basic/database/schema_generator/ForeignKey.hh>
44 #include <basic/database/schema_generator/Column.hh>
45 #include <basic/database/schema_generator/Schema.hh>
49 #include <cppdb/frontend.h>
50 #include <boost/uuid/uuid.hpp>
51 #include <boost/uuid/uuid_io.hpp>
54 #include <boost/foreach.hpp>
55 #define foreach BOOST_FOREACH
63 #include <utility/vector0.hh>
82 using utility::sql_database::sessionOP;
84 using cppdb::statement;
86 static basic::Tracer
tr(
"protocols.features.ProteinRMSDFeatures");
106 reference_pose_(reference_pose)
120 using namespace basic::database::schema_generator;
122 Column struct_id(
"struct_id",
new DbUUID());
123 Column reference_tag(
"reference_tag",
new DbText(255));
124 Column protein_CA(
"protein_CA",
new DbReal());
125 Column protein_CA_or_CB(
"protein_CA_or_CB",
new DbReal());
126 Column protein_backbone(
"protein_backbone",
new DbReal());
127 Column protein_backbone_including_O(
"protein_backbone_including_O",
new DbReal());
128 Column protein_backbone_sidechain_heavyatom(
"protein_backbone_sidechain_heavyatom",
new DbReal());
129 Column heavyatom(
"heavyatom",
new DbReal());
130 Column nbr_atom(
"nbr_atom",
new DbReal());
131 Column all_atom(
"all_atom",
new DbReal());
133 Columns primary_key_columns;
134 primary_key_columns.push_back(struct_id);
135 primary_key_columns.push_back(reference_tag);
136 PrimaryKey primary_key(primary_key_columns);
138 Columns foreign_key_columns;
139 foreign_key_columns.push_back(struct_id);
141 reference_columns.push_back(
"struct_id");
142 ForeignKey foreign_key(foreign_key_columns,
"structures", reference_columns,
true);
144 Schema table(
"protein_rmsd", primary_key);
145 table.add_foreign_key(foreign_key);
146 table.add_column(reference_tag);
147 table.add_column(protein_CA);
148 table.add_column(protein_CA_or_CB);
149 table.add_column(protein_backbone);
150 table.add_column(protein_backbone_including_O);
151 table.add_column(protein_backbone_sidechain_heavyatom);
152 table.add_column(heavyatom);
153 table.add_column(nbr_atom);
154 table.add_column(all_atom);
156 table.write(db_session);
162 dependencies.push_back(
"StructureFeatures");
174 runtime_assert(tag->getOption<
string>(
"name") ==
type_name());
176 if(tag->hasOption(
"reference_name")){
181 using namespace basic::options;
182 if (option[OptionKeys::in::file::native].user()) {
184 string native_pdb_fname(option[OptionKeys::in::file::native]());
186 tr <<
"Adding features reporter '" <<
type_name() <<
"' referencing '"
187 <<
" the -in:file:native='" << native_pdb_fname <<
"'" << endl;
190 tr <<
"Setting '" <<
type_name() <<
"' to reference the starting structure." << endl;
200 boost::uuids::uuid struct_id,
203 using namespace core::scoring;
206 utility_exit_with_message(
"No reference pose has been initialized.");
210 list< Size > subset_residues;
211 for(
Size i = 1; i <= relevant_residues.size(); ++i){
212 if(relevant_residues[i]) subset_residues.push_back(i);
215 std::string statement_string =
"INSERT INTO protein_rmsd (struct_id, reference_tag, protein_CA, protein_CA_or_CB, protein_backbone, protein_backbone_including_O, protein_backbone_sidechain_heavyatom, heavyatom, nbr_atom, all_atom) VALUES (?,?,?,?,?,?,?,?,?,?);";
216 statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
218 stmt.bind(1,struct_id);
229 basic::database::safely_write_to_database(stmt);