26 #include <utility/sql_database/DatabaseSessionManager.hh>
27 #include <utility/vector1.hh>
28 #include <basic/database/sql_utils.hh>
30 #include <basic/database/schema_generator/PrimaryKey.hh>
31 #include <basic/database/schema_generator/ForeignKey.hh>
32 #include <basic/database/schema_generator/Column.hh>
33 #include <basic/database/schema_generator/Schema.hh>
34 #include <basic/database/schema_generator/Constraint.hh>
36 #include <numeric/xyzVector.hh>
39 #include <cppdb/frontend.h>
40 #include <boost/uuid/uuid_io.hpp>
55 using utility::sql_database::sessionOP;
56 using cppdb::statement;
80 using namespace basic::database::schema_generator;
82 Column struct_id(
"struct_id",
new DbUUID());
83 Column resNum1(
"resNum1",
new DbInteger());
84 Column resNum2(
"resNum2",
new DbInteger());
85 Column res1_10A_neighbors(
"res1_10A_neighbors",
new DbInteger());
86 Column res2_10A_neighbors(
"res2_10A_neighbors",
new DbInteger());
87 Column actcoord_dist(
"actcoord_dist",
new DbReal());
88 Column polymeric_sequence_dist(
"polymeric_sequence_dist",
new DbInteger());
90 Columns primary_key_columns;
91 primary_key_columns.push_back(struct_id);
92 primary_key_columns.push_back(resNum1);
93 primary_key_columns.push_back(resNum2);
94 PrimaryKey primary_key(primary_key_columns);
96 Columns foreign_key_columns1;
97 foreign_key_columns1.push_back(struct_id);
98 foreign_key_columns1.push_back(resNum1);
100 reference_columns1.push_back(
"struct_id");
101 reference_columns1.push_back(
"resNum");
102 ForeignKey foreign_key1(foreign_key_columns1,
"residues", reference_columns1,
true);
104 Columns foreign_key_columns2;
105 foreign_key_columns2.push_back(struct_id);
106 foreign_key_columns2.push_back(resNum2);
108 reference_columns2.push_back(
"struct_id");
109 reference_columns2.push_back(
"resNum");
110 ForeignKey foreign_key2(foreign_key_columns2,
"residues", reference_columns2,
true);
112 GreaterThanConstraintOP res1_10A_neighbors_is_positive(
113 new GreaterThanConstraint(res1_10A_neighbors, 1.0));
114 GreaterThanConstraintOP res2_10A_neighbors_is_positive(
115 new GreaterThanConstraint(res2_10A_neighbors, 1.0));
117 GreaterThanConstraintOP actcoord_dist_is_nonnegative(
118 new GreaterThanConstraint(actcoord_dist, 0));
120 Schema table(
"residue_pairs", primary_key);
121 table.add_foreign_key(foreign_key1);
122 table.add_foreign_key(foreign_key2);
123 table.add_constraint(res1_10A_neighbors_is_positive);
124 table.add_constraint(res2_10A_neighbors_is_positive);
125 table.add_column(res1_10A_neighbors);
126 table.add_column(res2_10A_neighbors);
127 table.add_column(actcoord_dist);
128 table.add_column(polymeric_sequence_dist);
130 table.write(db_session);
137 dependencies.push_back(
"ResidueFeatures");
146 boost::uuids::uuid
const struct_id,
157 boost::uuids::uuid
const struct_id,
172 std::string statement_string =
"INSERT INTO residue_pairs (struct_id, resNum1, resNum2, res1_10A_neighbors, res2_10A_neighbors, actcoord_dist, polymeric_sequence_dist) VALUES (?,?,?,?,?,?,?);";
173 statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
176 if(!relevant_residues[resNum1])
continue;
179 Size res1_10A_neighbors(
180 tenA.get_node(resNum1)->num_neighbors_counting_self_static());
184 if(!relevant_residues[resNum2])
continue;
187 Distance const actcoord_dist( res1.actcoord().distance( res2.actcoord() ) );
189 if( actcoord_dist > 10 )
continue;
191 Size res2_10A_neighbors(
192 tenA.get_node(resNum2)->num_neighbors_counting_self_static());
194 int polymeric_sequence_dist(res1.polymeric_sequence_distance(res2));
196 stmt.bind(1,struct_id);
197 stmt.bind(2,resNum1);
198 stmt.bind(3,resNum2);
199 stmt.bind(4,res1_10A_neighbors);
200 stmt.bind(5,res2_10A_neighbors);
201 stmt.bind(6,actcoord_dist);
202 stmt.bind(7,polymeric_sequence_dist);
203 basic::database::safely_write_to_database(stmt);