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);
33 row[4] = std::to_string(
iround(a.charge));
43 {
"comp_id",
"atom_id_1",
"atom_id_2",
"type",
"aromatic",
44 "value_dist",
"value_dist_esd",
"value_dist_nucleus",
"value_dist_nucleus_esd"});
47 std::string(1, a.aromatic ?
'y' :
'n'),
52 cif::Table tab = block.find_or_add(
"_chem_comp_angle.",
53 {
"comp_id",
"atom_id_1",
"atom_id_2",
"atom_id_3",
54 "value_angle",
"value_angle_esd"});
55 for (
const Restraints::Angle& a : cc.rt.angles)
56 tab.append_row({cc.name, a.id1.atom, a.id2.atom, a.id3.atom,
60 cif::Table tab = block.find_or_add(
"_chem_comp_tor.",
61 {
"comp_id",
"id",
"atom_id_1",
"atom_id_2",
"atom_id_3",
"atom_id_4",
62 "value_angle",
"value_angle_esd",
"period"});
63 for (
const Restraints::Torsion& a : cc.rt.torsions)
64 tab.append_row({cc.name, a.label, a.id1.atom, a.id2.atom, a.id3.atom, a.id4.atom,
65 to_str(a.value),
to_str(a.esd), std::to_string(a.period)});
68 cif::Table tab = block.find_or_add(
"_chem_comp_chir.",
69 {
"comp_id",
"id",
"atom_id_centre",
"atom_id_1",
"atom_id_2",
"atom_id_3",
71 for (
const Restraints::Chirality& a : cc.rt.chirs) {
72 std::string label =
"chir_" + std::to_string(tab.length() + 1);
73 tab.append_row({cc.name, label, a.id_ctr.atom, a.id1.atom, a.id2.atom, a.id3.atom,
78 cif::Table tab = block.find_or_add(
"_chem_comp_plane_atom.",
79 {
"comp_id",
"plane_id",
"atom_id",
"dist_esd"});
80 for (
const Restraints::Plane& p : cc.rt.planes)
81 for (const Restraints::AtomId& atom_id : p.ids)
82 tab.append_row({cc.name, p.label, atom_id.atom,
to_str(p.esd)});