19 #include <basic/database/schema_generator/PrimaryKey.hh>
20 #include <basic/database/schema_generator/ForeignKey.hh>
21 #include <basic/database/schema_generator/Column.hh>
22 #include <basic/database/schema_generator/Schema.hh>
23 #include <basic/database/sql_utils.hh>
25 #include <basic/database/insert_statement_generator/InsertGenerator.hh>
26 #include <basic/database/insert_statement_generator/RowData.hh>
28 #include <utility/tools/make_vector.hh>
30 #include <utility/excn/Exceptions.hh>
53 return "ResidueGridScoresFeatures";
74 return "ResidueGridScoresFeatures";
79 using namespace basic::database::schema_generator;
80 Column struct_id(
"struct_id",
new DbUUID());
81 Column grid_name(
"grid_name",
new DbTextKey());
82 Column seqpos(
"seqpos",
new DbInteger());
83 Column atomno(
"atomno",
new DbInteger());
84 Column score(
"score",
new DbReal());
86 Columns primary_key_columns;
87 primary_key_columns.push_back(struct_id);
88 primary_key_columns.push_back(grid_name);
89 primary_key_columns.push_back(seqpos);
90 primary_key_columns.push_back(atomno);
91 PrimaryKey primary_key(primary_key_columns);
93 Columns foreign_key_columns;
94 foreign_key_columns.push_back(struct_id);
95 foreign_key_columns.push_back(seqpos);
96 foreign_key_columns.push_back(atomno);
99 reference_columns.push_back(
"struct_id");
100 reference_columns.push_back(
"seqpos");
101 reference_columns.push_back(
"atomno");
102 ForeignKey foreign_key(foreign_key_columns,
"residue_atom_coords",reference_columns,
true);
104 Schema table(
"residue_grid_scores",primary_key);
105 table.add_foreign_key(foreign_key);
106 table.add_column(score);
108 table.write(db_session);
116 dependencies.push_back(
"ResidueConformationFeatures");
123 boost::uuids::uuid struct_id,
124 utility::sql_database::sessionOP db_session)
126 using basic::database::insert_statement_generator::InsertGenerator;
127 using basic::database::insert_statement_generator::RowDataBaseOP;
128 using basic::database::insert_statement_generator::RowData;
132 if (grid_manager->
size()==0){
133 utility_exit_with_message(
"In order to use the ResidueGridScoresFeatures reporter you must define at least one scoring grid");
144 InsertGenerator grid_insert(
"residue_grid_scores");
145 grid_insert.add_column(
"struct_id");
146 grid_insert.add_column(
"grid_name");
147 grid_insert.add_column(
"seqpos");
148 grid_insert.add_column(
"atomno");
149 grid_insert.add_column(
"score");
151 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
154 if(!relevant_residues[i])
continue;
156 RowDataBaseOP seqpos_data =
new RowData<core::Size>(
"seqpos",i);
159 for(
Size atomno = 1; atomno <= residue.natoms();++atomno)
161 RowDataBaseOP atomno_data =
new RowData<core::Size>(
"atomno",atomno);
162 std::map<std::string,core::Real> atom_map = grid_manager->
atom_score(pose,residue,atomno);
163 for(std::map<std::string,core::Real>::const_iterator score_it = atom_map.begin(); score_it != atom_map.end();++score_it)
165 RowDataBaseOP grid_name_data =
new RowData<std::string>(
"grid_name",score_it->first);
166 RowDataBaseOP score_data =
new RowData<core::Real>(
"score",score_it->second);
168 utility::tools::make_vector(struct_id_data,seqpos_data,atomno_data,grid_name_data,score_data));
172 grid_insert.write_to_database(db_session);
183 if(!tag->hasOption(
"chain"))
185 throw utility::excn::EXCN_RosettaScriptsOption(
"The ResidueGridScoresFeatures reporter requires a Chain tag");
189 chain_ = tag->getOption<
char>(
"chain");