Molecule
********

In this chapter, the PLAMS module responsible for handling molecular
geometries is presented. Information about atomic coordinates can be
read from (or written to) files of various types: "xyz", "pdb", "mol"
or "mol2". PLAMS not only extracts the relevant data from those files,
but also tries to "understand" the structure of the underlying
molecule in terms of atoms and bonds between them, allowing a variety
of simple operations like moving or rotating some parts of the
molecule, splitting it into multiple parts, merging two molecules,
etc. For importing coordinates in other formats or performing more
advanced operations, you can use ASE interface and RDKit interface.

* Molecule

  * "Molecule"

    * "Molecule.__init__()"

    * "Molecule.copy()"

    * "Molecule.add_molecule()"

    * "Molecule._validate_atom()"

    * "Molecule._validate_bond()"

    * "Molecule.add_atom()"

    * "Molecule.delete_atom()"

    * "Molecule.delete_atoms()"

    * "Molecule.add_bond()"

    * "Molecule.delete_bond()"

    * "Molecule.delete_all_bonds()"

    * "Molecule.find_bond()"

    * "Molecule.set_atoms_id()"

    * "Molecule.unset_atoms_id()"

    * "Molecule.neighbors()"

    * "Molecule.bond_matrix()"

    * "Molecule.separate()"

    * "Molecule.guess_bonds()"

    * "Molecule.guess_system_charge()"

    * "Molecule.guess_atomic_charges()"

    * "Molecule.in_ring()"

    * "Molecule.supercell()"

    * "Molecule.unit_cell_volume()"

    * "Molecule.cell_lengths()"

    * "Molecule.cell_angles()"

    * "Molecule.set_integer_bonds()"

    * "Molecule.index()"

    * "Molecule.round_coords()"

    * "Molecule.get_connection_table()"

    * "Molecule.get_molecule_indices()"

    * "Molecule.get_fragment()"

    * "Molecule.get_complete_molecules_within_threshold()"

    * "Molecule.locate_rings()"

    * "Molecule.locate_rings_acm()"

    * "Molecule.order_ring()"

    * "Molecule.locate_rings_networkx()"

    * "Molecule.shortest_path_dijkstra()"

    * "Molecule.translate()"

    * "Molecule.rotate_lattice()"

    * "Molecule.rotate()"

    * "Molecule.align_lattice()"

    * "Molecule.rotate_bond()"

    * "Molecule.resize_bond()"

    * "Molecule.closest_atom()"

    * "Molecule.distance_to_point()"

    * "Molecule.distance_to_mol()"

    * "Molecule.wrap()"

    * "Molecule.get_center_of_mass()"

    * "Molecule.get_masses()"

    * "Molecule.get_mass()"

    * "Molecule.get_density()"

    * "Molecule.set_density()"

    * "Molecule.get_formula()"

    * "Molecule.get_inertia_matrix()"

    * "Molecule.get_moments_of_inertia()"

    * "Molecule.get_gyration_radius()"

    * "Molecule.apply_strain()"

    * "Molecule.map_to_central_cell()"

    * "Molecule.perturb_atoms()"

    * "Molecule.perturb_lattice()"

    * "Molecule.substitute()"

    * "Molecule.map_atoms_to_bonds()"

    * "Molecule.__repr__()"

    * "Molecule.__len__()"

    * "Molecule.__str__()"

    * "Molecule.str()"

    * "Molecule.__iter__()"

    * "Molecule.__getitem__()"

    * "Molecule.__add__()"

    * "Molecule.__iadd__()"

    * "Molecule.__round__()"

    * "Molecule.__getstate__()"

    * "Molecule.__setstate__()"

    * "Molecule.as_dict()"

    * "Molecule.from_dict()"

    * "Molecule.from_elements()"

    * "Molecule.as_array"

    * "Molecule.from_array()"

    * "Molecule.__array__()"

    * "Molecule.readxyz()"

    * "Molecule.writexyz()"

    * "Molecule.readpdb()"

    * "Molecule.writepdb()"

    * "Molecule.readase()"

    * "Molecule.writease()"

    * "Molecule.hydrogen_to_deuterium()"

    * "Molecule._mol_from_rkf_section()"

    * "Molecule.forcefield_params_from_rkf()"

    * "Molecule.readin()"

    * "Molecule.writein()"

    * "Molecule.read()"

    * "Molecule.write()"

    * "Molecule.add_hatoms()"

    * "Molecule.rmsd()"

    * "Molecule.align2mol()"

    * "Molecule.assign_chirality()"

    * "Molecule.get_chirality()"

    * "Molecule.numbers"

    * "Molecule.symbols"

    * "Molecule._get_bond_id()"

    * "Molecule.get_unique_bonds()"

    * "Molecule.get_unique_angles()"

    * "Molecule.label()"

    * "Molecule.set_local_labels()"

    * "Molecule.find_permutation()"

  * Atom labeling

    * "label_atoms()"

    * "molecule_name()"

    * "initialize()"

    * "iterate()"

    * "clear()"

    * "new_name()"

    * "knock()"

    * "twist()"

    * "bend()"

    * "unique_atoms()"

* Atom

  * "Atom"

    * "Atom.__init__()"

    * "Atom.str()"

    * "Atom.__str__()"

    * "Atom.__iter__()"

    * "Atom.translate()"

    * "Atom.move_to()"

    * "Atom.distance_to()"

    * "Atom.vector_to()"

    * "Atom.angle()"

    * "Atom.rotate()"

    * "Atom.neighbors()"

* Bond

  * "Bond"

    * "Bond.__init__()"

    * "Bond.__str__()"

    * "Bond.__iter__()"

    * "Bond.is_aromatic()"

    * "Bond.length()"

    * "Bond.as_vector()"

    * "Bond.other_end()"

    * "Bond.resize()"

    * "Bond.rotate()"

* RDKit interface

  * "add_Hs()"

  * "apply_reaction_smarts()"

  * "apply_template()"

  * "get_backbone_atoms()"

  * "modify_atom()"

  * "to_rdmol()"

  * "from_rdmol()"

  * "from_sequence()"

  * "from_smiles()"

  * "from_smarts()"

  * "to_smiles()"

  * "partition_protein()"

  * "readpdb()"

  * "writepdb()"

  * "get_substructure()"

  * "get_conformations()"

  * "yield_coords()"

  * "canonicalize_mol()"

  * "to_image()"

  * "get_reaction_image()"

* ASE interface

  * "toASE()"

  * "fromASE()"

* Packmol interface

  * "packmol()"

  * "packmol_around()"

  * "packmol_on_slab()"

  * "packmol_in_void()"

  * "packmol_microsolvation()"
