Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ResidueBurialFeatures.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/ResidueBurialFeatures.cc
11 /// @brief report residue burial to features statistics scientific benchmark
12 /// @author Matthew O'Meara (mattjomeara@gmail.com)
13 
14 // Unit Headers
16 
17 // Project Headers
18 #include <core/id/AtomID_Map.hh>
19 #include <core/pose/Pose.hh>
20 #include <core/scoring/Energies.hh>
22 #include <core/scoring/sasa.hh>
27 #include <core/types.hh>
28 #include <utility/sql_database/DatabaseSessionManager.hh>
29 #include <utility/vector1.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 
36 // Numeric Headers
37 #include <numeric/xyzVector.hh>
38 
39 // External Headers
40 #include <cppdb/frontend.h>
41 #include <boost/uuid/uuid_io.hpp>
42 
44 
45 
46 namespace protocols{
47 namespace features{
48 
49 using std::string;
50 using core::Size;
51 using core::Real;
52 using core::pose::Pose;
63 using utility::sql_database::sessionOP;
64 using utility::vector1;
65 using cppdb::statement;
66 
68  nv_score_(new NVscore())
69 {}
70 
73  nv_score_(src.nv_score_)
74 {}
75 
77 
78 string
79 ResidueBurialFeatures::type_name() const { return "ResidueBurialFeatures"; }
80 
81 void
83  sessionOP db_session
84 ) const {
86 }
87 
88 void
90  sessionOP db_session
91 ) const {
92  using namespace basic::database::schema_generator;
93 
94  Column struct_id("struct_id", new DbUUID());
95  Column resNum("resNum", new DbInteger());
96  Column ten_a_neighbors("ten_a_neighbors", new DbInteger());
97  Column twelve_a_neighbors("twelve_a_neighbors", new DbInteger());
98  Column neigh_vect_raw("neigh_vect_raw", new DbReal());
99  Column sasa_r100("sasa_r100", new DbReal());
100  Column sasa_r140("sasa_r140", new DbReal());
101  Column sasa_r200("sasa_r200", new DbReal());
102 
103  Columns primary_key_columns;
104  primary_key_columns.push_back(struct_id);
105  primary_key_columns.push_back(resNum);
106  PrimaryKey primary_key(primary_key_columns);
107 
108  Columns foreign_key_columns;
109  foreign_key_columns.push_back(struct_id);
110  foreign_key_columns.push_back(resNum);
111  vector1< std::string > reference_columns;
112  reference_columns.push_back("struct_id");
113  reference_columns.push_back("resNum");
114  ForeignKey foreign_key(foreign_key_columns, "residues", reference_columns, true);
115 
116  Schema table("residue_burial", primary_key);
117  table.add_foreign_key(foreign_key);
118  table.add_column(ten_a_neighbors);
119  table.add_column(twelve_a_neighbors);
120  table.add_column(neigh_vect_raw);
121  table.add_column(sasa_r100);
122  table.add_column(sasa_r140);
123  table.add_column(sasa_r200);
124 
125  table.write(db_session);
126 }
127 
130  utility::vector1<std::string> dependencies;
131  dependencies.push_back("ResidueFeatures");
132  return dependencies;
133 }
134 
135 Size
137  Pose const & pose,
138  vector1< bool > const & relevant_residues,
139  boost::uuids::uuid const struct_id,
140  sessionOP db_session
141 ){
142 
143  TenANeighborGraph const & tenA( pose.energies().tenA_neighbor_graph() );
144  TwelveANeighborGraph const & twelveA( pose.energies().twelveA_neighbor_graph() );
145 
146  Real const probe_radius_s(1.0);
147  AtomID_Map< Real > atom_sasa_s;
148  vector1< Real > residue_sasa_s;
149  calc_per_atom_sasa( pose, atom_sasa_s, residue_sasa_s, probe_radius_s);
150 
151  Real const probe_radius_m(1.4);
152  AtomID_Map< Real > atom_sasa_m;
153  vector1< Real > residue_sasa_m;
154  calc_per_atom_sasa( pose, atom_sasa_m, residue_sasa_m, probe_radius_m);
155 
156  Real const probe_radius_l(2.0);
157  AtomID_Map< Real > atom_sasa_l;
158  vector1< Real > residue_sasa_l;
159  calc_per_atom_sasa( pose, atom_sasa_l, residue_sasa_l, probe_radius_l);
160 
161  std::string statement_string = "INSERT INTO residue_burial (struct_id, resNum, ten_a_neighbors, twelve_a_neighbors, neigh_vect_raw, sasa_r100, sasa_r140, sasa_r200) VALUES (?,?,?,?,?,?,?,?);";
162  statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
163 
164  for(Size resNum=1; resNum <= pose.total_residue(); ++resNum){
165  if(!relevant_residues[resNum]) continue;
166  Residue const & res = pose.residue(resNum);
167 
168  Size const ten_a_neighbors(tenA.get_node(resNum)->num_neighbors_counting_self_static());
169  Size const twelve_a_neighbors(twelveA.get_node(resNum)->num_neighbors_counting_self_static());
170 
171  EnergyMap nv_emap;
172  nv_score_->residue_energy(res, pose, nv_emap);
173 
174  stmt.bind(1,struct_id);
175  stmt.bind(2,resNum);
176  stmt.bind(3,ten_a_neighbors);
177  stmt.bind(4,twelve_a_neighbors);
178  stmt.bind(5,nv_emap[neigh_vect_raw]);
179  stmt.bind(6,residue_sasa_s[resNum]);
180  stmt.bind(7,residue_sasa_m[resNum]);
181  stmt.bind(8,residue_sasa_l[resNum]);
182  basic::database::safely_write_to_database(stmt);
183  }
184  return 0;
185 }
186 
187 } // namespace
188 } // namespace