21 #include <boost/uuid/uuid.hpp>
22 #include <boost/uuid/uuid_io.hpp>
25 #include <basic/database/sql_utils.hh>
26 #include <basic/database/schema_generator/PrimaryKey.hh>
27 #include <basic/database/schema_generator/ForeignKey.hh>
28 #include <basic/database/schema_generator/Column.hh>
29 #include <basic/database/schema_generator/Schema.hh>
30 #include <basic/database/schema_generator/Constraint.hh>
31 #include <basic/options/option.hh>
32 #include <basic/options/keys/inout.OptionKeys.gen.hh>
34 #include <basic/database/insert_statement_generator/InsertGenerator.hh>
35 #include <basic/database/insert_statement_generator/RowData.hh>
38 #include <utility/sql_database/DatabaseSessionManager.hh>
39 #include <utility/vector1.hh>
40 #include <utility/tools/make_vector.hh>
43 #include <cppdb/frontend.h>
55 using std::numeric_limits;
60 using utility::sql_database::sessionOP;
62 using basic::database::safely_read_from_database;
63 using basic::database::safely_prepare_statement;
64 using basic::database::safely_write_to_database;
65 using basic::database::table_exists;
67 using cppdb::statement;
71 using basic::database::insert_statement_generator::InsertGenerator;
72 using basic::database::insert_statement_generator::RowData;
73 using basic::database::insert_statement_generator::RowDataBaseOP;
93 return "PdbDataFeatures";
98 using namespace basic::database::schema_generator;
100 Column struct_id(
"struct_id",
new DbUUID(),
false);
101 Column residue_number(
"residue_number",
new DbInteger(),
false);
104 pkey_cols.push_back(struct_id);
105 pkey_cols.push_back(residue_number);
108 Column chain_id(
"chain_id",
new DbText(),
false);
109 Column insertion_code(
"insertion_code",
new DbText(),
false);
110 Column pdb_residue_number(
"pdb_residue_number",
new DbInteger(),
false);
113 fkey_reference_cols.push_back(
"struct_id");
114 fkey_reference_cols.push_back(
"resNum");
116 Schema residue_pdb_identification(
"residue_pdb_identification", PrimaryKey(pkey_cols));
117 residue_pdb_identification.add_column(struct_id);
118 residue_pdb_identification.add_column(residue_number);
119 residue_pdb_identification.add_column(chain_id);
120 residue_pdb_identification.add_column(insertion_code);
121 residue_pdb_identification.add_column(pdb_residue_number);
123 residue_pdb_identification.add_foreign_key(ForeignKey(struct_id,
"structures",
"struct_id",
true));
125 residue_pdb_identification.write(db_session);
129 Column max_temperature(
"max_temperature",
new DbReal(),
false);
130 Column max_bb_temperature(
"max_bb_temperature",
new DbReal(),
false);
131 Column max_sc_temperature(
"max_sc_temperature",
new DbReal(),
false);
132 Column min_occupancy(
"min_occupancy",
new DbReal(),
false);
133 Column min_bb_occupancy(
"min_bb_occupancy",
new DbReal(),
false);
134 Column min_sc_occupancy(
"min_sc_occupancy",
new DbReal(),
false);
137 pdb_ident_pkeys.push_back(struct_id);
138 pdb_ident_pkeys.push_back(residue_number);
140 Schema residue_pdb_confidence(
"residue_pdb_confidence", PrimaryKey(pkey_cols));
141 residue_pdb_confidence.add_column(struct_id);
142 residue_pdb_confidence.add_column(residue_number);
143 residue_pdb_confidence.add_column(max_temperature);
144 residue_pdb_confidence.add_column(max_bb_temperature);
145 residue_pdb_confidence.add_column(max_sc_temperature);
146 residue_pdb_confidence.add_column(min_occupancy);
147 residue_pdb_confidence.add_column(min_bb_occupancy);
148 residue_pdb_confidence.add_column(min_sc_occupancy);
150 residue_pdb_confidence.add_foreign_key(ForeignKey(struct_id,
"structures",
"struct_id",
true));
152 residue_pdb_confidence.write(db_session);
159 dependencies.push_back(
"StructureFeatures");
167 boost::uuids::uuid struct_id,
168 sessionOP db_session )
171 pose, relevant_residues, struct_id, db_session);
173 pose, relevant_residues, struct_id, db_session);
178 boost::uuids::uuid struct_id,
179 sessionOP db_session)
181 string id_statement_string =
"DELETE FROM residue_pdb_identification WHERE struct_id = ?;\n";
182 statement id_stmt(safely_prepare_statement(id_statement_string,db_session));
183 id_stmt.bind(1,struct_id);
184 safely_write_to_database(id_stmt);
186 string confidence_statement_string =
"DELETE FROM residue_pdb_confidence WHERE struct_id = ?;\n";
187 statement confidence_stmt(
188 safely_prepare_statement(confidence_statement_string, db_session));
189 confidence_stmt.bind(1,struct_id);
190 safely_write_to_database(confidence_stmt);
194 sessionOP db_session,
195 boost::uuids::uuid struct_id,
204 sessionOP db_session,
205 boost::uuids::uuid struct_id,
208 if(!table_exists(db_session,
"residue_pdb_identification"))
return;
213 string statement_string =
216 " r_id.residue_number,\n"
218 " r_id.insertion_code,\n"
219 " r_id.pdb_residue_number\n"
221 " residue_pdb_identification AS r_id\n"
223 " r_id.struct_id=?;";
225 statement stmt(safely_prepare_statement(statement_string,db_session));
226 stmt.bind(1,struct_id);
227 result res(safely_read_from_database(stmt));
230 boost::uuids::uuid temp;
234 string insertion_code;
235 int pdb_residue_number;
237 res >> temp >> residue_number >> chain_id >> insertion_code >> pdb_residue_number;
239 pdb_chains.push_back(chain_id[0]);
240 insertion_codes.push_back(insertion_code[0]);
241 pdb_numbers.push_back(pdb_residue_number);
248 pose.
pdb_info()->set_numbering(pdb_numbers);
249 pose.
pdb_info()->set_chains(pdb_chains);
250 pose.
pdb_info()->set_icodes(insertion_codes);
256 boost::uuids::uuid struct_id,
260 InsertGenerator pdb_ident_insert(
"residue_pdb_identification");
261 pdb_ident_insert.add_column(
"struct_id");
262 pdb_ident_insert.add_column(
"residue_number");
263 pdb_ident_insert.add_column(
"chain_id");
264 pdb_ident_insert.add_column(
"insertion_code");
265 pdb_ident_insert.add_column(
"pdb_residue_number");
267 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
270 for(
Size index = 1; index <= res_num; ++index) {
271 if(!relevant_residues[index])
continue;
273 string chain_id(& pose.
pdb_info()->chain(index),1);
274 string insertion_code(&pose.
pdb_info()->icode(index),1);
275 int pdb_residue_number = pose.
pdb_info()->number(index);
277 RowDataBaseOP index_data =
new RowData<Size>(
"residue_number",index);
278 RowDataBaseOP chain_id_data =
new RowData<string>(
"chain_id",chain_id);
279 RowDataBaseOP insertion_code_data =
new RowData<string>(
"insertion_code",insertion_code);
280 RowDataBaseOP pdb_resnum_data =
new RowData<int>(
"pdb_residue_number",pdb_residue_number );
281 pdb_ident_insert.add_row(
282 utility::tools::make_vector(struct_id_data,index_data,chain_id_data,insertion_code_data,pdb_resnum_data));
286 pdb_ident_insert.write_to_database(db_session);
291 sessionOP db_session,
292 boost::uuids::uuid struct_id,
295 if(!table_exists(db_session,
"residue_pdb_confidence"))
return;
303 " r_conf.residue_number,\n"
304 " r_conf.max_bb_temperature,\n"
305 " r_conf.max_sc_temperature,\n"
306 " r_conf.min_bb_occupancy,\n"
307 " r_conf.min_sc_occupancy\n"
309 " residue_pdb_confidence AS r_conf\n"
311 " r_conf.struct_id=?;";
313 statement stmt(safely_prepare_statement(statement_string,db_session));
314 stmt.bind(1,struct_id);
315 result res(safely_read_from_database(stmt));
319 Real max_bb_temperature;
320 Real max_sc_temperature;
321 Real min_bb_occupancy;
322 Real min_sc_occupancy;
326 >> max_bb_temperature
327 >> max_sc_temperature
333 pose.
pdb_info()->resize_atom_records(
334 residue_number, residue.nheavyatoms(),
false);
338 atom_index <= residue.last_backbone_atom();
341 residue_number, atom_index, max_bb_temperature);
343 residue_number, atom_index, min_bb_occupancy);
346 Size atom_index = residue.first_sidechain_atom();
347 atom_index <= residue.nheavyatoms();
350 residue_number, atom_index, max_sc_temperature);
352 residue_number, atom_index, min_sc_occupancy);
361 boost::uuids::uuid struct_id,
365 if(!pdb_info)
return;
368 InsertGenerator confidence_insert(
"residue_pdb_confidence");
369 confidence_insert.add_column(
"struct_id");
370 confidence_insert.add_column(
"residue_number");
371 confidence_insert.add_column(
"max_temperature");
372 confidence_insert.add_column(
"max_bb_temperature");
373 confidence_insert.add_column(
"max_sc_temperature");
374 confidence_insert.add_column(
"min_occupancy");
375 confidence_insert.add_column(
"min_bb_occupancy");
376 confidence_insert.add_column(
"min_sc_occupancy");
379 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
382 if(!relevant_residues[ri])
continue;
385 Real max_bb_temperature(-1), max_sc_temperature(-1);
386 Real min_bb_occupancy(9999999);
387 Real min_sc_occupancy(9999999);
388 Size const n_bb(r.n_mainchain_atoms());
389 Size const n_sc(r.nheavyatoms() - r.n_mainchain_atoms());
390 for(
Size ai=1; ai <= n_bb; ++ai){
391 max_bb_temperature = max(max_bb_temperature, pdb_info->temperature(ri, ai));
392 min_bb_occupancy = min(min_bb_occupancy, pdb_info->occupancy(ri, ai));
394 for(
Size ai=1; ai <= n_sc; ++ai){
395 max_sc_temperature = max(max_sc_temperature, pdb_info->temperature(ri, ai));
396 min_sc_occupancy = min(min_sc_occupancy, pdb_info->occupancy(ri, ai));
398 Real const max_temperature = max(max_bb_temperature, max_sc_temperature);
399 Real const min_occupancy = min(min_bb_occupancy, min_sc_occupancy);
401 RowDataBaseOP residue_number_data =
new RowData<Size>(
"residue_number",ri);
402 RowDataBaseOP max_temp_data =
new RowData<Real>(
"max_temperature",max_temperature);
403 RowDataBaseOP max_bb_temp_data =
new RowData<Real>(
"max_bb_temperature",max_bb_temperature);
404 RowDataBaseOP max_sc_temp_data =
new RowData<Real>(
"max_sc_temperature",max_sc_temperature);
405 RowDataBaseOP min_occupancy_data =
new RowData<Real>(
"min_occupancy",min_occupancy);
406 RowDataBaseOP min_bb_occupancy_data =
new RowData<Real>(
"min_bb_occupancy",min_bb_occupancy);
407 RowDataBaseOP min_sc_occupancy_data =
new RowData<Real>(
"min_sc_occupancy",min_sc_occupancy);
409 confidence_insert.add_row(
410 utility::tools::make_vector(struct_id_data,residue_number_data,max_temp_data,max_bb_temp_data,max_sc_temp_data,
411 min_occupancy_data,min_bb_occupancy_data,min_sc_occupancy_data)
416 confidence_insert.write_to_database(db_session);