18 #include <boost/uuid/uuid.hpp>
19 #include <boost/uuid/uuid_io.hpp>
20 #include <boost/assign/list_of.hpp>
23 #include <basic/Tracer.hh>
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>
39 #include <utility/sql_database/DatabaseSessionManager.hh>
40 #include <utility/vector1.hh>
43 #include <cppdb/frontend.h>
55 using utility::sql_database::sessionOP;
56 using cppdb::statement;
59 static Tracer
TR(
"protocols.features.ResidueSecondaryStructureFeatures");
74 using namespace basic::database::schema_generator;
75 using namespace basic::database;
76 using namespace boost::assign;
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);
83 dssp_codes.write(db_session);
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);
96 Column struct_id(
"struct_id",
new DbUUID(),
false);
97 Column resNum(
"resNum",
new DbInteger(),
false);
98 Column dssp(
"dssp",
new DbText(1));
101 sec_struct_pkey_cols.push_back(struct_id);
102 sec_struct_pkey_cols.push_back(resNum);
105 fkey_cols.push_back(struct_id);
106 fkey_cols.push_back(resNum);
109 fkey_reference_cols.push_back(
"struct_id");
110 fkey_reference_cols.push_back(
"resNum");
112 ForeignKey dssp_fk(dssp,
"dssp_codes",
"code",
true );
114 Schema residue_secondary_structure(
"residue_secondary_structure", PrimaryKey(sec_struct_pkey_cols));
116 residue_secondary_structure.add_column(struct_id);
117 residue_secondary_structure.add_column(resNum);
118 residue_secondary_structure.add_column(dssp);
120 residue_secondary_structure.add_foreign_key(ForeignKey(fkey_cols,
"residues", fkey_reference_cols,
true));
121 residue_secondary_structure.add_foreign_key(dssp_fk);
123 residue_secondary_structure.write(db_session);
129 dependencies.push_back(
"ResidueFeatures");
137 boost::uuids::uuid struct_id,
144 std::string sec_structure_statement_string =
"INSERT INTO residue_secondary_structure (struct_id, resNum, dssp) VALUES (?,?,?);";
148 if(!relevant_residues[resNum])
continue;
159 statement stmt(basic::database::safely_prepare_statement(sec_structure_statement_string,db_session));
160 stmt.bind(1,struct_id);
162 stmt.bind(3,residue_secondary);
163 basic::database::safely_write_to_database(stmt);