10 #include "../utils/map_to_index.h" 11 #include "../utils/runtime_error.h" 42 if (check_optional_keys(
"special-bonds"))
49 el_mols->check_required_keys(
"atom-ids");
51 auto &mols = el_mols->get_data();
55 for (
const auto &mol : mols)
57 auto &atom_ids = mol[
"atom-ids"];
58 auto sbonds_list_in_mol
61 auto n_atoms_in_mol = atom_ids.size();
63 if (sbonds_list_in_mol.size() != n_atoms_in_mol)
66 "The numbers of atoms in a molecule are inconsistent");
69 for (
int i = 0; i != n_atoms_in_mol; ++i)
71 auto absolute_sbonds = Json::array();
73 for (
const int &index: sbonds_list_in_mol[i])
76 absolute_sbonds.push_back(atom_ids.at(index));
79 data[id2index[atom_ids[i]]][
"special-bonds"].swap(absolute_sbonds);
ShPtr< Element > ElPtr
An alias for a shared pointer of Element class.
std::function< bool(const Json &)> JsonToBoolFunc
An alias for a function accepts a Json object and returns a bool.
nlohmann::json Json
Json is an alias for nlohmann::json.
This file has a definition of AddSpecialBonds class, which is a subclass of Adder class...
Map< int, Vec< Vec< int > > > mol_type_to_sbonds_list_in_mol
ShPtr< Generator > ext_generator
std::vector< T > Vec
Vec is an alias for vector (same as list in Python).
AddSpecialBonds(const ElPtr &el_mols, const Vec< Vec< int >> &scheme)
Constructor of AddSpecialBonds class for molecules all of whose type property are 1...
void runtime_error(const Str &msg)
Raise (for Python) and throw (for C++) a runtime error.
virtual void compute_impl(Json &data, JsonToVoidFunc check_required_keys, JsonToBoolFunc check_optional_keys) override
This method overrides Updater::compute_impl.
Namespace for utility functions.
std::function< void(const Json &)> JsonToVoidFunc
An alias for a function accepts a Json object.
std::unordered_map< T, U > Map
Map is an alias for unordered map (same as dict in Python).
Map< Json, int > map_to_index(const Json &data, const Str &key)
Create a Map object from values of selected property in an array Json object to corresponding index i...