sc_Molecule3
The molecule class contains information about molecules.
Usage
Inherits sc::SavableState.
Public Member Functions
Molecule (const
Molecule
&)
Molecule (StateIn
&)
Molecule (const
Ref<
KeyVal
>
&input)
void add_atom
(int
Z,
double
x,
double
y,
double
z,
const
char
*=0,
double
mass=0.0,
int
have_charge=0,
double
charge=0.0)
Add an
AtomicCenter
to
the
Molecule.
virtual
void
print
(std::ostream
&=ExEnv::out0())
const
int natom
()
const
double *
r
(int
atom)
const double
*
r
(int
atom)
const
double mass
(int
atom)
const
const char
*
label
(int
atom)
const
void move_to_com
()
void transform_to_principal_axes
(int
trans_frame=1)
void transform_to_symmetry_frame
()
void print_pdb
(std::ostream
&=ExEnv::out0(),
char
*title=0)
const
void read_pdb
(const
char
*filename)
void principal_moments_of_inertia
(double
*evals,
double
**evecs=0)
const
Returns include_q.
See
set_include_q.
void
set_include_qq
(bool
iqq)
Returns include_qq.
See
set_include_qq.
int
n_q_atom
()
const
Protected Member Functions
void init_symmetry_info
(double
tol=0.5)
void clear_symmetry_info
()
void clear
()
void throw_if_atom_duplicated
(int
begin=0,
double
tol=1e-3)
Protected Attributes
int natoms_
double **
r_
int *
Z_
double *
charges_
int nuniq_
int *
nequiv_
int **
equiv_
int *
atom_to_uniq_
double *
mass_
char **
labels_
int q_Z_
bool include_q_
bool include_qq_
Detailed Description
The Molecule class contains information about molecules.
It has a KeyVal constructor that can create a new molecule from either a PDB file or from a list of Cartesian coordinates.
The following ParsedKeyVal input reads from the PDB file h2o.pdb:
molecule<Molecule>: ( pdb_file = 'h2o.pdb' )
The following input explicitly gives the atom coordinates, using the ParsedKeyVal table notation:
molecule<Molecule>: (
unit=angstrom
{ atom_labels atoms geometry } = {
O1 O [ 0.000000000 0 0.369372944 ]
H1 H [ 0.783975899 0 -0.184686472 ]
H2 H [-0.783975899 0 -0.184686472 ]
}
)
)
The default units are Bohr which can be overridden with unit=angstrom. The atom_labels array can be omitted. The atoms and geometry arrays are required.
As a special case, an atom can be given with the symbol Q or the name charge. Such centers are treated as point charges and not given basis functions. The values of the charges must be specified with a charge vector in the Molecule input. Since the charge vector assign charges to all centers, including atoms, it is easiest to place all point charge centers first in the geometry, and then give a charge vector with a number of elements equal to the number of point charges. The following example shows a water molecule interacting with a point charge having value 0.1:
molecule<Molecule>: (
unit=angstrom
charge = [ 0.1 ]
{ atom_labels atoms geometry } = {
Q1 Q [ 0.0 0 10.0 ]
O1 O [ 0.000000000 0 0.369372944 ]
H1 H [ 0.783975899 0 -0.184686472 ]
H2 H [-0.783975899 0 -0.184686472 ]
}
)
)
This feature is designed for doing QM/MM calculations, so, by default, methods will not include interactions between the Q centers when computing the energy or the gradient. To include these interactions, set include_qq=1.
The Molecule class has a PointGroup member object, which also has a KeyVal constructor that is called when a Molecule is made. The following example constructs a molecule with $C_{2v}$ symmetry:
molecule<Molecule>: (
symmetry=c2v
unit=angstrom
{ atoms geometry } = {
O [0.000000000 0 0.369372944 ]
H [0.783975899 0 -0.184686472 ]
}
)
)
Only the symmetry unique atoms need to be specified. Nonunique atoms can be given too, however, numerical errors in the geometry specification can result in the generation of extra atoms so be careful.
Constructor & Destructor Documentation
sc::Molecule::Molecule (const Ref< KeyVal > & input)
The Molecule KeyVal constructor is used to generate a Molecule object from the input. Several examples are given in the Molecule class overview. The full list of keywords that are accepted is below.
KeywordTypeDefaultDescription
include_qbooleanfalseSome of the atoms can be specified as Q and given a customizable charge. Such atoms are a point charge that do not have basis functions. If this option is true, then the Q atoms are included when computing the nuclear charge and the electric field due to the nuclear charge.
include_qqbooleanfalseSome of the atoms can be specified as Q and given a customizable charge. Such atoms are a point charge that do not have basis functions. If this option is true, then the Q atoms are included when computing the nuclear repulsion energy and its derivatives.
atominfoAtomInfolibrary valuesThis gives information about each atom, such as the symbol, name, and various atomic radii.
symmetrystring<td>C1The Schoenflies symbol of the point group. This is case insensitive. It should be a subgroup of D2h . If it is auto, then the appropriate subgroup of D2h will be found.
symmetry_tolerancedouble1.0e-4When a molecule has symmetry, some atoms may be related by symmetry operations. The distance between given atoms and atoms generated by symmetry operations is compared to this threshold to determine if they are the same. If they are the same, then the coordinates are cleaned up to make them exactly symmetry equivalent. If the given molecule was produced by a optimization that started in C1 symmetry, but produced a roughly symmetric structure and you would like to begin using symmetry, then this may need to be increased a bit to properly symmetrize the molecule.
symmetry_framedouble[3][3][[1 0 0][0 1 0][0 0 1]]The symmetry frame. Ignored for symmetry = auto.
origindouble[3][0 0 0]The origin of the symmetry frame. Ignored for symmetry = auto.
redundant_atomsbooleanfalseIf true, do not generate symmetry equivalent atoms; they are already given in the input. It should not be necessary to specify this option, since, by default, if a symmetry operation duplicates an atom, the generated atom will not be added to the list of atoms. Ignored for symmetry = auto.
pdb_filestringundefinedThis gives the name of a PDB file, from which the nuclear coordinates will be read. If this is given, the following options will be ignored.
unitstringbohrThis gives the name of the units used for the geometry. See the Units class for information about the known units. This replaces deprecated keywords that are still recognized: angstrom and angstroms. This is ignored if pdb_file is given.
geometrydouble[][3]noneThis gives the Cartesian coordinates of the molecule. This is ignored if pdb_file is given.
atomsstring[]noneThis gives the Cartesian coordinates of the molecule. This is ignored if pdb_file is given.
ghostboolean[]noneIf true, the atom will be given zero charge. It will still have basis functions, however. This is used to estimate basis set superposition error. This is ignored if pdb_file is given.
chargedouble[]Z for each atomAllows specification of the charge for each atom. This is ignored if pdb_file is given.
atom_labelsstring[]noneThis gives a user defined atom label for each atom. This is ignored if pdb_file is given.
massdouble[]Taken from AtomInfo given by the atominfo keyword. This gives a user defined mass for each atom. This is ignored if pdb_file is given.
Member Function Documentation
int sc::Molecule::atom_at_position (double *, double tol = 0.05) const
Takes an (x, y, z) postion and finds an atom within the given tolerance distance. If no atom is found -1 is returned.
int sc::Molecule::atom_label_to_index (const char * label) const
Returns the index of the atom with the given label. If the label cannot be found -1 is returned.
int sc::Molecule::atom_to_unique (int iatom) const [inline]
Converts an atom number to the number of its generating unique atom. The return value is in [0, nunique).
int sc::Molecule::atom_to_unique_offset (int iatom) const
Converts an atom number to the offset of this atom in the list of generated atoms. The unique atom itself is allows offset 0.
double * sc::Molecule::charges () const
Returns a double* containing the nuclear charges of the atoms. The caller is responsible for freeing the return value.
void sc::Molecule::cleanup_molecule (double tol = 0.1)
This will try to carefully correct symmetry errors in molecules. If any atom is out of place by more then tol, abort will be called.
Ref< PointGroup > sc::Molecule::highest_point_group (double tol = 1.0e-8) const
Find this molecules true point group (limited to abelian groups). If the point group of this molecule is set to the highest point group, then the origin must first be set to the center of mass.
int sc::Molecule::is_axis (SCVector3 & origin, SCVector3 & udirection, int order, double tol = 1.0e-8) const
Return 1 if this given axis is a symmetry element for the molecule. The direction vector must be a unit vector.
void sc::Molecule::is_linear_planar (int & linear, int & planar, double tol = 1.0e-5) const
Sets linear to 1 if the molecular is linear, 0 otherwise. Sets planar to 1 if the molecular is planar, 0 otherwise.
int sc::Molecule::is_plane (SCVector3 & origin, SCVector3 & uperp, double tol = 1.0e-8) const
Return 1 if the given plane is a symmetry element for the molecule. The perpendicular vector must be a unit vector.
const char * sc::Molecule::label (int atom) const
Returns the label explicitly assigned to atom. If no label has been assigned, then null is returned.
virtual void sc::Molecule::print (std::ostream & = ExEnv::out0()) const [virtual]
Print information about the molecule.
Reimplemented from sc::DescribedClass.
void sc::Molecule::save_data_state (StateOut &) [virtual]
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR initializes them. This must be implemented by the derived class if the class has data.
Reimplemented from sc::SavableState.
void sc::Molecule::symmetrize (double tol = 0.5)
If the molecule contains only symmetry unique atoms, this function will generate the other, redundant atoms. The redundant atom will only be generated if there is no other atoms within a distance of tol. If the is another atom and it is not identical, then abort will be called.
History
- Debian 12 (Bookworm): the text shown here
- Debian 11 (Bullseye)
- Debian 6.0 (Squeeze)
- Debian 5.0 (Lenny)
- Debian 4.0 (Etch)
- Debian 3.1 (Sarge)