27 #include <utility/sql_database/DatabaseSessionManager.hh>
28 #include <utility/vector1.hh>
29 #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>
38 #include <cppdb/frontend.h>
39 #include <boost/uuid/uuid_io.hpp>
54 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 N_N_dist(
"N_N_dist",
new DbReal());
86 Column N_Ca_dist(
"N_Ca_dist",
new DbReal());
87 Column N_C_dist(
"N_C_dist",
new DbReal());
88 Column N_O_dist(
"N_O_dist",
new DbReal());
89 Column N_Ha_dist(
"N_Ha_dist",
new DbReal());
90 Column Ca_N_dist(
"Ca_N_dist",
new DbReal());
91 Column Ca_Ca_dist(
"Ca_Ca_dist",
new DbReal());
92 Column Ca_C_dist(
"Ca_C_dist",
new DbReal());
93 Column Ca_O_dist(
"Ca_O_dist",
new DbReal());
94 Column Ca_Ha_dist(
"Ca_Ha_dist",
new DbReal());
95 Column C_N_dist(
"C_N_dist",
new DbReal());
96 Column C_Ca_dist(
"C_Ca_dist",
new DbReal());
97 Column C_C_dist(
"C_C_dist",
new DbReal());
98 Column C_O_dist(
"C_O_dist",
new DbReal());
99 Column C_Ha_dist(
"C_Ha_dist",
new DbReal());
100 Column O_N_dist(
"O_N_dist",
new DbReal());
101 Column O_Ca_dist(
"O_Ca_dist",
new DbReal());
102 Column O_C_dist(
"O_C_dist",
new DbReal());
103 Column O_O_dist(
"O_O_dist",
new DbReal());
104 Column O_Ha_dist(
"O_Ha_dist",
new DbReal());
105 Column Ha_N_dist(
"Ha_N_dist",
new DbReal());
106 Column Ha_Ca_dist(
"Ha_Ca_dist",
new DbReal());
107 Column Ha_C_dist(
"Ha_C_dist",
new DbReal());
108 Column Ha_O_dist(
"Ha_O_dist",
new DbReal());
109 Column Ha_Ha_dist(
"Ha_Ha_dist",
new DbReal());
111 Columns primary_key_columns;
112 primary_key_columns.push_back(struct_id);
113 primary_key_columns.push_back(resNum1);
114 primary_key_columns.push_back(resNum2);
115 PrimaryKey primary_key(primary_key_columns);
117 Columns foreign_key_columns1;
118 foreign_key_columns1.push_back(struct_id);
119 foreign_key_columns1.push_back(resNum1);
121 reference_columns1.push_back(
"struct_id");
122 reference_columns1.push_back(
"resNum");
123 ForeignKey foreign_key1(foreign_key_columns1,
"residues", reference_columns1,
true);
125 Columns foreign_key_columns2;
126 foreign_key_columns2.push_back(struct_id);
127 foreign_key_columns2.push_back(resNum2);
129 reference_columns2.push_back(
"struct_id");
130 reference_columns2.push_back(
"resNum");
131 ForeignKey foreign_key2(foreign_key_columns2,
"residues", reference_columns2,
true);
133 Schema table(
"protein_backbone_atom_atom_pairs", primary_key);
134 table.add_foreign_key(foreign_key1);
135 table.add_foreign_key(foreign_key2);
136 table.add_column(N_N_dist);
137 table.add_column(N_Ca_dist);
138 table.add_column(N_C_dist);
139 table.add_column(N_O_dist);
140 table.add_column(N_Ha_dist);
141 table.add_column(Ca_N_dist);
142 table.add_column(Ca_Ca_dist);
143 table.add_column(Ca_C_dist);
144 table.add_column(Ca_O_dist);
145 table.add_column(Ca_Ha_dist);
146 table.add_column(C_N_dist);
147 table.add_column(C_Ca_dist);
148 table.add_column(C_C_dist);
149 table.add_column(C_O_dist);
150 table.add_column(C_Ha_dist);
151 table.add_column(O_N_dist);
152 table.add_column(O_Ca_dist);
153 table.add_column(O_C_dist);
154 table.add_column(O_O_dist);
155 table.add_column(O_Ha_dist);
156 table.add_column(Ha_N_dist);
157 table.add_column(Ha_Ca_dist);
158 table.add_column(Ha_C_dist);
159 table.add_column(Ha_O_dist);
160 table.add_column(Ha_Ha_dist);
162 table.write(db_session);
168 dependencies.push_back(
"ResidueFeatures");
184 boost::uuids::uuid
const struct_id,
189 std::string statement_string =
"INSERT INTO protein_backbone_atom_atom_pairs (struct_id, resNum1, resNum2, N_N_dist, N_Ca_dist, N_C_dist, N_O_dist, N_Ha_dist, Ca_N_dist, Ca_Ca_dist, Ca_C_dist, Ca_O_dist, Ca_Ha_dist, C_N_dist, C_Ca_dist, C_C_dist, C_O_dist, C_Ha_dist, O_N_dist, O_Ca_dist, O_C_dist, O_O_dist, O_Ha_dist, Ha_N_dist, Ha_Ca_dist, Ha_C_dist, Ha_O_dist, Ha_Ha_dist) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
190 statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
193 if(!relevant_residues[resNum1])
continue;
207 ir = tenA.get_node( resNum1 )->const_edge_list_begin(),
210 Size resNum2( (*ir)->get_other_ind(resNum1) );
211 if(!relevant_residues[resNum2] || (resNum1 >= resNum2))
continue;
224 stmt.bind(1,struct_id);
225 stmt.bind(2,resNum1);
226 stmt.bind(3,resNum2);
227 stmt.bind(4,N1.distance(N2));
228 stmt.bind(5,N1.distance(Ca2));
229 stmt.bind(6,N1.distance(C2));
230 stmt.bind(7,N1.distance(O2));
231 stmt.bind(8,N1.distance(HA2));
232 stmt.bind(9,Ca1.distance(N2));
233 stmt.bind(10,Ca1.distance(Ca2));
234 stmt.bind(11,Ca1.distance(C2));
235 stmt.bind(12,Ca1.distance(O2));
236 stmt.bind(13,Ca1.distance(HA2));
237 stmt.bind(14,C1.distance(N2));
238 stmt.bind(15,C1.distance(Ca2));
239 stmt.bind(16,C1.distance(C2));
240 stmt.bind(17,C1.distance(O2));
241 stmt.bind(18,C1.distance(HA2));
242 stmt.bind(19,O1.distance(N2));
243 stmt.bind(20,O1.distance(Ca2));
244 stmt.bind(21,O1.distance(C2));
245 stmt.bind(22,O1.distance(O2));
246 stmt.bind(23,O1.distance(HA2));
247 stmt.bind(24,HA1.distance(N2));
248 stmt.bind(25,HA1.distance(Ca2));
249 stmt.bind(26,HA1.distance(C2));
250 stmt.bind(27,HA1.distance(O2));
251 stmt.bind(28,HA1.distance(HA2));
254 basic::database::safely_write_to_database(stmt);