Provided by: libchemistry-mol-perl_0.39-1_all bug

NAME

       Chemistry::Mol - Molecule object toolkit

SYNOPSIS

           use Chemistry::Mol;

           $mol = Chemistry::Mol->new(id => "mol_id", name => "my molecule");
           $c = $mol->new_atom(symbol => "C", coords => [0,0,0]);
           $o = $mol->new_atom(symbol => "O", coords => [0,0,1.23]);
           $mol->new_bond(atoms => [$c, $o], order => 3);

           print $mol->print;

DESCRIPTION

       This package, along with Chemistry::Atom and Chemistry::Bond, includes basic objects and
       methods to describe molecules.

       The core methods try not to enforce a particular convention.  This means that only a
       minimal set of attributes is provided by default, and some attributes have very loosely
       defined meaning. This is because each program and file type has different idea of what
       each concept (such as bond and atom type) means.  Bonds are defined as a list of atoms
       (typically two) with an arbitrary type.  Atoms are defined by a symbol and a Z, and may
       have 3D and internal coordinates (2D coming soon).

METHODS

       See also Chemistry::Obj for generic attributes.

       Chemistry::Mol->new(name => value, ...)
           Create a new Mol object with the specified attributes.

               $mol = Chemistry::Mol->new(id => 'm123', name => 'my mol')

           is the same as

               Chemistry::Mol->new()
               $mol->id('m123')
               $mol->name('my mol')

       $mol->add_atom($atom, ...)
           Add one or more Atom objects to the molecule. Returns the last atom added.

       $mol->atom_class
           Returns the atom class that a molecule or molecule class expects to use by default.
           Chemistry::Mol objects return "Chemistry::Atom", but subclasses will likely override
           this method.

       $mol->new_atom(name => value, ...)
           Shorthand for "$mol->add_atom($mol->atom_class->new(name => value, ...))".

       $mol->delete_atom($atom, ...)
           Deletes an atom from the molecule. It automatically deletes all the bonds in which the
           atom participates as well. $atom should be a Chemistry::Atom reference. This method
           also accepts the atom index, but this use is deprecated (and buggy if multiple indices
           are given, unless they are in descending order).

       $mol->add_bond($bond, ...)
           Add one or more Bond objects to the molecule. Returns the last bond added.

       $mol->bond_class
           Returns the bond class that a molecule or molecule class expects to use by default.
           Chemistry::Mol objects return "Chemistry::Bond", but subclasses will likely override
           this method.

       $mol->new_bond(name => value, ...)
           Shorthand for "$mol->add_bond($mol->bond_class->new(name => value, ...))".

       $mol->delete_bond($bond, ...)
           Deletes a bond from the molecule. $bond should be a Chemistry::Bond object.

       $mol->by_id($id)
           Return the atom or bond object with the corresponding id.

       $mol->atoms($n1, ...)
           Returns the atoms with the given indices, or all by default.  Indices start from one,
           not from zero.

       $mol->atoms_by_name($name)
           Returns the atoms with the given name (treated as an anchored regular expression).

       $mol->sort_atoms($sub_ref)
           Sort the atoms in the molecule by using the comparison function given in $sub_ref.
           This function should take two atoms as parameters and return -1, 0, or 1 depending on
           whether the first atom should go before, same, or after the second atom. For example,
           to sort by atomic number, you could use the following:

               $mol->sort_atoms( sub { $_[0]->Z <=> $_[1]->Z } );

           Note that the atoms are passed as parameters and not as the package variables $a and
           $b like the core sort function does. This is because $mol->sort will likely be called
           from another package and we don't want to play with another package's symbol table.

       $mol->bonds($n1, ...)
           Returns the bonds with the given indices, or all by default.  Indices start from one,
           not from zero.

       $mol->print(option => value...)
           Convert the molecule to a string representation. If no options are given, a default
           YAML-like format is used (this may change in the future). Otherwise, the format should
           be specified by using the "format" option.

       $s = $mol->sprintf($format)
           Format interesting molecular information in a concise way, as specified by a printf-
           like format.

               %n - name
               %f - formula
               %f{formula with format} - (note: right braces within
                   the format should be escaped with a backslash)
               %s - SMILES representation
               %S - canonical SMILES representation
               %m - mass
               %8.3m - mass, formatted as %8.3f with core sprintf
               %q - formal charge
               %a - atom count
               %b - bond count
               %t - type
               %i - id
               %% - %

           For example, if you want just about everything:

               $mol->sprintf("%s - %n (%f). %a atoms, %b bonds; "
                   . "mass=%m; charge =%q; type=%t; id=%i");

           Note that you have to "use Chemistry::File::SMILES" before using %s or %S on
           "$mol->sprintf".

       $mol->printf($format)
           Same as "$mol->sprintf", but prints to standard output automatically.  Used for quick
           and dirty molecular information dumping.

       Chemistry::Mol->parse($string, option => value...)
           Parse the molecule encoded in $string. The format should be specified with the the
           "format" option; otherwise, it will be guessed.

       Chemistry::Mol->read($fname, option => value ...)
           Read a file and return a list of Mol objects, or croaks if there was a problem.  The
           type of file will be guessed if not specified via the "format" option.

           Note that only registered file readers will be used. Readers may be registered using
           "register_format()"; modules that include readers (such as Chemistry::File::PDB)
           usually register them automatically when they are loaded.

           Automatic decompression of gzipped files is supported if the Compress::Zlib module is
           installed. Files ending in .gz are assumed to be compressed; otherwise it is possible
           to force decompression by passing the gzip => 1 option (or no decompression with gzip
           => 0).

       $mol->write($fname, option => value ...)
           Write a molecule file, or croak if there was a problem. The type of file will be
           guessed if not specified via the "format" option.

           Note that only registered file formats will be used.

           Automatic gzip compression is supported if the IO::Zlib module is installed.  Files
           ending in .gz are assumed to be compressed; otherwise it is possible to force
           compression by passing the gzip => 1 option (or no compression with gzip => 0).
           Specific compression levels between 2 (fastest) and 9 (most compressed) may also be
           used (e.g., gzip => 9).

       Chemistry::Mol->file($file, option => value ...)
           Create a Chemistry::File-derived object for reading or writing to a file.  The object
           can then be used to read the molecules or other information in the file.

           This has more flexibility than calling "Chemistry::Mol->read" when dealing with multi-
           molecule files or files that have higher structure or that have information that does
           not belong to the molecules themselves. For example, a reaction file may have a list
           of molecules, but also general information like the reaction name, yield, etc. as well
           as the classification of the molecules as reactants or products. The exact information
           that is available will depend on the file reader class that is being used. The
           following is a hypothetical example for reading MDL rxnfiles.

               # assuming this module existed...
               use Chemistry::File::Rxn;

               my $rxn = Chemistry::Mol->file('test.rxn');
               $rxn->read;
               $name      = $rxn->name;
               @reactants = $rxn->reactants; # mol objects
               @products  = $rxn->products;
               $yield     = $rxn->yield;     # a number

           Note that only registered file readers will be used. Readers may be registered using
           register_format(); modules that include readers (such as Chemistry::File::PDB) usually
           register them automatically.

       Chemistry::Mol->register_format($name, $ref)
           Register a file type. The identifier $name must be unique.  $ref is either a class
           name (a package) or an object that complies with the Chemistry::File interface (e.g.,
           a subclass of Chemistry::File).  If $ref is omitted, the calling package is used
           automatically. More than one format can be registered at a time, but then $ref must be
           included for each format (e.g., Chemistry::Mol->register_format(format1 => "package1",
           format2 => package2).

           The typical user doesn't have to care about this function. It is used automatically by
           molecule file I/O modules.

       Chemistry::Mol->formats
           Returns a list of the file formats that have been installed by register_format()

       $mol->mass
           Return the molar mass. This is just the sum of the masses of the atoms.  See
           Chemistry::Atom::mass for details such as the handling of isotopes.

       $mol->charge
           Return the charge of the molecule. By default it returns the sum of the formal charges
           of the atoms. However, it is possible to set an arbitrary charge by calling
           "$mol->charge($new_charge)"

       $mol->formula_hash
           Returns a hash reference describing the molecular formula. For methane it would return
           { C => 1, H => 4 }.

       $mol->formula($format)
           Returns a string with the formula. The format can be specified as a printf-like string
           with the control sequences specified in the Chemistry::File::Formula documentation.

       my $mol2 = $mol->clone;
           Makes a copy of a molecule. Note that this is a deep copy; if your molecule has a
           pointer to the rest of the universe, the entire universe will be cloned!

           By default, clone() uses Storable to copy the Perl data structure. Clone can be used
           instead by setting variable $Chemistry::Mol::clone_backend to "Clone" (default is
           "Storable"). The documentation of Storable claims Clone is less memory-intensive.

       my $mol2 = $mol->safe_clone;
           Like clone, it makes a deep copy of a molecule. The difference is that the copy is not
           "exact" in that new molecule and its atoms and bonds get assigned new IDs. This makes
           it safe to combine cloned molecules. For example, this is an error:

               # XXX don't try this at home!
               my $mol2 = Chemistry::Mol->combine($mol1, $mol1);
               # the atoms in $mol1 will clash

           But this is ok:

               # the "safe clone" of $mol1 will have new IDs
               my $mol2 = Chemistry::Mol->combine($mol1, $mol1->safe_clone);

       ($distance, $atom_here, $atom_there) = $mol->distance($obj)
           Returns the minimum distance to $obj, which can be an atom, a molecule, or a vector.
           In scalar context it returns only the distance; in list context it also returns the
           atoms involved. The current implementation for calculating the minimum distance
           between two molecules compares every possible pair of atoms, so it's not efficient for
           large molecules.

       my $bigmol = Chemistry::Mol->combine($mol1, $mol2, ...)
       $mol1->combine($mol2, $mol3, ...)
           Combines several molecules in one bigger molecule. If called as a class method, as in
           the first example, it returns a new combined molecule without altering any of the
           parameters. If called as an instance method, as in the second example, all molecules
           are combined into $mol1 (but $mol2, $mol3, ...) are not altered. Note: Make sure you
           don't combine molecules which contain atoms with duplicate IDs (for example, if they
           were cloned).

       my @mols = $mol->separate
           Separates a molecule into "connected fragments". The original object is not modified;
           the fragments are clones of the original ones. Example: if you have ethane (H3CCH3)
           and you delete the C-C bond, you have two CH3 radicals within one molecule object
           ($mol). When you call $mol->separate you get two molecules, each one with a CH3.

       $mol->sprout_hydrogens
           Convert all the implicit hydrogen atoms in the molecule to explicit atoms.  It does
           not generate coordinates for the atoms.

       $mol->collapse_hydrogens
           Convert all the explicit hydrogen atoms in the molecule to implicit hydrogens.
           (Exception: hydrogen atoms that are adjacent to a hydrogen atom are not collapsed.)

       $mol->add_implicit_hydrogens
           Use heuristics to figure out how many implicit hydrogens should each atom in the
           molecule have to satisfy its normal "organic" valence.

       Chemistry::Mol->register_descriptor($name => $sub_ref)
           Adds a callback that can be used to add functionality to the molecule class
           (originally meant to add custom molecule descriptors.) A descriptor is a function that
           takes a molecule object as its only argument and returns a value or values. For
           example, to add a descriptor function that computes the number of atoms:

               Chemistry::Mol->register_descriptor(
                   number_of_atoms => sub {
                       my $mol = shift;
                       return scalar $mol->atoms;
                   }
               );

           The descriptor is accessed by name via the "descriptor" instance method:

               my $n = $mol->descriptor('number_of_atoms');

       my $value = $mol->descriptor($descriptor_name)
           Calls a previously registered descriptor function giving it $mol as an argument, as
           shown above for "register_descriptor".

SOURCE CODE REPOSITORY

       <https://github.com/perlmol/Chemistry-Mol>

SEE ALSO

       Chemistry::Atom, Chemistry::Bond, Chemistry::File, Chemistry::Tutorial

AUTHOR

       Ivan Tubert-Brohman <itub@cpan.org>

COPYRIGHT

       Copyright (c) 2005 Ivan Tubert-Brohman. All rights reserved. This program is free
       software; you can redistribute it and/or modify it under the same terms as Perl itself.