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