15 #include <basic/Tracer.hh>
24 #include <basic/database/sql_utils.hh>
25 #include <basic/options/option.hh>
26 #include <basic/options/keys/inout.OptionKeys.gen.hh>
28 #include <basic/database/schema_generator/PrimaryKey.hh>
29 #include <basic/database/schema_generator/ForeignKey.hh>
30 #include <basic/database/schema_generator/Column.hh>
31 #include <basic/database/schema_generator/Schema.hh>
32 #include <basic/database/schema_generator/Index.hh>
35 #include <numeric/xyz.functions.hh>
36 #include <utility/sql_database/DatabaseSessionManager.hh>
37 #include <utility/string_util.hh>
38 #include <utility/vector1.hh>
41 #include <boost/foreach.hpp>
42 #define foreach BOOST_FOREACH
47 using utility::sql_database::sessionOP;
80 using namespace basic::database::schema_generator;
82 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
83 Column version(
"version",
new DbText());
84 Column name(
"name",
new DbText(255));
85 Column name3(
"name3",
new DbText(3));
86 Column name1(
"name1",
new DbText(2));
87 Column aa(
"aa",
new DbInteger());
88 Column lower_connect(
"lower_connect",
new DbInteger());
89 Column upper_connect(
"upper_connect",
new DbInteger());
90 Column nbr_atom(
"nbr_atom",
new DbInteger());
91 Column nbr_radius(
"nbr_radius",
new DbReal());
92 Column rotamer_library(
"rotamer_library",
new DbText());
94 Columns primary_key_columns;
95 primary_key_columns.push_back(residue_type_set_name);
96 primary_key_columns.push_back(name);
97 PrimaryKey primary_key(primary_key_columns);
99 Schema table(
"residue_type", primary_key);
100 table.add_column(version);
101 table.add_column(name3);
102 table.add_column(name1);
103 table.add_column(aa);
104 table.add_column(lower_connect);
105 table.add_column(upper_connect);
106 table.add_column(nbr_atom);
107 table.add_column(nbr_radius);
108 table.add_column(rotamer_library);
110 table.write(db_session);
117 using namespace basic::database::schema_generator;
119 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
120 Column residue_type_name(
"residue_type_name",
new DbText(255));
121 Column atom_index(
"atom_index",
new DbInteger());
122 Column atom_name(
"atom_name",
new DbText());
123 Column atom_type_name(
"atom_type_name",
new DbText());
124 Column mm_atom_type_name(
"mm_atom_type_name",
new DbText());
125 Column charge(
"charge",
new DbReal());
126 Column is_backbone(
"is_backbone",
new DbInteger());
128 Columns primary_key_columns;
129 primary_key_columns.push_back(residue_type_set_name);
130 primary_key_columns.push_back(residue_type_name);
131 primary_key_columns.push_back(atom_index);
132 PrimaryKey primary_key(primary_key_columns);
134 Columns index1_columns;
135 index1_columns.push_back(residue_type_set_name);
136 index1_columns.push_back(residue_type_name);
137 index1_columns.push_back(atom_name);
138 Index index1(index1_columns);
141 Columns foreign_key_columns;
142 foreign_key_columns.push_back(residue_type_set_name);
143 foreign_key_columns.push_back(residue_type_name);
145 reference_columns.push_back(
"residue_type_set_name");
146 reference_columns.push_back(
"name");
147 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
149 Schema table(
"residue_type_atom", primary_key);
150 table.add_foreign_key(foreign_key);
151 table.add_column(atom_name);
152 table.add_column(atom_type_name);
153 table.add_column(mm_atom_type_name);
154 table.add_column(charge);
155 table.add_column(is_backbone);
156 table.add_index(index1);
158 table.write(db_session);
165 using namespace basic::database::schema_generator;
167 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
168 Column residue_type_name(
"residue_type_name",
new DbText(255));
169 Column atom1(
"atom1",
new DbInteger());
170 Column atom2(
"atom2",
new DbInteger());
171 Column bond_type(
"bond_type",
new DbInteger());
173 Columns primary_key_columns;
174 primary_key_columns.push_back(residue_type_set_name);
175 primary_key_columns.push_back(residue_type_name);
176 primary_key_columns.push_back(atom1);
177 primary_key_columns.push_back(atom2);
178 PrimaryKey primary_key(primary_key_columns);
181 Columns foreign_key_columns;
182 foreign_key_columns.push_back(residue_type_set_name);
183 foreign_key_columns.push_back(residue_type_name);
185 reference_columns.push_back(
"residue_type_set_name");
186 reference_columns.push_back(
"name");
187 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
189 Schema table(
"residue_type_bond", primary_key);
190 table.add_foreign_key(foreign_key);
191 table.add_column(bond_type);
193 table.write(db_session);
201 using namespace basic::database::schema_generator;
203 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
204 Column residue_type_name(
"residue_type_name",
new DbText(255));
205 Column atom1(
"atom1",
new DbInteger());
206 Column atom2(
"atom2",
new DbInteger());
208 Columns primary_key_columns;
209 primary_key_columns.push_back(residue_type_set_name);
210 primary_key_columns.push_back(residue_type_name);
211 primary_key_columns.push_back(atom1);
212 primary_key_columns.push_back(atom2);
213 PrimaryKey primary_key(primary_key_columns);
216 Columns foreign_key_columns;
217 foreign_key_columns.push_back(residue_type_set_name);
218 foreign_key_columns.push_back(residue_type_name);
220 reference_columns.push_back(
"residue_type_set_name");
221 reference_columns.push_back(
"name");
222 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
224 Schema table(
"residue_type_cut_bond", primary_key);
225 table.add_foreign_key(foreign_key);
227 table.write(db_session);
234 using namespace basic::database::schema_generator;
236 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
237 Column residue_type_name(
"residue_type_name",
new DbText(255));
238 Column chino(
"chino",
new DbInteger());
239 Column atom1(
"atom1",
new DbText());
240 Column atom2(
"atom2",
new DbText());
241 Column atom3(
"atom3",
new DbText());
242 Column atom4(
"atom4",
new DbText());
244 Columns primary_key_columns;
245 primary_key_columns.push_back(residue_type_set_name);
246 primary_key_columns.push_back(residue_type_name);
250 primary_key_columns.push_back(atom1);
251 primary_key_columns.push_back(atom2);
252 primary_key_columns.push_back(atom3);
253 primary_key_columns.push_back(atom4);
254 PrimaryKey primary_key(primary_key_columns);
257 Columns foreign_key_columns;
258 foreign_key_columns.push_back(residue_type_set_name);
259 foreign_key_columns.push_back(residue_type_name);
261 reference_columns.push_back(
"residue_type_set_name");
262 reference_columns.push_back(
"name");
263 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
265 Schema table(
"residue_type_chi", primary_key);
266 table.add_foreign_key(foreign_key);
267 table.add_column(chino);
269 table.write(db_session);
276 using namespace basic::database::schema_generator;
278 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
279 Column residue_type_name(
"residue_type_name",
new DbText(255));
280 Column chino(
"chino",
new DbInteger());
281 Column mean(
"mean",
new DbReal());
282 Column sdev(
"sdev",
new DbReal());
284 Columns primary_key_columns;
285 primary_key_columns.push_back(residue_type_set_name);
286 primary_key_columns.push_back(residue_type_name);
287 primary_key_columns.push_back(chino);
288 primary_key_columns.push_back(mean);
289 primary_key_columns.push_back(sdev);
290 PrimaryKey primary_key(primary_key_columns);
293 Columns foreign_key_columns;
294 foreign_key_columns.push_back(residue_type_set_name);
295 foreign_key_columns.push_back(residue_type_name);
297 reference_columns.push_back(
"residue_type_set_name");
298 reference_columns.push_back(
"name");
299 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
301 Schema table(
"residue_type_chi_rotamer", primary_key);
302 table.add_foreign_key(foreign_key);
304 table.write(db_session);
311 using namespace basic::database::schema_generator;
313 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
314 Column residue_type_name(
"residue_type_name",
new DbText(255));
315 Column chino(
"chino",
new DbInteger());
316 Column sample(
"sample",
new DbReal());
317 Column is_extra(
"is_extra",
new DbInteger());
319 Columns primary_key_columns;
320 primary_key_columns.push_back(residue_type_set_name);
321 primary_key_columns.push_back(residue_type_name);
322 primary_key_columns.push_back(chino);
323 primary_key_columns.push_back(sample);
324 PrimaryKey primary_key(primary_key_columns);
327 Columns foreign_key_columns;
328 foreign_key_columns.push_back(residue_type_set_name);
329 foreign_key_columns.push_back(residue_type_name);
331 reference_columns.push_back(
"residue_type_set_name");
332 reference_columns.push_back(
"name");
333 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
335 Schema table(
"residue_type_proton_chi", primary_key);
336 table.add_foreign_key(foreign_key);
337 table.add_column(is_extra);
339 table.write(db_session);
346 using namespace basic::database::schema_generator;
348 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
349 Column residue_type_name(
"residue_type_name",
new DbText(255));
350 Column property(
"property",
new DbText());
352 Columns primary_key_columns;
353 primary_key_columns.push_back(residue_type_set_name);
354 primary_key_columns.push_back(residue_type_name);
355 primary_key_columns.push_back(property);
356 PrimaryKey primary_key(primary_key_columns);
359 Columns foreign_key_columns;
360 foreign_key_columns.push_back(residue_type_set_name);
361 foreign_key_columns.push_back(residue_type_name);
363 reference_columns.push_back(
"residue_type_set_name");
364 reference_columns.push_back(
"name");
365 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
367 Schema table(
"residue_type_property", primary_key);
368 table.add_foreign_key(foreign_key);
370 table.write(db_session);
377 using namespace basic::database::schema_generator;
379 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
380 Column residue_type_name(
"residue_type_name",
new DbText(255));
381 Column variant_type(
"variant_type",
new DbText());
383 Columns primary_key_columns;
384 primary_key_columns.push_back(residue_type_set_name);
385 primary_key_columns.push_back(residue_type_name);
386 primary_key_columns.push_back(variant_type);
387 PrimaryKey primary_key(primary_key_columns);
390 Columns foreign_key_columns;
391 foreign_key_columns.push_back(residue_type_set_name);
392 foreign_key_columns.push_back(residue_type_name);
394 reference_columns.push_back(
"residue_type_set_name");
395 reference_columns.push_back(
"name");
396 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
398 Schema table(
"residue_type_variant_type", primary_key);
399 table.add_foreign_key(foreign_key);
401 table.write(db_session);
408 using namespace basic::database::schema_generator;
410 Column residue_type_set_name(
"residue_type_set_name",
new DbText(255));
411 Column residue_type_name(
"residue_type_name",
new DbText(255));
412 Column icoor_sequence(
"icoor_sequence",
new DbInteger());
413 Column child_atom(
"child_atom",
new DbText());
414 Column
phi(
"phi",
new DbReal());
415 Column theta(
"theta",
new DbReal());
416 Column
distance(
"distance",
new DbReal());
417 Column parent_atom(
"parent_atom",
new DbText());
418 Column angle_atom(
"angle_atom",
new DbText());
419 Column torsion_atom(
"torsion_atom",
new DbText());
421 Columns primary_key_columns;
422 primary_key_columns.push_back(residue_type_set_name);
423 primary_key_columns.push_back(residue_type_name);
424 primary_key_columns.push_back(child_atom);
425 PrimaryKey primary_key(primary_key_columns);
428 Columns foreign_key_columns;
429 foreign_key_columns.push_back(residue_type_set_name);
430 foreign_key_columns.push_back(residue_type_name);
432 reference_columns.push_back(
"residue_type_set_name");
433 reference_columns.push_back(
"name");
434 ForeignKey foreign_key(foreign_key_columns,
"residue_type", reference_columns,
true);
436 Schema table(
"residue_type_icoor", primary_key);
437 table.add_foreign_key(foreign_key);
438 table.add_column(icoor_sequence);
439 table.add_column(phi);
440 table.add_column(theta);
441 table.add_column(distance);
442 table.add_column(parent_atom);
443 table.add_column(angle_atom);
444 table.add_column(torsion_atom);
446 table.write(db_session);
463 utility::sql_database::sessionOP db_session)
465 std::string status_string =
"SELECT * FROM residue_type WHERE residue_type_set_name = ? AND name = ?;";
466 cppdb::statement status_statement(basic::database::safely_prepare_statement(status_string,db_session));
467 status_statement.bind(1,residue_type_set_name);
468 status_statement.bind(2,res_type.
name());
469 cppdb::result res(basic::database::safely_read_from_database(status_statement));
471 if(res.next())
return;
492 utility::sql_database::sessionOP db_session
508 res_type->finalize();
516 utility::sql_database::sessionOP db_session
519 std::pair<std::string,core::Size> atom_id = std::make_pair(residue_name,atom_index);
530 "FROM residue_type_atom WHERE residue_type_name=?;";
531 cppdb::statement stmt(basic::database::safely_prepare_statement(atom_query,db_session));
532 stmt.bind(1,residue_name);
533 cppdb::result res(basic::database::safely_read_from_database(stmt));
540 res >> atom_index >> atom_name;
542 std::pair<std::string,core::Size> new_atom_id = std::make_pair(residue_name,atom_index);
555 utility::sql_database::sessionOP db_session
558 std::stringstream name1; name1 << res_type.
name1();
560 int lower_terminus(-1), upper_terminus(-1);
566 std::string statement_string =
"INSERT INTO residue_type (residue_type_set_name, name, version, name3, name1, aa, lower_connect, upper_connect, nbr_atom, nbr_radius, rotamer_library) VALUES (?,?,?,?,?,?,?,?,?,?,?);";
567 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
569 stmt.bind(1,residue_type_set_name);
570 stmt.bind(2,res_type.
name());
572 stmt.bind(4,res_type.
name3());
573 stmt.bind(5,name1.str());
574 stmt.bind(6,res_type.
aa());
575 stmt.bind(7,lower_terminus);
576 stmt.bind(8,upper_terminus);
580 basic::database::safely_write_to_database(stmt);
589 utility::sql_database::sessionOP db_session)
602 "FROM residue_type\n"
603 "WHERE residue_type_set_name = ? AND name = ?;";
604 cppdb::statement stmt(basic::database::safely_prepare_statement(residue_type_statement,db_session));
605 stmt.bind(1,residue_type_set_name);
606 stmt.bind(2,residue_type_name);
607 cppdb::result res(basic::database::safely_read_from_database(stmt));
611 utility_exit_with_message(
"could not find residue "+residue_type_name+
" in "+residue_type_set_name);
617 int lower_connect, upper_connect;
634 utility_exit_with_message(
"Version mismatch between Residue Database and Executable");
637 res_type.
name(residue_type_name);
638 res_type.
name3(name3);
639 res_type.
name1(name1[0]);
642 if(lower_connect > 0 )
647 if(upper_connect > 0 )
655 if(rotamer_library !=
"")
671 "FROM residue_type;";
672 cppdb::statement stmt(basic::database::safely_prepare_statement(residue_name_statement,db_session));
673 cppdb::result res(basic::database::safely_read_from_database(stmt));
678 residue_names.push_back(name);
680 return residue_names;
687 utility::sql_database::sessionOP db_session
690 std::string statement_string =
"INSERT INTO residue_type_atom (residue_type_set_name, residue_type_name, atom_index, atom_name, atom_type_name, mm_atom_type_name, charge, is_backbone) VALUES (?,?,?,?,?,?,?,?);";
691 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
695 stmt.bind(1,residue_type_set_name);
696 stmt.bind(2,res_type.
name());
703 basic::database::safely_write_to_database(stmt);
713 utility::sql_database::sessionOP db_session)
720 "mm_atom_type_name,\n"
722 "FROM residue_type_atom\n"
723 "WHERE residue_type_set_name = ? AND residue_type_name = ?\n"
724 "ORDER BY atom_index;";
725 cppdb::statement stmt(basic::database::safely_prepare_statement(residue_atoms_statement,db_session));
726 stmt.bind(1,residue_type_set_name);
727 stmt.bind(2,residue_type_name);
728 cppdb::result res(basic::database::safely_read_from_database(stmt));
733 std::string atom_name, atom_type_name,mm_atom_type_name;
736 res >> atom_index >> atom_name >> atom_type_name >> mm_atom_type_name >> charge;
737 res_type.
add_atom(atom_name,atom_type_name,mm_atom_type_name,charge);
746 utility::sql_database::sessionOP db_session
749 std::string statement_string =
"INSERT INTO residue_type_bond (residue_type_set_name, residue_type_name, atom1, atom2, bond_type) VALUES (?,?,?,?,?);";
750 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
751 for(
Size atm=1; atm <= res_type.
natoms(); ++atm){
754 for(
Size nbr=1; nbr <= neighbors.size(); ++nbr){
755 if(atm >= neighbors[nbr])
continue;
757 stmt.bind(1,residue_type_set_name);
758 stmt.bind(2,res_type.
name());
760 stmt.bind(4,neighbors[nbr]);
761 stmt.bind(5,types[nbr]);
762 basic::database::safely_write_to_database(stmt);
772 utility::sql_database::sessionOP db_session
780 "FROM residue_type_bond\n"
781 "WHERE residue_type_set_name = ? AND residue_type_name = ?;";
782 cppdb::statement stmt(basic::database::safely_prepare_statement(bond_statement_string,db_session));
783 stmt.bind(1,residue_type_set_name);
784 stmt.bind(2,residue_type_name);
785 cppdb::result res(basic::database::safely_read_from_database(stmt));
789 res >> atom1 >> atom2 >> bond_type;
792 res_type.
add_bond(atom1_name,atom2_name,static_cast<core::chemical::BondName>(bond_type));
802 utility::sql_database::sessionOP db_session
805 std::string statement_string =
"INSERT INTO residue_type_cut_bond (residue_type_set_name, residue_type_name, atom1, atom2) VALUES (?,?,?,?);";
806 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
813 stmt.bind(1,residue_type_set_name);
814 stmt.bind(2,res_type.
name());
817 basic::database::safely_write_to_database(stmt);
827 utility::sql_database::sessionOP db_session
834 "FROM residue_type_cut_bond\n"
835 "WHERE residue_type_set_name = ? AND residue_type_name = ?;";
836 cppdb::statement stmt(basic::database::safely_prepare_statement(cut_bond_statement_string,db_session));
837 stmt.bind(1,residue_type_set_name);
838 stmt.bind(2,residue_type_name);
839 cppdb::result res(basic::database::safely_read_from_database(stmt));
843 res >> atom1 >> atom2;
855 utility::sql_database::sessionOP db_session
858 std::string statement_string =
"INSERT INTO residue_type_chi (residue_type_set_name, residue_type_name, atom1, atom2, atom3, atom4, chino) VALUES (?,?,?,?,?,?,?);";
859 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
861 for(
Size i=1; i <= res_type.
nchi(); ++i){
864 stmt.bind(1,residue_type_set_name);
865 stmt.bind(2,res_type.
name());
866 stmt.bind(3,chi_atoms[1]);
867 stmt.bind(4,chi_atoms[2]);
868 stmt.bind(5,chi_atoms[3]);
869 stmt.bind(6,chi_atoms[4]);
871 basic::database::safely_write_to_database(stmt);
882 utility::sql_database::sessionOP db_session
892 "FROM residue_type_chi\n"
893 "WHERE residue_type_set_name = ? AND residue_type_name = ?;";
894 cppdb::statement stmt(basic::database::safely_prepare_statement(chi_statement_string,db_session));
895 stmt.bind(1,residue_type_set_name);
896 stmt.bind(2,residue_type_name);
897 cppdb::result res(basic::database::safely_read_from_database(stmt));
902 res >> chino >> atom1 >> atom2 >> atom3 >> atom4;
907 res_type.
add_chi(chino,atom1_name,atom2_name,atom3_name,atom4_name);
916 utility::sql_database::sessionOP db_session
919 std::string statement_string =
"INSERT INTO residue_type_chi_rotamer (residue_type_set_name, residue_type_name, chino, mean, sdev) VALUES (?,?,?,?,?);";
920 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
921 for(
Size chi=1; chi <= res_type.
nchi(); ++chi){
922 std::pair<Real, Real> mean_sdev;
925 stmt.bind(1,residue_type_set_name);
926 stmt.bind(2,res_type.
name());
928 stmt.bind(4,mean_sdev.first);
929 stmt.bind(5,mean_sdev.second);
930 basic::database::safely_write_to_database(stmt);
940 utility::sql_database::sessionOP db_session)
947 "FROM residue_type_chi_rotamer\n"
948 "WHERE residue_type_set_name = ? AND residue_type_name = ?;";
949 cppdb::statement stmt(basic::database::safely_prepare_statement(chi_rotamer_statement_string,db_session));
950 stmt.bind(1,residue_type_set_name);
951 stmt.bind(2,residue_type_name);
952 cppdb::result res(basic::database::safely_read_from_database(stmt));
958 res >> chino >> mean >> stdev;
967 utility::sql_database::sessionOP db_session
970 std::string statement_string =
"INSERT INTO residue_type_proton_chi (residue_type_set_name, residue_type_name, chino, sample, is_extra) VALUES (?,?,?,?,?);";
971 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
972 for(
Size proton_chi=1; proton_chi <= res_type.
n_proton_chi(); ++proton_chi){
976 stmt.bind(1,residue_type_set_name);
977 stmt.bind(2,res_type.
name());
981 basic::database::safely_write_to_database(stmt);
985 stmt.bind(1,residue_type_set_name);
986 stmt.bind(2,res_type.
name());
988 stmt.bind(4,sample - extra_sample);
990 basic::database::safely_write_to_database(stmt);
992 stmt.bind(1,residue_type_set_name);
993 stmt.bind(2,res_type.
name());
995 stmt.bind(4,sample + extra_sample);
997 basic::database::safely_write_to_database(stmt);
1009 utility::sql_database::sessionOP db_session)
1016 "FROM residue_type_proton_chi\n"
1017 "WHERE residue_type_set_name = ? AND residue_type_name = ?;";
1018 cppdb::statement stmt(basic::database::safely_prepare_statement(proton_chi_statement_string,db_session));
1019 stmt.bind(1,residue_type_set_name);
1020 stmt.bind(2,residue_type_name);
1021 cppdb::result res(basic::database::safely_read_from_database(stmt));
1023 std::map<core::Size,utility::vector1< core::Real > > samples;
1024 std::map<core::Size,utility::vector1< core::Real > > extra_samples;
1031 res >> chino >> sample >> is_extra;
1034 if(extra_samples.find(chino) == extra_samples.end())
1037 extra_sample_vect.push_back(sample);
1038 extra_samples.insert(std::make_pair(chino,extra_sample_vect));
1041 extra_samples[chino].push_back(sample);
1046 if(samples.find(chino) == samples.end())
1049 sample_vect.push_back(sample);
1050 samples.insert(std::make_pair(chino,sample_vect));
1053 samples[chino].push_back(sample);
1063 utility::sql_database::sessionOP db_session
1067 cppdb::statement stmt = (*db_session)
1068 <<
"INSERT INTO residue_type_property (residue_type_set_name, residue_type_name, property) VALUES (?,?,?);"
1069 << residue_type_set_name
1072 basic::database::safely_write_to_database(stmt);
1082 utility::sql_database::sessionOP db_session)
1087 "FROM residue_type_property\n"
1088 "WHERE residue_type_set_name = ? AND residue_type_name = ?;";
1089 cppdb::statement stmt(basic::database::safely_prepare_statement(residue_property_statement_string,db_session));
1090 stmt.bind(1,residue_type_set_name);
1091 stmt.bind(2,residue_type_name);
1092 cppdb::result res(basic::database::safely_read_from_database(stmt));
1107 utility::sql_database::sessionOP db_session
1111 cppdb::statement stmt = (*db_session)
1112 <<
"INSERT INTO residue_type_variant_type (residue_type_set_name, residue_type_name, variant_type) VALUES (?,?,?);"
1113 << residue_type_set_name
1116 basic::database::safely_write_to_database(stmt);
1126 utility::sql_database::sessionOP db_session)
1131 "FROM residue_type_variant_type\n"
1132 "WHERE residue_type_set_name = ? AND residue_type_name = ?;";
1133 cppdb::statement stmt(basic::database::safely_prepare_statement(residue_variant_statement_string,db_session));
1134 stmt.bind(1,residue_type_set_name);
1135 stmt.bind(2,residue_type_name);
1136 cppdb::result res(basic::database::safely_read_from_database(stmt));
1140 res >> variant_type;
1150 utility::sql_database::sessionOP db_session)
1152 std::string statement_string =
"INSERT INTO residue_type_icoor (residue_type_set_name, residue_type_name, child_atom, icoor_sequence, phi, theta, distance, parent_atom, angle_atom, torsion_atom) VALUES (?,?,?,?,?,?,?,?,?,?);";
1153 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
1158 stmt.bind(1,residue_type_set_name);
1159 stmt.bind(2,res_type.
name());
1161 stmt.bind(4,atom_icoor.index());
1162 stmt.bind(5,atom_icoor.phi());
1163 stmt.bind(6,atom_icoor.theta());
1164 stmt.bind(7,atom_icoor.d());
1168 stmt.bind(8,res_type.
atom_name(atom_icoor.stub_atom1().atomno()));
1171 stmt.bind(8,
"CONNECT");
1174 stmt.bind(8,
"LOWER");
1178 stmt.bind(8,
"UPPER");
1183 stmt.bind(9,res_type.
atom_name(atom_icoor.stub_atom2().atomno()));
1186 stmt.bind(9,
"CONNECT");
1189 stmt.bind(9,
"LOWER");
1193 stmt.bind(9,
"UPPER");
1198 stmt.bind(10,res_type.
atom_name(atom_icoor.stub_atom3().atomno()));
1201 stmt.bind(10,
"CONNECT");
1204 stmt.bind(10,
"LOWER");
1208 stmt.bind(10,
"UPPER");
1210 basic::database::safely_write_to_database(stmt);
1220 utility::sql_database::sessionOP db_session)
1233 "FROM residue_type_icoor\n"
1234 "WHERE residue_type_set_name = ? AND residue_type_name = ?\n"
1235 "ORDER BY icoor_sequence;";
1236 cppdb::statement stmt(basic::database::safely_prepare_statement(residue_variant_statement_string,db_session));
1237 stmt.bind(1,residue_type_set_name);
1238 stmt.bind(2,residue_type_name);
1240 std::map< std::string, Vector > rsd_xyz;
1242 cppdb::result res(basic::database::safely_read_from_database(stmt));
1245 std::string child_atom_name, parent_atom_name,angle_atom_name,torsion_atom_name;
1247 res >> child_atom_name >> phi >> theta >> distance >> parent_atom_name >>angle_atom_name >>torsion_atom_name;
1250 if(child_atom_name == parent_atom_name)
1252 assert( rsd_xyz.empty() );
1253 rsd_xyz[child_atom_name] =
Vector(0.0);
1254 }
else if( child_atom_name == angle_atom_name)
1256 assert( rsd_xyz.size() == 1 && rsd_xyz.count( parent_atom_name ) );
1257 rsd_xyz[ child_atom_name ] =
Vector( distance, 0.0, 0.0 );
1261 if ( child_atom_name == torsion_atom_name ) {
1262 assert( rsd_xyz.size() == 2 );
1263 assert( rsd_xyz.count( parent_atom_name ) );
1264 assert( rsd_xyz.count( angle_atom_name ) );
1265 torsion_xyz =
Vector( 1.0, 1.0, 0.0 );
1267 assert( rsd_xyz.count( parent_atom_name ) && rsd_xyz.count( angle_atom_name ) && rsd_xyz.count( torsion_atom_name ) );
1268 torsion_xyz = rsd_xyz[ torsion_atom_name ];
1270 kinematics::Stub const stub( rsd_xyz[ parent_atom_name ], rsd_xyz[ angle_atom_name ], torsion_xyz );
1271 rsd_xyz[ child_atom_name ] = stub.
spherical( phi, theta, distance );
1275 if ( child_atom_name !=
"UPPER" && child_atom_name !=
"LOWER" && child_atom_name.substr(0,4) !=
"CONN" ) {
1277 if ( child_atom_name == parent_atom_name ) {
1279 if ( res_type.
natoms() == 1 ) {
1285 res_type.
set_atom_base( child_atom_name, parent_atom_name );
1290 res_type.
set_icoor( child_atom_name, phi, theta, distance, parent_atom_name, angle_atom_name, torsion_atom_name );
1293 for (
Size i=1; i<= res_type.
natoms(); ++i ) {
1295 assert( rsd_xyz.count( name ) );