view mayachemtools/docs/modules/man3/Molecule.3 @ 9:ab29fa5c8c1f draft default tip

Uploaded
author deepakjadmin
date Thu, 15 Dec 2016 14:18:03 -0500
parents 73ae111cf86f
children
line wrap: on
line source

.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.22)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.el \{\
.    de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "MOLECULE 1"
.TH MOLECULE 1 "2015-03-29" "perl v5.14.2" "MayaChemTools"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
Molecule \- Molecule class
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
use Molecule;
.PP
use Molecule qw(:all);
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBMolecule\fR class provides the following methods:
.PP
new, AddAtom, AddAtoms, AddBond, AddBonds, AddHydrogens, AddPolarHydrogens,
ClearRings, Copy, DeleteAromaticity, DeleteAtom, DeleteAtoms, DeleteBond,
DeleteBonds, DeleteHydrogens, DeletePolarHydrogens, DetectAromaticity,
DetectRings, FormatElementalCompositionInformation, GetAllAtomPaths,
GetAllAtomPathsStartingAt, GetAllAtomPathsStartingAtWithLength,
GetAllAtomPathsStartingAtWithLengthUpto, GetAllAtomPathsWithLength,
GetAllAtomPathsWithLengthUpto, GetAromaticRings, GetAromaticityModel,
GetAtomNeighborhoods, GetAtomNeighborhoodsWithRadiusUpto,
GetAtomNeighborhoodsWithSuccessorAtoms,
GetAtomNeighborhoodsWithSuccessorAtomsAndRadiusUpto, GetAtomPathBonds,
GetAtomPaths, GetAtomPathsBetween, GetAtomPathsStartingAt,
GetAtomPathsStartingAtWithLength, GetAtomPathsStartingAtWithLengthUpto,
GetAtomPathsWithLength, GetAtomPathsWithLengthUpto, GetAtoms, GetBonds, GetCharge,
GetConnectedComponents, GetConnectedComponentsAtoms, GetDimensionality,
GetElementalComposition, GetElementsAndNonElements, GetExactMass, GetFormalCharge,
GetFreeRadicalElectrons, GetFusedAndNonFusedRings, GetLargestConnectedComponent,
GetLargestConnectedComponentAtoms, GetLargestRing, GetMolecularFormula,
GetMolecularWeight, GetNumOfAromaticRings, GetNumOfAtoms, GetNumOfBonds,
GetNumOfConnectedComponents, GetNumOfElementsAndNonElements, GetNumOfHeavyAtoms,
GetNumOfHydrogenAtoms, GetNumOfMissingHydrogenAtoms, GetNumOfNonHydrogenAtoms,
GetNumOfRings, GetNumOfRingsWithEvenSize, GetNumOfRingsWithOddSize,
GetNumOfRingsWithSize, GetNumOfRingsWithSizeGreaterThan,
GetNumOfRingsWithSizeLessThan, GetRingBonds, GetRingBondsFromRings, GetRings,
GetRingsWithEvenSize, GetRingsWithOddSize, GetRingsWithSize,
GetRingsWithSizeGreaterThan, GetRingsWithSizeLessThan, GetSizeOfLargestRing,
GetSizeOfSmallestRing, GetSmallestRing, GetSpinMultiplicity,
GetSupportedAromaticityModels, GetTopologicallySortedAtoms, GetValenceModel,
HasAromaticAtomsInRings, HasAromaticAtomsNotInRings, HasAromaticRings, HasAtom,
HasBond, HasFusedRings, HasNoRings, HasOnlyOneRing, HasRings, IsAromatic,
IsMolecule, IsRingAromatic, IsSupportedAromaticityModel, IsThreeDimensional,
IsTwoDimensional, KeepLargestComponent, KekulizeAromaticAtoms, NewAtom, NewBond,
SetActiveRings, SetAromaticityModel, SetID, SetValenceModel, StringifyMolecule
.PP
The following methods can also be used as functions:
.PP
FormatElementalCompositionInformation, IsMolecule
.PP
\&\fBMolecule\fR class is derived from \fBObjectProperty\fR base class which provides methods not explicitly
defined in \fBMolecule\fR or \fBObjectProperty\fR class using Perl's \s-1AUTOLOAD\s0 functionality. These methods
are generated on-the-fly for a specified object property:
.PP
.Vb 3
\&    Set<PropertyName>(<PropertyValue>);
\&    $PropertyValue = Get<PropertyName>();
\&    Delete<PropertyName>();
.Ve
.SS "\s-1METHODS\s0"
.IX Subsection "METHODS"
.IP "\fBnew\fR" 4
.IX Item "new"
.Vb 1
\&    $NewMolecule = new Molecule([%PropertyNameAndValues]);
.Ve
.Sp
Using specified \fIAtom\fR property names and values hash, \fBnew\fR method creates a new object
and returns a reference to newly created \fBAtom\fR object. By default, the following properties are
initialized:
.Sp
.Vb 2
\&    ID = SequentialObjectID
\&    Name = "Molecule <SequentialObjectID>"
.Ve
.Sp
Examples:
.Sp
.Vb 1
\&    $Molecule = new Molecule();
\&
\&    $WaterMolecule = new Molecule(\*(AqName\*(Aq => \*(AqWater\*(Aq);
\&
\&    $Oxygen = new Atom(\*(AqAtomSymbol\*(Aq => \*(AqO\*(Aq, \*(AqXYZ\*(Aq => [0, 0, 0]);
\&    $Hydrogen1 = new Atom(\*(AqAtomSymbol\*(Aq => \*(AqH\*(Aq,
\&                          \*(AqXYZ\*(Aq => [0.7144, 0.4125, 0]);
\&    $Hydrogen2 = new Atom(\*(AqAtomSymbol\*(Aq => \*(AqH\*(Aq,
\&                          \*(AqXYZ\*(Aq => [1.1208, \-0.2959, 0]);
\&    $WaterMolecule\->AddAtoms($Oxygen, $Hydrogen1, $Hydrogen2);
\&
\&    $Bond1 = new Bond(\*(AqAtoms\*(Aq => [$Oxygen, $Hydrogen1],
\&                      \*(AqBondOrder\*(Aq => 1);
\&    $Bond2 = new Bond(\*(AqAtoms\*(Aq => [$Oxygen, $Hydrogen2],
\&                      \*(AqBondOrder\*(Aq => 1);
\&    $WaterMolecule\->AddBonds($Bond1, $Bond2);
.Ve
.IP "\fBAddAtom\fR" 4
.IX Item "AddAtom"
.Vb 1
\&    $Molecule\->AddAtom($Atom);
.Ve
.Sp
Adds an \fIAtom\fR to a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBAddAtoms\fR" 4
.IX Item "AddAtoms"
.Vb 1
\&    $Molecule\->AddAtoms(@Atoms);
.Ve
.Sp
Adds \fIAtoms\fR to a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBAddBond\fR" 4
.IX Item "AddBond"
.Vb 1
\&    $Molecule\->AddBond($Bond);
.Ve
.Sp
Adds a \fIBond\fR to a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBAddBonds\fR" 4
.IX Item "AddBonds"
.Vb 1
\&    $Molecule\->AddBonds(@Bonds);
.Ve
.Sp
Adds \fIBonds\fR to a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBAddHydrogens\fR" 4
.IX Item "AddHydrogens"
.Vb 1
\&    $NumOfHydrogensAdded = $Molecule\->AddHydrogens();
.Ve
.Sp
Adds hydrogens to each atom in a \fIMolecule\fR and returns total number of hydrogens
added. The current release of MayaChemTools doesn't assign hydrogen positions.
.IP "\fBAddPolarHydrogens\fR" 4
.IX Item "AddPolarHydrogens"
.Vb 1
\&    $NumOfHydrogensAdded = $Molecule\->AddPolarHydrogens();
.Ve
.Sp
Adds hydrogens to each polar atom \- N, O, P or S \- in a \fIMolecule\fR and returns total
number of polar hydrogens added. The current release of MayaChemTools doesn't
assign hydrogen positions.
.IP "\fBClearRings\fR" 4
.IX Item "ClearRings"
.Vb 1
\&    $Molecule\->ClearRings();
.Ve
.Sp
Deletes all rings associated with \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBCopy\fR" 4
.IX Item "Copy"
.Vb 1
\&    $MoleculeCopy = $Molecule\->Copy();
.Ve
.Sp
Copies \fIMolecule\fR and its associated data using \fBStorable::dclone\fR and returns a new
\&\fBMolecule\fR object.
.IP "\fBDeleteAromaticity\fR" 4
.IX Item "DeleteAromaticity"
.Vb 1
\&    $Molecule\->DeleteAromaticity();
.Ve
.Sp
Deletes aromatic property associated with all atoms and bonds in a \fIMolecule\fR and returns
\&\fIMolecule\fR.
.IP "\fBDeleteAtom\fR" 4
.IX Item "DeleteAtom"
.Vb 1
\&    $Molecule\->DeleteAtom($Atom);
.Ve
.Sp
Deletes \fIAtom\fR from a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBDeleteAtoms\fR" 4
.IX Item "DeleteAtoms"
.Vb 1
\&    $Molecule\->DeleteAtoms(@Atoms);
.Ve
.Sp
Deletes \fIAtoms\fR from a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBDeleteBond\fR" 4
.IX Item "DeleteBond"
.Vb 1
\&    $Molecule\->DeleteBond($Bond);
.Ve
.Sp
Deletes \fIBond\fR from a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBDeleteBonds\fR" 4
.IX Item "DeleteBonds"
.Vb 1
\&    $Molecule\->DeleteBonds(@Bonds);
.Ve
.Sp
Deletes \fIBonds\fR from a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBDeleteHydrogens\fR" 4
.IX Item "DeleteHydrogens"
.Vb 1
\&    $NumOfHydrogensDeleted = $Molecule\->DeleteHydrogens();
.Ve
.Sp
Removes hydrogens from each atom in a \fIMolecule\fR and returns total number of hydrogens
deleted.
.IP "\fBDeletePolarHydrogens\fR" 4
.IX Item "DeletePolarHydrogens"
.Vb 1
\&    $NumOfHydrogensDeleted = $Molecule\->DeletePolarHydrogens();
.Ve
.Sp
Removes hydrogens to each polar atom \- N, O, P or S \- in a \fIMolecule\fR and returns total
number of polar hydrogens deleted.
.IP "\fBDetectAromaticity\fR" 4
.IX Item "DetectAromaticity"
.Vb 1
\&    $Molecule\->DetectAromaticity();
.Ve
.Sp
Associates \fIAromatic\fR property to atoms and bonds involved in aromatic rings or ring
systems in a \fIMolecule\fR and returns \fIMolecule\fR.
.Sp
This method assumes the ring detection has already been perfomed using \fBDetectRings\fR.
And any existing \fIAromatic\fR property associated with atoms and bonds is deleted before
performing aromaticity detection.
.Sp
What is aromaticity? [ Ref 124 ] It's in the code of the implementer, did you
say? Agree. The implementation of aromaticity varies widely across different
packages [ Ref 125 ]; additionally, the implementation details are not always
completely available, and it's not possible to figure out the exact implementation
of aromaticity across various packages. Using the publicly available information,
however, one can try to reproduce the available results to the extent possible,
along with parameterizing all the control parameters used to implement different
aromaticity models, and that's exactly what the current release of MayaChemTools
does.
.Sp
The implementation of aromaticity corresponding to various aromaticity models in
MayaChemTools package is driven by an external \s-1CSV\s0 file AromaticityModelsData.csv,
which is distributed with the package and is available in lib/data directory. The \s-1CSV\s0
files contains names of supported aromaticity models, along with various control
parameters and their values. This file is loaded and processed during instantiation
of Molecule class and data corresponding to specific aromaticity model are used
to detect aromaticity for that model. Any new aromaticity model added to the
aromaticity data file, using different combinations of values for existing control
parameters, would work without any changes to the code; the addition of any new
control parameters, however, requires its implementation in the code used to
calculate number of pi electrons available towards delocalization in a ring or ring
systems.
.Sp
The current release of MayaChemTools package supports these aromaticity
models: MDLAromaticityModel, TriposAromaticityModel, MMFFAromaticityModel,
ChemAxonBasicAromaticityModel, ChemAxonGeneralAromaticityModel,
DaylightAromaticityModel, MayaChemToolsAromaticityModel.
.Sp
The current list of control parameters available to detect aromaticity corresponding
to different aromaticity models are: AllowHeteroRingAtoms, HeteroRingAtomsList,
AllowExocyclicDoubleBonds, AllowHomoNuclearExocyclicDoubleBonds,
AllowElectronegativeRingAtomExocyclicDoubleBonds, AllowRingAtomFormalCharge,
AllowHeteroRingAtomFormalCharge, MinimumRingSize. The values for these control
parameters are specified in AromaticityModelsData.csv file.
.Sp
Although definition of aromaticity differs across various aromaticity models, a ring
or a ring system containing 4n + 2 pi electrons (Huckel's rule) corresponding to
alternate single and double bonds, in general, is considered aromatic.
.Sp
The available valence free electrons on heterocyclic ring atoms, involved in two single
ring bonds, are also allowed to participate in pi electron delocalizaiton for most of
the supported aromaticity models.
.Sp
The presence of exocyclic terminal double bond on ring atoms involved in pi electron
delocalization is only allowed for some of the aromaticity models. Additionally, the type
atoms involved in exocyclic terminal double bonds may result in making a ring or ring
system non-aromatic.
.Sp
For molecules containing fused rings, each fused ring set is considered as one aromatic
system for counting pi electrons to satisfy Huckel's rule; In case of a failure, rings in
fused set are treated individually for aromaticity detection. Additionally, non-fused
rings are handled on their own during aromaticity detection.
.IP "\fBDetectRings\fR" 4
.IX Item "DetectRings"
.Vb 1
\&    $Molecule\->DetectRings();
.Ve
.Sp
Detects rings in a \fIMolecule\fR and returns \fIMolecule\fR. Ring detection is performed using
\&\fBDetectCycles\fR method avaible in \fBGraph\fR class which in turn uses methods available
\&\fBGraph::CyclesDetection\fR class. \fBGraph::CyclesDetection\fR class implements collapsing path graph
[Ref 31] methodology to detect all cycles in a graph.
.IP "\fBFormatElementalCompositionInformation\fR" 4
.IX Item "FormatElementalCompositionInformation"
.Vb 6
\&    $FormattedInfo = $Molecule\->FormatElementalCompositionInformation(
\&                     $ElementsRef, $ElementCompositionRef,
\&                     [$Precision]);
\&    $FormattedInfo = Molecule::FormatElementalCompositionInformation(
\&                     $ElementsRef, $ElementCompositionRef,
\&                     [$Precision]);
.Ve
.Sp
Using \fIElementsRef\fR and \fIElementCompositionRef\fR arrays referneces containg informatio
about elements and their composition, formats elemental composition information and returns
a \fIFormattedInfo\fR string. Defaule \fIPrecision\fR value: \fI2\fR.
.IP "\fBGetAromaticityModel\fR" 4
.IX Item "GetAromaticityModel"
.Vb 1
\&    $AromaticityModel = $Molecule\->GetAromaticityModel();
.Ve
.Sp
Returns name of \fBAromaticityModel\fR set for \fIMolecule\fR corresponding to \fBAromaticityModel\fR
property or default model name of \fBMayaChemToolsAromaticityModel\fR.
.IP "\fBGetAllAtomPaths\fR" 4
.IX Item "GetAllAtomPaths"
.Vb 1
\&    $AtomPathsRef = $Molecule\->GetAllAtomPaths([$AllowCycles]);
.Ve
.Sp
Returns all paths as a reference to an array containing reference to arrays with path
\&\fBAtom\fR objects.
.Sp
Path atoms correspond to to all possible paths for each atom in molecule with all
possible lengths and sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.Sp
For molecule without any rings, this method returns the same set of atom paths as
\&\fBGetAtomPaths\fR method.
.IP "\fBGetAllAtomPathsStartingAt\fR" 4
.IX Item "GetAllAtomPathsStartingAt"
.Vb 2
\&    $AtomPathsRef = $Molecule\->GetAllAtomPathsStartingAt($StartAtom,
\&                    [$AllowCycles]);
.Ve
.Sp
Returns all atom paths starting from \fIStartAtom\fR as a reference to an array containing
reference to arrays with path \fBAtom\fR objects.
.Sp
Path atoms atoms correspond to to all possible paths for specified atom in molecule with all
possible lengths and sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.Sp
For molecule without any rings, this method returns the same set of atom paths as
\&\fBGetAtomPathsStartingAt\fR  method.
.IP "\fBGetAllAtomPathsStartingAtWithLength\fR" 4
.IX Item "GetAllAtomPathsStartingAtWithLength"
.Vb 2
\&    $AtomPathsRef = $Molecule\->GetAllAtomPathsStartingAtWithLength(
\&                    $StartAtom, $Length, [$AllowCycles]);
.Ve
.Sp
Returns all atom paths starting from \fIStartAtom\fR with specified \fILength\fRas a reference
to an array containing reference to arrays with path \fBAtom\fR objects.
.Sp
Path atoms atoms correspond to to all possible paths for specified atom in molecule with all
possible lengths and sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.Sp
For molecule without any rings, this method returns the same set of atom paths as
\&\fBGetAtomPathsStartingAtWithLength\fR  method.
.IP "\fBGetAllAtomPathsStartingAtWithLengthUpto\fR" 4
.IX Item "GetAllAtomPathsStartingAtWithLengthUpto"
.Vb 2
\&    $AtomPathsRef = $Molecule\->GetAllAtomPathsStartingAtWithLengthUpto(
\&                    $StartAtom, $Length, [$AllowCycles]);
.Ve
.Sp
Returns atom paths starting from \fIStartAtom\fR with length up to \fILength\fR as a reference
to an array containing reference to arrays with path \fBAtom\fR objects.
.Sp
Path atoms atoms correspond to all possible paths for specified atom in molecule with length
up to a specified length and sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.Sp
For molecule without any rings, this method returns the same set of atom paths as
\&\fIGetAtomPathsStartingAtWithLengthUpto\fR method.
.IP "\fBGetAllAtomPathsWithLength\fR" 4
.IX Item "GetAllAtomPathsWithLength"
.Vb 2
\&    $AtomPathsRef = $Molecule\->GetAllAtomPathsWithLength($Length,
\&                    [$AllowCycles]);
.Ve
.Sp
Returns all atom paths with specified \fILength\fR as a reference to an array containing
reference to arrays with path \fBAtom\fR objects.
.Sp
Path atoms correspond to to all possible paths for each atom in molecule with length
up to a specified length and sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.Sp
For molecule without any rings, this method returns the same set of atom paths as
as \fIGetAtomPathsWithLength\fR method.
.IP "\fBGetAllAtomPathsWithLengthUpto\fR" 4
.IX Item "GetAllAtomPathsWithLengthUpto"
.Vb 2
\&    $AtomPathsRef = $Molecule\->GetAllAtomPathsWithLengthUpto($Length,
\&                    [$AllowCycles]);
.Ve
.Sp
Returns all atom paths with length up to \fILength\fR as a reference to an array containing
reference to arrays with path \fBAtom\fR objects.
.Sp
Path atoms correspond to to all possible paths for each atom in molecule with length
up to a specified length and sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.Sp
For molecule without any rings, this method returns the same set of atom paths as
as \fIGetAtomPathsWithLengthUpto\fR method.
.IP "\fBGetAromaticRings\fR" 4
.IX Item "GetAromaticRings"
.Vb 1
\&    @AtomaticRings = $Molecule\->GetAromaticRings();
.Ve
.Sp
Returns aromatic rings as an array containing references to arrays of ring \fIAtom\fR objects
in a \fIMolecule\fR.
.IP "\fBGetAtomNeighborhoods\fR" 4
.IX Item "GetAtomNeighborhoods"
.Vb 1
\&    @Neighborhoods = $Molecule\->GetAtomNeighborhoods($StartAtom);
.Ve
.Sp
Returns atom neighborhoods around a \fIStartAtom\fR as an array containing references
to arrays with neighborhood \fIAtom\fR objects at possible radii.
.IP "\fBGetAtomNeighborhoodsWithRadiusUpto\fR" 4
.IX Item "GetAtomNeighborhoodsWithRadiusUpto"
.Vb 2
\&    @Neighborhoods = $Molecule\->GetAtomNeighborhoodsWithRadiusUpto($StartAtom,
\&                     $Radius);
.Ve
.Sp
Returns atom neighborhoods around a \fIStartAtom\fR as an array containing references
to arrays with neighborhood \fIAtom\fR objects up to \fIRadius\fR.
.IP "\fBGetAtomNeighborhoodsWithSuccessorAtoms\fR" 4
.IX Item "GetAtomNeighborhoodsWithSuccessorAtoms"
.Vb 2
\&    @Neighborhoods = $Molecule\->GetAtomNeighborhoodsWithSuccessorAtoms(
\&                     $StartAtom);
.Ve
.Sp
Returns atom neighborhood around a specified \fIStartAtom\fR, along with their successor
connected atoms, collected at all radii as an array containing references to arrays with first
value corresponding to neighborhood atom at a specific radius and second value as reference
to an array containing its successor connected atoms.
.Sp
For a neighborhood atom at each radius level, the successor connected atoms correspond to the
neighborhood atoms at the next radius level. Consequently, the neighborhood atoms at the last
radius level don't contain any successor atoms which fall outside the range of specified radius.
.IP "\fBGetAtomNeighborhoodsWithSuccessorAtomsAndRadiusUpto\fR" 4
.IX Item "GetAtomNeighborhoodsWithSuccessorAtomsAndRadiusUpto"
.Vb 2
\&    @Neighborhoods = $Molecule\->GetAtomNeighborhoodsWithSuccessorAtomsAndRadiusUpto(
\&                     $StartAtom, $Radius);
.Ve
.Sp
Returns atom neighborhood around a specified \fIStartAtom\fR, along with their successor
connected atoms, collected upto specified \fIRadiud\fR as an array containing references to arrays
with first value corresponding to neighborhood atom at a specific radius and second value as
reference to an array containing its successor connected atoms.
.Sp
For a neighborhood atom at each radius level, the successor connected atoms correspond to the
neighborhood atoms at the next radius level. Consequently, the neighborhood atoms at the last
radius level don't contain any successor atoms which fall outside the range of specified radius.
.IP "\fBGetAtomPathBonds\fR" 4
.IX Item "GetAtomPathBonds"
.Vb 1
\&    $Return = $Molecule\->GetAtomPathBonds(@PathAtoms);
.Ve
.Sp
Returns an array containing \fBBond\fR objects corresponding to successive pair of
atoms in \fIPathAtoms\fR
.IP "\fBGetAtomPaths\fR" 4
.IX Item "GetAtomPaths"
.Vb 1
\&    $AtomPathsRef = $Molecule\->GetAtomPaths([$AllowCycles]);
.Ve
.Sp
Returns all paths as a reference to an array containing reference to arrays with path
\&\fBAtom\fR objects.
.Sp
Path atoms correspond to to all possible paths for each atom in molecule with all
possible lengths and no sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.IP "\fBGetAtomPathsBetween\fR" 4
.IX Item "GetAtomPathsBetween"
.Vb 1
\&    $AtomPathsRef = $Molecule\->GetAtomPathsBetween($StartAtom, $EndAtom);
.Ve
.Sp
Returns all paths as between \fIStartAtom\fR and \fIEndAtom\fR as a reference to an array
containing reference to arrays with path \fBAtom\fR objects.
.Sp
For molecules with rings, atom paths array contains may contain two paths.
.IP "\fBGetAtomPathsStartingAt\fR" 4
.IX Item "GetAtomPathsStartingAt"
.Vb 1
\&    $AtomPathsRef = $Molecule\->GetAtomPathsStartingAt($StartAtom, [$AllowCycles]);
.Ve
.Sp
Returns paths starting at \fIStartAtom\fR as a reference to an array containing reference to
arrays with path \fBAtom\fR objects.
.Sp
Path atoms correspond to all possible paths for specified atom in molecule with all
possible lengths and no sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.IP "\fBGetAtomPathsStartingAtWithLength\fR" 4
.IX Item "GetAtomPathsStartingAtWithLength"
.Vb 2
\&    $AtomPathsRef = $Molecule\->GetAtomPathsStartingAtWithLength($StartAtom,
\&                    $Length, [$AllowCycles]);
.Ve
.Sp
Returns paths starting at \fIStartAtom\fR with length  \fILength\fR as a reference to an array
containing reference to arrays with path \fBAtom\fR objects.
.Sp
Path atoms correspond to all possible paths for specified atom in molecule with length
upto a specified length and no sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.IP "\fBGetAtomPathsStartingAtWithLengthUpto\fR" 4
.IX Item "GetAtomPathsStartingAtWithLengthUpto"
.Vb 2
\&    $AtomPathsRef = $Molecule\->GetAtomPathsStartingAtWithLengthUpto($StartAtom,
\&                    $Length, [$AllowCycles]);
.Ve
.Sp
Returns paths starting at \fIStartAtom\fR with length up to \fILength\fR as a reference to an array
containing reference to arrays with path \fBAtom\fR objects.
.Sp
Path atoms correspond to all possible paths for specified atom in molecule with length
upto a specified length and no sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.IP "\fBGetAtomPathsWithLength\fR" 4
.IX Item "GetAtomPathsWithLength"
.Vb 1
\&    $AtomPathsRef = $Molecule\->GetAtomPathsWithLength($Length, [$AllowCycles]);
.Ve
.Sp
Returns all paths with specified \fILength\fR as a reference to an array containing reference
to arrays with path \fBAtom\fR objects.
.Sp
Path atoms correspond to all possible paths for each atom in molecule with length
upto a specified length and no sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.IP "\fBGetAtomPathsWithLengthUpto\fR" 4
.IX Item "GetAtomPathsWithLengthUpto"
.Vb 1
\&    $AtomPathsRef = $Molecule\->GetAtomPathsWithLengthUpto($Length, [$AllowCycles]);
.Ve
.Sp
Returns all paths with length up to \fILength\fR as a reference to an array containing reference
to arrays with path \fBAtom\fR objects.
.Sp
Path atoms correspond to all possible paths for each atom in molecule with length
upto a specified length and no sharing of bonds in paths traversed. By default, rings are
included in paths. A path containing a ring is terminated at an atom completing the ring.
.IP "\fBGetAtoms\fR" 4
.IX Item "GetAtoms"
.Vb 2
\&    @AllAtoms = $Molecule\->GetAtoms();
\&    @PolarAtoms = $Molecule\->GetAtoms(\*(AqIsPolarAtom\*(Aq);
\&
\&    $NegateMethodResult = 1;
\&    @NonHydrogenAtoms = $Molecule\->GetAtoms(\*(AqIsHydrogenAtom\*(Aq,
\&                        $NegateMethodResult);
\&
\&    $AtomsCount = $Molecule\->GetAtoms();
.Ve
.Sp
Returns an array of \fIAtoms\fR in a \fIMolecule\fR. In scalar context,  it returns number of atoms.
Additionally, \fBAtoms\fR array can be filtered by any user specifiable valid \fBAtom\fR class method
and the result of the \fBAtom\fR class method used to filter the atoms can also be negated by
an optional negate results flag as third parameter.
.IP "\fBGetBonds\fR" 4
.IX Item "GetBonds"
.Vb 2
\&    @Bonds = $Molecule\->GetBonds();
\&    $BondsCount = $Molecule\->GetBonds();
.Ve
.Sp
Returns an array of \fIBonds\fR in a \fIMolecule\fR. In scalar context,  it returns number of bonds.
.IP "\fBGetCharge\fR" 4
.IX Item "GetCharge"
.Vb 1
\&    $Charge = $Molecule\->GetCharge();
.Ve
.Sp
Returns net charge on a \fIMolecule\fR using one of the following two methods: explicitly
set \fBCharge\fR property or sum of partial atomic charges on each atom.
.IP "\fBGetConnectedComponents\fR" 4
.IX Item "GetConnectedComponents"
.Vb 1
\&    @ConnectedComponents = $Molecule\->GetConnectedComponents();
.Ve
.Sp
Returns a reference to an array containing \fIMolecule\fR objects corresponding
to connected components sorted in decreasing order of component size in a \fIMolecule\fR.
.IP "\fBGetConnectedComponentsAtoms\fR" 4
.IX Item "GetConnectedComponentsAtoms"
.Vb 2
\&    @ConnectedComponentsAtoms =
\&      $Molecule\->GetConnectedComponentsAtoms();
.Ve
.Sp
Returns an array containing references to arrays with \fIAtom\fR objects corresponding to
atoms of connected components sorted in order of component decreasing size in a
\&\fIMolecule\fR.
.IP "\fBGetDimensionality\fR" 4
.IX Item "GetDimensionality"
.Vb 1
\&    $Dimensionality = $Molecule\->GetDimensionality();
.Ve
.Sp
Returns \fIDimensionality\fR of a \fIMolecule\fR corresponding to explicitly set
\&\fIDimensionality\fR property value or by processing atomic.
.Sp
The \fIDimensionality\fR value from atomic coordinates is calculated as follows:
.Sp
.Vb 4
\&    3D \- Three dimensional: One of X, Y or Z coordinate is non\-zero
\&    2D \- Two dimensional: One of X or Y coordinate is non\-zero; All Z
\&         coordinates are zero
\&    0D \- Zero dimensional: All atomic coordinates are zero
.Ve
.IP "\fBGetElementalComposition\fR" 4
.IX Item "GetElementalComposition"
.Vb 2
\&    ($ElementsRef, $CompositionRef) =
\&      $Molecule\->GetElementalComposition([$IncludeMissingHydrogens]);
.Ve
.Sp
Calculates elemental composition and returns references to arrays containing elements
and their percent composition in a \fIMolecule\fR. By default, missing hydrogens are included
during the calculation.
.IP "\fBGetElementsAndNonElements\fR" 4
.IX Item "GetElementsAndNonElements"
.Vb 2
\&    ($ElementsRef, $NonElementsRef) =
\&     $Molecule\->GetElementsAndNonElements([$IncludeMissingHydrogens]);
.Ve
.Sp
Counts elements and non-elements in a \fIMolecule\fR and returns references to hashes
containing element and non-element as hash keys with values corresponding to their
count. By default, missing hydrogens are not added to the element hash.
.IP "\fBGetExactMass\fR" 4
.IX Item "GetExactMass"
.Vb 1
\&    $ExactMass = $Molecule\->GetExactMass();
.Ve
.Sp
Returns exact mass of a \fIMolecule\fR corresponding to sum of exact masses of all
the atoms.
.IP "\fBGetFormalCharge\fR" 4
.IX Item "GetFormalCharge"
.Vb 1
\&    $FormalCharge = $Molecule\->GetFormalCharge();
.Ve
.Sp
Returns net formal charge on a \fIMolecule\fR using one of the following two methods: explicitly
set \fBFormalCharge\fR property or sum of formal charges on each atom.
.Sp
\&\fBFormalCharge\fR is different from \fBCharge\fR property of the molecule which corresponds to
sum of partial atomic charges explicitly set for each atom using a specific methodology.
.IP "\fBGetFreeRadicalElectrons\fR" 4
.IX Item "GetFreeRadicalElectrons"
.Vb 1
\&    $FreeRadicalElectrons = $Molecule\->GetFreeRadicalElectrons();
.Ve
.Sp
Returns total number of free radical electrons available in a \fIMolecule\fR using one of the
following two methods: explicitly set \fBFreeRadicalElectrons\fR property or sum of available
free radical electrons on each atom.
.IP "\fBGetFusedAndNonFusedRings\fR" 4
.IX Item "GetFusedAndNonFusedRings"
.Vb 2
\&    ($FusedRingSetRef, $NonFusedRingsRef) =
\&       $Molecule\->GetFusedAndNonFusedRings();
.Ve
.Sp
Returns references to array of fused ring sets and non-fused rings in a \fIMolecule\fR. Fused ring sets
array reference contains refernces to arrays of rings corresponding to ring \fIAtom\fR objects;
Non-fused rings array reference contains references to arrays of ring \fIAtom\fR objects.
.IP "\fBGetLargestConnectedComponent\fR" 4
.IX Item "GetLargestConnectedComponent"
.Vb 1
\&    $ComponentMolecule = $Molecule\->GetLargestConnectedComponent();
.Ve
.Sp
Returns a reference to \fBMolecule\fR object corresponding to a largest connected component
in a \fIMolecule\fR.
.IP "\fBGetLargestConnectedComponentAtoms\fR" 4
.IX Item "GetLargestConnectedComponentAtoms"
.Vb 1
\&    @ComponentAtoms = $Molecule\->GetLargestConnectedComponentAtoms();
.Ve
.Sp
Returns a reference to an array of \fBAtom\fR objects corresponding to a largest connected
component in a \fIMolecule\fR.
.IP "\fBGetLargestRing\fR" 4
.IX Item "GetLargestRing"
.Vb 1
\&    @RingAtoms = $Molecule\->GetLargestRing();
.Ve
.Sp
Returns an array of \fIAtoms\fR objects corresponding to a largest ring in a \fIMolecule\fR.
.IP "\fBGetMolecularFormula\fR" 4
.IX Item "GetMolecularFormula"
.Vb 3
\&    $FormulaString = $Molecule\->GetMolecularFormula(
\&                     [$IncludeMissingHydrogens,
\&                     $IncludeNonElements]);
.Ve
.Sp
Returns molecular formula of a \fIMolecule\fR by collecting information about all atoms in
the molecule and composing the formula using Hills ordering system:
.Sp
.Vb 4
\&    o C shows up first and H follows assuming C is present.
\&    o All other standard elements are sorted alphanumerically.
\&    o All other non\-stanard atom symbols are also sorted
\&      alphanumerically and follow standard elements.
.Ve
.Sp
Notes:
.Sp
.Vb 4
\&    o By default, missing hydrogens and nonelements are also included.
\&    o Elements for disconnected fragments are combined into the same
\&      formula.
\&    o Formal charge is also used during compoisiton of molecular formula.
.Ve
.IP "\fBGetMolecularWeight\fR" 4
.IX Item "GetMolecularWeight"
.Vb 1
\&    $MolWeight = $Molecule\->GetMolecularWeight();
.Ve
.Sp
Returns molecular weight of a \fIMolecule\fR corresponding to sum of atomic weights of all
the atoms.
.IP "\fBGetNumOfAromaticRings\fR" 4
.IX Item "GetNumOfAromaticRings"
.Vb 1
\&    $NumOfAromaticRings = $Molecule\->GetNumOfAromaticRings();
.Ve
.Sp
Returns number of aromatic rings in a \fIMolecule\fR.
.IP "\fBGetNumOfAtoms\fR" 4
.IX Item "GetNumOfAtoms"
.Vb 1
\&    $NumOfAtoms = $Molecule\->GetNumOfAtoms();
.Ve
.Sp
Returns number of atoms in a \fIMolecule\fR.
.IP "\fBGetNumOfBonds\fR" 4
.IX Item "GetNumOfBonds"
.Vb 1
\&    $NumOfBonds = $Molecule\->GetNumOfBonds();
.Ve
.Sp
Returns number of bonds in a \fIMolecule\fR.
.IP "\fBGetNumOfConnectedComponents\fR" 4
.IX Item "GetNumOfConnectedComponents"
.Vb 1
\&    $NumOfComponents = $Molecule\->GetNumOfConnectedComponents();
.Ve
.Sp
Returns number of connected components in a \fIMolecule\fR.
.IP "\fBGetNumOfElementsAndNonElements\fR" 4
.IX Item "GetNumOfElementsAndNonElements"
.Vb 4
\&    ($NumOfElements, $NumOfNonElements) = $Molecule\->
\&                              GetNumOfElementsAndNonElements();
\&    ($NumOfElements, $NumOfNonElements) = $Molecule\->
\&                   GetNumOfElementsAndNonElements($IncludeMissingHydrogens);
.Ve
.Sp
Returns number of elements and non-elements in a \fIMolecule\fR. By default, missing
hydrogens are not added to element count.
.IP "\fBGetNumOfHeavyAtoms\fR" 4
.IX Item "GetNumOfHeavyAtoms"
.Vb 1
\&    $NumOfHeavyAtoms = $Molecule\->GetNumOfHeavyAtoms();
.Ve
.Sp
Returns number of heavy atoms, non-hydrogen atoms, in a \fIMolecule\fR.
.IP "\fBGetNumOfHydrogenAtoms\fR" 4
.IX Item "GetNumOfHydrogenAtoms"
.Vb 1
\&    $NumOfHydrogenAtoms = $Molecule\->GetNumOfHydrogenAtoms();
.Ve
.Sp
Returns number of hydrogen atoms in a \fIMolecule\fR.
.IP "\fBGetNumOfMissingHydrogenAtoms\fR" 4
.IX Item "GetNumOfMissingHydrogenAtoms"
.Vb 1
\&    $NumOfMissingHydrogenAtoms = $Molecule\->GetNumOfMissingHydrogenAtoms();
.Ve
.Sp
Returns number of hydrogen atoms in a \fIMolecule\fR.
.IP "\fBGetNumOfNonHydrogenAtoms\fR" 4
.IX Item "GetNumOfNonHydrogenAtoms"
.Vb 1
\&    $NumOfNonHydrogenAtoms = $Molecule\->GetNumOfNonHydrogenAtoms();
.Ve
.Sp
Returns number of non-hydrogen atoms in a \fIMolecule\fR.
.IP "\fBGetNumOfRings\fR" 4
.IX Item "GetNumOfRings"
.Vb 1
\&    $RingCount = $Molecule\->GetNumOfRings();
.Ve
.Sp
Returns number of rings in a \fIMolecule\fR.
.IP "\fBGetNumOfRingsWithEvenSize\fR" 4
.IX Item "GetNumOfRingsWithEvenSize"
.Vb 1
\&    $RingCount = $Molecule\->GetNumOfRingsWithEvenSize();
.Ve
.Sp
Returns number of rings with even size in a \fIMolecule\fR.
.IP "\fBGetNumOfRingsWithOddSize\fR" 4
.IX Item "GetNumOfRingsWithOddSize"
.Vb 1
\&    $RingCount = $Molecule\->GetNumOfRingsWithOddSize();
.Ve
.Sp
Returns number of rings with odd size in a \fIMolecule\fR.
.IP "\fBGetNumOfRingsWithSize\fR" 4
.IX Item "GetNumOfRingsWithSize"
.Vb 1
\&    $RingCount = $Molecule\->GetNumOfRingsWithSize($Size);
.Ve
.Sp
Returns number of rings with \fISize\fR in a \fIMolecule\fR.
.IP "\fBGetNumOfRingsWithSizeGreaterThan\fR" 4
.IX Item "GetNumOfRingsWithSizeGreaterThan"
.Vb 1
\&    $RingCount = $Molecule\->GetNumOfRingsWithSizeGreaterThan($Size);
.Ve
.Sp
Returns number of rings with size greater than \fISize\fR in a \fIMolecule\fR.
.IP "\fBGetNumOfRingsWithSizeLessThan\fR" 4
.IX Item "GetNumOfRingsWithSizeLessThan"
.Vb 1
\&    $RingCount = $Molecule\->GetNumOfRingsWithSizeLessThan($Size);
.Ve
.Sp
Returns number of rings with size less than \fISize\fR in a \fIMolecule\fR.
.IP "\fBGetRingBonds\fR" 4
.IX Item "GetRingBonds"
.Vb 1
\&    @RingBonds = $Molecule\->GetRingBonds(@RingAtoms);
.Ve
.Sp
Returns an array of ring \fBBond\fR objects correponding to an array of ring \fIAtoms\fR in a
\&\fIMolecule\fR.
.IP "\fBGetRingBondsFromRings\fR" 4
.IX Item "GetRingBondsFromRings"
.Vb 1
\&    @RingBondsSets = $Molecule\->GetRingBondsFromRings(@RingAtomsSets);
.Ve
.Sp
Returns an array containing references to arrays of ring \fBBond\fR objects for rings specified
in an array of references to ring \fIAtom\fR objects.
.IP "\fBGetRings\fR" 4
.IX Item "GetRings"
.Vb 1
\&    @Rings = $Molecule\->GetRings();
.Ve
.Sp
Returns rings as an array containing references to arrays of ring \fIAtom\fR objects in a \fIMolecule\fR.
.IP "\fBGetRingsWithEvenSize\fR" 4
.IX Item "GetRingsWithEvenSize"
.Vb 1
\&    @Rings = $Molecule\->GetRingsWithEvenSize();
.Ve
.Sp
Returns even size rings as an array containing references to arrays of ring \fIAtom\fR objects in
a \fIMolecule\fR.
.IP "\fBGetRingsWithOddSize\fR" 4
.IX Item "GetRingsWithOddSize"
.Vb 1
\&    @Rings = $Molecule\->GetRingsWithOddSize();
.Ve
.Sp
Returns odd size rings as an array containing references to arrays of ring \fIAtom\fR objects in
a \fIMolecule\fR.
.IP "\fBGetRingsWithSize\fR" 4
.IX Item "GetRingsWithSize"
.Vb 1
\&    @Rings = $Molecule\->GetRingsWithSize($Size);
.Ve
.Sp
Returns rings with \fISize\fR as an array containing references to arrays of ring \fIAtom\fR objects in
a \fIMolecule\fR.
.IP "\fBGetRingsWithSizeGreaterThan\fR" 4
.IX Item "GetRingsWithSizeGreaterThan"
.Vb 1
\&    @Rings = $Molecule\->GetRingsWithSizeGreaterThan($Size);
.Ve
.Sp
Returns rings with size greater than \fISize\fR as an array containing references to arrays of
ring \fIAtom\fR objects in a \fIMolecule\fR.
.IP "\fBGetRingsWithSizeLessThan\fR" 4
.IX Item "GetRingsWithSizeLessThan"
.Vb 1
\&    @Rings = $Molecule\->GetRingsWithSizeLessThan($Size);
.Ve
.Sp
Returns rings with size less than \fISize\fR as an array containing references to arrays of
ring \fIAtom\fR objects in a \fIMolecule\fR.
.IP "\fBGetSizeOfLargestRing\fR" 4
.IX Item "GetSizeOfLargestRing"
.Vb 1
\&    $Size = $Molecule\->GetSizeOfLargestRing();
.Ve
.Sp
Returns size of the largest ring in a \fIMolecule\fR.
.IP "\fBGetSizeOfSmallestRing\fR" 4
.IX Item "GetSizeOfSmallestRing"
.Vb 1
\&    $Size = $Molecule\->GetSizeOfSmallestRing();
.Ve
.Sp
Returns size of the smalles ring in a \fIMolecule\fR.
.IP "\fBGetSmallestRing\fR" 4
.IX Item "GetSmallestRing"
.Vb 1
\&    @RingAtoms = $Molecule\->GetSmallestRing();
.Ve
.Sp
Returns an array containing \fIAtom\fR objects corresponding to the smallest ring in
a \fIMolecule\fR.
.IP "\fBGetSpinMultiplicity\fR" 4
.IX Item "GetSpinMultiplicity"
.Vb 1
\&    $SpinMultiplicity = $Molecule\->GetSpinMultiplicity();
.Ve
.Sp
Returns net spin multiplicity of a \fIMolecule\fR using one of the following two methods: explicitly
set \fBSpinMultiplicity\fR property or sum of spin multiplicity on each atom.
.IP "\fBGetSupportedAromaticityModels\fR" 4
.IX Item "GetSupportedAromaticityModels"
.Vb 1
\&    @SupportedModels = $Molecule\->GetSupportedAromaticityModels();
.Ve
.Sp
Returns an array containing a list of supported aromaticity models.
.IP "\fBGetValenceModel\fR" 4
.IX Item "GetValenceModel"
.Vb 1
\&    $ValenceModel = $Molecule\->GetValenceModel();
.Ve
.Sp
Returns valence model for \fIMolecule\fR using one of the following two methods: explicitly
set \fBValenceModel\fR property or defaul value of \fIInternalValenceModel\fR.
.IP "\fBGetTopologicallySortedAtoms\fR" 4
.IX Item "GetTopologicallySortedAtoms"
.Vb 1
\&    @SortedAtoms = $Molecule\->GetTopologicallySortedAtoms([$StartAtom]);
.Ve
.Sp
Returns an array of topologically sorted \fIAtom\fR objects starting from \fIStartAtom\fR or
an arbitrary atom in a \fIMolecule\fR.
.IP "\fBHasAromaticRings\fR" 4
.IX Item "HasAromaticRings"
.Vb 1
\&    $Status = $Molecule\->HasAromaticRings();
.Ve
.Sp
Returns 1 or 0 based on whether any aromatic ring is present in a \fIMolecule\fR.
.IP "\fBHasAromaticAtomsInRings\fR" 4
.IX Item "HasAromaticAtomsInRings"
.Vb 1
\&    $Status = $Molecule\->HasAromaticAtomsInRings();
.Ve
.Sp
Returns 1 or 0 based on whether any aromatic ring atom is present in a \fIMolecule\fR.
.IP "\fBHasAromaticAtomsNotInRings\fR" 4
.IX Item "HasAromaticAtomsNotInRings"
.Vb 1
\&    $Status = $Molecule\->HasAromaticAtomsNotInRings();
.Ve
.Sp
Returns 1 or 0 based on whether any non-ring atom is marked aromatic in a \fIMolecule\fR.
.IP "\fBHasAtom\fR" 4
.IX Item "HasAtom"
.Vb 1
\&    $Status = $Molecule\->HasAtom($Atom);
.Ve
.Sp
Returns 1 or 0 based on whether \fIAtom\fR is present in a \fIMolecule\fR.
.IP "\fBHasBond\fR" 4
.IX Item "HasBond"
.Vb 1
\&    $Status = $Molecule\->HasBond($Bond);
.Ve
.Sp
Returns 1 or 0 based on whether \fIBond\fR is present in a \fIMolecule\fR.
.IP "\fBHasFusedRings\fR" 4
.IX Item "HasFusedRings"
.Vb 1
\&    $Status = $Molecule\->HasFusedRings();
.Ve
.Sp
Returns 1 or 0 based on whether any fused rings set is present in a \fIMolecule\fR.
.IP "\fBHasNoRings\fR" 4
.IX Item "HasNoRings"
.Vb 1
\&    $Status = $Molecule\->HasNoRings();
.Ve
.Sp
Returns 0 or 1 based on whether any ring is present in a \fIMolecule\fR.
.IP "\fBHasOnlyOneRing\fR" 4
.IX Item "HasOnlyOneRing"
.Vb 1
\&    $Status = $Molecule\->HasOnlyOneRing();
.Ve
.Sp
Returns 1 or 0 based on whether only one ring is present in a \fIMolecule\fR.
.IP "\fBHasRings\fR" 4
.IX Item "HasRings"
.Vb 1
\&    $Status = $Molecule\->HasRings();
.Ve
.Sp
Returns 1 or 0 based on whether rings are present in a \fIMolecule\fR.
.IP "\fBIsAromatic\fR" 4
.IX Item "IsAromatic"
.Vb 1
\&    $Status = $Molecule\->IsAromatic();
.Ve
.Sp
Returns 1 or 0 based on whether \fIMolecule\fR is aromatic.
.IP "\fBIsMolecule\fR" 4
.IX Item "IsMolecule"
.Vb 1
\&    $Status = Molecule::IsMolecule();
.Ve
.Sp
Returns 1 or 0 based on whether \fIObject\fR is a \fBMolecule\fR object.
.IP "\fBIsRingAromatic\fR" 4
.IX Item "IsRingAromatic"
.Vb 1
\&    $Status = $Molecule\->IsRingAromatic(@RingAtoms);
.Ve
.Sp
Returns 1 or 0 based on whether all \fIRingAtoms\fR are aromatic.
.IP "\fBIsSupportedAromaticityModel\fR" 4
.IX Item "IsSupportedAromaticityModel"
.Vb 2
\&    $Status = $Molecule\->IsSupportedAromaticityModel($AromaticityModel);
\&    $Status = Molecule::IsSupportedAromaticityModel($AromaticityModel);
.Ve
.Sp
Returns 1 or 0 based on whether specified \fIAromaticityModel\fR is supported.
.IP "\fBIsTwoDimensional\fR" 4
.IX Item "IsTwoDimensional"
.Vb 1
\&    $Status = $Molecule\->IsTwoDimensional();
.Ve
.Sp
Returns 1 or 0 based on whether any atom in \fIMolecule\fR has a non-zero value
for X or Y coordinate and all atoms have zero value for Z coordinates.
.IP "\fBIsThreeDimensional\fR" 4
.IX Item "IsThreeDimensional"
.Vb 1
\&    $Status = $Molecule\->IsThreeDimensional();
.Ve
.Sp
Returns 1 or 0 based on whether any atom in \fIMolecule\fR has a non-zero value
for Z coordinate.
.IP "\fBKeepLargestComponent\fR" 4
.IX Item "KeepLargestComponent"
.Vb 1
\&    $Molecule\->KeepLargestComponent();
.Ve
.Sp
Deletes atoms corresponding to all other connected components Except for the largest
connected component in a \fIMolecule\fR and returns \fIMolecule\fR.
.IP "\fBKekulizeAromaticAtoms\fR" 4
.IX Item "KekulizeAromaticAtoms"
.Vb 1
\&    $Status = $Molecule\->KekulizeAromaticAtoms();
.Ve
.Sp
Kekulize marked ring and non-ring aromatic atoms in a molecule and return 1 or 1 based
on whether the kekulization succeeded.
.IP "\fBNewAtom\fR" 4
.IX Item "NewAtom"
.Vb 1
\&    $NewAtom = $Molecule\->NewAtom(%AtomPropertyNamesAndValues);
.Ve
.Sp
Creates a new atom using \fIAtomPropertyNamesAndValues\fR, add its to \fIMolecule\fR, and returns
new \fBAtom\fR object.
.IP "\fBNewBond\fR" 4
.IX Item "NewBond"
.Vb 1
\&    $NewBond = $Molecule\->NewBond(%BondPropertyNamesAndValues);
.Ve
.Sp
Creates a new bond using \fIAtomPropertyNamesAndValues\fR, add its to \fIMolecule\fR, and returns
new \fBBond\fR object.
.IP "\fBSetActiveRings\fR" 4
.IX Item "SetActiveRings"
.Vb 1
\&    $Molecule\->SetActiveRings($RingsType);
.Ve
.Sp
Sets up type of detected ring sets to use during all ring related methods and returns \fIMolecule\fR.
Possible \fIRingType\fR values: \fIIndependent or All\fR. By default, \fIIndependent\fR ring set is used
during all ring methods.
.IP "\fBSetAromaticityModel\fR" 4
.IX Item "SetAromaticityModel"
.Vb 1
\&    $Molecule = $Molecule\->SetAromaticityModel($AromaticityModel);
.Ve
.Sp
Sets up \fIAromaticityModel\fR property value for \fIMolecule\fR and retrurns \fIMolecule\fR.
.IP "\fBSetValenceModel\fR" 4
.IX Item "SetValenceModel"
.Vb 1
\&    $Molecule = $Molecule\->SetValenceModel(ValenceModel);
.Ve
.Sp
Sets up \fIValenceModel\fR property value for \fIMolecule\fR and retrurns \fIMolecule\fR.
.IP "\fBStringifyMolecule\fR" 4
.IX Item "StringifyMolecule"
.Vb 1
\&    $MoleculeString = $Molecule\->StringifyMolecule();
.Ve
.Sp
Returns a string containing information about \fIMolecule\fR object
.SH "AUTHOR"
.IX Header "AUTHOR"
Manish Sud <msud@san.rr.com>
.SH "SEE ALSO"
.IX Header "SEE ALSO"
Atom.pm, Bond.pm, MoleculeFileIO.pm, MolecularFormula.pm
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright (C) 2015 Manish Sud. All rights reserved.
.PP
This file is part of MayaChemTools.
.PP
MayaChemTools is free software; you can redistribute it and/or modify it under
the terms of the \s-1GNU\s0 Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.