annotate mayachemtools/lib/AtomicDescriptors/EStateValuesDescriptors.pm @ 2:dfff2614510e draft

Deleted selected files
author deepakjadmin
date Wed, 20 Jan 2016 12:15:15 -0500
parents 73ae111cf86f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1 package AtomicDescriptors::EStateValuesDescriptors;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
2 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: EStateValuesDescriptors.pm,v $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:49 $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.16 $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
6 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
8 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
10 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
12 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
17 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
22 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
27 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
28
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
32 use Scalar::Util ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
33 use Matrix;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
34 use Constants;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
35 use TextUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
36 use MathUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
37 use StatisticsUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
38 use Atom;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
39 use Molecule;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
40 use AtomicDescriptors::AtomicDescriptors;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
41
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
42 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
43
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
44 @ISA = qw(AtomicDescriptors::AtomicDescriptors Exporter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
45 @EXPORT = qw();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
46 @EXPORT_OK = qw();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
47
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
48 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
49
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
50 # Setup class variables...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
51 my($ClassName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
52 _InitializeClass();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
53
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
54 # Overload Perl functions...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
55 use overload '""' => 'StringifyEStateValuesDescriptors';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
56
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
57 # Class constructor...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
58 sub new {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
59 my($Class, %NamesAndValues) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
60
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
61 # Initialize object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
62 my $This = $Class->SUPER::new();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
63 bless $This, ref($Class) || $Class;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
64 $This->_InitializeEStateValuesDescriptors();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
65
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
66 $This->_InitializeEStateValuesDescriptorsProperties(%NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
67
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
68 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
69 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
70
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
71 # Initialize class ...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
72 sub _InitializeClass {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
73 #Class name...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
74 $ClassName = __PACKAGE__;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
75 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
76
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
77
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
78 # Initialize object data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
79 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
80 sub _InitializeEStateValuesDescriptors {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
81 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
82
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
83 # Type of AtomicDescriptor...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
84 $This->{Type} = 'EStateValue';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
85
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
86 # Intrinsic state values calculated for non-hydrogen atom...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
87 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
88 %{$This->{IStateValues}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
89
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
90 # Calculatetion of E-state values for types for hydrogens is not supported...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
91 $This->{IgnoreHydrogens} = 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
92
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
93 # Perturbation to intrinsic state values of atoms corresponding to all non-hydrogen
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
94 # atom pairs...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
95 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
96 %{$This->{DeltaIStateMatrix}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
97
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
98 # E-state values calculated for non-hydrogen atoms...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
99 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
100 %{$This->{EStateValues}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
101
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
102 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
103 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
104
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
105 # Initialize object properties...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
106 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
107 sub _InitializeEStateValuesDescriptorsProperties {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
108 my($This, %NamesAndValues) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
109
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
110 my($Name, $Value, $MethodName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
111 while (($Name, $Value) = each %NamesAndValues) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
112 $MethodName = "Set${Name}";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
113 $This->$MethodName($Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
114 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
115
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
116 # Make sure molecule object was specified...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
117 if (!exists $NamesAndValues{Molecule}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
118 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying molecule...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
119 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
120
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
121 # Intialize atomic descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
122 $This->_InitializeDescriptorValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
123
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
124 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
125 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
126
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
127 # Disable change of ignore hydrogens...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
128 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
129 sub SetIgnoreHydrogens {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
130 my($This, $IgnoreHydrogens) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
131
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
132 carp "Warning: ${ClassName}->SetIgnoreHydrogens: Ignore hydrogens value can't be changed: It's not supported...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
133
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
134 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
135 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
136
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
137 # Generate electrotopological state (E-state) values [ Ref 75-78 ] for all atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
138 # in the molecule...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
139 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
140 # Calculation of E-state values for non-hydrogen atoms:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
141 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
142 # Let:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
143 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
144 # N = Principal quantum number or period number corresponding to element symbol
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
145 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
146 # Sigma = Number of sigma electrons involves in bonds to hydrogen and non-hydrogen atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
147 # attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
148 # = Number of sigma bonds to hydrogen and non-hydrogen atoms attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
149 # PI = Number of PI electrons involved in bonds to non-hydrogen atoms attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
150 # = Number of PI bonds to non-hydrogen atoms attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
151 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
152 # LP = Number of lone pair electrons on atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
153 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
154 # Zv = Number of electrons in valence shell of atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
155 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
156 # X = Number of non-hydrogen atom neighbors or heavy atoms attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
157 # H = Number of implicit and explicit hydrogens for atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
158 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
159 # Delta = Number of sigma electrons involved to bonds to non-hydrogen atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
160 # DeltaV = ValenceDelta = Number of valence shell electrons not involved in bonding to hydrogen atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
161 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
162 # Ii = Intrinsic state value for atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
163 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
164 # DeltaIi = Sum of perturbations to intrinsic state value Ii of atom i by all other atoms besides atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
165 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
166 # DeltaIij = Perturbation to intrinsic state value Ii of atom i by atom j
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
167 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
168 # Dij = Graph/bond distance between atom i and j
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
169 # Rij = Dij + 1
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
170 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
171 # Si = E-state value for atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
172 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
173 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
174 # Then:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
175 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
176 # Delta = Sigma - H = X
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
177 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
178 # DeltaV = Zv - H
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
179 # = Sigma + PI + LP - H
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
180 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
181 # Ii = ( ( ( 2 / N ) ** 2 ) * DeltaV + 1 ) / Delta
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
182 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
183 # Si = Ii + DeltaIi
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
184 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
185 # DeltaIij = (Ii - Ij) / (Rij ** 2) for j not equal to i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
186 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
187 # DeltaIji = - DeltaIij
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
188 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
189 # DeltaIi = SUM ( (Ii - Ij) / (Rij ** 2) ) for j = 1 to num of atoms skipping atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
190 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
191 # Methodology:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
192 # . Calculate intrinsic state values for atoms.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
193 # . Generate a distance matrix.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
194 # . Use distance matrix to calculate DeltaIij matrix with each row i containing
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
195 # DeltaIij values corresponding to perturbation to intrinsic state value of atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
196 # i by atom j.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
197 # . Calculate E-state values using DeltaIij matrix.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
198 # . Assign E-state values to atoms.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
199 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
200 # Notes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
201 # . The current release of MayaChemTools doesn't support calculation of Hydrogen
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
202 # E-state values.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
203 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
204 sub GenerateDescriptors {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
205 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
206
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
207 # Cache appropriate molecule data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
208 $This->_SetupMoleculeDataCache();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
209
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
210 # Generate distance matrix...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
211 if (!$This->_SetupDistanceMatrix()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
212 carp "Warning: ${ClassName}->GenerateDescriptors: E-state values description generation didn't succeed: Couldn't generate a distance matrix...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
213 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
214 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
215
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
216 # Calculate EState values..
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
217 if (!$This->_CalculateEStateValuesDescriptors()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
218 carp "Warning: ${ClassName}->GenerateDescriptors: E-state values description generation didn't succeed: Couldn't calculate IState values for all atoms...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
219 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
220 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
221
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
222 # Set final descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
223 $This->_SetFinalValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
224
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
225 # Clear cached molecule data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
226 $This->_ClearMoleculeDataCache();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
227
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
228 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
229 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
230
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
231 # Calculate E-state values for non-hydrogen atoms...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
232 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
233 sub _CalculateEStateValuesDescriptors {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
234 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
235 my($DeltaIStateMatrix, $NumOfRows, $NumOfCols, $RowIndex, $AtomID, $EStateValue, $IStateValue, $DeltaIStateValue, @DeltaIStateMatrixRowValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
236
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
237 %{$This->{EStateValues}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
238
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
239 # Calculate intrinsic state values for non-hydrogen atoms...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
240 if (!$This->_CalculateIStateValues()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
241 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
242 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
243
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
244 # Calculate delta intrinsic state matrix for non-hydrogen atoms...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
245 $This->_CalculateDeltaIStateMatrix();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
246
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
247 # Get DeltaIState matrix information...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
248 $DeltaIStateMatrix = $This->{DeltaIStateMatrix};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
249 ($NumOfRows, $NumOfCols) = $DeltaIStateMatrix->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
250
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
251 # Calculate EState values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
252 ROWINDEX: for $RowIndex (0 .. ($NumOfRows - 1) ) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
253 $AtomID = $This->{AtomIndexToID}{$RowIndex};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
254 if ( !(exists($This->{IStateValues}{$AtomID})) ) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
255 next ROWINDEX;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
256 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
257 $IStateValue = $This->{IStateValues}{$AtomID};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
258
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
259 @DeltaIStateMatrixRowValues = $DeltaIStateMatrix->GetRowValues($RowIndex);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
260 $DeltaIStateValue = StatisticsUtil::Sum(\@DeltaIStateMatrixRowValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
261
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
262 $EStateValue = $IStateValue + $DeltaIStateValue;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
263
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
264 $This->{EStateValues}{$AtomID} = $EStateValue;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
265 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
266 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
267 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
268
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
269 # Calculate intrinsic state values for non-hydrogen atoms...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
270 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
271 sub _CalculateIStateValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
272 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
273 my($Atom, $AtomID);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
274
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
275 %{$This->{IStateValues}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
276
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
277 ATOM: for $Atom (@{$This->{Atoms}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
278 # Irrespective of IgoreHydrogens value, just ignore hydrogens...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
279 if ($Atom->IsHydrogen()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
280 next ATOM;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
281 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
282 $AtomID = $Atom->GetID();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
283 $This->{IStateValues}{$AtomID} = $This->_CalculateIStateValue($Atom);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
284 if (!defined($This->{IStateValues}{$AtomID})) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
285 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
286 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
287 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
288 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
289 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
290
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
291 # Calculation intrinsic state value for non-hydrogen...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
292 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
293 sub _CalculateIStateValue {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
294 my($This, $Atom) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
295 my($IStateValue, $Delta, $DeltaV, $PeriodNumber);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
296
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
297 $PeriodNumber = $Atom->GetPeriodNumber();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
298 ($Delta, $DeltaV) = $This->_GetDeltaValues($Atom);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
299
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
300 if (!(defined($Delta) && defined($PeriodNumber) && defined($DeltaV))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
301 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
302 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
303
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
304 $IStateValue = ($PeriodNumber && $Delta) ? (((2/$PeriodNumber)**2)*$DeltaV + 1)/$Delta : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
305
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
306 return $IStateValue;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
307 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
308
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
309 # Get Delta and DeltaV values for atom...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
310 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
311 sub _GetDeltaValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
312 my($This, $Atom) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
313 my($Delta, $DeltaV, $ValenceElectrons, $NumOfHydrogens);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
314
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
315 ($Delta, $DeltaV) = (undef, undef);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
316
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
317 $ValenceElectrons = $Atom->GetValenceElectrons();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
318 $NumOfHydrogens = $Atom->GetAtomicInvariantValue('H');
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
319
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
320 $Delta = $Atom->GetAtomicInvariantValue('X');
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
321 if (defined($ValenceElectrons) && defined($NumOfHydrogens)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
322 $DeltaV = $ValenceElectrons - $NumOfHydrogens;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
323 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
324
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
325 return ($Delta, $DeltaV);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
326 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
327
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
328 # Calculate DeltaIState matrix for atoms with each row i containing DeltaIij values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
329 # corresponding atom atoms i and j.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
330 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
331 # Notes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
332 # . Matrix elements corresponding to hydrogen atoms or unconnected
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
333 # are assigned zero value.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
334 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
335 sub _CalculateDeltaIStateMatrix {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
336 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
337 my($DistanceMatrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $AtomID1, $AtomID2, $DeltaIStateMatrix, $IStateValue1, $IStateValue2, $GraphDistance, $DeltaIState12, $DeltaIState21, $SkipIndexCheck);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
338
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
339 # Get distance matrix information...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
340 $DistanceMatrix = $This->{DistanceMatrix};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
341 ($NumOfRows, $NumOfCols) = $DistanceMatrix->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
342
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
343 # Initialize DeltaIState matrix...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
344 $This->{DeltaIStateMatrix} = new Matrix($NumOfRows, $NumOfCols);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
345 $DeltaIStateMatrix = $This->{DeltaIStateMatrix};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
346
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
347 $SkipIndexCheck = 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
348
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
349 # Calculate DeltaIState matrix values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
350 ROWINDEX: for $RowIndex (0 .. ($NumOfRows - 1) ) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
351 $AtomID1 = $This->{AtomIndexToID}{$RowIndex};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
352 if (!exists($This->{IStateValues}{$AtomID1})) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
353 next ROWINDEX;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
354 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
355 $IStateValue1 = $This->{IStateValues}{$AtomID1};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
356
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
357 COLINDEX: for $ColIndex (($RowIndex + 1) .. ($NumOfCols - 1) ) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
358 $AtomID2 = $This->{AtomIndexToID}{$ColIndex};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
359 if (!exists($This->{IStateValues}{$AtomID2})) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
360 next COLINDEX;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
361 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
362 $IStateValue2 = $This->{IStateValues}{$AtomID2};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
363
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
364 # Make sure it's a connected atom...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
365 $GraphDistance = $DistanceMatrix->GetValue($RowIndex, $ColIndex, $SkipIndexCheck);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
366 if ($GraphDistance >= BigNumber) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
367 next COLINDEX;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
368 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
369
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
370 $DeltaIState12 = ($IStateValue1 - $IStateValue2)/(($GraphDistance + 1)**2);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
371 $DeltaIState21 = -$DeltaIState12;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
372
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
373 # Set DeltaIState values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
374 $DeltaIStateMatrix->SetValue($RowIndex, $ColIndex, $DeltaIState12, $SkipIndexCheck);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
375 $DeltaIStateMatrix->SetValue($ColIndex, $RowIndex, $DeltaIState21, $SkipIndexCheck);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
376 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
377 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
378 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
379
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
380 # Setup distance matrix...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
381 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
382 sub _SetupDistanceMatrix {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
383 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
384
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
385 $This->{DistanceMatrix} = $This->GetMolecule()->GetDistanceMatrix();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
386
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
387 if (!defined($This->{DistanceMatrix})) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
388 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
389 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
390
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
391 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
392 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
393
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
394 # Setup final descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
395 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
396 sub _SetFinalValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
397 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
398 my($Atom, $AtomID, $EStateValue);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
399
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
400 ATOM: for $Atom (@{$This->{Atoms}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
401 $AtomID = $Atom->GetID();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
402 if (!exists $This->{EStateValues}{$AtomID}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
403 next ATOM;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
404 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
405 $EStateValue = $This->{EStateValues}{$AtomID};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
406 $This->SetDescriptorValue($Atom, $EStateValue);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
407 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
408
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
409 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
410 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
411
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
412 # Cache appropriate molecule data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
413 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
414 sub _SetupMoleculeDataCache {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
415 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
416
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
417 # Get all atoms including hydrogens to correctly map atom indicies to atom IDs for
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
418 # usage of distance matrix.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
419 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
420 @{$This->{Atoms}} = $This->GetMolecule()->GetAtoms();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
421
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
422 # Get all atom IDs...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
423 my(@AtomIDs);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
424 @AtomIDs = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
425 @AtomIDs = map { $_->GetID() } @{$This->{Atoms}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
426
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
427 # Set AtomIndex to AtomID hash...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
428 %{$This->{AtomIndexToID}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
429 @{$This->{AtomIndexToID}}{ (0 .. $#AtomIDs) } = @AtomIDs;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
430
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
431 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
432 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
433
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
434 # Clear cached molecule data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
435 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
436 sub _ClearMoleculeDataCache {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
437 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
438
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
439 @{$This->{Atoms}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
440
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
441 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
442 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
443
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
444 # Return a string containg data for EStateValuesDescriptors object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
445 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
446 sub StringifyEStateValuesDescriptors {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
447 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
448 my($EStateValuesDescriptorsString);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
449
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
450 # Type of AtomicValues...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
451 $EStateValuesDescriptorsString = "AtomicDescriptorType: $This->{Type}; IgnoreHydrogens: " . ($This->{IgnoreHydrogens} ? "Yes" : "No");
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
452
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
453 # Setup atomic descriptor information...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
454 my($AtomID, $DescriptorValue, @DescriptorValuesInfo, %DescriptorValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
455
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
456 @DescriptorValuesInfo = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
457 %DescriptorValues = $This->GetDescriptorValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
458
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
459 for $AtomID (sort { $a <=> $b } keys %DescriptorValues) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
460 $DescriptorValue = $DescriptorValues{$AtomID};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
461 $DescriptorValue = (TextUtil::IsEmpty($DescriptorValue) || $DescriptorValue =~ /^None$/i) ? 'None' : MathUtil::round($DescriptorValue, 3) + 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
462 push @DescriptorValuesInfo, "$AtomID:$DescriptorValue";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
463 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
464 $EStateValuesDescriptorsString .= "; AtomIDs:EStateValuesDescriptors: <" . TextUtil::JoinWords(\@DescriptorValuesInfo, ", ", 0) . ">";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
465
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
466 return $EStateValuesDescriptorsString;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
467 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
468
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
469 # Is it a EStateValuesDescriptors object?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
470 sub _IsEStateValuesDescriptors {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
471 my($Object) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
472
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
473 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
474 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
475
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
476 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
477
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
478 __END__
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
479
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
480 =head1 NAME
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
481
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
482 EStateValuesDescriptors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
483
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
484 =head1 SYNOPSIS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
485
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
486 use AtomicDescriptors::EStateValuesDescriptors;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
487
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
488 use AtomicDescriptors::EStateValuesDescriptors qw(:all);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
489
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
490 =head1 DESCRIPTION
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
491
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
492 B<EStateValuesDescriptors> class provides the following methods:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
493
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
494 new, GenerateDescriptors, StringifyEStateValuesDescriptors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
495
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
496 B<EStateValuesDescriptors> is derived from B<AtomicValues> class which in turn
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
497 is derived from B<ObjectProperty> base class that provides methods not explicitly defined
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
498 in B<EStateValuesDescriptors>, B<AtomicValues> or B<ObjectProperty> classes using Perl's
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
499 AUTOLOAD functionality. These methods are generated on-the-fly for a specified object property:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
500
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
501 Set<PropertyName>(<PropertyValue>);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
502 $PropertyValue = Get<PropertyName>();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
503 Delete<PropertyName>();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
504
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
505 For calculation of electrotopological state (E-state) values for non-hydrogen atoms:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
506
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
507 Let:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
508
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
509 N = Principal quantum number or period number corresponding to
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
510 element symbol
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
511
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
512 Sigma = Number of sigma electrons involves in bonds to hydrogen and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
513 non-hydrogen atoms attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
514 = Number of sigma bonds to hydrogen and non-hydrogen atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
515 attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
516 PI = Number of PI electrons involved in bonds to non-hydrogen atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
517 attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
518 = Number of PI bonds to non-hydrogen atoms attached to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
519
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
520 LP = Number of lone pair electrons on atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
521
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
522 Zv = Number of electrons in valence shell of atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
523
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
524 X = Number of non-hydrogen atom neighbors or heavy atoms attached
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
525 to atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
526 H = Number of implicit and explicit hydrogens for atom
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
527
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
528 Delta = Number of sigma electrons involved to bonds to non-hydrogen
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
529 atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
530 DeltaV = ValenceDelta = Number of valence shell electrons not involved
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
531 in bonding to hydrogen atoms
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
532
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
533 Ii = Intrinsic state value for atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
534
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
535 DeltaIi = Sum of perturbations to intrinsic state value Ii of atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
536 by all other atoms besides atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
537
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
538 DeltaIij = Perturbation to intrinsic state value Ii of atom i by atom j
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
539
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
540 Dij = Graph/bond distance between atom i and j
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
541 Rij = Dij + 1
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
542
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
543 Si = E-state value for atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
544
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
545 Then:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
546
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
547 Delta = Sigma - H = X
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
548
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
549 DeltaV = Zv - H
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
550 = Sigma + PI + LP - H
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
551
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
552 Ii = ( ( ( 2 / N ) ** 2 ) * DeltaV + 1 ) / Delta
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
553
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
554 DeltaIi = SUM ( (Ii - Ij) / (Rij ** 2) ) for j = 1 to num of atoms skipping atom i
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
555
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
556 Si = Ii + DeltaIi
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
557
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
558 The current release of MayaChemTools doesn't support calculation of E-state
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
559 values [ Ref 75-78 ] for hydrogens.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
560
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
561 =head2 METHODS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
562
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
563 =over 4
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
564
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
565 =item B<new>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
566
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
567 $NewEStateValuesDescriptors = new AtomicDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
568 EStateValuesDescriptors(%NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
569
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
570 Using specified I<EStateValuesDescriptors> property names and values hash, B<new>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
571 method creates a new object and returns a reference to newly created B<EStateValuesDescriptors>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
572 object. By default, the following properties are initialized:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
573
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
574 Molecule = ''
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
575 Type = 'EState'
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
576 IgnoreHydrogens = 1
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
577
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
578 Examples:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
579
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
580 $EStateValuesDescriptors = new AtomicDescriptors::EStateValuesDescriptors(
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
581 'Molecule' => $Molecule,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
582 'IgnoreHydrogens' => 1);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
583
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
584 =item B<GenerateDescriptors>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
585
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
586 $EStateValuesDescriptors->GenerateDescriptors();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
587
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
588 Calculates E-state atomic descriptors for all the atoms in a molecule and returns
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
589 I<EStateValuesDescriptors>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
590
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
591 =item B<StringifyEStateValuesDescriptors>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
592
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
593 $String = $EStateValuesDescriptors->StringifyEStateValuesDescriptors();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
594
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
595 Returns a string containing information about I<EStateValuesDescriptors> object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
596
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
597 =back
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
598
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
599 =head1 AUTHOR
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
600
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
601 Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
602
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
603 =head1 SEE ALSO
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
604
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
605 AtomicDescriptors.pm
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
606
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
607 =head1 COPYRIGHT
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
608
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
609 Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
610
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
611 This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
612
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
613 MayaChemTools is free software; you can redistribute it and/or modify it under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
614 the terms of the GNU Lesser General Public License as published by the Free
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
615 Software Foundation; either version 3 of the License, or (at your option)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
616 any later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
617
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
618 =cut