NAME
    EStateValuesDescriptors

SYNOPSIS
    use AtomicDescriptors::EStateValuesDescriptors;

    use AtomicDescriptors::EStateValuesDescriptors qw(:all);

DESCRIPTION
    EStateValuesDescriptors class provides the following methods:

    new, GenerateDescriptors, StringifyEStateValuesDescriptors

    EStateValuesDescriptors is derived from AtomicValues class which in turn
    is derived from ObjectProperty base class that provides methods not
    explicitly defined in EStateValuesDescriptors, AtomicValues or
    ObjectProperty classes using Perl's AUTOLOAD functionality. These
    methods are generated on-the-fly for a specified object property:

        Set<PropertyName>(<PropertyValue>);
        $PropertyValue = Get<PropertyName>();
        Delete<PropertyName>();

    For calculation of electrotopological state (E-state) values for
    non-hydrogen atoms:

    Let:

        N = Principal quantum number or period number corresponding to
            element symbol

        Sigma = Number of sigma electrons involves in bonds to hydrogen and
                non-hydrogen atoms attached to atom
              = Number of sigma bonds to hydrogen and non-hydrogen atoms
                attached to atom
        PI = Number of PI electrons involved in bonds to non-hydrogen atoms
             attached to atom
           = Number of PI bonds to non-hydrogen atoms attached to atom

        LP = Number of lone pair electrons on atom

        Zv = Number of electrons in valence shell of atom

        X = Number of non-hydrogen atom neighbors or heavy atoms attached
            to atom
        H = Number of implicit and explicit hydrogens for atom

        Delta = Number of sigma electrons involved to bonds to non-hydrogen
                atoms
        DeltaV = ValenceDelta = Number of valence shell electrons not involved
                 in bonding to hydrogen atoms

        Ii = Intrinsic state value for atom i

        DeltaIi = Sum of perturbations to intrinsic state value Ii of atom i
                  by all other atoms besides atom i

        DeltaIij = Perturbation to intrinsic state value Ii of atom i by atom j

        Dij = Graph/bond distance between atom i and j
        Rij = Dij + 1

        Si = E-state value for atom i

    Then:

        Delta = Sigma - H = X

        DeltaV = Zv - H
               = Sigma + PI + LP - H

        Ii = ( ( ( 2 / N ) ** 2 ) * DeltaV + 1 ) / Delta

        DeltaIi = SUM ( (Ii - Ij) / (Rij ** 2) ) for j = 1 to num of atoms skipping atom i

        Si = Ii + DeltaIi

    The current release of MayaChemTools doesn't support calculation of
    E-state values [ Ref 75-78 ] for hydrogens.

  METHODS
    new
            $NewEStateValuesDescriptors = new AtomicDescriptors::
                                          EStateValuesDescriptors(%NamesAndValues);

        Using specified *EStateValuesDescriptors* property names and values
        hash, new method creates a new object and returns a reference to
        newly created EStateValuesDescriptors object. By default, the
        following properties are initialized:

            Molecule = ''
            Type = 'EState'
            IgnoreHydrogens = 1

        Examples:

            $EStateValuesDescriptors = new AtomicDescriptors::EStateValuesDescriptors(
                                      'Molecule' => $Molecule,
                                      'IgnoreHydrogens' => 1);

    GenerateDescriptors
            $EStateValuesDescriptors->GenerateDescriptors();

        Calculates E-state atomic descriptors for all the atoms in a
        molecule and returns *EStateValuesDescriptors*.

    StringifyEStateValuesDescriptors
            $String = $EStateValuesDescriptors->StringifyEStateValuesDescriptors();

        Returns a string containing information about
        *EStateValuesDescriptors* object.

AUTHOR
    Manish Sud <msud@san.rr.com>

SEE ALSO
    AtomicDescriptors.pm

COPYRIGHT
    Copyright (C) 2018 Manish Sud. All rights reserved.

    This file is part of MayaChemTools.

    MayaChemTools is free software; you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation; either version 3 of the License, or (at
    your option) any later version.

