diff mayachemtools/docs/modules/man3/Atom.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/Atom.3	Wed Jan 20 11:55:01 2016 -0500
@@ -0,0 +1,1961 @@
+.\" 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 "ATOM 1"
+.TH ATOM 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"
+Atom
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+use Atom;
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBAtom\fR class provides the following methods:
+.PP
+new, AddHydrogens, Copy, DeleteAtom, DeleteHydrogens, DoesAtomNeighborhoodMatch,
+GetAtomicInvariantValue, GetAtomicWeight, GetBondToAtom, GetBonds,
+GetBondsToHeavyAtoms, GetBondsToHydrogenAtoms, GetBondsToNonHydrogenAtoms,
+GetExactMass, GetExplicitHydrogens, GetFormalCharge, GetFreeRadicalElectrons,
+GetGroupNumber, GetHeavyAtomNeighbors, GetHeavyAtomNeighborsAtomInformation,
+GetHeavyAtomNeighborsBondformation, GetHighestCommonValence,
+GetHydrogenAtomNeighbors, GetHydrogens, GetImplicitHydrogens, GetLargestBondOrder,
+GetLargestBondOrderToHeavyAtoms, GetLargestBondOrderToNonHydrogenAtoms,
+GetLargestRing, GetLowestCommonValence, GetMassNumber, GetMissingHydrogens,
+GetNeighbors, GetNeighborsUsingAtomSpecification, GetNonHydrogenAtomNeighbors,
+GetNonHydrogenAtomNeighborsAtomInformation,
+GetNonHydrogenAtomNeighborsBondInformation, GetNonHydrogenNeighborOfHydrogenAtom,
+GetNumOfAromaticBondsToHeavyAtoms, GetNumOfAromaticBondsToNonHydrogenAtoms,
+GetNumOfBondTypesToHeavyAtoms, GetNumOfBondTypesToNonHydrogenAtoms, GetNumOfBonds,
+GetNumOfBondsToHeavyAtoms, GetNumOfBondsToHydrogenAtoms,
+GetNumOfBondsToNonHydrogenAtoms, GetNumOfDoubleBondsToHeavyAtoms,
+GetNumOfBondsAvailableForHeavyAtoms, GetNumOfBondsAvailableForNonHydrogenAtoms,
+GetNumOfDoubleBondsToNonHydrogenAtoms, GetNumOfExplicitHydrogens,
+GetNumOfHeavyAtomNeighbors, GetNumOfHydrogenAtomNeighbors, GetNumOfHydrogens,
+GetNumOfImplicitHydrogens, GetNumOfMissingHydrogens, GetNumOfNeighbors,
+GetNumOfNonHydrogenAtomNeighbors, GetNumOfRings, GetNumOfRingsWithEvenSize,
+GetNumOfRingsWithOddSize, GetNumOfRingsWithSize, GetNumOfRingsWithSizeGreaterThan,
+GetNumOfRingsWithSizeLessThan, GetNumOfSigmaAndPiBondsToHeavyAtoms,
+GetNumOfSigmaAndPiBondsToNonHydrogenAtoms, GetNumOfSingleBondsToHeavyAtoms,
+GetNumOfSingleBondsToNonHydrogenAtoms, GetNumOfTripleBondsToHeavyAtoms,
+GetNumOfTripleBondsToNonHydrogenAtoms, GetPeriodNumber,
+GetPotentialTotalCommonValence, GetRings, GetRingsWithEvenSize,
+GetRingsWithOddSize, GetRingsWithSize, GetRingsWithSizeGreaterThan,
+GetRingsWithSizeLessThan, GetSizeOfLargestRing, GetSizeOfSmallestRing,
+GetSmallestRing, GetSpinMultiplicity, GetSumOfBondOrders,
+GetSumOfBondOrdersToHeavyAtoms, GetSumOfBondOrdersToHydrogenAtoms,
+GetSumOfBondOrdersToNonHydrogenAtoms, GetValence, GetValenceElectrons,
+GetValenceFreeElectrons, GetX, GetXYZ, GetXYZVector, GetY, GetZ, IsAmideCarbon,
+IsAmideNitrogen, IsAromatic, IsArsenic, IsBondedToAtom, IsBromine, IsCarbon, IsCarboxylCarbon,
+IsCarboxylOxygen, IsCarboxylateCarbon, IsCarboxylateOxygen, IsChlorine,
+IsFluorine, IsFunctionalClassType, IsGuadiniumCarbon, IsGuadiniumNitrogen,
+IsHBondAcceptor, IsHBondDonor, IsHalogen, IsHeteroAtom, IsHydrogen,
+IsHydrogenBondAcceptor, IsHydrogenBondDonor, IsHydrophobic, IsInRing,
+IsInRingOfSize, IsIodine, IsIsotope, IsLipophilic, IsMetallic,
+IsNegativelyIonizable, IsNitrogen, IsNonCarbonOrHydrogen, IsNotInRing,
+IsOnlyInOneRing, IsOxygen, IsPhosphateOxygen, IsPhosphatePhosphorus, IsPhosphorus,
+IsPolarAtom, IsPolarHydrogen, IsPositivelyIonizable, IsSaturated, IsSelenium,
+IsSilicon, IsStereoCenter, IsSulfur, IsSulphur, IsTellurium, IsTerminal,
+IsTopologicalPharmacophoreType, IsUnsaturated, SetAtomSymbol, SetAtomicNumber,
+SetExplicitHydrogens, SetMassNumber, SetStereoCenter, SetStereochemistry,
+SetX, SetXYZ, SetY, SetZ, StringifyAtom
+.PP
+\&\fBAtom\fR class is derived from \fBObjectProperty\fR base class which provides methods not explicitly
+defined in \fBAtom\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
+\&    $NewAtom = new Atom([%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, following properties are
+initialized:
+.Sp
+.Vb 5
+\&    ID = SequentialObjectID
+\&    Name = "Atom <SequentialObjectID>"
+\&    AtomSymbol = ""
+\&    AtomicNumber = 0
+\&    XYZ = ZeroVector
+.Ve
+.Sp
+Except for \fI\s-1ID\s0\fR property, all other default properties and other additional properties can
+be set during invocation of this method.
+.Sp
+Examples:
+.Sp
+.Vb 5
+\&    $Atom = new Atom();
+\&    $CarbonAtom = new Atom(\*(AqAtomSymbol\*(Aq => \*(AqC\*(Aq, \*(AqXYZ\*(Aq => (0.0, 1.0,
+\&                  0.0));
+\&    $OxygenAtom = new Atom(\*(AqAtomName\*(Aq => \*(AqOxygen\*(Aq, AtomSymbol\*(Aq => \*(AqO\*(Aq,
+\&                  \*(AqXYZ\*(Aq => (1.0, 1.0, 1.0));
+.Ve
+.IP "\fBAddHydrogens\fR" 4
+.IX Item "AddHydrogens"
+.Vb 1
+\&    $NumOfHydrogensAdded = $Atom\->AddHydrogens();
+.Ve
+.Sp
+Adds hydrogens to an \fBAtom\fR present in a \fBMolecule\fR object and returns
+the number of added hydrogens. The current release of MayaChemTools doesn't
+assign hydrogen positions.
+.IP "\fBCopy\fR" 4
+.IX Item "Copy"
+.Vb 1
+\&    $AtomCopy = $Atom\->Copy();
+.Ve
+.Sp
+Copy \fIAtom\fR and its associated data using \fBStorable::dclone\fR and return a new
+\&\fBAtom\fR object.
+.IP "\fBDeleteAtom\fR" 4
+.IX Item "DeleteAtom"
+.Vb 1
+\&    $Atom\->DeleteAtom();
+.Ve
+.Sp
+Delete \fIAtom\fR from a molecule.
+.IP "\fBDoesAtomNeighborhoodMatch\fR" 4
+.IX Item "DoesAtomNeighborhoodMatch"
+.Vb 8
+\&    $Status = $Atom\->DoesAtomNeighborhoodMatch($CentralAtomSpec);
+\&    $Status = $Atom\->DoesAtomNeighborhoodMatch($CentralAtomSpec,
+\&                              $NbrAtomSpecsRef);
+\&    $Status = $Atom\->DoesAtomNeighborhoodMatch($CentralAtomSpec,
+\&                              $NbrAtomSpecsRef, $AllowedNbrBondSpecsRef);
+\&    $Status = $Atom\->DoesAtomNeighborhoodMatch($CentralAtomSpec,
+\&                              $NbrAtomSpecsRef, $NbrBondSpecsRef,
+\&                              $AllowedNbrOfNbrAtomSpecsRef);
+.Ve
+.Sp
+Returns 1 or 0 based on whether atom matches central atom and its neighborhood
+using specified atom and bonds specifications. Neighborhood atom and bond specifications
+are specified as array references containing neighbor atom and bond specifications.
+.Sp
+Let:
+.Sp
+.Vb 2
+\&    AS = Atom symbol corresponding to element symbol, atomic number (#n)
+\&         or any atom (A)
+\&
+\&    X<n>  = Number of non\-hydrogen atom neighbors or heavy atoms
+\&            attached to atom
+\&    T<n>  = Total number of atom neighbors including implicit and explicit
+\&            hydrogens
+\&    BO<n> = Sum of bond orders to non\-hydrogen atom neighbors or heavy
+\&            atoms attached to atom
+\&    LBO<n> = Largest bond order of non\-hydrogen atom neighbors or heavy
+\&             atoms attached to atom
+\&    SB<n> = Number of single bonds to non\-hydrogen atom neighbors or
+\&            heavy atoms attached to atom
+\&    TSB<n> = Total number of single bonds to atom neighbors including implicit
+\&             and explicit hydrogens
+\&    DB<n> = Number of double bonds to non\-hydrogen atom neighbors or
+\&            heavy atoms attached to atom
+\&    TB<n> = Number of triple bonds to non\-hydrogen atom neighbors or
+\&            heavy atoms attached to atom
+\&    AB<n> = Number of aromatic bonds to non\-hydrogen atom neighbors or
+\&            heavy atoms attached to atom
+\&    H<n>   = Number of implicit and explicit hydrogens for atom
+\&    Ar     = Aromatic annotation indicating whether atom is aromatic
+\&    RA or RA<n>  = Ring atom annotation indicating whether atom
+\&                   is a ring
+\&    TR<n>  = Total number of rings containing atom
+\&    FC<+n/\-n> = Formal charge assigned to atom
+\&    MN<n> = Mass number indicating isotope other than most abundant isotope
+\&    SM<n> = Spin multiplicity of atom. Possible values: 1 (singlet),
+\&            2 (doublet) or 3 (triplet)
+.Ve
+.Sp
+Then, atom specification corresponds to:
+.Sp
+.Vb 2
+\&    AS.X<n>.T<n>.BO<n>.LBO<n>.<SB><n>.TSB<n>.<DB><n>.<TB><n>.AB<n>.H<n>.Ar.
+\&    RA<n>.TR<n>FC<+n/\-n>.MN<n>.SM<n>
+.Ve
+.Sp
+Except for \s-1AS\s0 which is a required atomic invariant in atom specification, all other atomic invariants are
+optional. For an atom specification to match an atom, the values of all specified atomic invariants must
+match. Exclamation in from of atomic invariant can be used to negate its effect during the match.
+.Sp
+For \fI\s-1FC\s0\fR value matching, the following value operators are also supported:
+.Sp
+.Vb 4
+\&    o +* : Any positive value
+\&    o \-* : Any negative value
+\&    o > ValidNumber or >= ValidNumber
+\&    o < ValidNumber or <= ValidNumber
+.Ve
+.Sp
+A comma delimited atom specification string is used to match any one of the specified atom specification.
+.Sp
+Notes:
+.Sp
+.Vb 2
+\&    o During atom specification match to an atom, the first atomic invariant is always assumed to
+\&      atom symbol.
+.Ve
+.Sp
+Examples:
+.Sp
+.Vb 5
+\&    o (\*(AqN\*(Aq, \*(AqN\*(Aq, \*(AqN\*(Aq)
+\&    o (\*(AqN.FC0\*(Aq, \*(AqN.FC0\*(Aq, \*(AqN,N.FC+1.H1\*(Aq)
+\&    o (\*(AqN.H2\*(Aq, \*(AqN.H2\*(Aq, \*(AqN.H1\*(Aq)
+\&    o (\*(AqC,N\*(Aq, \*(Aq!N\*(Aq, \*(Aq!H\*(Aq)
+\&    o (\*(AqC,N\*(Aq, \*(AqN.Ar\*(Aq, \*(AqN.R5\*(Aq)
+.Ve
+.Sp
+Let:
+.Sp
+.Vb 4
+\&    \-|1|s|Single = Single bond
+\&    =|2|d|Double = Double bond
+\&    #|3|t|Triple  = Triple bond
+\&    :|1.5|a|Ar|Aromatic = Aromatic bond
+\&
+\&    @|RB|Ring = Ring bond
+\&    ~|*|Any = Any bond
+.Ve
+.Sp
+Then, bond specification corresponds to:
+.Sp
+.Vb 3
+\&    \-.:
+\&    =.@
+\&    Double.Aromatic
+.Ve
+.Sp
+For a bond specification to match bond between two atoms, the values of all specified bond symbols must
+match. Exclamation in from of bond symbol can be used to negate its effect during the match.
+.Sp
+A comma delimited bond specification string is used to match any one of the specified atom specification.
+.Sp
+Notes:
+.Sp
+.Vb 3
+\&    o During atom neighborhood match for central atom neighborhood atom and bond specifications,
+\&      implicit or missing hydrogens are automatically checked for any matches to unmatched
+\&      specifications.
+.Ve
+.Sp
+Examples:
+.Sp
+.Vb 2
+\&    Aromatic carbon in a 5 membered ring:
+\&                              $Atom\->DoesAtomNeighborhoodMatch(\*(AqC.Ar.RA5\*(Aq);
+\&
+\&    AcetylenicCarbon: $Atom\->DoesAtomNeighborhoodMatch(\*(AqC.T2.TB1\*(Aq); or
+\&                       $Atom\->DoesAtomNeighborhoodMatch(\*(AqC.T2.TB1\*(Aq,
+\&                              [\*(Aq*\*(Aq, \*(Aq*\*(Aq], [\*(Aq#\*(Aq, \*(Aq\-\*(Aq]);
+\&
+\&    GuadiniumCarbon: $Atom\->DoesAtomNeighborhoodMatch(\*(AqC.X3.BO4\*(Aq,
+\&                              [\*(AqN.FC0\*(Aq, \*(AqN.FC0\*(Aq, \*(AqN.FC0,N.FC+1\*(Aq],
+\&                              [\*(Aq\-\*(Aq, \*(Aq\-\*(Aq, \*(Aq=\*(Aq],
+\&                              [\*(AqC,H\*(Aq, \*(AqC,H\*(Aq, \*(AqC,H\*(Aq]);
+\&
+\&    AmideCarbon: $Atom\->DoesAtomNeighborhoodMatch(\*(AqC.X3.BO4,C.X2.BO3\*(Aq,
+\&                              [\*(AqC,H\*(Aq, \*(AqO\*(Aq, \*(AqN\*(Aq],
+\&                              [\*(Aq\-\*(Aq, \*(Aq=\*(Aq, \*(Aq\-\*(Aq],
+\&                              [\*(AqC,H\*(Aq, \*(AqC\*(Aq, \*(AqC,H,N,O,S,P,F,Cl,Br,I\*(Aq]);
+\&
+\&    CarboxylCarbon: $Atom\->DoesAtomNeighborhoodMatch(\*(AqC.X3.BO4,C.X2.BO3\*(Aq,
+\&                              [\*(AqC,H\*(Aq, \*(AqO\*(Aq, \*(AqO.X1.FC0\*(Aq],
+\&                              [\*(Aq\-\*(Aq, \*(Aq=\*(Aq, \*(Aq\-\*(Aq],
+\&                              [\*(AqC,H\*(Aq, \*(AqC\*(Aq, \*(AqC\*(Aq]);
+\&
+\&    CarboxylateCarbon: $Atom\->DoesAtomNeighborhoodMatch(\*(AqC.X3.BO4,C.X2.BO3\*(Aq,
+\&                              [\*(AqC,H\*(Aq, \*(AqO\*(Aq, \*(AqO.X1.FC\-1\*(Aq],
+\&                              [\*(Aq\-\*(Aq, \*(Aq=\*(Aq, \*(Aq\-\*(Aq],
+\&                              [\*(AqC,H\*(Aq, \*(AqC\*(Aq, \*(AqC\*(Aq]);
+.Ve
+.IP "\fBDeleteHydrogens\fR" 4
+.IX Item "DeleteHydrogens"
+.Vb 1
+\&    $NumOfHydrogensDeleted = $Atom\->AddHydrogens();
+.Ve
+.Sp
+Delete hydrogens from an \fBAtom\fR present in a \fBMolecule\fR object and returns
+the number of deleted hydrogens.
+.IP "\fBGetAtomicInvariantValue\fR" 4
+.IX Item "GetAtomicInvariantValue"
+.Vb 1
+\&    $Value = $Atom\->GetAtomicInvariantValue($AtomicInvariant);
+.Ve
+.Sp
+Returns atomic invariant value for a specified \fIAtomicInvariant\fR. The current release
+of MayaChemTools supports following abbreviations and descriptive names for
+\&\fIAtomicInvarints\fR:
+.Sp
+.Vb 10
+\&    AS : Atom or element symbol
+\&    X : NumOfNonHydrogenAtomNeighbors or NumOfHeavyAtomNeighbors
+\&    T : TotalNumOfAtomNeighbors
+\&    BO : SumOfBondOrdersToNonHydrogenAtoms or SumOfBondOrdersToHeavyAtoms
+\&    LBO : LargestBondOrderToNonHydrogenAtoms or LargestBondOrderToHeavyAtoms
+\&    SB :  NumOfSingleBondsToNonHydrogenAtoms or NumOfSingleBondsToHeavyAtoms
+\&    TSB :  TotalNumOfSingleBonds
+\&    DB : NumOfDoubleBondsToNonHydrogenAtoms or NumOfDoubleBondsToHeavyAtoms
+\&    TB : NumOfTripleBondsToNonHydrogenAtoms or NumOfTripleBondsToHeavyAtoms
+\&    AB : NumOfAromaticBondsToNonHydrogenAtoms or NumOfAromaticBondsToHeavyAtoms
+\&    H :  NumOfImplicitAndExplicitHydrogens
+\&    Ar : Aromatic
+\&    Str : Stereochemistry
+\&    RA : RingAtom
+\&    FC : FormalCharge
+\&    AN : AtomicNumber
+\&    AM : AtomicMass
+\&    MN : MassNumber
+\&    SM : SpinMultiplicity
+.Ve
+.IP "\fBGetAtomicWeight\fR" 4
+.IX Item "GetAtomicWeight"
+.Vb 1
+\&    $Value = $Aom\->GetAtomicWeight();
+.Ve
+.Sp
+Returns atomic weight of an \fBAtom\fR which corresponds to either explicity set \fIAtomicWeight\fR
+atom property or atomic weight of the corresponding element in the periodic table available by
+\&\fBPeriodicTable\fR module.
+.IP "\fBGetBondToAtom\fR" 4
+.IX Item "GetBondToAtom"
+.Vb 1
+\&    $Bond = $Atom\->GetBondToAtom($OtherAtom);
+.Ve
+.Sp
+Returns a \fBBond\fR object corresponding to bond between \fIAtom\fR and \fIOtherAtom\fR in
+a molecule.
+.IP "\fBGetBonds\fR" 4
+.IX Item "GetBonds"
+.Vb 1
+\&    @Bonds = $Aoto\->GetBonds();
+.Ve
+.Sp
+Returns an array of \fBBond\fR objects corresponding to all bonds from \fIAtom\fR to other
+bonded atoms in a molecule.
+.IP "\fBGetBondsToHeavyAtoms\fR" 4
+.IX Item "GetBondsToHeavyAtoms"
+.Vb 1
+\&    @Bonds = $Atom\->GetBondsToHeavyAtoms();
+.Ve
+.Sp
+Returns an array of \fBBond\fR objects corresponding to bonds from \fIAtom\fR to other bonded
+non-hydrogen atoms in a molecule.
+.IP "\fBGetBondsToHydrogenAtoms\fR" 4
+.IX Item "GetBondsToHydrogenAtoms"
+.Vb 1
+\&    @Bonds = $Atom\->GetBondsToHydrogenAtoms();
+.Ve
+.Sp
+Returns an array of \fBBond\fR objects corresponding to bonds from \fIAtom\fR to any other
+hydrogen atom in a molecule.
+.IP "\fBGetBondsToNonHydrogenAtoms\fR" 4
+.IX Item "GetBondsToNonHydrogenAtoms"
+.Vb 1
+\&    @Bonds = $Atom\->GetBondsToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns an array of \fBBond\fR objects corresponding to bonds from \fIAtom\fR to other bonded
+non-hydrogen atoms in a molecule.
+.IP "\fBGetExactMass\fR" 4
+.IX Item "GetExactMass"
+.Vb 1
+\&    $ExactMass = $Atom\->GetExactMass();
+.Ve
+.Sp
+Returns exact mass of an \fIAtom\fR which correspond to one of these three values: explicity set
+\&\fIExactMass\fR property; mass of natural isotope for an explicty set value of \fIMassNumber\fR; most
+abundant natural isotope mass for \fIAtom\fR with valid atomic number value available by
+\&\fBPerodicTable\fR module.
+.IP "\fBGetExplicitHydrogens\fR" 4
+.IX Item "GetExplicitHydrogens"
+.Vb 1
+\&    $NumOfExplicitHydrogens = $Atom\->GetExplicitHydrogens();
+.Ve
+.Sp
+Returns number of hydrogens explicity bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetFormalCharge\fR" 4
+.IX Item "GetFormalCharge"
+.Vb 1
+\&    $FormalCharge = $Atom\->GetFormalCharge();
+.Ve
+.Sp
+Returns formal charge of an \fIAtom\fR in a molecule.
+.IP "\fBGetFreeRadicalElectrons\fR" 4
+.IX Item "GetFreeRadicalElectrons"
+.Vb 1
+\&    $FreeRadicalElectrons = $Atom\->GetFreeRadicalElectrons();
+.Ve
+.Sp
+Returns number of free radical electrons corresponding to to one of these
+three values: \fIFreeRadicalElectrons\fR property; \fISpinMultiplicity\fR property; value
+of 0.
+.Sp
+For atoms with explicit assignment of \fISpinMultiplicity\fR atom property values,
+.Sp
+.Vb 5
+\&    Singlet  \- two unparied electrons corresponding to one spin state
+\&    Doublet \- free radical; an unpaired electron corresponding to two
+\&              spin states
+\&    Triplet \- two unparied electrons corresponding to three spin states
+\&              (divalent carbon atoms: carbenes)
+.Ve
+.Sp
+\&\fBFreeRadicalElectrons\fR are calculated as follows:
+.Sp
+.Vb 3
+\&    Doublet: 1 (one valence electron not available for bonding)
+\&    Singlet: 2 (two valence electrons not available for bonding)
+\&    Triplet: 2 (two valence electrons not available for bonding)
+.Ve
+.IP "\fBGetGroupNumber\fR" 4
+.IX Item "GetGroupNumber"
+.Vb 1
+\&    $GroupNumber = $Atom\->GetGroupNumber();
+.Ve
+.Sp
+Returns group number of an \fIAtom\fR in a molecule with a valid atomic number.
+.IP "\fBGetHeavyAtomNeighbors\fR" 4
+.IX Item "GetHeavyAtomNeighbors"
+.Vb 2
+\&    $NumOfHeavyAtoms = $Atom\->GetHeavyAtomNeighbors();
+\&    @HeavyAtoms = $Atom\->GetHeavyAtomNeighbors();
+.Ve
+.Sp
+Return number of heavy atoms or an array of \fBAtom\fR objects corresponding to heavy atoms
+bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetHeavyAtomNeighborsAtomInformation\fR" 4
+.IX Item "GetHeavyAtomNeighborsAtomInformation"
+.Vb 3
+\&    ($NumOfAtomNeighbors, $AtomNeighborsRef,
+\&     $NumOfAtomNeighborsType, $AtomNeighborsTypeMapRef) = $Atom\->
+\&                              GetHeavyAtomNeighborsAtomInformation();
+.Ve
+.Sp
+Returns atoms information for all non-hydrogen atoms attached to an \fIAtom\fR
+in a molecule.
+.Sp
+The following values are returned:
+.Sp
+.Vb 6
+\&    o Number of non\-hydrogen atom neighbors
+\&    o A reference to an array containing atom objects corresponding to
+\&      non\-hydrogen atom neighbors
+\&    o Number of different types of non\-hydrogen atom neighbors
+\&    o A reference to a hash containing atom symbol as key with value
+\&      corresponding to its count for non\-hydrogen atom neighbors
+.Ve
+.IP "\fBGetHeavyAtomNeighborsBondformation\fR" 4
+.IX Item "GetHeavyAtomNeighborsBondformation"
+.Vb 4
+\&    ($NumOfBonds, $BondTypeCountMapRef,
+\&    $AtomsBondTypesCountMapRef,
+\&    $AtomsBondTypeAtomsMap) = $Atom\->
+\&                              GetHeavyAtomNeighborsBondformation();
+.Ve
+.Sp
+Returns bonds information for all non-hydrogen atoms attached to an \fIAtom\fR
+in a molecule.
+.Sp
+The following values are returned:
+.Sp
+.Vb 12
+\&    o Number of bonds to non\-hydrogen atom neighbors
+\&    o A reference to an array containing bond objects corresponding to
+\&      non\-hydrogen atom neighbors
+\&    o A reference to a hash containing bond type as key with value
+\&      corresponding to its count for non\-hydrogen atom neighbors. Bond
+\&      types are: Single, Double or Triple
+\&    o A reference to a hash containing atom symbol as key pointing to bond
+\&      type as second key with values corresponding to count of bond types for atom
+\&      symbol for non\-hydrogen atom neighbors
+\&    o A reference to a hash containing atom symbol as key pointing to bond
+\&      type as second key with values corresponding to atom objects array involved
+\&      in corresponding bond type for atom symbol for non\-hydrogen atom neighbors
+.Ve
+.IP "\fBGetHighestCommonValence\fR" 4
+.IX Item "GetHighestCommonValence"
+.Vb 1
+\&    $HighestCommonValence = $Atom\->GetHighestCommonValence();
+.Ve
+.Sp
+Returns highest common valence of an \fIAtom\fR which corresponds to either explicity set
+\&\fIHighestCommonValence\fR atom property or highest common valence of the corresponding
+element in the periodic table available by \fBPerodicTable\fR module.
+.IP "\fBGetHydrogens\fR" 4
+.IX Item "GetHydrogens"
+.Vb 1
+\&    $NumOfHydrogens = $Atom\->GetHydrogens();
+.Ve
+.Sp
+Returns total number of hydrogens for an \fIAtom\fR in a molecule including both hydrogen atom
+neighbors and implicit hydrogens.
+.IP "\fBGetHydrogenAtomNeighbors\fR" 4
+.IX Item "GetHydrogenAtomNeighbors"
+.Vb 2
+\&    $NumOfHydrogenAtomNeighbors = $Atom\->GetHydrogenAtomNeighbors();
+\&    @HydrogenAtomNeighbors = $Atom\->GetHydrogenAtomNeighbors();
+.Ve
+.Sp
+Return number of hydrogen atoms or an array of \fIAtom\fR objects corresponding to hydrogen
+atoms bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetImplicitHydrogens\fR" 4
+.IX Item "GetImplicitHydrogens"
+.Vb 1
+\&    $NumOfImplicitHydrogens = $Atom\->GetImplicitHydrogens();
+.Ve
+.Sp
+Returns number of implicit hydrogens for an \fIAtom\fR in a molecule. This value either
+corresponds to explicitly set \fIImplicitHydrogens\fR atom property or calculated as the
+difference between the value of potential total valence and sum of bond orders to
+both hydrogen and non-hydrogen atom neighbors.
+.IP "\fBGetPotentialTotalCommonValence\fR" 4
+.IX Item "GetPotentialTotalCommonValence"
+.Vb 1
+\&    $PotentialTotalValence = $Atom\->GetPotentialTotalCommonValence();
+.Ve
+.Sp
+Returns potential total common valence of an \fIAtom\fR in a molecule corresponding
+to a specific valence model set for the molecule using its \fBSetValenceModel\fR method
+or default internal valence model. It is used during the calculation of missing or
+implicit hydrogens.
+.Sp
+The current release of MayaChemTools supports three valence models: \fIMDLValenceModel,
+DaylightValenceModel, InternalValenceModel or MayaChemToolsValenceModel\fR.
+.Sp
+For \fIMDLValenceModel\fR and \fIDaylightValenceModel\fR, the following data files, distributed
+with the package, are used to calculate potential total valence:
+.Sp
+.Vb 2
+\&    lib/data/MDLValenceModelData.csv
+\&    lib/data/DaylightValenceModelData.csv
+.Ve
+.Sp
+The calculation of potential total common valence for these two models is performed as
+follows: Calculate current effective total valence of the \fIAtom\fR by adding up the bond
+order of its neighbors and number of free radical electrons; Find available common valence
+for the \fIAtom\fR, corresponding to any specified formal charge, higher than the effective
+total valence, and return it as \fIPotentialTotalValence\fR.
+.Sp
+The calculation of potential total common valence For \fIInternalValenceModel\fR or
+\&\fIMayaChenToolsValenceModel\fR doesn't uses \fBPeriodicTable\fR module to retrieve values
+for common valence, which in turn reads in PeriodicTableElements.csv file distributed with
+the package.
+.Sp
+For elements with one one common valence, potential total common valence corresponds
+to:
+.Sp
+.Vb 1
+\&    CommonValence + FormalCharge \- FreeRadicalElectrons
+.Ve
+.Sp
+For elements with multiple common valences, each common valence is used to
+calculate total potential common valence as shown above, and the first total potential
+common valence greater than the sum of bond orders to all neighbors is selected as
+the final total common valence.
+.Sp
+FormalCharge sign is reversed for electropositive elements with positive formal charge
+during common valence calculations. Electropositive elements, metals and transition elements,
+have usually plus formal charge and it leads to decrease in common valence; the negative
+formal charge should result in the decrease of common valence.
+.Sp
+The sign of formal charge is adjusted as follows.
+.Sp
+Group numbers > 14 \- Group numbers 15 (N), 16 (O), 17 (F), 18 (He):
+.Sp
+Formal charge sign is not adjusted. Positive and negative values result in the
+increase and decrease of valence.
+.Sp
+Group 14 containing C, Si, Ge, Sn, Pb...:
+.Sp
+Formal charge sign is reversed for positive values. Both positive and negative
+values result in the decrease of valence.
+.Sp
+Group 13 containing B, Al, Ga, In, Tl...:
+.Sp
+Formal charge sign is always reversed. Positive and negative values result in the
+decrease and increase of valence.
+.Sp
+Groups 1 (H) through 12 (Zn)...:
+.Sp
+Formal charge sign is reversed for positive values. Both positive and negative
+values result in the decrease of valence.
+.Sp
+Lanthanides and actinides:
+.Sp
+Formal charge sign is reversed for positive values. Both positive and negative
+values result in the decrease of valence.
+.IP "\fBGetLargestBondOrder\fR" 4
+.IX Item "GetLargestBondOrder"
+.Vb 1
+\&    $LargestBO =$Atom\->GetLargestBondOrder();
+.Ve
+.Sp
+Returns largest bond order for an \fIAtom\fR among the bonds to other atoms in a molecule.
+.IP "\fBGetLargestBondOrderToHeavyAtoms\fR" 4
+.IX Item "GetLargestBondOrderToHeavyAtoms"
+.Vb 1
+\&    $LargestBO =$Atom\->GetLargestBondOrderToHeavyAtoms();
+.Ve
+.Sp
+Returns largest bond order for an \fIAtom\fR among the bonds to other heavy atoms in a molecule.
+.IP "\fBGetLargestBondOrderToNonHydrogenAtoms\fR" 4
+.IX Item "GetLargestBondOrderToNonHydrogenAtoms"
+.Vb 1
+\&    $LargestBO =$Atom\->GetLargestBondOrderToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns largest bond order for an \fIAtom\fR among the bonds to other non-hydrogen atoms
+in a molecule.
+.IP "\fBGetLargestRing\fR" 4
+.IX Item "GetLargestRing"
+.Vb 1
+\&    @RingAtoms = $Atom\->GetLargestRing();
+.Ve
+.Sp
+Returns an array of ring \fIAtom\fR objects corresponding to the largest ring containing \fIAtom\fR
+in a molecule.
+.IP "\fBGetLowestCommonValence\fR" 4
+.IX Item "GetLowestCommonValence"
+.Vb 1
+\&    $LowestCommonValence = $Atom\->GetLowestCommonValence();
+.Ve
+.Sp
+Returns lowest common valence of an \fIAtom\fR which corresponds to either explicity set
+\&\fILowestCommonValence\fR atom property or highest common valence of the corresponding
+element in the periodic table available by \fBPerodicTable\fR module.
+.IP "\fBGetMassNumber\fR" 4
+.IX Item "GetMassNumber"
+.Vb 1
+\&    $MassNumber = $Aom\->GetMassNumber();
+.Ve
+.Sp
+Returns atomic weight of an \fBAtom\fR which corresponds to either explicity set \fIMassNumber\fR
+atom property or mass number of the most abundant natural isotope of the corresponding element
+in the periodic table available by \fBPeriodicTable\fR module.
+.IP "\fBGetMissingHydrogens\fR" 4
+.IX Item "GetMissingHydrogens"
+.Vb 1
+\&    $NumOfMissingHydrogens = $Atom\->GetMissingHydrogens();
+.Ve
+.Sp
+Returns number of missing hydrogens for an \fIAtom\fR in a molecule. This value either
+corresponds to explicitly set \fIImplicitHydrogens\fR atom property or calculated as the
+difference between the value of potential total valence and sum of bond orders to
+both hydrogen and non-hydrogen atom neighbors.
+.IP "\fBGetNeighbors\fR" 4
+.IX Item "GetNeighbors"
+.Vb 2
+\&    $NumOfNeighbors = $Atom\->GetNeighbors();
+\&    @Neighbors = $Atom\->GetNeighbors();
+.Ve
+.Sp
+Returns number of neighbor atoms or an array of \fIAtom\fR objects corresponding to all
+atoms bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetNeighborsUsingAtomSpecification\fR" 4
+.IX Item "GetNeighborsUsingAtomSpecification"
+.Vb 2
+\&    @AtomNeighbors = $Atom\->GetNeighborsUsingAtomSpecification($AtomSpec);
+\&    $NumOfNeighbors = $Atom\->GetNeighborsUsingAtomSpecification($AtomSpec);
+\&
+\&    @AtomNeighbors = $Atom\->GetNeighborsUsingAtomSpecification($AtomSpec,
+\&                     @ExcludeNeighbors);
+.Ve
+.Sp
+Returns number of neighbor atoms or an array of \fIAtom\fR objects matching atom
+specification corresponding to atom neighbors of an \fIAtom\fR in a molecule. Optionally,
+\&\fIAtom\fR neighbors can be excluded from the neighbors list using \fIExcludeNeighbors\fR.
+.Sp
+Notes:
+.Sp
+.Vb 3
+\&    o AtomSpecification correspond to any valid AtomicInvariant based atomic specifications
+\&      as supported by DoesAtomNeighborhoodMatch method
+\&    o Multiple atom specifications can be used in a string delimited by comma
+.Ve
+.IP "\fBGetNonHydrogenAtomNeighbors\fR" 4
+.IX Item "GetNonHydrogenAtomNeighbors"
+.Vb 2
+\&    $NumOfNeighbors = $Atom\->GetNonHydrogenAtomNeighbors();
+\&    @Neighbors = $Atom\->GetNonHydrogenAtomNeighbors();
+.Ve
+.Sp
+Returns number of non-hydrogen atoms or an array of \fBAtom\fR objects corresponding to non-hydrogen
+atoms bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetNonHydrogenAtomNeighborsAtomInformation\fR" 4
+.IX Item "GetNonHydrogenAtomNeighborsAtomInformation"
+.Vb 3
+\&    ($NumOfAtomNeighbors, $AtomNeighborsRef,
+\&     $NumOfAtomNeighborsType, $AtomNeighborsTypeMapRef) = $Atom\->
+\&                              GetNonHydrogenAtomNeighborsAtomInformation();
+.Ve
+.Sp
+Returns atoms information for all non-hydrogen atoms attached to an \fIAtom\fR
+in a molecule.
+.Sp
+The following values are returned:
+.Sp
+.Vb 6
+\&    o Number of non\-hydrogen atom neighbors
+\&    o A reference to an array containing atom objects corresponding to
+\&      non\-hydrogen atom neighbors
+\&    o Number of different types of non\-hydrogen atom neighbors
+\&    o A reference to a hash containing atom symbol as key with value
+\&      corresponding to its count for non\-hydrogen atom neighbors
+.Ve
+.IP "\fBGetNonHydrogenAtomNeighborsBondInformation\fR" 4
+.IX Item "GetNonHydrogenAtomNeighborsBondInformation"
+.Vb 4
+\&    ($NumOfBonds, $BondTypeCountMapRef,
+\&    $AtomsBondTypesCountMapRef,
+\&    $AtomsBondTypeAtomsMap) = $Atom\->
+\&                              GetNonHydrogenAtomNeighborsBondInformation();
+.Ve
+.Sp
+Returns bonds information for all non-hydrogen atoms attached to an \fIAtom\fR
+in a molecule.
+.Sp
+The following values are returned:
+.Sp
+.Vb 12
+\&    o Number of bonds to non\-hydrogen atom neighbors
+\&    o A reference to an array containing bond objects corresponding to
+\&      non\-hydrogen atom neighbors
+\&    o A reference to a hash containing bond type as key with value
+\&      corresponding to its count for non\-hydrogen atom neighbors. Bond
+\&      types are: Single, Double or Triple
+\&    o A reference to a hash containing atom symbol as key pointing to bond
+\&      type as second key with values corresponding to count of bond types for atom
+\&      symbol for non\-hydrogen atom neighbors
+\&    o A reference to a hash containing atom symbol as key pointing to bond
+\&      type as second key with values corresponding to atom objects array involved
+\&      in corresponding bond type for atom symbol for non\-hydrogen atom neighbors
+.Ve
+.IP "\fBGetNonHydrogenNeighborOfHydrogenAtom\fR" 4
+.IX Item "GetNonHydrogenNeighborOfHydrogenAtom"
+.Vb 1
+\&    $Atom = $Atom\->GetNonHydrogenNeighborOfHydrogenAtom();
+.Ve
+.Sp
+Returns non-hydrogen or heavy atom neighbor of a hydrogen atom in a molecule..
+.IP "\fBGetNumOfAromaticBondsToHeavyAtoms\fR" 4
+.IX Item "GetNumOfAromaticBondsToHeavyAtoms"
+.Vb 1
+\&    $NumOfBonds = $Atom\->GetNumOfAromaticBondsToHeavyAtoms();
+.Ve
+.Sp
+Returns number of aromatic bonds from an \fIAtom\fR to other non-hydrogen or heavy atoms in
+a molecule.
+.IP "\fBGetNumOfAromaticBondsToNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfAromaticBondsToNonHydrogenAtoms"
+.Vb 1
+\&    $NumOfBonds = $Atom\->GetNumOfAromaticBondsToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns number of aromatic bonds from an \fIAtom\fR to other non-hydrogen or heavy atoms in
+a molecule.
+.IP "\fBGetNumOfBonds\fR" 4
+.IX Item "GetNumOfBonds"
+.Vb 1
+\&    $NumOfBonds = $Atom\->GetNumOfBonds();
+.Ve
+.Sp
+Returns number of bonds from an \fIAtom\fR to other atoms in a molecule.
+.IP "\fBGetNumOfBondsAvailableForHeavyAtoms\fR" 4
+.IX Item "GetNumOfBondsAvailableForHeavyAtoms"
+.Vb 1
+\&    $NumOfBonds = $Atom\->GetNumOfBondsAvailableForHeavyAtoms();
+.Ve
+.Sp
+Get number of bonds available to form additional bonds with heavy atoms, excluding
+any implicit bonds to hydrogens set using \fIImplicitHydrogens\fR property.
+.Sp
+It's different from number of implicit or missing hydrogens, both of which are equivalent.
+.Sp
+For example, in a \s-1SMILES\s0 string, [nH] ring atom corresponds to an aromatic nitrogen.
+Although the hydrogen specified for n is treated internally as implicit hydrogen and shows
+up in missing hydrogen count, it's not available to participate in double bonds to additional
+heavy atoms.
+.IP "\fBGetNumOfBondsAvailableForNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfBondsAvailableForNonHydrogenAtoms"
+.Vb 1
+\&    $NumOfBonds = $Atom\->GetNumOfBondsAvailableForNonHydrogenAtoms();
+.Ve
+.Sp
+Get number of bonds available to form additional bonds with heavy atoms, excluding
+any implicit bonds to hydrogens set using ImplicitHydrogens property.
+.IP "\fBGetNumOfBondsToHeavyAtoms\fR" 4
+.IX Item "GetNumOfBondsToHeavyAtoms"
+.Vb 1
+\&    $NumOfBondsToHeavyAtoms = $Atom\->GetNumOfBondsToHeavyAtoms();
+.Ve
+.Sp
+Returns number of bonds from an \fIAtom\fR to other heavy atoms in a molecule.
+.IP "\fBGetNumOfBondsToHydrogenAtoms\fR" 4
+.IX Item "GetNumOfBondsToHydrogenAtoms"
+.Vb 1
+\&    $NumOfBonds = $Atom\->GetNumOfBondsToHydrogenAtoms();
+.Ve
+.Sp
+Returns number of bonds from an \fIAtom\fR to other hydrogen atoms in a molecule.
+.IP "\fBGetNumOfBondsToNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfBondsToNonHydrogenAtoms"
+.Vb 1
+\&    $NumOfBonds = $Atom\->GetNumOfBondsToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns number of bonds from an \fIAtom\fR to other non-hydrogen atoms in a molecule.
+.IP "\fBGetNumOfBondTypesToHeavyAtoms\fR" 4
+.IX Item "GetNumOfBondTypesToHeavyAtoms"
+.Vb 3
+\&    ($NumOfSingleBonds, $NumOfDoubleBonds,
+\&     $NumOfTripleBonds, $NumOfAromaticBonds) = $Atom\->
+\&                   GetNumOfBondTypesToHeavyAtoms($CountAromaticBonds);
+.Ve
+.Sp
+Get number of single, double, triple, and aromatic bonds from an \fIAtom\fR to all other
+non-hydrogen atoms in a molecule.
+.Sp
+Value of \fICountAtomaticBonds\fR parameter controls whether number of aromatic
+bonds is returned; default is not to count aromatic bonds. During  counting of
+aromatic bonds, the bond marked aromatic is not included in the count
+of other bond types.
+.IP "\fBGetNumOfBondTypesToNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfBondTypesToNonHydrogenAtoms"
+.Vb 3
+\&    ($NumOfSingleBonds, $NumOfDoubleBonds,
+\&     $NumOfTripleBonds, $NumOfAromaticBonds) = $Atom\->
+\&             GetNumOfBondTypesToNonHydrogenAtoms($CountAromaticBonds);
+.Ve
+.Sp
+Get number of single, double, triple, and aromatic bonds from an \fIAtom\fR to all other
+non-hydrogen atoms in a molecule.
+.Sp
+Value of \fICountAtomaticBonds\fR parameter controls whether number of aromatic
+bonds is returned; default is not to count aromatic bonds. During  counting of
+aromatic bonds, the bond marked aromatic is not included in the count
+of other bond types.
+.IP "\fBGetNumOfDoubleBondsToHeavyAtoms\fR" 4
+.IX Item "GetNumOfDoubleBondsToHeavyAtoms"
+.Vb 1
+\&    $NumOfDoubleBonds = $Atom\->GetNumOfDoubleBondsToHeavyAtoms();
+.Ve
+.Sp
+Returns number of double bonds from an \fIAtom\fR to other heavy atoms or non-hydrogen
+atoms in a molecule.
+.IP "\fBGetNumOfDoubleBondsToNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfDoubleBondsToNonHydrogenAtoms"
+.Vb 1
+\&    $NumOfDoubleBonds =$Atom\->GetNumOfDoubleBondsToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns number of double bonds from an \fIAtom\fR to other heavy atoms or non-hydrogen
+atoms in a molecule.
+.IP "\fBGetNumOfHeavyAtomNeighbors\fR" 4
+.IX Item "GetNumOfHeavyAtomNeighbors"
+.Vb 1
+\&    $NumOfNeighbors = $Atom\->GetNumOfHeavyAtomNeighbors();
+.Ve
+.Sp
+Returns number heavy atom neighbors for an \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfHydrogenAtomNeighbors\fR" 4
+.IX Item "GetNumOfHydrogenAtomNeighbors"
+.Vb 1
+\&    $NumOfNeighbors = $Atom\->GetNumOfHydrogenAtomNeighbors();
+.Ve
+.Sp
+Returns number hydrogens atom neighbors for an \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfMissingHydrogens\fR" 4
+.IX Item "GetNumOfMissingHydrogens"
+.Vb 1
+\&    $NumOfMissingHydrogens = $Atom\->GetNumOfMissingHydrogens();
+.Ve
+.Sp
+Returns number of implicit hydrogens for an \fIAtom\fR in a molecule. This value either
+corresponds to explicitly set \fIImplicitHydrogens\fR atom property or calculated as the
+difference between the value of potential total valence and sum of bond orders to
+both hydrogen and non-hydrogen atom neighbors.
+.IP "\fBGetNumOfExplicitHydrogens\fR" 4
+.IX Item "GetNumOfExplicitHydrogens"
+.Vb 1
+\&    $NumOfExplicitHydrogens = $Atom\->GetNumOfExplicitHydrogens();
+.Ve
+.Sp
+Returns number hydrogens atom neighbors for an \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfHydrogens\fR" 4
+.IX Item "GetNumOfHydrogens"
+.Vb 1
+\&    $NumOfHydrogens = $Atom\->GetNumOfHydrogens();
+.Ve
+.Sp
+Returns total number of hydrogens for an \fIAtom\fR in a molecule including both hydrogen atom
+neighbors and implicit hydrogens.
+.IP "\fBGetNumOfImplicitHydrogens\fR" 4
+.IX Item "GetNumOfImplicitHydrogens"
+.Vb 1
+\&    $NumOfImplicitHydrogens = $Atom\->GetNumOfImplicitHydrogens();
+.Ve
+.Sp
+Returns number of implicit hydrogens for an \fIAtom\fR in a molecule. This value either
+corresponds to explicitly set \fIImplicitHydrogens\fR atom property or calculated as the
+difference between the value of potential total valence and sum of bond orders to
+both hydrogen and non-hydrogen atom neighbors.
+.IP "\fBGetNumOfNeighbors\fR" 4
+.IX Item "GetNumOfNeighbors"
+.Vb 1
+\&    $NumOfNeighbors = $Atom\->GetNumOfNeighbors();
+.Ve
+.Sp
+Returns number atom neighbors for an \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfNonHydrogenAtomNeighbors\fR" 4
+.IX Item "GetNumOfNonHydrogenAtomNeighbors"
+.Vb 1
+\&    $NumNeighbors = $This\->GetNumOfNonHydrogenAtomNeighbors();
+.Ve
+.Sp
+Returns number non-hydrogens atom neighbors for an \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfRings\fR" 4
+.IX Item "GetNumOfRings"
+.Vb 1
+\&    $NumOfRings = $Atom\->GetNumOfRings();
+.Ve
+.Sp
+Returns number of rings containing \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfRingsWithEvenSize\fR" 4
+.IX Item "GetNumOfRingsWithEvenSize"
+.Vb 1
+\&    $NumOfRings = $Atom\->GetNumOfRingsWithEvenSize();
+.Ve
+.Sp
+Returns number of rings with even size containing \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfRingsWithOddSize\fR" 4
+.IX Item "GetNumOfRingsWithOddSize"
+.Vb 1
+\&    $NumOfRings = $Atom\->GetNumOfRingsWithOddSize();
+.Ve
+.Sp
+Returns number of rings with odd size containing \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfRingsWithSize\fR" 4
+.IX Item "GetNumOfRingsWithSize"
+.Vb 1
+\&    $NumOfRings = $Atom\->GetNumOfRingsWithSize($RingSize);
+.Ve
+.Sp
+Returns number of rings with specific \fIRingSize\fR containing \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfRingsWithSizeGreaterThan\fR" 4
+.IX Item "GetNumOfRingsWithSizeGreaterThan"
+.Vb 1
+\&    $NumOfRings = $Atom\->GetNumOfRingsWithSizeGreaterThan($RingSize);
+.Ve
+.Sp
+Returns number of rings with size greater than specific \fIRingSize\fR containing \fIAtom\fR
+in a molecule.
+.IP "\fBGetNumOfRingsWithSizeLessThan\fR" 4
+.IX Item "GetNumOfRingsWithSizeLessThan"
+.Vb 1
+\&    $NumOfRings = $Atom\->GetNumOfRingsWithSizeLessThan($RingSize);
+.Ve
+.Sp
+Returns number of rings with size less than specific \fIRingSize\fR containing \fIAtom\fR in a molecule.
+.IP "\fBGetNumOfSigmaAndPiBondsToHeavyAtoms\fR" 4
+.IX Item "GetNumOfSigmaAndPiBondsToHeavyAtoms"
+.Vb 2
+\&    ($NumOfSigmaBonds, $NumOfPiBonds) = $Atom\->
+\&                              GetNumOfSigmaAndPiBondsToHeavyAtoms();
+.Ve
+.Sp
+Get number of sigma and pi bonds from an \fIAtom\fR to all other non-hydrogen
+atoms in a molecule.
+.Sp
+Sigma and pi bonds are counted using the following methodology: a single bond
+correspond to one sigma bond; a double bond contributes one to sigma bond count
+and one to pi bond count; a triple bond contributes one to sigma bond count and
+two to pi bond count.
+.IP "\fBGetNumOfSigmaAndPiBondsToNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfSigmaAndPiBondsToNonHydrogenAtoms"
+.Vb 2
+\&    ($NumOfSigmaBonds, $NumOfPiBonds) = $Atom\->
+\&                              GetNumOfSigmaAndPiBondsToNonHydrogenAtoms();
+.Ve
+.Sp
+Get number of sigma and pi bonds from an \fIAtom\fR to all other non-hydrogen
+atoms in a molecule.
+.Sp
+Sigma and pi bonds are counted using the following methodology: a single bond
+correspond to one sigma bond; a double bond contributes one to sigma bond count
+and one to pi bond count; a triple bond contributes one to sigma bond count and
+two to pi bond count.
+.IP "\fBGetNumOfSingleBondsToNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfSingleBondsToNonHydrogenAtoms"
+.Vb 1
+\&    $NumOfSingleBonds =$Atom\->GetNumOfSingleBondsToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns number of single bonds from an \fIAtom\fR to other heavy atoms or non-hydrogen
+atoms in a molecule.
+.IP "\fBGetNumOfSingleBondsToHeavyAtoms\fR" 4
+.IX Item "GetNumOfSingleBondsToHeavyAtoms"
+.Vb 1
+\&    $NumOfSingleBonds = $Atom\->GetNumOfSingleBondsToHeavyAtoms();
+.Ve
+.Sp
+Returns number of single bonds from an \fIAtom\fR to other heavy atoms or non-hydrogen
+atoms in a molecule.
+.IP "\fBGetNumOfTripleBondsToNonHydrogenAtoms\fR" 4
+.IX Item "GetNumOfTripleBondsToNonHydrogenAtoms"
+.Vb 1
+\&    $NumOfTripleBonds =$Atom\->GetNumOfTripleBondsToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns number of triple bonds from an \fIAtom\fR to other heavy atoms or non-hydrogen
+atoms in a molecule.
+.IP "\fBGetNumOfTripleBondsToHeavyAtoms\fR" 4
+.IX Item "GetNumOfTripleBondsToHeavyAtoms"
+.Vb 1
+\&    $NumOfTripleBonds = $Atom\->GetNumOfTripleBondsToHeavyAtoms();
+.Ve
+.Sp
+Returns number of triple bonds from an \fIAtom\fR to other heavy atoms or non-hydrogen
+atoms in a molecule.
+.IP "\fBGetPeriodNumber\fR" 4
+.IX Item "GetPeriodNumber"
+.Vb 1
+\&    $PeriodNumber = $Atom\->GetPeriodNumber();
+.Ve
+.Sp
+Returns periodic table period number for an \fIAtom\fR in a molecule with a valid atomic number .
+.IP "\fBGetRings\fR" 4
+.IX Item "GetRings"
+.Vb 1
+\&    @Rings = $Aotm\->GetRings();
+.Ve
+.Sp
+Returns an array of references to arrays containing ring atoms corressponding to all rings containing
+\&\fIAtom\fR in a molecule.
+.IP "\fBGetRingsWithEvenSize\fR" 4
+.IX Item "GetRingsWithEvenSize"
+.Vb 1
+\&    @Rings = $Aotm\->GetRingsWithEvenSize();
+.Ve
+.Sp
+Returns an array of references to arrays containing ring atoms corressponding to all rings with even size
+containing \fIAtom\fR in a molecule.
+.IP "\fBGetRingsWithOddSize\fR" 4
+.IX Item "GetRingsWithOddSize"
+.Vb 1
+\&    @Rings = $Aotm\->GetRingsWithOddSize();
+.Ve
+.Sp
+Returns an array of references to arrays containing ring atoms corressponding to all rings with odd size
+containing \fIAtom\fR in a molecule.
+.IP "\fBGetRingsWithSize\fR" 4
+.IX Item "GetRingsWithSize"
+.Vb 1
+\&    @Rings = $Aotm\->GetRingsWithSize($RingSize);
+.Ve
+.Sp
+Returns an array of references to arrays containing ring atoms corressponding to all rings with specific
+\&\fIRingSize \fRcontaining \fIAtom\fR in a molecule.
+.IP "\fBGetRingsWithSizeGreaterThan\fR" 4
+.IX Item "GetRingsWithSizeGreaterThan"
+.Vb 1
+\&    @Rings = $Aotm\->GetRingsWithSizeGreaterThan($RingSize);
+.Ve
+.Sp
+Returns an array of references to arrays containing ring atoms corressponding to all rings with size
+greater than specific \fIRingSize \fRcontaining \fIAtom\fR in a molecule.
+.IP "\fBGetRingsWithSizeLessThan\fR" 4
+.IX Item "GetRingsWithSizeLessThan"
+.Vb 1
+\&    @Rings = $Aotm\->GetRingsWithSizeLessThan($RingSize);
+.Ve
+.Sp
+Returns an array of references to arrays containing ring atoms corressponding to all rings with size
+less than specific \fIRingSize \fRcontaining \fIAtom\fR in a molecule.
+.IP "\fBGetSizeOfLargestRing\fR" 4
+.IX Item "GetSizeOfLargestRing"
+.Vb 1
+\&    $Size = $Atom\->GetSizeOfLargestRing();
+.Ve
+.Sp
+Returns size of the largest ring containing \fIAtom\fR in a molecule.
+.IP "\fBGetSizeOfSmallestRing\fR" 4
+.IX Item "GetSizeOfSmallestRing"
+.Vb 1
+\&    $Size = $Atom\->GetSizeOfSmallestRing();
+.Ve
+.Sp
+Returns size of the smallest ring containing \fIAtom\fR in a molecule.
+.IP "\fBGetSmallestRing\fR" 4
+.IX Item "GetSmallestRing"
+.Vb 1
+\&    @RingAtoms = $Atom\->GetSmallestRing();
+.Ve
+.Sp
+Returns an array of ring \fIAtom\fR objects corresponding to the largest ring containing \fIAtom\fR
+in a molecule.
+.IP "\fBGetSpinMultiplicity\fR" 4
+.IX Item "GetSpinMultiplicity"
+.Vb 1
+\&    $SpinMultiplicity = $Atom\->GetSpinMultiplicity();
+.Ve
+.Sp
+Returns spin multiplicity of an \fIAtom\fR corresponding to one of these three
+values: explicitly set \fBSpinMultiplicity\fR property value; calculated from
+\&\fBFreeRadicalElectrons\fR property; value of 0.
+.Sp
+The \fBSpinMultiplicity\fR is calculate from \fIFreeRadicalElectrons\fR property as
+follows:
+.Sp
+.Vb 3
+\&    FreeRadicalElectrons: 1; SpinMultiplicity: 2
+\&    FreeRadicalElectrons: 2; SpinMultiplicity: 1
+\&    FreeRadicalElectrons: other; SpinMultiplicity: 0
+.Ve
+.IP "\fBGetSumOfBondOrders\fR" 4
+.IX Item "GetSumOfBondOrders"
+.Vb 1
+\&    $SumBondOrders = $Atom\->GetSumOfBondOrders();
+.Ve
+.Sp
+Returns sum of bond orders corresponding to all atoms bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetSumOfBondOrdersToHeavyAtoms\fR" 4
+.IX Item "GetSumOfBondOrdersToHeavyAtoms"
+.Vb 1
+\&    $SumBondOrders = $Atom\->GetSumOfBondOrdersToHeavyAtoms();
+.Ve
+.Sp
+Returns sum of bond orders corresponding to all heavy atoms bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetSumOfBondOrdersToHydrogenAtoms\fR" 4
+.IX Item "GetSumOfBondOrdersToHydrogenAtoms"
+.Vb 1
+\&    $SumBondOrders = $Atom\->GetSumOfBondOrdersToHydrogenAtoms();
+.Ve
+.Sp
+Returns sum of bond orders corresponding to all hydrogen atoms bonded to an \fIAtom\fR in a molecule.
+.IP "\fBGetSumOfBondOrdersToNonHydrogenAtoms\fR" 4
+.IX Item "GetSumOfBondOrdersToNonHydrogenAtoms"
+.Vb 1
+\&    $SumBondOrders = $Atom\->GetSumOfBondOrdersToNonHydrogenAtoms();
+.Ve
+.Sp
+Returns sum of bond orders corresponding to all non-hydrogen atoms bonded to an \fIAtom\fR
+in a molecule.
+.IP "\fBGetValence\fR" 4
+.IX Item "GetValence"
+.Vb 1
+\&    $Valence = $Atom\->GetValence();
+.Ve
+.Sp
+Returns valence of an \fIAtom\fR in a molecule. Valence corresponds to number of electrons used
+by an atom in bonding:
+.Sp
+.Vb 1
+\&    Valence = ValenceElectrons \- ValenceFreeElectrons = BondingElectrons
+.Ve
+.Sp
+Single, double and triple bonds with bond orders of 1, 2, and 3 correspond to
+contribution of 1, 2, and 3 bonding electrons. So:
+.Sp
+.Vb 1
+\&    Valence = SumOfBondOrders + NumOfMissingHydrogens + FormalCharge
+.Ve
+.Sp
+where positive and negative values of FormalCharge increase and decrease the number of bonding
+electrons, respectively.
+.Sp
+The current release of MayaChemTools supports the following three valence models, which
+are used during calculation of implicit hydrogens: MDLValenceModel, DaylightValenceModel,
+InternalValenceModel or MayaChemToolsValenceModel.
+.Sp
+Notes:
+.Sp
+.Vb 10
+\&    . Missing hydrogens are included in the valence.
+\&    . For neutral molecules, valence and sum of bond orders are equal.
+\&    . For molecules containing only single bonds, SumOfBondOrders and
+\&      NumOfBonds are equal.
+\&    . Free radical electrons lead to the decrease in valence. For atoms with
+\&      explicit assignment of SpinMultiplicity property values corresponding to
+\&      Singlet (two unparied electrons corresponding to one spin state), Doublet
+\&      (free radical; an unpaired electron corresponding to two spin states),
+\&      and Triplet (two unparied electrons corresponding to three spin states;
+\&      divalent carbon atoms (carbenes)), FreeRadicalElectrons are calculated as follows:
+\&
+\&       SpinMultiplicity: Doublet(2); FreeRadicalElectrons: 1 (one valence
+\&           electron not available for bonding)
+\&       SpinMultiplicity: Singlet(1)/Triplet(3); FreeRadicalElectrons: 2 (two
+\&           valence electrons not available for bonding)
+.Ve
+.IP "\fBGetValenceElectrons\fR" 4
+.IX Item "GetValenceElectrons"
+.Vb 1
+\&    $ValenceElectrons = $Atom\->GetValenceElectrons();
+.Ve
+.Sp
+Returns valence electrons for an \fBAtom\fR which corresponds to either explicity set \fIValenceElectrons\fR
+atom property or valence electrons for the corresponding element in the periodic table available by
+\&\fBPeriodicTable\fR module.
+.IP "\fBGetValenceFreeElectrons\fR" 4
+.IX Item "GetValenceFreeElectrons"
+.Vb 3
+\&    $ValenceFreeElectrons = $Atom\->GetValenceFreeElectrons();
+\&    $ValenceFreeElectrons = $Atom\->GetValenceFreeElectrons(
+\&                            $ExcludeFreeRadicalElectrons);
+.Ve
+.Sp
+Returns valence frees electrons for an \fBAtom\fR in a molecule. It corresponds to:
+.Sp
+.Vb 3
+\&    ValenceElectrons \- Valence
+\&    or
+\&    ValenceElectrons \- NumOfMissingHydrogens \- SumOfBondOrders \- FormalCharge
+.Ve
+.Sp
+Free radical electrons are included in the valence free electrons count by default.
+.Sp
+Examples:
+.Sp
+.Vb 6
+\&    NH3: ValenceFreeElectrons = 5 \- 3 = 5 \- 3 \- 0 \- 0 = 2
+\&    NH2: ValenceFreeElectrons = 5 \- 3 = 5 \- 2 \- 1 \- 0 = 2
+\&    NH4+; ValenceFreeElectrons = 5 \- 5 = 5 \- 4 \- 0 \- 1 = 0
+\&    NH3+; ValenceFreeElectrons = 5 \- 5 = 5 \- 3 \- 1 \- 1 = 0
+\&    C(=O)O\- : ValenceFreeElectrons on O\- = 6 \- 0 = 6 \- 1 \- 0 \- (\-1) = 6
+\&    C(=O)O\- : ValenceFreeElectrons on =O = 6 \- 2 = 6 \- 2 \- 0 \- 0 = 4
+.Ve
+.IP "\fBGetX\fR" 4
+.IX Item "GetX"
+.Vb 1
+\&    $X = $Atom\->GetX();
+.Ve
+.Sp
+Returns value of X\-coordinate for an \fIAtom\fR.
+.IP "\fBGetXYZ\fR" 4
+.IX Item "GetXYZ"
+.Vb 2
+\&    @XYZ = $Atom\->GetXYZ();
+\&    $XYZRef = $Atom\->GetXYZ();
+.Ve
+.Sp
+Returns an array or a reference to an array containing values for \fIAtom\fR coordinates.
+.IP "\fBGetXYZVector\fR" 4
+.IX Item "GetXYZVector"
+.Vb 1
+\&    $XYZVector = $Atom\->GetXYZVector();
+.Ve
+.Sp
+Returns a \fIVector\fR object containing values for \fIAtom\fR coordinates
+.IP "\fBGetY\fR" 4
+.IX Item "GetY"
+.Vb 1
+\&    $Y = $Atom\->GetY();
+.Ve
+.Sp
+Returns value of Y\-coordinate for an \fIAtom\fR.
+.IP "\fBGetZ\fR" 4
+.IX Item "GetZ"
+.Vb 1
+\&    $Z = $Atom\->GetZ();
+.Ve
+.Sp
+Returns value of Z\-coordinate for an \fIAtom\fR.
+.IP "\fBIsAmideCarbon\fR" 4
+.IX Item "IsAmideCarbon"
+.Vb 1
+\&    $Status = $Atom\->IsAmideCarbon();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's amide carbon \fIAtom\fR.
+.Sp
+An amide group is defineds as:
+.Sp
+.Vb 1
+\&    R\-C(=O)\-N(\-R\*(Aq)\-R\*(Aq\*(Aq
+.Ve
+.Sp
+where:
+.Sp
+.Vb 5
+\&    o R = Hydrogen or groups of atoms attached through carbon
+\&    o R\*(Aq = Hydrogens or groups of atoms attached through carbon or
+\&           hetro atoms
+\&    o R\*(Aq\*(Aq = Hydrogens or groups of atoms attached through carbon or
+\&           hetro atoms
+.Ve
+.IP "\fBIsAmideNitrogen\fR" 4
+.IX Item "IsAmideNitrogen"
+.Vb 1
+\&    $Status = $Atom\->IsAmideNitrogen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's amide nitrogen \fIAtom\fR.
+.IP "\fBIsAromatic\fR" 4
+.IX Item "IsAromatic"
+.Vb 1
+\&    $Status = $Atom\->IsAromatic();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's an aromatic \fIAtom\fR.
+.IP "\fBIsArsenic\fR" 4
+.IX Item "IsArsenic"
+.Vb 1
+\&    $Status = $Atom\->IsArsenic();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's an arsenic \fIAtom\fR.
+.IP "\fBIsBondedToAtom\fR" 4
+.IX Item "IsBondedToAtom"
+.Vb 1
+\&    $Status = $Atom\->IsBondedToAtom($OtherAtom);
+.Ve
+.Sp
+Returns 1 or 0 based on whether \fIAtom\fR is bonded to \fIOtherAtom\fR.
+.IP "\fBIsBromine\fR" 4
+.IX Item "IsBromine"
+.Vb 1
+\&    $Status = $Atom\->IsBromine();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a bromine \fIAtom\fR.
+.IP "\fBIsCarbon\fR" 4
+.IX Item "IsCarbon"
+.Vb 1
+\&    $Status = $Atom\->IsCarbon();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a carbon \fIAtom\fR.
+.IP "\fBIsCarboxylCarbon\fR" 4
+.IX Item "IsCarboxylCarbon"
+.Vb 1
+\&    $Status = $Atom\->IsCarboxylCarbon();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a carboxyl carbon atom in carboxyl group:
+R\-C(=O)\-OH.
+.IP "\fBIsCarboxylOxygen\fR" 4
+.IX Item "IsCarboxylOxygen"
+.Vb 1
+\&    $Status = $Atom\->IsCarboxylOxygen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a carboxyl oxygen atom in carboxyl group:
+R\-C(=O)\-OH.
+.IP "\fBIsCarboxylateCarbon\fR" 4
+.IX Item "IsCarboxylateCarbon"
+.Vb 1
+\&    $Status = $Atom\->IsCarboxylateCarbon();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a carboxylate carbon atom in carboxyl group:
+R\-C(=O)\-O\-.
+.IP "\fBIsCarboxylateOxygen\fR" 4
+.IX Item "IsCarboxylateOxygen"
+.Vb 1
+\&    $Status = $Atom\->IsCarboxylateOxygen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a carboxylate oxygen atom in carboxyl group:
+R\-C(=O)\-O\-.
+.IP "\fBIsChlorine\fR" 4
+.IX Item "IsChlorine"
+.Vb 1
+\&    $Status = $Atom\->IsChlorine();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a chlorine \fIAtom\fR.
+.IP "\fBIsFluorine\fR" 4
+.IX Item "IsFluorine"
+.Vb 1
+\&    $Status = $Atom\->IsFluorine();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a fluorine \fIAtom\fR.
+.IP "\fBIsFunctionalClassType\fR" 4
+.IX Item "IsFunctionalClassType"
+.Vb 1
+\&    $Status =$Atom\->IsFunctionalClassType($Type);
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a specified functional class \fIType\fR.
+.Sp
+The current release of MayaChemTools supports following abbreviations and descriptive
+names for \fIFunctionalClassType\fR:
+.Sp
+.Vb 9
+\&    HBD: HydrogenBondDonor
+\&    HBA: HydrogenBondAcceptor
+\&    PI :  PositivelyIonizable
+\&    NI : NegativelyIonizable
+\&    Ar : Aromatic
+\&    Hal : Halogen
+\&    H : Hydrophobic
+\&    RA : RingAtom
+\&    CA : ChainAtom
+.Ve
+.Sp
+The following definitions are used to determine functional class types: [ Ref 60\-61, Ref 65\-66 ]:
+.Sp
+.Vb 4
+\&    HydrogenBondDonor: NH, NH2, OH
+\&    HydrogenBondAcceptor: N[!H], O
+\&    PositivelyIonizable: +, NH2
+\&    NegativelyIonizable: \-, C(=O)OH, S(=O)OH, P(=O)OH
+.Ve
+.IP "\fBIsGuadiniumCarbon\fR" 4
+.IX Item "IsGuadiniumCarbon"
+.Vb 1
+\&    $Status = $Atom\->IsGuadiniumCarbon();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a guadinium carbon in guadinium group by
+checking its neighbors for a nitrogen in guadinium group.
+.IP "\fBIsGuadiniumNitrogen\fR" 4
+.IX Item "IsGuadiniumNitrogen"
+.Vb 1
+\&    $Status = $Atom\->IsGuadiniumNitrogen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a guadinium nitrogen in guadinium group.
+.Sp
+A guadinium group is defined as:
+.Sp
+.Vb 1
+\&    R2N\-C(=NR)\-(NR2) or R2N\-C(=NR2+)\-(NR2)
+.Ve
+.Sp
+where:
+.Sp
+.Vb 3
+\&    o R = Hydrogens or group of atoms attached through carbon
+\&    o Only one of the three nitrogens has a double bond to carbon
+\&      and has optional formal charge allowing it to be neutral or charged state
+.Ve
+.IP "\fBIsHBondAcceptor\fR" 4
+.IX Item "IsHBondAcceptor"
+.Vb 2
+\&    $Status =$Atom\->IsHBondAcceptor();
+\&    $Status =$Atom\->IsHBondAcceptor($HydrogenBondsType);
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a hydrogen bond acceptor \fIAtom\fR.
+.IP "\fBIsHBondDonor\fR" 4
+.IX Item "IsHBondDonor"
+.Vb 2
+\&    $Status =$Atom\->IsHBondDonor();
+\&    $Status =$Atom\->IsHBondDonor($HydrogenBondsType);
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a hydrogen bond donor \fIAtom\fR.
+.IP "\fBIsHydrogenBondAcceptor\fR" 4
+.IX Item "IsHydrogenBondAcceptor"
+.Vb 2
+\&    $Status =$Atom\->IsHydrogenBondAcceptor();
+\&    $Status =$Atom\->IsHydrogenBondAcceptor($HydrogenBondsType);
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a hydrogen bond acceptor \fIAtom\fR.
+.IP "\fBIsHydrogenBondDonor\fR" 4
+.IX Item "IsHydrogenBondDonor"
+.Vb 2
+\&    $Status =$Atom\->IsHydrogenBondDonor();
+\&    $Status =$Atom\->IsHydrogenBondDonor($HydrogenBondsType);
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a hydrogen bond donor \fIAtom\fR.
+.Sp
+The current release of MayaChemTools supports identification of two types of hydrogen bond
+donor and acceptor atoms with these names:
+.Sp
+.Vb 2
+\&    HBondsType1 or HydrogenBondsType1
+\&    HBondsType2 or HydrogenBondsType2
+.Ve
+.Sp
+The names of these hydrogen bond types are rather arbitrary. However, their definitions have
+specific meaning and are as follows:
+.Sp
+.Vb 1
+\&    HydrogenBondsType1 [ Ref 60\-61, Ref 65\-66 ]:
+\&
+\&        Donor: NH, NH2, OH \- Any N and O with available H
+\&        Acceptor: N[!H], O \- Any N without available H and any O
+\&
+\&    HydrogenBondsType2 [ Ref 91 ]:
+\&
+\&        Donor: NH, NH2, OH \- N and O with available H
+\&        Acceptor: N, O \- And N and O
+.Ve
+.Sp
+By default, \fIHydrogenBondsType1\fR is used to calculate number hydrogen bond donor
+and acceptor atoms. \fIHydrogenBondsType2\fR corresponds to \fBRuleOf5\fR definition
+of hydrogen bond donors and acceptors.
+.IP "\fBIsHalogen\fR" 4
+.IX Item "IsHalogen"
+.Vb 1
+\&    $Status =$Atom\->IsHalogen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a halogen \fIAtom\fR.
+.IP "\fBIsHeteroAtom\fR" 4
+.IX Item "IsHeteroAtom"
+.Vb 1
+\&    $Status = $Atom\->IsHeteroAtom();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a hetro \fIAtom\fR. Following atoms are considered hetro atoms:
+\&\fBN, O, F, P, S, Cl, Br, I\fR.
+.IP "\fBIsHydrogen\fR" 4
+.IX Item "IsHydrogen"
+.Vb 1
+\&    $Status = $Atom\->IsHydrogen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a hydrogen \fIAtom\fR.
+.IP "\fBIsHydrophobic\fR" 4
+.IX Item "IsHydrophobic"
+.Vb 1
+\&    $Status =$Atom\->IsHydrophobic();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a hydrophobic \fIAtom\fR.
+.IP "\fBIsInRing\fR" 4
+.IX Item "IsInRing"
+.Vb 1
+\&    $Status = $Atom\->IsInRing();
+.Ve
+.Sp
+Returns 1 or 0 based on whether \fIAtom\fR is present in a ring.
+.IP "\fBIsInRingOfSize\fR" 4
+.IX Item "IsInRingOfSize"
+.Vb 1
+\&    $Status = $Atom\->IsInRingOfSize($Size);
+.Ve
+.Sp
+Returns 1 or 0 based on whether \fIAtom\fR is present in a ring of specific \fISize\fR.
+.IP "\fBIsIodine\fR" 4
+.IX Item "IsIodine"
+.Vb 1
+\&    $Status = $Atom\->IsIodine();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's an iodine \fIAtom\fR.
+.IP "\fBIsIsotope\fR" 4
+.IX Item "IsIsotope"
+.Vb 1
+\&    $Status =$Atom\->IsIsotope();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's an isotope \fIAtom\fR.
+.IP "\fBIsLipophilic\fR" 4
+.IX Item "IsLipophilic"
+.Vb 1
+\&    $Status =$Atom\->IsLipophilic();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a lipophilic \fIAtom\fR.
+.IP "\fBIsMetallic\fR" 4
+.IX Item "IsMetallic"
+.Vb 1
+\&    $Status = $Atom\->IsMetallic();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a metallic \fIAtom\fR.
+.IP "\fBIsNegativelyIonizable\fR" 4
+.IX Item "IsNegativelyIonizable"
+.Vb 1
+\&    $Status =$Atom\->IsNegativelyIonizable();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a negatively ionizable atom \fIAtom\fR.
+.IP "\fBIsNitrogen\fR" 4
+.IX Item "IsNitrogen"
+.Vb 1
+\&    $Status = $Atom\->IsNitrogen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a nitrogen \fIAtom\fR.
+.IP "\fBIsNonCarbonOrHydrogen\fR" 4
+.IX Item "IsNonCarbonOrHydrogen"
+.Vb 1
+\&    $Status =$Atom\->IsNonCarbonOrHydrogen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's not a carbon or hydrogen \fIAtom\fR.
+.IP "\fBIsNotInRing\fR" 4
+.IX Item "IsNotInRing"
+.Vb 1
+\&    $Status = $Atom\->IsNotInRing();
+.Ve
+.Sp
+Returns 1 or 0 based on whether \fIAtom\fR is not present in a ring.
+.IP "\fBIsOnlyInOneRing\fR" 4
+.IX Item "IsOnlyInOneRing"
+.Vb 1
+\&    $Status = $Atom\->IsOnlyInOneRing();
+.Ve
+.Sp
+Returns 1 or 0 based on whether \fIAtom\fR is only present in one ring.
+.IP "\fBIsOxygen\fR" 4
+.IX Item "IsOxygen"
+.Vb 1
+\&    $Status = $Atom\->IsOxygen();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's an oxygen \fIAtom\fR.
+.IP "\fBIsPhosphorus\fR" 4
+.IX Item "IsPhosphorus"
+.Vb 1
+\&    $Status = $Atom\->IsPhosphorus();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a phosphorus \fIAtom\fR.
+.IP "\fBIsPhosphateOxygen\fR" 4
+.IX Item "IsPhosphateOxygen"
+.Vb 1
+\&    $Status = $Atom\->IsPhosphateOxygen();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a phosphate oxygen in phosphate group.
+.Sp
+A phosphate group is defined as:
+.Sp
+.Vb 1
+\&    AO\-(O=)P(\-OA)\-OA
+.Ve
+.Sp
+Where:
+.Sp
+.Vb 1
+\&   A \- Any group of atoms including hydrogens
+.Ve
+.IP "\fBIsPhosphatePhosphorus\fR" 4
+.IX Item "IsPhosphatePhosphorus"
+.Vb 1
+\&    $Status = $Atom\->IsPhosphatePhosphorus();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a phosphate phosphorus in phosphate group.
+.IP "\fBIsPolarAtom\fR" 4
+.IX Item "IsPolarAtom"
+.Vb 1
+\&    $Status = $Atom\->IsPolarAtom();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a polar \fIAtom\fR. Following atoms are considered polar atoms:
+\&\fBN, O, P, S\fR.
+.IP "\fBIsPolarHydrogen\fR" 4
+.IX Item "IsPolarHydrogen"
+.Vb 1
+\&    $Status = $Atom\->IsPolarHydrogen();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a hydrogen \fIAtom\fR bonded to a polar atom.
+.IP "\fBIsPositivelyIonizable\fR" 4
+.IX Item "IsPositivelyIonizable"
+.Vb 1
+\&    $Status =$Atom\->IsPositivelyIonizable();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a positively ionizable \fIAtom\fR.
+.IP "\fBIsSaturated\fR" 4
+.IX Item "IsSaturated"
+.Vb 1
+\&    $Status = $Atom\->IsSaturated();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's a saturated \fIAtom\fR. An atom attached
+to other atoms with only single bonds is considered a saturated atom.
+.IP "\fBIsSelenium\fR" 4
+.IX Item "IsSelenium"
+.Vb 1
+\&    $Status = $Atom\->IsSelenium();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a selenium \fIAtom\fR.
+.IP "\fBIsStereoCenter\fR" 4
+.IX Item "IsStereoCenter"
+.Vb 1
+\&    $Status = $Atom\->IsStereoCenter();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's marked as a stero center \fIAtom\fR by explicit setting
+of \fIStereoCenter\fR atom propert to value of \fI1\fR.
+.IP "\fBIsSilicon\fR" 4
+.IX Item "IsSilicon"
+.Vb 1
+\&    $Status = $Atom\->IsSilicon();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a silicon \fIAtom\fR.
+.IP "\fBIsSulfur\fR" 4
+.IX Item "IsSulfur"
+.Vb 1
+\&    $Status = $Atom\->IsSulfur();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a sulfur \fIAtom\fR.
+.IP "\fBIsSulphur\fR" 4
+.IX Item "IsSulphur"
+.Vb 1
+\&    $Status = $Atom\->IsSulphur();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a sulfur \fIAtom\fR.
+.IP "\fBIsTellurium\fR" 4
+.IX Item "IsTellurium"
+.Vb 1
+\&    $Status = $Atom\->IsTellurium();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a tellurium \fIAtom\fR.
+.IP "\fBIsTerminal\fR" 4
+.IX Item "IsTerminal"
+.Vb 1
+\&    $Status = $Atom\->IsTerminal();
+.Ve
+.Sp
+Returns 0 or 1 based on whether it's a terminal \fIAtom\fR attached to no
+more than one non-hydrogen atom.
+.IP "\fBIsUnsaturated\fR" 4
+.IX Item "IsUnsaturated"
+.Vb 1
+\&    $Status = $Atom\->IsUnsaturated();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's as unsaturated \fIAtom\fR. An atom attached
+to other atoms with at least one non-single bond is considered an unsaturated atom.
+.IP "\fBIsTopologicalPharmacophoreType\fR" 4
+.IX Item "IsTopologicalPharmacophoreType"
+.Vb 1
+\&    $Status =$Atom\->IsTopologicalPharmacophoreType();
+.Ve
+.Sp
+Returns 1 or 0 based on whether it's any of the supportyed topological pharmacophore
+\&\fIAtom\fR type. See \fIIsFunctionalClassType\fR for a list of supported types.
+.IP "\fBSetAtomSymbol\fR" 4
+.IX Item "SetAtomSymbol"
+.Vb 1
+\&    $Atom\->SetAtomSymbol($AtomicSymbol);
+.Ve
+.Sp
+Sets atom symbol for \fIAtom\fR and returns \fIAtom\fR object. The appropriate atomic number is also
+set automatically.
+.IP "\fBSetAtomicNumber\fR" 4
+.IX Item "SetAtomicNumber"
+.Vb 1
+\&    $Atom\->SetAtomicNumber($AtomicNumber);
+.Ve
+.Sp
+Sets atomic number for \fIAtom\fR and returns \fIAtom\fR object. The appropriate atom symbol is also
+set automatically.
+.IP "\fBSetMassNumber\fR" 4
+.IX Item "SetMassNumber"
+.Vb 1
+\&    $Atom\->SetMassNumber($MassNumber);
+.Ve
+.Sp
+Sets mass number for \fIAtom\fR and returns \fIAtom\fR object.
+.IP "\fBSetStereoCenter\fR" 4
+.IX Item "SetStereoCenter"
+.Vb 1
+\&    $Atom\->SetStereoCenter($StereoCenter);
+.Ve
+.Sp
+Sets stereo center for \fIAtom\fR and returns \fIAtom\fR object.
+.IP "\fBSetStereochemistry\fR" 4
+.IX Item "SetStereochemistry"
+.Vb 1
+\&    $Atom\->SetStereochemistry($Stereochemistry);
+.Ve
+.Sp
+Sets stereo chemistry for \fIAtom\fR and returns \fIAtom\fR object.
+.IP "\fBSetX\fR" 4
+.IX Item "SetX"
+.Vb 1
+\&    $Atom\->SetX($Value);
+.Ve
+.Sp
+Sets X\-coordinate value for \fIAtom\fR and returns \fIAtom\fR object.
+.IP "\fBSetXYZ\fR" 4
+.IX Item "SetXYZ"
+.Vb 3
+\&    $Atom\->SetXYZ(@XYZValues);
+\&    $Atom\->SetXYZ($XYZValuesRef);
+\&    $Atom\->SetXYZ($XYZVector);
+.Ve
+.Sp
+Sets \fIAtom\fR coordinates using an array, reference to an array or a \fIVector\fR object and
+returns \fIAtom\fR object.
+.IP "\fBSetY\fR" 4
+.IX Item "SetY"
+.Vb 1
+\&    $Atom\->SetY($Value);
+.Ve
+.Sp
+Sets Y\-coordinate value for \fIAtom\fR and returns \fIAtom\fR object.
+.IP "\fBSetZ\fR" 4
+.IX Item "SetZ"
+.Vb 1
+\&    $Atom\->SetZ($Value);
+.Ve
+.Sp
+Sets Z\-coordinate value for \fIAtom\fR and returns \fIAtom\fR object.
+.IP "\fBStringifyAtom\fR" 4
+.IX Item "StringifyAtom"
+.Vb 1
+\&    $AtomString = $Atom\->StringifyAtom();
+.Ve
+.Sp
+Returns a string containing information about \fIAtom\fR object.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Manish Sud <msud@san.rr.com>
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+Bond.pm, Molecule.pm, MoleculeFileIO.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.