diff mayachemtools/docs/modules/man3/Molecule.3 @ 0:73ae111cf86f draft

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 11:55:01 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mayachemtools/docs/modules/man3/Molecule.3	Wed Jan 20 11:55:01 2016 -0500
@@ -0,0 +1,1270 @@
+.\" 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.