Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RRReporterSQLite.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file src/protocols/rotamer_recovery/RRReporterSQLite.cc
11 /// @author Matthew O'Meara (mattjomeara@gmail.com)
12 
13 // Unit Headers
15 
16 // Project Headers
17 #include <basic/datacache/BasicDataCache.hh>
18 #include <basic/datacache/CacheableString.hh>
19 #include <basic/database/sql_utils.hh>
20 #include <basic/Tracer.hh>
22 #include <core/pose/Pose.hh>
23 #include <core/pose/PDBInfo.hh>
25 #include <core/types.hh>
26 #include <protocols/jd2/Job.hh>
28 
29 //Basic Headers
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>
36 
37 
38 // Utility Headers
39 #include <utility/sql_database/DatabaseSessionManager.hh>
40 
41 // External Headers
42 #include <cppdb/frontend.h>
43 
44 //C++ Headers
45 #include <boost/assign/list_of.hpp>
46 #include <ostream>
47 #include <string>
48 #include <vector>
49 #include <utility/vector1.hh>
50 
51 
52 namespace protocols {
53 namespace rotamer_recovery {
54 
55 using std::endl;
56 using std::ostream;
57 using std::string;
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;
63 using basic::Tracer;
64 using core::Size;
65 using core::Real;
67 using core::pose::Pose;
69 using utility::sql_database::DatabaseSessionManager;
70 using utility::sql_database::sessionOP;
71 using utility::vector1;
72 using cppdb::statement;
73 
74 static Tracer TR("protocols.rotamer_recovery.RRReporterSQLite");
75 
77  output_level_( OutputLevel::full ),
78 // struct_id1_(""),
79 // struct_id2_(""),
80  protocol_name_(),
81  protocol_params_(),
82  comparer_name_(),
83  comparer_params_(),
84  residues_considered_( 0 ),
85  rotamers_recovered_( 0 ),
86  database_name_("rotamer_recovery.db3"),
87  database_pq_schema_(""),
88  db_session_()
89 {}
90 
92  string const & database_name,
93  string const & database_pq_schema /* = "" */,
94  OutputLevel::e output_level /* = OutputLevel::full */
95 ) :
96  output_level_( output_level ),
97 // struct_id1_(""),
98 // struct_id2_(""),
99  protocol_name_(),
100  protocol_params_(),
101  comparer_name_(),
102  comparer_params_(),
103  residues_considered_( 0 ),
104  rotamers_recovered_( 0 ),
105  database_name_(database_name),
106  database_pq_schema_(database_pq_schema),
107  db_session_()
108 {}
109 
111  sessionOP db_session,
112  OutputLevel::e const output_level /* = OutputLevel::full */
113 ) :
114  output_level_( output_level ),
115 // struct_id1_(""),
116 // struct_id2_(""),
117  protocol_name_(),
118  protocol_params_(),
119  comparer_name_(),
120  comparer_params_(),
121  residues_considered_( 0 ),
122  rotamers_recovered_( 0 ),
123  database_name_(),
124  database_pq_schema_(),
125  db_session_( db_session )
126 {}
127 
128 
129 
131  RRReporter(),
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_ )
144 {}
145 
147 
148 void
150  sessionOP db_session,
151  RRReporterSQLite::OutputLevel::e output_level /* = OutputLevel::ful */
152 ) const {
153  switch(output_level){
154  case OutputLevel::full:
155  write_nchi_table_schema(db_session);
157  break;
160  break;
161  case OutputLevel::none:
162  break;
163  default:
164  utility_exit_with_message("Unrecognized Output Level.");
165  }
166 }
167 
168 void
170  sessionOP db_session
171 ) const {
172  using namespace basic::database::schema_generator;
173  using namespace basic::database;
174  using namespace boost::assign;
175 
176  Column name3("name3", new DbText());
177  Column nchi("nchi", new DbInteger());
178 
179  Columns primary_key_columns;
180  primary_key_columns.push_back(name3);
181  PrimaryKey primary_key(primary_key_columns);
182 
183  Schema table("nchi", primary_key);
184  table.add_column(nchi);
185  table.write(db_session);
186 
187 
188  // insert values
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);
213 }
214 
215 void
217  sessionOP db_session
218 ) const {
219  using namespace basic::database::schema_generator;
220 
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());
236 
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);
245 
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);
256 
257  table.write(db_session);
258 }
259 
260 
261 void
263  sessionOP db_session
264 ) const {
265  using namespace basic::database::schema_generator;
266 
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());
271 
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);
276 
277  Columns foreign_key_columns;
278  foreign_key_columns.push_back(struct_id);
279  foreign_key_columns.push_back(resNum);
280  vector1< std::string > reference_columns;
281  reference_columns.push_back("struct_id");
282  reference_columns.push_back("resNum");
283  ForeignKey foreign_key(foreign_key_columns, "residues", reference_columns, true);
284 
285  Schema table("rotamer_recovery", primary_key);
286  table.add_foreign_key(foreign_key);
287  table.add_column(divergence);
288  table.add_column(recovered);
289 
290  table.write(db_session);
291 }
292 
293 void
295  OutputLevel::e const output_level
296 ){
297  output_level_ = output_level;
298 }
299 
302 ) const {
303  return output_level_;
304 }
305 
306 void
308  boost::uuids::uuid const struct_id1
309 ){
310  struct_id1_ = struct_id1;
311 }
312 
313 boost::uuids::uuid
315 ) const {
316  return struct_id1_;
317 }
318 
319 void
321  boost::uuids::uuid const struct_id2
322 ){
323  struct_id1_ = struct_id2;
324 }
325 
326 boost::uuids::uuid
328 ) const {
329  return struct_id2_;
330 }
331 
332 void
334  string const & protocol_name,
335  string const & protocol_params
336 ) {
337  protocol_name_ = protocol_name;
338  protocol_params_ = protocol_params;
339 }
340 
341 void
343  string const & comparer_name,
344  string const & comparer_params
345 ) {
346  comparer_name_ = comparer_name;
347  comparer_params_ = comparer_params;
348 }
349 
350 sessionOP
352  if(!db_session_){
353  db_session_ =
354  basic::database::get_db_session(
356 
358  }
359  return db_session_;
360 }
361 
362 void
366 }
367 
368 void
370  Pose const & pose1,
371  Pose const & pose2,
372  Residue const & res1,
373  Residue const & res2,
374  Real const score,
375  bool recovered
376 ){
377  switch (output_level_) {
378  case OutputLevel::full:
380  pose1, pose2, res1, res2, score, recovered );
381  break;
383  report_rotamer_recovery_features(struct_id1_, res1, score, recovered);
384  break;
385  case OutputLevel::none:
386  break;
387  default:
388  utility_exit_with_message( "Unknown RRReporterSQLite output level." );
389  }
390 
392  rotamers_recovered_ += recovered;
393 }
394 
395 void
397  Pose const & pose1,
398  Pose const & pose2,
399  Residue const & res1,
400  Residue const & res2,
401  Real const score,
402  bool recovered
403 ){
404  // Argh why isn't there a good way go get the name of a pose?
405  //silent files and pdbs set the name of the pose differently
406  string struct1_name = "No_Name_Found";
407  if (pose1.pdb_info() && ( pose1.pdb_info()->name() != "" ) ){
408  struct1_name = pose1.pdb_info()->name();
410  struct1_name = static_cast< CacheableString const & >
412  } else {
413  struct1_name = JobDistributor::get_instance()->current_job()->input_tag();
414  }
415 
416  string struct2_name = "No_Name_Found";
417  if (pose2.pdb_info() && ( pose1.pdb_info()->name() != "" ) ){
418  struct2_name = pose2.pdb_info()->name();
420  struct2_name = static_cast< CacheableString const & >
422  } else {
423  struct2_name = JobDistributor::get_instance()->current_job()->input_tag();
424  }
425 
426  std::string statement_string = "INSERT INTO rotamer_recovery VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
427  statement stmt(safely_prepare_statement(statement_string,db_session()));
428 
429  stmt.bind(1,struct1_name);
430  stmt.bind(2,string(1,res1.name1()));
431  stmt.bind(3,res1.name3());
432  stmt.bind(4,res1.type().name());
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());
438  stmt.bind(10,protocol_name_);
439  stmt.bind(11,protocol_params_);
440  stmt.bind(12,comparer_name_);
441  stmt.bind(13,comparer_params_);
442  stmt.bind(14,score);
443  stmt.bind(15,recovered);
444  safely_write_to_database(stmt);
445 
446 }
447 
448 void
450  boost::uuids::uuid const struct_id1,
451  Residue const & res1,
452  Real const score,
453  bool const recovered
454 ){
455 
456 
457  std::string statement_string = "INSERT INTO rotamer_recovery VALUES (?,?,?,?);";
458  statement stmt(safely_prepare_statement(statement_string, db_session_));
459 
460  stmt.bind(1,struct_id1);
461  stmt.bind(2, res1.seqpos());
462  stmt.bind(3, score);
463  stmt.bind(4, recovered);
464  safely_write_to_database(stmt);
465 
466 }
467 
468 void
469 RRReporterSQLite::show( ostream & out ) const {
470 
471  out
472  << "Recovered " << rotamers_recovered_
473  << " at " << residues_considered_ << " residues considered"
474  << " for a recovery rate of " << recovery_rate() << "." << endl;
475 }
476 
477 void
479  show( TR );
480 }
481 
482 Real
485 }
486 
487 } // namespace
488 } // namespace