17 #include <basic/datacache/BasicDataCache.hh>
18 #include <basic/datacache/CacheableString.hh>
19 #include <basic/database/sql_utils.hh>
20 #include <basic/Tracer.hh>
30 #include <basic/database/sql_utils.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>
35 #include <basic/database/schema_generator/Constraint.hh>
39 #include <utility/sql_database/DatabaseSessionManager.hh>
42 #include <cppdb/frontend.h>
45 #include <boost/assign/list_of.hpp>
49 #include <utility/vector1.hh>
53 namespace rotamer_recovery {
58 using basic::datacache::CacheableString;
59 using basic::database::safely_prepare_statement;
60 using basic::database::safely_write_to_database;
61 using basic::database::write_schema_to_database;
62 using basic::database::get_db_session;
69 using utility::sql_database::DatabaseSessionManager;
70 using utility::sql_database::sessionOP;
72 using cppdb::statement;
74 static Tracer
TR(
"protocols.rotamer_recovery.RRReporterSQLite");
84 residues_considered_( 0 ),
85 rotamers_recovered_( 0 ),
86 database_name_(
"rotamer_recovery.db3"),
87 database_pq_schema_(
""),
92 string const & database_name,
93 string const & database_pq_schema ,
96 output_level_( output_level ),
103 residues_considered_( 0 ),
104 rotamers_recovered_( 0 ),
105 database_name_(database_name),
106 database_pq_schema_(database_pq_schema),
111 sessionOP db_session,
112 OutputLevel::e
const output_level
114 output_level_( output_level ),
121 residues_considered_( 0 ),
122 rotamers_recovered_( 0 ),
124 database_pq_schema_(),
125 db_session_( db_session )
132 output_level_( src.output_level_ ),
133 struct_id1_( src.struct_id1_ ),
134 struct_id2_( src.struct_id2_ ),
135 protocol_name_( src.protocol_name_ ),
136 protocol_params_( src.protocol_params_ ),
137 comparer_name_( src.comparer_name_ ),
138 comparer_params_( src.comparer_params_ ),
139 residues_considered_( src.residues_considered_ ),
140 rotamers_recovered_( src.rotamers_recovered_ ),
141 database_name_( src.database_name_ ),
142 database_pq_schema_( src.database_pq_schema_ ),
143 db_session_( src.db_session_ )
150 sessionOP db_session,
153 switch(output_level){
164 utility_exit_with_message(
"Unrecognized Output Level.");
172 using namespace basic::database::schema_generator;
173 using namespace basic::database;
174 using namespace boost::assign;
176 Column name3(
"name3",
new DbText());
177 Column nchi(
"nchi",
new DbInteger());
179 Columns primary_key_columns;
180 primary_key_columns.push_back(name3);
181 PrimaryKey primary_key(primary_key_columns);
183 Schema table(
"nchi", primary_key);
184 table.add_column(nchi);
185 table.write(db_session);
189 string table_name(
"nchi");
190 std::vector<string> column_names;
191 column_names.push_back(
"name3");
192 column_names.push_back(
"nchi");
193 insert_or_ignore(table_name, column_names, list_of(
"'ARG'")(
"4"), db_session);
194 insert_or_ignore(table_name, column_names, list_of(
"'LYS'")(
"4"), db_session);
195 insert_or_ignore(table_name, column_names, list_of(
"'MET'")(
"3"), db_session);
196 insert_or_ignore(table_name, column_names, list_of(
"'GLN'")(
"3"), db_session);
197 insert_or_ignore(table_name, column_names, list_of(
"'GLU'")(
"3"), db_session);
198 insert_or_ignore(table_name, column_names, list_of(
"'TYR'")(
"2"), db_session);
199 insert_or_ignore(table_name, column_names, list_of(
"'ILE'")(
"2"), db_session);
200 insert_or_ignore(table_name, column_names, list_of(
"'ASP'")(
"2"), db_session);
201 insert_or_ignore(table_name, column_names, list_of(
"'TRP'")(
"2"), db_session);
202 insert_or_ignore(table_name, column_names, list_of(
"'PHE'")(
"2"), db_session);
203 insert_or_ignore(table_name, column_names, list_of(
"'HIS'")(
"2"), db_session);
204 insert_or_ignore(table_name, column_names, list_of(
"'ASN'")(
"2"), db_session);
205 insert_or_ignore(table_name, column_names, list_of(
"'THR'")(
"1"), db_session);
206 insert_or_ignore(table_name, column_names, list_of(
"'SER'")(
"1"), db_session);
207 insert_or_ignore(table_name, column_names, list_of(
"'PRO'")(
"1"), db_session);
208 insert_or_ignore(table_name, column_names, list_of(
"'CYS'")(
"1"), db_session);
209 insert_or_ignore(table_name, column_names, list_of(
"'VAL'")(
"1"), db_session);
210 insert_or_ignore(table_name, column_names, list_of(
"'LEU'")(
"1"), db_session);
211 insert_or_ignore(table_name, column_names, list_of(
"'ALA'")(
"0"), db_session);
212 insert_or_ignore(table_name, column_names, list_of(
"'GLY'")(
"0"), db_session);
219 using namespace basic::database::schema_generator;
221 Column struct1_name(
"struct1_name",
new DbText());
222 Column name1(
"name1",
new DbText());
223 Column name3(
"name3",
new DbText());
224 Column residue_type(
"residue_type",
new DbText());
225 Column chain1(
"chain1",
new DbText());
226 Column res1(
"res1",
new DbInteger());
227 Column struct2_name(
"struct_name2",
new DbText());
228 Column chain2(
"chain2",
new DbText());
229 Column res2(
"res2",
new DbInteger());
230 Column protocol_name(
"protocol_name",
new DbText());
231 Column protocol_params(
"protocol_params",
new DbText());
232 Column comparer_name(
"comparer_name",
new DbText());
233 Column comparer_params(
"comparer_params",
new DbText());
234 Column score(
"score",
new DbReal());
235 Column recovered(
"recovered",
new DbInteger());
237 Columns primary_key_columns;
238 primary_key_columns.push_back(struct1_name);
239 primary_key_columns.push_back(chain1);
240 primary_key_columns.push_back(res1);
241 primary_key_columns.push_back(struct2_name);
242 primary_key_columns.push_back(chain2);
243 primary_key_columns.push_back(res2);
244 PrimaryKey primary_key(primary_key_columns);
246 Schema table(
"rotamer_recovery", primary_key);
247 table.add_column(name1);
248 table.add_column(name3);
249 table.add_column(residue_type);
250 table.add_column(protocol_name);
251 table.add_column(protocol_params);
252 table.add_column(comparer_name);
253 table.add_column(comparer_params);
254 table.add_column(score);
255 table.add_column(recovered);
257 table.write(db_session);
265 using namespace basic::database::schema_generator;
267 Column struct_id(
"struct_id",
new DbUUID());
268 Column resNum(
"resNum",
new DbInteger());
269 Column divergence(
"divergence",
new DbReal());
270 Column recovered(
"recovered",
new DbInteger());
272 Columns primary_key_columns;
273 primary_key_columns.push_back(struct_id);
274 primary_key_columns.push_back(resNum);
275 PrimaryKey primary_key(primary_key_columns);
277 Columns foreign_key_columns;
278 foreign_key_columns.push_back(struct_id);
279 foreign_key_columns.push_back(resNum);
281 reference_columns.push_back(
"struct_id");
282 reference_columns.push_back(
"resNum");
283 ForeignKey foreign_key(foreign_key_columns,
"residues", reference_columns,
true);
285 Schema table(
"rotamer_recovery", primary_key);
286 table.add_foreign_key(foreign_key);
287 table.add_column(divergence);
288 table.add_column(recovered);
290 table.write(db_session);
308 boost::uuids::uuid
const struct_id1
321 boost::uuids::uuid
const struct_id2
334 string const & protocol_name,
335 string const & protocol_params
343 string const & comparer_name,
344 string const & comparer_params
354 basic::database::get_db_session(
380 pose1, pose2, res1, res2, score, recovered );
388 utility_exit_with_message(
"Unknown RRReporterSQLite output level." );
406 string struct1_name =
"No_Name_Found";
408 struct1_name = pose1.
pdb_info()->name();
410 struct1_name =
static_cast< CacheableString
const &
>
416 string struct2_name =
"No_Name_Found";
418 struct2_name = pose2.
pdb_info()->name();
420 struct2_name =
static_cast< CacheableString
const &
>
426 std::string statement_string =
"INSERT INTO rotamer_recovery VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
427 statement stmt(safely_prepare_statement(statement_string,
db_session()));
429 stmt.bind(1,struct1_name);
430 stmt.bind(2,
string(1,res1.
name1()));
431 stmt.bind(3,res1.
name3());
433 stmt.bind(5,res1.
chain());
434 stmt.bind(6,res1.
seqpos());
435 stmt.bind(7,struct2_name);
436 stmt.bind(8,res2.
chain());
437 stmt.bind(9,res2.
seqpos());
443 stmt.bind(15,recovered);
444 safely_write_to_database(stmt);
450 boost::uuids::uuid
const struct_id1,
457 std::string statement_string =
"INSERT INTO rotamer_recovery VALUES (?,?,?,?);";
458 statement stmt(safely_prepare_statement(statement_string,
db_session_));
460 stmt.bind(1,struct_id1);
461 stmt.bind(2, res1.
seqpos());
463 stmt.bind(4, recovered);
464 safely_write_to_database(stmt);
474 <<
" for a recovery rate of " <<
recovery_rate() <<
"." << endl;