diff --git a/python/core.cpp b/python/core.cpp index 497aa3a9e..de9886b5e 100644 --- a/python/core.cpp +++ b/python/core.cpp @@ -1,10 +1,11 @@ +#include #include #include -#include #include #include #include +#include namespace py = pybind11; @@ -21,6 +22,12 @@ PYBIND11_MODULE(core, m) .def_property_readonly("index", &Atom::index, "Index in the molecule") .def_property("atomic_number", &Atom::atomicNumber, &Atom::setAtomicNumber, "The atomic number") + .def_property("position", &Atom::position3D, &Atom::setPosition3D, + "The 3D position of the atom") + .def_property("formal_charge", &Atom::formalCharge, &Atom::setFormalCharge, + "The formal charge of the atom") + .def_property("is_selected", &Atom::selected, &Atom::setSelected, + "Whether the atom is selected") .def("is_valid", &Atom::isValid, "Check if the object is valid"); using bondBase = BondTemplate; @@ -43,6 +50,34 @@ PYBIND11_MODULE(core, m) Bond (Molecule::*addBond2)(const Atom&, const Atom&, unsigned char) = &Molecule::addBond; + py::class_(m, "UnitCell") + .def(py::init<>()) + .def_property_readonly("a", &UnitCell::a, "The a lattice parameter") + .def_property_readonly("b", &UnitCell::b, "The b lattice parameter") + .def_property_readonly("c", &UnitCell::c, "The c lattice parameter") + .def_property_readonly("alpha", &UnitCell::alpha, + "The alpha lattice parameter") + .def_property_readonly("beta", &UnitCell::beta, + "The beta lattice parameter") + .def_property_readonly("gamma", &UnitCell::gamma, + "The gamma lattice parameter") + .def_property_readonly("volume", &UnitCell::volume, + "The volume of the unit cell") + .def("set_cell_parameters", &UnitCell::setCellParameters, + "Set the unit cell parameters a b c alpha beta gamma") + .def_property("cell_matrix", &UnitCell::cellMatrix, + &UnitCell::setCellMatrix, "The unit cell vector matrix") + .def("to_fractional", &UnitCell::toFractional, + "Convert a cartesian vector to fractional coordinates") + .def("to_cartesian", &UnitCell::toCartesian, + "Convert a fractional vector to cartesian coordinates") + .def("wrap_fractional", &UnitCell::wrapFractional, + "Wrap a fractional vector to the unit cell") + .def("wrap_cartesian", &UnitCell::wrapCartesian, + "Wrap a cartesian vector to the unit cell") + .def("distance", &UnitCell::distance, + "Calculate the distance between two points in the unit cell"); + py::class_(m, "Molecule") .def(py::init<>()) .def("add_atom", @@ -51,14 +86,28 @@ PYBIND11_MODULE(core, m) .def("atom_count", atomCount0, "The number of atoms") .def("atom_count", atomCount1, "The number of atoms with the supplied atomic number") + .def_property_readonly("atoms", &Molecule::atoms, + "The atoms in the molecule") .def("add_bond", addBond1, "Add a new bond", py::arg("a1"), py::arg("a2"), py::arg("order") = 1) .def("add_bond", addBond2, "Add a new bond", py::arg("a1"), py::arg("a2"), py::arg("order") = 1) .def("bond_count", &Molecule::bondCount, "The number of bonds") + .def_property_readonly("bonds", &Molecule::bonds, + "The bonds in the molecule") .def("add_cube", &Molecule::addCube, py::return_value_policy::reference, "Add a new cube") .def("cube_count", &Molecule::cubeCount, "The number of cubes") + .def_property_readonly("cubes", &Molecule::cubes, + "The cubes in the molecule") + .def_property_readonly("radius", &Molecule::radius, + "The radius of the molecule") + .def_property_readonly("center", &Molecule::centerOfGeometry, + "The center of geometry of the molecule") + .def_property_readonly("mass_center", &Molecule::centerOfMass, + "The center of mass of the molecule") + .def_property_readonly("unit_cell", &Molecule::unitCell, + "The unit cell of the molecule, if defined") .def("has_custom_elements", &Molecule::hasCustomElements, "Returns true if the molecule contains any custom elements") .def("formula", &Molecule::formula, "The chemical formula of the molecule",