Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ResidueSecondaryStructureFeatures.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 protocols/features/ResidueSecondaryStructureFeatures.cc
11 /// @brief report ResidueSecondaryStructure geometry and scores to features Statistics Scientific Benchmark
12 /// @author Matthew O'Meara
13 
14 // Unit Headers
16 
17 //External
18 #include <boost/uuid/uuid.hpp>
19 #include <boost/uuid/uuid_io.hpp>
20 #include <boost/assign/list_of.hpp>
21 
22 // Project Headers
23 #include <basic/Tracer.hh>
25 #include <core/pose/Pose.hh>
26 // AUTO-REMOVED #include <core/scoring/ScoreFunction.hh>
27 #include <core/types.hh>
29 
30 //Basic Headers
31 #include <basic/database/sql_utils.hh>
32 #include <basic/database/schema_generator/PrimaryKey.hh>
33 #include <basic/database/schema_generator/ForeignKey.hh>
34 #include <basic/database/schema_generator/Column.hh>
35 #include <basic/database/schema_generator/Schema.hh>
36 #include <basic/database/schema_generator/Constraint.hh>
37 
38 // Utility Headers
39 #include <utility/sql_database/DatabaseSessionManager.hh>
40 #include <utility/vector1.hh>
41 
42 // External Headers
43 #include <cppdb/frontend.h>
44 
45 namespace protocols{
46 namespace features{
47 
48 using std::string;
50 using core::Size;
52 using core::pose::Pose;
54 using utility::vector1;
55 using utility::sql_database::sessionOP;
56 using cppdb::statement;
57 using basic::Tracer;
58 
59 static Tracer TR("protocols.features.ResidueSecondaryStructureFeatures");
60 
62 
65 {}
66 
68 
69 string
70 ResidueSecondaryStructureFeatures::type_name() const { return "ResidueSecondaryStructureFeatures"; }
71 
72 void
73 ResidueSecondaryStructureFeatures::write_schema_to_db(utility::sql_database::sessionOP db_session) const{
74  using namespace basic::database::schema_generator;
75  using namespace basic::database;
76  using namespace boost::assign;
77 
78  Column code("code", new DbText(1), false);
79  Column label("label", new DbText(), false);
80  Schema dssp_codes("dssp_codes", PrimaryKey(code));
81  dssp_codes.add_column(label);
82 
83  dssp_codes.write(db_session);
84 
85  std::vector<std::string> dssp_cols = list_of("code")("label");
86  insert_or_ignore("dssp_codes", dssp_cols, list_of("'H'")("'H: a-Helix'"), db_session);
87  insert_or_ignore("dssp_codes", dssp_cols, list_of("'E'")("'E: b-Sheet'"), db_session);
88  insert_or_ignore("dssp_codes", dssp_cols, list_of("'T'")("'T: HB Turn'"), db_session);
89  insert_or_ignore("dssp_codes", dssp_cols, list_of("'G'")("'G: 3/10 Helix'"), db_session);
90  insert_or_ignore("dssp_codes", dssp_cols, list_of("'B'")("'B: b-Bridge'"), db_session);
91  insert_or_ignore("dssp_codes", dssp_cols, list_of("'S'")("'S: Bend'"), db_session);
92  insert_or_ignore("dssp_codes", dssp_cols, list_of("'I'")("'I: pi-Helix'"), db_session);
93  insert_or_ignore("dssp_codes", dssp_cols, list_of("' '")("'Irregular'"), db_session);
94 
95  /******residue_secondary_structure******/
96  Column struct_id("struct_id", new DbUUID(), false);
97  Column resNum("resNum", new DbInteger(), false);
98  Column dssp("dssp", new DbText(1));
99 
100  utility::vector1<Column> sec_struct_pkey_cols;
101  sec_struct_pkey_cols.push_back(struct_id);
102  sec_struct_pkey_cols.push_back(resNum);
103 
104  utility::vector1<Column> fkey_cols;
105  fkey_cols.push_back(struct_id);
106  fkey_cols.push_back(resNum);
107 
108  utility::vector1<std::string> fkey_reference_cols;
109  fkey_reference_cols.push_back("struct_id");
110  fkey_reference_cols.push_back("resNum");
111 
112  ForeignKey dssp_fk(dssp, "dssp_codes", "code", true /*defer*/);
113 
114  Schema residue_secondary_structure("residue_secondary_structure", PrimaryKey(sec_struct_pkey_cols));
115 
116  residue_secondary_structure.add_column(struct_id);
117  residue_secondary_structure.add_column(resNum);
118  residue_secondary_structure.add_column(dssp);
119 
120  residue_secondary_structure.add_foreign_key(ForeignKey(fkey_cols, "residues", fkey_reference_cols, true));
121  residue_secondary_structure.add_foreign_key(dssp_fk);
122 
123  residue_secondary_structure.write(db_session);
124 }
125 
128  utility::vector1<std::string> dependencies;
129  dependencies.push_back("ResidueFeatures");
130  return dependencies;
131 }
132 
133 Size
135  Pose const & pose,
136  vector1< bool > const & relevant_residues,
137  boost::uuids::uuid struct_id,
138  sessionOP db_session
139 ){
140  // compute dssp
141  core::scoring::dssp::Dssp all_dssp(pose);
142 
143  //Create the statement strings outside the loops so we don't need to rcreate them for every residue
144  std::string sec_structure_statement_string = "INSERT INTO residue_secondary_structure (struct_id, resNum, dssp) VALUES (?,?,?);";
145 
146  core::Size adjusted_resnum=0;
147  for(Size resNum=1; resNum <= pose.total_residue(); ++resNum){
148  if(!relevant_residues[resNum]) continue;
149 
150 
151  //If this is not a protein residue then skip it. Keep a counter
152  //of protein-only residues to reference DSSP
153  if(!pose.residue(resNum).is_protein()){
154  continue;
155  }
156  adjusted_resnum++;
157 
158  string residue_secondary = string(1, all_dssp.get_dssp_secstruct(adjusted_resnum));
159  statement stmt(basic::database::safely_prepare_statement(sec_structure_statement_string,db_session));
160  stmt.bind(1,struct_id);
161  stmt.bind(2,resNum);
162  stmt.bind(3,residue_secondary);
163  basic::database::safely_write_to_database(stmt);
164 
165  }
166  return 0;
167 }
168 
169 
170 } // namesapce
171 } // namespace