16 std::vector<std::string> tags =
17 {
"comp_id",
"atom_id",
"type_symbol",
"type_energy",
"charge"};
19 for (
char c =
'x'; c <=
'z'; ++c)
20 tags.emplace_back(1, c);
32 row[4] = std::to_string(
iround(a.charge));
42 {
"comp_id",
"atom_id_1",
"atom_id_2",
"type",
"aromatic",
43 "value_dist",
"value_dist_esd",
"value_dist_nucleus",
"value_dist_nucleus_esd"});
46 std::string(1, a.aromatic ?
'y' :
'n'),
51 cif::Table tab = block.find_or_add(
"_chem_comp_angle.",
52 {
"comp_id",
"atom_id_1",
"atom_id_2",
"atom_id_3",
53 "value_angle",
"value_angle_esd"});
54 for (
const Restraints::Angle& a : cc.rt.angles)
55 tab.append_row({cc.name, a.id1.atom, a.id2.atom, a.id3.atom,
59 cif::Table tab = block.find_or_add(
"_chem_comp_tor.",
60 {
"comp_id",
"id",
"atom_id_1",
"atom_id_2",
"atom_id_3",
"atom_id_4",
61 "value_angle",
"value_angle_esd",
"period"});
62 for (
const Restraints::Torsion& a : cc.rt.torsions)
63 tab.append_row({cc.name, a.label, a.id1.atom, a.id2.atom, a.id3.atom, a.id4.atom,
64 to_str(a.value),
to_str(a.esd), std::to_string(a.period)});
67 cif::Table tab = block.find_or_add(
"_chem_comp_chir.",
68 {
"comp_id",
"id",
"atom_id_centre",
"atom_id_1",
"atom_id_2",
"atom_id_3",
70 for (
const Restraints::Chirality& a : cc.rt.chirs) {
71 std::string label =
"chir_" + std::to_string(tab.length() + 1);
72 tab.append_row({cc.name, label, a.id_ctr.atom, a.id1.atom, a.id2.atom, a.id3.atom,
77 cif::Table tab = block.find_or_add(
"_chem_comp_plane_atom.",
78 {
"comp_id",
"plane_id",
"atom_id",
"dist_esd"});
79 for (
const Restraints::Plane& p : cc.rt.planes)
80 for (const Restraints::AtomId& atom_id : p.ids)
81 tab.append_row({cc.name, p.label, atom_id.atom,
to_str(p.esd)});