Main Page   Class Hierarchy   Compound List   File List   Compound Members   Related Pages  

Molecule Class Reference

The Molecule class contains information about molecules. More...

#include <molecule.h>

Inheritance diagram for Molecule

Inheritance graph
[legend]
Collaboration diagram for Molecule:

Collaboration graph
[legend]
List of all members.

Public Methods

 Molecule ()
 Molecule (const Molecule &)
 Molecule (StateIn &)
 Molecule (const Ref< KeyVal > &input)
 The KeyVal constructor.

virtual ~Molecule ()
Molecule& operator= (const Molecule &)
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::out()) const
 Print information about the molecule.

virtual void print_parsedkeyval (std::ostream &=ExEnv::out(), int print_pg=1, int print_unit=1, int number_atoms=1) const
int natom () const
 Returns the number of atoms in the molcule.

int Z (int atom) const
double& r (int atom, int xyz)
const double& r (int atom, int xyz) const
double* r (int atom)
const double* r (int atom) const
double mass (int atom) const
const char* label (int atom) const
int atom_at_position (double *, double tol=0.05) const
 Takes an (x, y, z) postion and finds an atom within the given tolerance distance. More...

int atom_label_to_index (const char *label) const
 Returns the index of the atom with the given label. More...

double* charges () const
 Returns a double* containing the nuclear charges of the atoms. More...

double charge (int iatom) const
 Return the charge of the atom.

double nuclear_charge () const
 Returns the total nuclear charge.

void set_point_group (const Ref< PointGroup > &, double tol=1.0e-7)
 Sets the PointGroup of the molecule.

Ref<PointGrouppoint_group () const
 Returns the PointGroup of the molecule.

Ref<PointGrouphighest_point_group (double tol=1.0e-8) const
 Find this molecules true point group (limited to abelian groups). More...

int 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. More...

int 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. More...

int has_inversion (SCVector3 &origin, double tol=1.0e-8) const
 Return 1 if the molecule has an inversion center.

int is_linear (double tolerance=1.0e-5) const
 Returns 1 if the molecule is linear, 0 otherwise.

int is_planar (double tolerance=1.0e-5) const
 Returns 1 if the molecule is planar, 0 otherwise.

void is_linear_planar (int &linear, int &planar, double tol=1.0e-5) const
 Sets linear to 1 if the molecular is linear, 0 otherwise. More...

SCVector3 center_of_mass () const
 Returns a SCVector3 containing the cartesian coordinates of the center of mass for the molecule.

double nuclear_repulsion_energy ()
 Returns the nuclear repulsion energy for the molecule.

void nuclear_repulsion_1der (int center, double xyz[3])
 Compute the nuclear repulsion energy first derivative with respect to the given center.

void nuclear_efield (const double *position, double *efield)
 Compute the electric field due to the nuclei at the given point.

void nuclear_charge_efield (const double *charges, const double *position, double *efield)
 Compute the electric field due to the given charges at the positions of the nuclei at the given point.

void symmetrize (double tol=0.5)
 If the molecule contains only symmetry unique atoms, this function will generate the other, redundant atoms. More...

void symmetrize (const Ref< PointGroup > &pg, double tol=0.5)
 Set the point group and then symmetrize.

void cleanup_molecule (double tol=0.1)
 This will try to carefully correct symmetry errors in molecules. More...

void translate (const double *r)
void move_to_com ()
void transform_to_principal_axes (int trans_frame=1)
void transform_to_symmetry_frame ()
void print_pdb (std::ostream &=ExEnv::out(), char *title=0) const
void read_pdb (const char *filename)
void principal_moments_of_inertia (double *evals, double **evecs=0) const
 Compute the principal moments of inertia and, possibly, the principal axes.

int nunique () const
 Return information about symmetry unique and equivalent atoms.

int unique (int iuniq) const
 Returns the overall number of the iuniq'th unique atom.

int nequivalent (int iuniq) const
 Returns the number of atoms equivalent to iuniq.

int equivalent (int iuniq, int j) const
 Returns the j'th atom equivalent to iuniq.

int atom_to_unique (int iatom) const
 Converts an atom number to the number of its generating unique atom. More...

int atom_to_unique_offset (int iatom) const
 Converts an atom number to the offset of this atom in the list of generated atoms. More...

int n_core_electrons ()
 Return the number of core electrons.

int max_z ()
 Return the maximum atomic number.

Ref<AtomInfoatominfo () const
 Return the molecules AtomInfo object.

void save_data_state (StateOut &)
 Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR initializes them. More...


Protected Methods

void init_symmetry_info (double tol=0.5)
void clear_symmetry_info ()
void clear ()

Protected Attributes

int natoms_
Ref<AtomInfoatominfo_
Ref<PointGrouppg_
Ref<Unitsgeometry_units_
double** r_
int* Z_
double* charges_
int nuniq_
int* nequiv_
int** equiv_
int* atom_to_uniq_
double* mass_
char** labels_

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 with can be overridden with unit=angstrom#. The atom_labels# array can be omitted. The atoms# and geometry# arrays are required.

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 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.


Member Function Documentation

int 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 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 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 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 * Molecule::charges ( ) const
 

Returns a double* containing the nuclear charges of the atoms.

The caller is responsible for freeing the return value.

void 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 > 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 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 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 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.

void Molecule::save_data_state ( StateOut & s ) [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 SavableState.

void 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.


The documentation for this class was generated from the following file:
Generated at Thu Oct 4 18:09:23 2001 for MPQC 2.0.0 using the documentation package Doxygen 1.2.5.